@colorye/react-native-css 0.3.0 → 0.3.2

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.
Files changed (39) hide show
  1. package/crates/transformer/index.js +1 -0
  2. package/crates/transformer/transformer.darwin-arm64.node +0 -0
  3. package/crates/transformer/transformer.darwin-x64.node +0 -0
  4. package/crates/transformer/transformer.linux-x64-gnu.node +0 -0
  5. package/crates/transformer/transformer.node +0 -0
  6. package/crates/transformer/transformer.win32-x64-msvc.node +0 -0
  7. package/dist/babel.js +68 -159
  8. package/dist/index.d.ts +22 -8
  9. package/dist/interop.js +17 -5
  10. package/dist/metro.js +55 -0
  11. package/dist/transformer-runtime.js +170 -18
  12. package/dist/transformer.js +73 -20
  13. package/package.json +10 -1
  14. package/src/babel.js +71 -224
  15. package/src/index.d.ts +22 -8
  16. package/src/interop.js +13 -1
  17. package/src/metro.js +42 -0
  18. package/src/transformer-runtime.js +169 -15
  19. package/src/transformer.js +75 -15
  20. package/dist/exported-stylesheet.json +0 -1
  21. package/dist/features/build-transform.js +0 -575
  22. package/dist/features/css-calc.js +0 -539
  23. package/dist/features/css-media.js +0 -77
  24. package/dist/features/css-transform.js +0 -426
  25. package/dist/features/css-vars.js +0 -153
  26. package/dist/features/stylesheet.js +0 -45
  27. package/dist/utils/babel.js +0 -363
  28. package/dist/utils/css.js +0 -263
  29. package/dist/utils/helper.js +0 -11
  30. package/src/exported-stylesheet.json +0 -1
  31. package/src/features/build-transform.js +0 -536
  32. package/src/features/css-calc.js +0 -490
  33. package/src/features/css-media.js +0 -78
  34. package/src/features/css-transform.js +0 -446
  35. package/src/features/css-vars.js +0 -138
  36. package/src/features/stylesheet.js +0 -29
  37. package/src/utils/babel.js +0 -425
  38. package/src/utils/css.js +0 -221
  39. package/src/utils/helper.js +0 -3
@@ -7,6 +7,7 @@ try {
7
7
 
8
8
  const Appearance = RN.Appearance || { getColorScheme: () => "light" };
9
9
  const Dimensions = RN.Dimensions || { get: () => ({ width: 375, height: 812 }) };
10
+ const Platform = RN.Platform || { OS: "ios" };
10
11
 
11
12
  // ============================================================================
12
13
  // Constants
@@ -57,7 +58,8 @@ function getColorScheme() {
57
58
  function getCacheKey() {
58
59
  const { width, height } = getDimensions();
59
60
  const colorScheme = getColorScheme();
60
- return `${width}x${height}:${colorScheme}`;
61
+ const os = Platform?.OS || "ios";
62
+ return `${width}x${height}:${colorScheme}:${os}`;
61
63
  }
62
64
 
63
65
  function invalidateCache() {
@@ -120,6 +122,110 @@ function getFlattenStyle(declarations) {
120
122
  return Object.keys(result).length > 0 ? result : undefined;
121
123
  }
122
124
 
125
+ function resolveCssVars(val, rootVars, localVars) {
126
+ if (typeof val !== "string" || !val.includes("var(")) return val;
127
+ let res = val;
128
+ let iterations = 0;
129
+ while (res.includes("var(") && iterations < 5) {
130
+ iterations++;
131
+ res = res.replace(/var\(\s*(--[a-zA-Z0-9_-]+)(?:\s*,\s*([^)]+))?\s*\)/g, (_, name, fb) => {
132
+ if (localVars && localVars[name] !== undefined) return localVars[name];
133
+ return rootVars[name] !== undefined ? rootVars[name] : (fb || "");
134
+ });
135
+ }
136
+ return res;
137
+ }
138
+
139
+ function resolveCssValue(prop, val, rootVars, localVars) {
140
+ if (typeof val !== "string") return val;
141
+ let v = resolveCssVars(val, rootVars, localVars).trim();
142
+
143
+ if (prop === "boxShadow") {
144
+ const parts = v
145
+ .split(/,(?![^(]*\))/)
146
+ .map((p) => p.trim())
147
+ .filter((p) => p && !p.includes("0 0 #0000") && !p.includes("0 0 #000") && !p.includes("0 0 0 0"));
148
+ if (parts.length === 0) return undefined;
149
+ v = parts.join(", ");
150
+ }
151
+
152
+ if (v.startsWith("calc(") && v.endsWith(")")) {
153
+ let inner = v.slice(5, -1).trim();
154
+ inner = inner.replace(/([\d.]+)rem/g, (_, n) => parseFloat(n) * 16 + "px");
155
+ inner = inner.replace(/px/g, "");
156
+ try {
157
+ v = Function('"use strict"; return (' + inner + ')')();
158
+ } catch {}
159
+ }
160
+
161
+ if (typeof v === "string" && v.endsWith("rem")) {
162
+ v = parseFloat(v) * 16;
163
+ } else if (typeof v === "string" && v.endsWith("px")) {
164
+ v = parseFloat(v);
165
+ } else if (typeof v === "string" && (v.endsWith("vh") || v.endsWith("vw"))) {
166
+ v = parseFloat(v) + "%";
167
+ }
168
+
169
+ if (prop.toLowerCase().endsWith("radius") && (v === "50%" || v === "9999px" || v === 9999)) {
170
+ return 9999;
171
+ }
172
+ if (prop === "fontWeight") {
173
+ return String(v).replace("px", "").replace("rem", "");
174
+ }
175
+ if (
176
+ typeof v === "string" &&
177
+ !isNaN(Number(v)) &&
178
+ !["color", "fontFamily", "fontWeight"].includes(prop) &&
179
+ !prop.endsWith("Color")
180
+ ) {
181
+ v = Number(v);
182
+ }
183
+ return v;
184
+ }
185
+
186
+ function applyResolvedEntry(resolved, entry, rootVars) {
187
+ if (!entry) return;
188
+
189
+ const localVars = {};
190
+ if (entry._static) {
191
+ for (const [k, v] of Object.entries(entry._static)) {
192
+ if (k.startsWith("--") && typeof v === "string") {
193
+ localVars[k] = v;
194
+ }
195
+ }
196
+ }
197
+
198
+ if (entry._static) {
199
+ for (const [k, v] of Object.entries(entry._static)) {
200
+ if (k.startsWith("--")) continue;
201
+ const val = resolveCssValue(k, v, rootVars, localVars);
202
+ if (val !== undefined && val !== null) {
203
+ resolved[k] = val;
204
+ }
205
+ }
206
+ }
207
+
208
+ if (entry._dynamic) {
209
+ for (const [k, v] of Object.entries(entry._dynamic)) {
210
+ if (k.startsWith("--")) continue;
211
+ const val = resolveCssValue(k, v, rootVars, localVars);
212
+ if (val !== undefined && val !== null) {
213
+ resolved[k] = val;
214
+ }
215
+ }
216
+ }
217
+
218
+ if (!entry._static && !entry._dynamic) {
219
+ for (const [k, v] of Object.entries(entry)) {
220
+ if (k.startsWith("--")) continue;
221
+ const val = resolveCssValue(k, v, rootVars, localVars);
222
+ if (val !== undefined && val !== null) {
223
+ resolved[k] = val;
224
+ }
225
+ }
226
+ }
227
+ }
228
+
123
229
  // ============================================================================
124
230
  // Main Native Rust Stylesheet Transform
125
231
  // ============================================================================
@@ -129,6 +235,7 @@ function transformStyles(stylesheet, classNames) {
129
235
  stylesheet = stylesheet.default;
130
236
  }
131
237
 
238
+ const rootVars = stylesheet[":root"] || {};
132
239
  const { width, height } = getDimensions();
133
240
  const colorScheme = getColorScheme();
134
241
 
@@ -145,18 +252,54 @@ function transformStyles(stylesheet, classNames) {
145
252
  const classes = classNames.trim().split(/\s+/);
146
253
  const resolved = {};
147
254
 
148
- for (const cls of classes) {
255
+ const os = Platform?.OS || "ios";
256
+
257
+ for (let cls of classes) {
149
258
  if (!cls) continue;
259
+
260
+ // Platform variants: ios:, android:, web:
261
+ if (cls.startsWith("ios:")) {
262
+ if (os !== "ios") continue;
263
+ cls = cls.slice(4);
264
+ } else if (cls.startsWith("android:")) {
265
+ if (os !== "android") continue;
266
+ cls = cls.slice(8);
267
+ } else if (cls.startsWith("web:")) {
268
+ if (os !== "web") continue;
269
+ cls = cls.slice(4);
270
+ }
271
+
272
+ // Media query variants: sm:, md:, lg:, xl:, 2xl:
273
+ if (cls.startsWith("sm:")) {
274
+ if (width < 640) continue;
275
+ cls = cls.slice(3);
276
+ } else if (cls.startsWith("md:")) {
277
+ if (width < 768) continue;
278
+ cls = cls.slice(3);
279
+ } else if (cls.startsWith("lg:")) {
280
+ if (width < 1024) continue;
281
+ cls = cls.slice(3);
282
+ } else if (cls.startsWith("xl:")) {
283
+ if (width < 1280) continue;
284
+ cls = cls.slice(3);
285
+ } else if (cls.startsWith("2xl:")) {
286
+ if (width < 1536) continue;
287
+ cls = cls.slice(4);
288
+ }
289
+
290
+ // Dark / Light variants
291
+ if (cls.startsWith("dark:")) {
292
+ if (colorScheme !== "dark") continue;
293
+ cls = cls.slice(5);
294
+ } else if (cls.startsWith("light:")) {
295
+ if (colorScheme !== "light") continue;
296
+ cls = cls.slice(6);
297
+ }
298
+
150
299
  const entry = stylesheet[cls];
151
300
  if (!entry) continue;
152
301
 
153
- if (entry._static) {
154
- Object.assign(resolved, entry._static);
155
- } else if (entry._dynamic) {
156
- Object.assign(resolved, entry._dynamic);
157
- } else if (typeof entry === "object") {
158
- Object.assign(resolved, entry);
159
- }
302
+ applyResolvedEntry(resolved, entry, rootVars);
160
303
  }
161
304
 
162
305
  const result = Object.keys(resolved).length > 0 ? resolved : undefined;
@@ -170,10 +313,13 @@ function transformStyles(stylesheet, classNames) {
170
313
  function getInheritStyle(declarations) {
171
314
  if (!declarations) return undefined;
172
315
 
316
+ const flat = Array.isArray(declarations) ? getFlattenStyle(declarations) : declarations;
317
+ if (!flat || typeof flat !== "object") return undefined;
318
+
173
319
  const inheritDeclarations = {};
174
320
  for (const key of INHERIT_PROPERTIES) {
175
- if (declarations[key] !== undefined) {
176
- inheritDeclarations[key] = declarations[key];
321
+ if (flat[key] !== undefined) {
322
+ inheritDeclarations[key] = flat[key];
177
323
  }
178
324
  }
179
325
 
@@ -221,13 +367,21 @@ function mergeStyles(inheritStyle, staticStyles, inlineStyle) {
221
367
  const result = {};
222
368
  if (inherited) Object.assign(result, inherited);
223
369
  if (staticStyles) {
224
- for (const key in staticStyles) {
225
- if (!key.startsWith("--")) {
226
- result[key] = staticStyles[key];
370
+ const flatStatic = Array.isArray(staticStyles) ? getFlattenStyle(staticStyles) : staticStyles;
371
+ if (flatStatic && typeof flatStatic === "object") {
372
+ for (const key in flatStatic) {
373
+ if (!key.startsWith("--")) {
374
+ result[key] = flatStatic[key];
375
+ }
227
376
  }
228
377
  }
229
378
  }
230
- if (inlineStyle) Object.assign(result, inlineStyle);
379
+ if (inlineStyle) {
380
+ const flatInline = Array.isArray(inlineStyle) ? getFlattenStyle(inlineStyle) : inlineStyle;
381
+ if (flatInline && typeof flatInline === "object") {
382
+ Object.assign(result, flatInline);
383
+ }
384
+ }
231
385
 
232
386
  return Object.keys(result).length > 0 ? result : undefined;
233
387
  }
@@ -1,14 +1,46 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
- import Stylesheet from "./features/stylesheet";
4
- import { parseStylesheetWithLightning } from "./utils/css";
3
+
4
+ let native = null;
5
+ try {
6
+ native = require("./native");
7
+ } catch {
8
+ try {
9
+ native = require("../crates/transformer");
10
+ } catch {}
11
+ }
12
+
13
+ let cachedStylesheet = null;
14
+
15
+ function getCachedStylesheetJson(projectRoot) {
16
+ if (cachedStylesheet) return cachedStylesheet;
17
+ try {
18
+ const root = projectRoot || process.cwd();
19
+ const candidates = [
20
+ path.resolve(root, "index.css.json"),
21
+ path.resolve(root, "src/assets/styles/index.css.json"),
22
+ path.join(__dirname, "exported-stylesheet.json"),
23
+ path.resolve(__dirname, "../src/exported-stylesheet.json"),
24
+ ];
25
+ for (const p of candidates) {
26
+ if (fs.existsSync(p)) {
27
+ cachedStylesheet = fs.readFileSync(p, "utf-8");
28
+ return cachedStylesheet;
29
+ }
30
+ }
31
+ } catch {}
32
+ return "{}";
33
+ }
5
34
 
6
35
  export function getStylesheet(css, filename) {
7
- const rawStylesheet = parseStylesheetWithLightning(css);
8
- const stylesheet = new Stylesheet();
9
- stylesheet.setRawStylesheet(rawStylesheet);
36
+ if (!native || !native.compileCss) {
37
+ throw new Error(
38
+ "[@colorye/react-native-css] Native Rust transformer binding is not loaded. Cannot compile CSS.",
39
+ );
40
+ }
10
41
 
11
- const jsonContent = stylesheet.toJSON();
42
+ const jsonContent = native.compileCss(css);
43
+ cachedStylesheet = jsonContent;
12
44
  writeStylesheetJSON(jsonContent, filename);
13
45
 
14
46
  return jsonContent;
@@ -58,9 +90,7 @@ export function transform({ src, filename, options }) {
58
90
  const resolved = require.resolve("metro-react-native-babel-transformer", resolveOptions);
59
91
  return eval("require")(resolved);
60
92
  } catch {
61
- throw new Error(
62
- "Failed to load any upstream babel-transformer. Please ensure either '@expo/metro-config', '@react-native/metro-babel-transformer', or 'metro-react-native-babel-transformer' is installed.",
63
- );
93
+ return null;
64
94
  }
65
95
  }
66
96
  }
@@ -71,13 +101,43 @@ export function transform({ src, filename, options }) {
71
101
 
72
102
  if (filename.endsWith(".css")) {
73
103
  const jsonContent = getStylesheet(src, filename);
74
- return resolveTransformer.transform({
75
- src: `const sheet = ${jsonContent};\nmodule.exports = sheet;\nmodule.exports.default = sheet;\nmodule.exports.__esModule = true;`,
76
- filename,
77
- options,
78
- });
104
+ const cssCode = `const sheet = ${jsonContent};\nmodule.exports = sheet;\nmodule.exports.default = sheet;\nmodule.exports.__esModule = true;`;
105
+ if (resolveTransformer && resolveTransformer.transform) {
106
+ return resolveTransformer.transform({
107
+ src: cssCode,
108
+ filename,
109
+ options,
110
+ });
111
+ }
112
+ return { code: cssCode, map: null };
113
+ }
114
+
115
+ // Fast native Rust SWC transformer for JSX/TSX
116
+ if (
117
+ native &&
118
+ native.transformJsx &&
119
+ (filename.endsWith(".tsx") || filename.endsWith(".jsx")) &&
120
+ !filename.includes("node_modules")
121
+ ) {
122
+ try {
123
+ const stylesheetJson = options?.stylesheetJson || getCachedStylesheetJson(projectRoot);
124
+ const res = native.transformJsx(src, {
125
+ filename,
126
+ stylesheetJson,
127
+ sourceMaps: true,
128
+ });
129
+ if (res && res.code) {
130
+ src = res.code;
131
+ }
132
+ } catch {
133
+ // Graceful fallback to Babel if native transform hits unexpected syntax
134
+ }
135
+ }
136
+
137
+ if (resolveTransformer && resolveTransformer.transform) {
138
+ return resolveTransformer.transform({ src, filename, options });
79
139
  }
80
- return resolveTransformer.transform({ src, filename, options });
140
+ return { code: src, map: null };
81
141
  }
82
142
 
83
143
  export default {
@@ -1 +0,0 @@
1
- {":root":{"--font-sans":"-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\",\n \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\",\n \"Segoe UI Symbol\", \"Noto Color Emoji\"","--font-mono":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace","--spacing":".25rem","--font-weight-semibold":"600","--font-weight-bold":"700","--tracking-wider":".05em","--default-transition-duration":".15s","--default-transition-timing-function":"cubic-bezier(.4, 0, .2, 1)","--default-font-family":"var(--font-sans)","--default-mono-font-family":"var(--font-mono)","--color-yellow-500":"lab(77.1036% 13.6926 83.561)","--color-green-200":"lab(95.239% -10.8266 9.24107)","--color-green-500":"lab(57.4893% -40.5347 37.516)","--color-orange-500":"lab(66.2947% 49.6344 117.647)","--color-red-500":"lab(45.0394% 75.4726 71.4577)","--color-blue-200":"lab(88.4823% -12.6735 -16.6484)","--color-blue-500":"lab(43.2001% 15.8505 -66.7688)","--color-magenta-500":"lab(34.1384% 59.3948 -45.5364)","--color-black":"lab(0% 0 0)","--color-white":"lab(100% 0 0)","--color-navy-100":"lab(95.2175% -1.96895 -3.05733)","--color-navy-200":"lab(88.3954% -1.94326 -3.07581)","--color-navy-300":"lab(76.7078% -5.64724 -9.13405)","--color-navy-400":"lab(58.179% -8.91814 -15.0204)","--color-navy-500":"lab(39.6076% -11.2321 -20.6616)","--color-navy-600":"lab(20.9196% -10.7469 -25.9701)","--color-navy-700":"lab(3.17211% 1.80869 -28.6588)","--color-primary":"var(--color-blue-500)","--color-success":"var(--color-green-500)","--text-2xs":"10px","--text-2xs--line-height":"12px","--text-xs":"12px","--text-xs--line-height":"16px","--text-sm":"14px","--text-sm--line-height":"20px","--text-md":"18px","--text-md--line-height":"24px","--text-2xl":"32px","--text-2xl--line-height":"36px","--radius-lg":"16px","--radius-xl":"20px","--radius-full":"50%"},"static":{"position":"static"},"container":{"_static":{"width":"100%"},"_dynamic":{"@media (min-width: 580px)":{"_static":{"maxWidth":580},"_dynamic":{}},"@media (min-width: 768px)":{"_static":{"maxWidth":768},"_dynamic":{}},"@media (min-width: 980px)":{"_static":{"maxWidth":980},"_dynamic":{}},"@media (min-width: 1200px)":{"_static":{"maxWidth":1200},"_dynamic":{}}}},"mt-0.5":{"_static":{},"_dynamic":{"marginTop":"calc(var(--spacing) * .5)"}},"mt-1":{"_static":{},"_dynamic":{"marginTop":"var(--spacing)"}},"mt-4":{"_static":{},"_dynamic":{"marginTop":"calc(var(--spacing) * 4)"}},"mb-1":{"_static":{},"_dynamic":{"marginBottom":"var(--spacing)"}},"mb-2":{"_static":{},"_dynamic":{"marginBottom":"calc(var(--spacing) * 2)"}},"mb-3":{"_static":{},"_dynamic":{"marginBottom":"calc(var(--spacing) * 3)"}},"mb-4":{"_static":{},"_dynamic":{"marginBottom":"calc(var(--spacing) * 4)"}},"mb-5":{"_static":{},"_dynamic":{"marginBottom":"calc(var(--spacing) * 5)"}},"h-20":{"_static":{},"_dynamic":{"height":"calc(var(--spacing) * 20)"}},"w-20":{"_static":{},"_dynamic":{"width":"calc(var(--spacing) * 20)"}},"w-[48%]":{"width":"48%"},"flex-1":{"flex":1},"transform":{"_static":{},"_dynamic":{"transform":"var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, )"}},"flex-row":{"flexDirection":"row"},"flex-wrap":{"flexWrap":"wrap"},"items-center":{"alignItems":"center"},"justify-between":{"justifyContent":"space-between"},"justify-center":{"justifyContent":"center"},"gap-1":{"_static":{},"_dynamic":{"gap":"var(--spacing)"}},"gap-2":{"_static":{},"_dynamic":{"gap":"calc(var(--spacing) * 2)"}},"gap-y-2.5":{"_static":{},"_dynamic":{"rowGap":"calc(var(--spacing) * 2.5)"}},"rounded-full":{"_static":{},"_dynamic":{"borderRadius":"var(--radius-full)"}},"rounded-lg":{"_static":{},"_dynamic":{"borderRadius":"var(--radius-lg)"}},"rounded-xl":{"_static":{},"_dynamic":{"borderRadius":"var(--radius-xl)"}},"border":{"_static":{"borderWidth":1},"_dynamic":{"borderStyle":"var(--tw-border-style)"}},"border-s-4":{"_static":{"borderInlineStartWidth":4},"_dynamic":{"borderInlineStartStyle":"var(--tw-border-style)"}},"border-blue-500":{"_static":{},"_dynamic":{"borderColor":"var(--color-blue-500)"}},"border-blue-500/30":{"_static":{},"_dynamic":{"borderColor":"color-mix(in oklab, var(--color-blue-500) 30%, transparent)"}},"border-green-500":{"_static":{},"_dynamic":{"borderColor":"var(--color-green-500)"}},"border-green-500/30":{"_static":{},"_dynamic":{"borderColor":"color-mix(in oklab, var(--color-green-500) 30%, transparent)"}},"border-navy-300":{"_static":{},"_dynamic":{"borderColor":"var(--color-navy-300)"}},"border-navy-500":{"_static":{},"_dynamic":{"borderColor":"var(--color-navy-500)"}},"border-orange-500":{"_static":{},"_dynamic":{"borderColor":"var(--color-orange-500)"}},"border-primary":{"_static":{},"_dynamic":{"borderColor":"var(--color-primary)"}},"bg-blue-500":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-blue-500)"}},"bg-blue-500/10":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-blue-500) 10%, transparent)"}},"bg-blue-500/20":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-blue-500) 20%, transparent)"}},"bg-green-500":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-green-500)"}},"bg-green-500/10":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-green-500) 10%, transparent)"}},"bg-green-500/20":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-green-500) 20%, transparent)"}},"bg-magenta-500":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-magenta-500)"}},"bg-navy-100":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-navy-100)"}},"bg-navy-600":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-navy-600)"}},"bg-navy-700":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-navy-700)"}},"bg-orange-500":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-orange-500)"}},"bg-orange-500/10":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-orange-500) 10%, transparent)"}},"bg-primary":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-primary)"}},"bg-primary/20":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-primary) 20%, transparent)"}},"bg-primary/40":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-primary) 40%, transparent)"}},"bg-primary/60":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-primary) 60%, transparent)"}},"bg-primary/80":{"_static":{},"_dynamic":{"backgroundColor":"color-mix(in oklab, var(--color-primary) 80%, transparent)"}},"bg-red-500":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-red-500)"}},"bg-success":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-success)"}},"bg-transparent":{"backgroundColor":"#0000"},"bg-yellow-500":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-yellow-500)"}},"bg-gradient-to-tr":{"_static":{"--tw-gradient-position":"to top right in oklab"},"_dynamic":{"backgroundImage":"linear-gradient(var(--tw-gradient-stops))"}},"p-1":{"_static":{},"_dynamic":{"paddingTop":"var(--spacing)","paddingRight":"var(--spacing)","paddingBottom":"var(--spacing)","paddingLeft":"var(--spacing)"}},"p-3":{"_static":{},"_dynamic":{"paddingTop":"calc(var(--spacing) * 3)","paddingRight":"calc(var(--spacing) * 3)","paddingBottom":"calc(var(--spacing) * 3)","paddingLeft":"calc(var(--spacing) * 3)"}},"p-3.5":{"_static":{},"_dynamic":{"paddingTop":"calc(var(--spacing) * 3.5)","paddingRight":"calc(var(--spacing) * 3.5)","paddingBottom":"calc(var(--spacing) * 3.5)","paddingLeft":"calc(var(--spacing) * 3.5)"}},"p-4":{"_static":{},"_dynamic":{"paddingTop":"calc(var(--spacing) * 4)","paddingRight":"calc(var(--spacing) * 4)","paddingBottom":"calc(var(--spacing) * 4)","paddingLeft":"calc(var(--spacing) * 4)"}},"p-5":{"_static":{},"_dynamic":{"paddingTop":"calc(var(--spacing) * 5)","paddingRight":"calc(var(--spacing) * 5)","paddingBottom":"calc(var(--spacing) * 5)","paddingLeft":"calc(var(--spacing) * 5)"}},"p-6":{"_static":{},"_dynamic":{"paddingTop":"calc(var(--spacing) * 6)","paddingRight":"calc(var(--spacing) * 6)","paddingBottom":"calc(var(--spacing) * 6)","paddingLeft":"calc(var(--spacing) * 6)"}},"px-3":{"_static":{},"_dynamic":{"paddingHorizontal":"calc(var(--spacing) * 3)"}},"px-3.5":{"_static":{},"_dynamic":{"paddingHorizontal":"calc(var(--spacing) * 3.5)"}},"px-4":{"_static":{},"_dynamic":{"paddingHorizontal":"calc(var(--spacing) * 4)"}},"px-5":{"_static":{},"_dynamic":{"paddingHorizontal":"calc(var(--spacing) * 5)"}},"py-1":{"_static":{},"_dynamic":{"paddingVertical":"var(--spacing)"}},"py-2":{"_static":{},"_dynamic":{"paddingVertical":"calc(var(--spacing) * 2)"}},"py-2.5":{"_static":{},"_dynamic":{"paddingVertical":"calc(var(--spacing) * 2.5)"}},"py-3.5":{"_static":{},"_dynamic":{"paddingVertical":"calc(var(--spacing) * 3.5)"}},"py-4":{"_static":{},"_dynamic":{"paddingVertical":"calc(var(--spacing) * 4)"}},"pr-3":{"_static":{},"_dynamic":{"paddingRight":"calc(var(--spacing) * 3)"}},"pb-20":{"_static":{},"_dynamic":{"paddingBottom":"calc(var(--spacing) * 20)"}},"text-2xl":{"_static":{},"_dynamic":{"fontSize":"var(--text-2xl)","lineHeight":"var(--tw-leading, var(--text-2xl--line-height))"}},"text-2xs":{"_static":{},"_dynamic":{"fontSize":"var(--text-2xs)","lineHeight":"var(--tw-leading, var(--text-2xs--line-height))"}},"text-md":{"_static":{},"_dynamic":{"fontSize":"var(--text-md)","lineHeight":"var(--tw-leading, var(--text-md--line-height))"}},"text-sm":{"_static":{},"_dynamic":{"fontSize":"var(--text-sm)","lineHeight":"var(--tw-leading, var(--text-sm--line-height))"}},"text-xs":{"_static":{},"_dynamic":{"fontSize":"var(--text-xs)","lineHeight":"var(--tw-leading, var(--text-xs--line-height))"}},"font-bold":{"_static":{"--tw-font-weight":"var(--font-weight-bold)"},"_dynamic":{"fontWeight":"var(--font-weight-bold)"}},"font-semibold":{"_static":{"--tw-font-weight":"var(--font-weight-semibold)"},"_dynamic":{"fontWeight":"var(--font-weight-semibold)"}},"tracking-wider":{"_static":{"--tw-tracking":"var(--tracking-wider)"},"_dynamic":{"letterSpacing":"var(--tracking-wider)"}},"text-blue-200":{"_static":{},"_dynamic":{"color":"var(--color-blue-200)"}},"text-green-200":{"_static":{},"_dynamic":{"color":"var(--color-green-200)"}},"text-green-500":{"_static":{},"_dynamic":{"color":"var(--color-green-500)"}},"text-navy-200":{"_static":{},"_dynamic":{"color":"var(--color-navy-200)"}},"text-navy-300":{"_static":{},"_dynamic":{"color":"var(--color-navy-300)"}},"text-navy-600":{"_static":{},"_dynamic":{"color":"var(--color-navy-600)"}},"text-navy-700":{"_static":{},"_dynamic":{"color":"var(--color-navy-700)"}},"text-white":{"_static":{},"_dynamic":{"color":"var(--color-white)"}},"text-yellow-500":{"_static":{},"_dynamic":{"color":"var(--color-yellow-500)"}},"capitalize":{"textTransform":"capitalize"},"uppercase":{"textTransform":"uppercase"},"shadow-base":{"_static":{"--tw-shadow":"0px 0px 4px var(--tw-shadow-color, lab(0% 0 0 / .1))"},"_dynamic":{"boxShadow":"var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)"}},"transition":{"_static":{"transitionProperty":"color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events"},"_dynamic":{"transitionTimingFunction":"var(--tw-ease, var(--default-transition-timing-function))","transitionDuration":"var(--tw-duration, var(--default-transition-duration))"}},"transition-all":{"_static":{"transitionProperty":"all"},"_dynamic":{"transitionTimingFunction":"var(--tw-ease, var(--default-transition-timing-function))","transitionDuration":"var(--tw-duration, var(--default-transition-duration))"}},"group-active:scale-105":{"_static":{"--tw-scale-x":"105%","--tw-scale-y":"105%","--tw-scale-z":"105%"},"_dynamic":{"scale":"var(--tw-scale-x) var(--tw-scale-y)"}},"group-active:bg-yellow-500":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-yellow-500)"}},"group-active:text-black":{"_static":{},"_dynamic":{"color":"var(--color-black)"}},"group-active:text-yellow-500":{"_static":{},"_dynamic":{"color":"var(--color-yellow-500)"}},"active:scale-95":{"_static":{"--tw-scale-x":"95%","--tw-scale-y":"95%","--tw-scale-z":"95%"},"_dynamic":{"scale":"var(--tw-scale-x) var(--tw-scale-y)"}},"scale-95":{"_static":{"--tw-scale-x":"95%","--tw-scale-y":"95%","--tw-scale-z":"95%"},"_dynamic":{"scale":"var(--tw-scale-x) var(--tw-scale-y)"}},"active:border-primary":{"_static":{},"_dynamic":{"borderColor":"var(--color-primary)"}},"active:bg-navy-600":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-navy-600)"}},"active:opacity-75":{"opacity":0.75},"opacity-75":{"opacity":0.75},"active:opacity-80":{"opacity":0.8},"opacity-80":{"opacity":0.8},"disabled:bg-navy-400":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-navy-400)"}},"bg-navy-400":{"_static":{},"_dynamic":{"backgroundColor":"var(--color-navy-400)"}},"disabled:opacity-40":{"opacity":0.4},"opacity-40":{"opacity":0.4}}