@hypergood/css-core 0.0.1

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/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@hypergood/css-core",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ },
12
+ "./plugin": {
13
+ "types": "./dist/plugin.d.ts",
14
+ "import": "./dist/plugin.cjs"
15
+ }
16
+ },
17
+ "scripts": {
18
+ "dev": "tsup src/index.ts src/plugin.ts --watch",
19
+ "build": "tsup src/index.ts src/plugin.ts",
20
+ "test": "vitest"
21
+ },
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "author": "",
26
+ "license": "MIT",
27
+ "description": "",
28
+ "devDependencies": {
29
+ "@babel/core": "^7.28.5",
30
+ "@babel/helper-module-imports": "^7.27.1",
31
+ "@babel/preset-typescript": "^7.28.5",
32
+ "@types/babel__core": "^7.20.5",
33
+ "@types/babel__helper-module-imports": "^7.18.3",
34
+ "@types/css-tree": "^2.3.11",
35
+ "css-tree": "^3.1.0",
36
+ "es-module-lexer": "^2.0.0",
37
+ "prettier": "^3.7.4",
38
+ "tsup": "^8.5.1",
39
+ "typescript": "^5.9.3",
40
+ "vite": "^7.2.4",
41
+ "vitest": "^4.0.13"
42
+ },
43
+ "peerDependencies": {
44
+ "vite": "^7.2.4"
45
+ }
46
+ }
@@ -0,0 +1,579 @@
1
+ import { CssNode } from "css-tree";
2
+
3
+ export interface LexerNode {
4
+ syntax: {
5
+ type: "Type" | "Property" | "Keyword" | "Token";
6
+ name?: SyntaxName;
7
+ value?: string;
8
+ } | null;
9
+ token?: string;
10
+ node?: CssNode;
11
+ match?: LexerNode[];
12
+ }
13
+
14
+ declare module "css-tree" {
15
+ interface LexerMatchResult {
16
+ matched: LexerNode | null;
17
+ iterations: number;
18
+ getTrace(node: CssNode): Array<{ type: string; name: string }> | null;
19
+ isType(node: CssNode | null, type: string): boolean;
20
+ isProperty(node: CssNode | null, property: string): boolean;
21
+ isKeyword(node: CssNode | null): boolean;
22
+ }
23
+ }
24
+
25
+ export function evaluateLexerNode(node: LexerNode | null | undefined): string {
26
+ if (!node) return "";
27
+ switch (node.syntax?.name) {
28
+ case "named-color":
29
+ return evaluateNamedColor(node);
30
+ }
31
+ // if (node.node && node.node.type === "Operator") {
32
+ // return node.node.value;
33
+ // }
34
+ if (node.token) {
35
+ return node.token;
36
+ }
37
+ return node.match?.map(evaluateLexerNode).join(" ") || "";
38
+ }
39
+
40
+ export function evaluateNamedColor(node: LexerNode) {
41
+ const name = node.match?.[0].token || "";
42
+ if (name.toLowerCase() in NAMED_COLOR_MAP) {
43
+ return NAMED_COLOR_MAP[name.toLowerCase()];
44
+ }
45
+ return name;
46
+ }
47
+
48
+ /**
49
+ * Choose the shortest option between hex and named color, prioritize hex color if both are the same length, prioritize gray over grey
50
+ */
51
+ const NAMED_COLOR_MAP: Record<string, string> = {
52
+ aliceblue: "#f0f8ff",
53
+ antiquewhite: "#faebd7",
54
+ aqua: "#0ff",
55
+ aquamarine: "#7fffd4",
56
+ "#f0ffff": "azure",
57
+ "#f5f5dc": "beige",
58
+ "#ffe4c4": "bisque",
59
+ black: "#000",
60
+ blanchedalmond: "#ffebcd",
61
+ blue: "#00f",
62
+ blueviolet: "#8a2be2",
63
+ "#a52a2a": "brown",
64
+ burlywood: "#deb887",
65
+ cadetblue: "#5f9ea0",
66
+ chartreuse: "#7fff00",
67
+ chocolate: "#d2691e",
68
+ "#ff7f50": "coral",
69
+ cornflowerblue: "#6495ed",
70
+ cornsilk: "#fff8dc",
71
+ crimson: "#dc143c",
72
+ cyan: "#0ff",
73
+ darkblue: "#00008b",
74
+ darkcyan: "#008b8b",
75
+ darkgoldenrod: "#b8860b",
76
+ darkgray: "#a9a9a9",
77
+ darkgreen: "#006400",
78
+ darkgrey: "#a9a9a9",
79
+ darkkhaki: "#bdb76b",
80
+ darkmagenta: "#8b008b",
81
+ darkolivegreen: "#556b2f",
82
+ darkorange: "#ff8c00",
83
+ darkorchid: "#9932cc",
84
+ darkred: "#8b0000",
85
+ darksalmon: "#e9967a",
86
+ darkseagreen: "#8fbc8f",
87
+ darkslateblue: "#483d8b",
88
+ darkslategray: "#2f4f4f",
89
+ darkslategrey: "#2f4f4f",
90
+ darkturquoise: "#00ced1",
91
+ darkviolet: "#9400d3",
92
+ deeppink: "#ff1493",
93
+ deepskyblue: "#00bfff",
94
+ dimgray: "#696969",
95
+ dimgrey: "#696969",
96
+ dodgerblue: "#1e90ff",
97
+ firebrick: "#b22222",
98
+ floralwhite: "#fffaf0",
99
+ forestgreen: "#228b22",
100
+ fuchsia: "#f0f",
101
+ gainsboro: "#dcdcdc",
102
+ ghostwhite: "#f8f8ff",
103
+ "#ffd700": "gold",
104
+ goldenrod: "#daa520",
105
+ "#808080": "gray",
106
+ "#008000": "green",
107
+ greenyellow: "#adff2f",
108
+ grey: "gray",
109
+ honeydew: "#f0fff0",
110
+ hotpink: "#ff69b4",
111
+ indianred: "#cd5c5c",
112
+ "#4b0082": "indigo",
113
+ "#fffff0": "ivory",
114
+ "#f0e68c": "khaki",
115
+ lavender: "#e6e6fa",
116
+ lavenderblush: "#fff0f5",
117
+ lawngreen: "#7cfc00",
118
+ lemonchiffon: "#fffacd",
119
+ lightblue: "#add8e6",
120
+ lightcoral: "#f08080",
121
+ lightcyan: "#e0ffff",
122
+ lightgoldenrodyellow: "#fafad2",
123
+ lightgray: "#d3d3d3",
124
+ lightgreen: "#90ee90",
125
+ lightgrey: "#d3d3d3",
126
+ lightpink: "#ffb6c1",
127
+ lightsalmon: "#ffa07a",
128
+ lightseagreen: "#20b2aa",
129
+ lightskyblue: "#87cefa",
130
+ lightslategray: "#789",
131
+ lightslategrey: "#789",
132
+ lightsteelblue: "#b0c4de",
133
+ lightyellow: "#ffffe0",
134
+ lime: "#0f0",
135
+ limegreen: "#32cd32",
136
+ "#faf0e6": "linen",
137
+ magenta: "#ff00f",
138
+ "#800000": "maroon",
139
+ mediumaquamarine: "#66cdaa",
140
+ mediumblue: "#0000cd",
141
+ mediumorchid: "#ba55d3",
142
+ mediumpurple: "#9370db",
143
+ mediumseagreen: "#3cb371",
144
+ mediumslateblue: "#7b68ee",
145
+ mediumspringgreen: "#00fa9a",
146
+ mediumturquoise: "#48d1cc",
147
+ mediumvioletred: "#c71585",
148
+ midnightblue: "#191970",
149
+ mintcream: "#f5fffa",
150
+ mistyrose: "#ffe4e1",
151
+ moccasin: "#ffe4b5",
152
+ navajowhite: "#ffdead",
153
+ "#000080": "navy",
154
+ oldlace: "#fdf5e6",
155
+ "#808000": "olive",
156
+ olivedrab: "#6b8e23",
157
+ "#ffa500": "orange",
158
+ orangered: "#ff4500",
159
+ "#da70d6": "orchid",
160
+ palegoldenrod: "#eee8aa",
161
+ palegreen: "#98fb98",
162
+ paleturquoise: "#afeeee",
163
+ palevioletred: "#db7093",
164
+ papayawhip: "#ffefd5",
165
+ peachpuff: "#ffdab9",
166
+ "#cd853f": "peru",
167
+ "#ffc0cb": "pink",
168
+ "#dda0dd": "plum",
169
+ powderblue: "#b0e0e6",
170
+ "#800080": "purple",
171
+ rebeccapurple: "#639",
172
+ "#f00": "red",
173
+ rosybrown: "#bc8f8f",
174
+ royalblue: "#4169e1",
175
+ saddlebrown: "#8b4513",
176
+ "#fa8072": "salmon",
177
+ sandybrown: "#f4a460",
178
+ seagreen: "#2e8b57",
179
+ seashell: "#fff5ee",
180
+ "#a0522d": "sienna",
181
+ "#c0c0c0": "silver",
182
+ skyblue: "#87ceeb",
183
+ slateblue: "#6a5acd",
184
+ slategray: "#708090",
185
+ slategrey: "#708090",
186
+ "#fffafa": "snow",
187
+ springgreen: "#00ff7f",
188
+ steelblue: "#4682b4",
189
+ "#d2b48c": "tan",
190
+ "#008080": "teal",
191
+ thistle: "#d8bfd8",
192
+ "#ff634": "tomato",
193
+ turquoise: "#40e0d0",
194
+ "#ee82ee": "violet",
195
+ "#f5deb3": "wheat",
196
+ white: "#fff",
197
+ whitesmoke: "#f5f5f5",
198
+ yellow: "#ff0",
199
+ yellowgreen: "#9acd32",
200
+ };
201
+
202
+ type SyntaxPropertyName = "animation-duration" | "animation-delay";
203
+
204
+ export type SyntaxName =
205
+ | SyntaxPropertyName
206
+ | "abs()"
207
+ | "absolute-size"
208
+ | "acos()"
209
+ | "alpha-value"
210
+ | "an+b"
211
+ | "anchor()"
212
+ | "anchor-name"
213
+ | "anchor-side"
214
+ | "anchor-size"
215
+ | "anchor-size()"
216
+ | "angle-percentage"
217
+ | "angular-color-hint"
218
+ | "angular-color-stop"
219
+ | "angular-color-stop-list"
220
+ | "animateable-feature"
221
+ | "asin()"
222
+ | "atan()"
223
+ | "atan2()"
224
+ | "attachment"
225
+ | "attr()"
226
+ | "attr-matcher"
227
+ | "attr-modifier"
228
+ | "attr-type"
229
+ | "attribute-selector"
230
+ | "auto-repeat"
231
+ | "auto-track-list"
232
+ | "axis"
233
+ | "baseline-position"
234
+ | "basic-shape"
235
+ | "basic-shape-rect"
236
+ | "bg-clip"
237
+ | "bg-image"
238
+ | "bg-layer"
239
+ | "bg-position"
240
+ | "bg-size"
241
+ | "blend-mode"
242
+ | "blur()"
243
+ | "brightness()"
244
+ | "calc()"
245
+ | "calc-constant"
246
+ | "calc-product"
247
+ | "calc-size()"
248
+ | "calc-size-basis"
249
+ | "calc-sum"
250
+ | "calc-value"
251
+ | "cf-final-image"
252
+ | "cf-mixing-image"
253
+ | "circle()"
254
+ | "clamp()"
255
+ | "class-selector"
256
+ | "clip-source"
257
+ | "color"
258
+ | "color()"
259
+ | "color-base"
260
+ | "color-function"
261
+ | "color-interpolation-method"
262
+ | "color-mix()"
263
+ | "color-stop"
264
+ | "color-stop-angle"
265
+ | "color-stop-length"
266
+ | "color-stop-list"
267
+ | "colorspace-params"
268
+ | "combinator"
269
+ | "common-lig-values"
270
+ | "compat-auto"
271
+ | "compat-special"
272
+ | "complex-selector"
273
+ | "complex-selector-list"
274
+ | "composite-style"
275
+ | "compositing-operator"
276
+ | "compound-selector"
277
+ | "compound-selector-list"
278
+ | "conic-gradient()"
279
+ | "conic-gradient-syntax"
280
+ | "container-condition"
281
+ | "container-name"
282
+ | "container-query"
283
+ | "content-distribution"
284
+ | "content-list"
285
+ | "content-position"
286
+ | "content-replacement"
287
+ | "contextual-alt-values"
288
+ | "contrast()"
289
+ | "coord-box"
290
+ | "cos()"
291
+ | "counter"
292
+ | "counter()"
293
+ | "counter-name"
294
+ | "counter-style"
295
+ | "counter-style-name"
296
+ | "counters()"
297
+ | "cross-fade()"
298
+ | "cubic-bezier()"
299
+ | "cubic-bezier-easing-function"
300
+ | "cursor-predefined"
301
+ | "custom-color-space"
302
+ | "custom-params"
303
+ | "dasharray"
304
+ | "dashndashdigit-ident"
305
+ | "deprecated-system-color"
306
+ | "discretionary-lig-values"
307
+ | "display-box"
308
+ | "display-inside"
309
+ | "display-internal"
310
+ | "display-legacy"
311
+ | "display-listitem"
312
+ | "display-outside"
313
+ | "drop-shadow()"
314
+ | "easing-function"
315
+ | "east-asian-variant-values"
316
+ | "east-asian-width-values"
317
+ | "element()"
318
+ | "ellipse()"
319
+ | "env()"
320
+ | "exp()"
321
+ | "explicit-track-list"
322
+ | "family-name"
323
+ | "feature-tag-value"
324
+ | "feature-type"
325
+ | "feature-value-block"
326
+ | "feature-value-block-list"
327
+ | "feature-value-declaration"
328
+ | "feature-value-declaration-list"
329
+ | "feature-value-name"
330
+ | "filter-function"
331
+ | "filter-value-list"
332
+ | "final-bg-layer"
333
+ | "fit-content()"
334
+ | "fixed-breadth"
335
+ | "fixed-repeat"
336
+ | "fixed-size"
337
+ | "font-stretch-absolute"
338
+ | "font-variant-css2"
339
+ | "font-weight-absolute"
340
+ | "font-width-css3"
341
+ | "form-control-identifier"
342
+ | "frequency-percentage"
343
+ | "generic-complete"
344
+ | "general-enclosed"
345
+ | "generic-family"
346
+ | "generic-incomplete"
347
+ | "geometry-box"
348
+ | "gradient"
349
+ | "grayscale()"
350
+ | "grid-line"
351
+ | "historical-lig-values"
352
+ | "hsl()"
353
+ | "hsla()"
354
+ | "hue"
355
+ | "hue-interpolation-method"
356
+ | "hue-rotate()"
357
+ | "hwb()"
358
+ | "hypot()"
359
+ | "id-selector"
360
+ | "image"
361
+ | "image()"
362
+ | "image-set()"
363
+ | "image-set-option"
364
+ | "image-src"
365
+ | "image-tags"
366
+ | "inflexible-breadth"
367
+ | "inset()"
368
+ | "integer"
369
+ | "invert()"
370
+ | "keyframe-block"
371
+ | "keyframe-selector"
372
+ | "keyframes-name"
373
+ | "lab()"
374
+ | "layer()"
375
+ | "layer-name"
376
+ | "lch()"
377
+ | "leader()"
378
+ | "leader-type"
379
+ | "length-percentage"
380
+ | "light-dark()"
381
+ | "line-name-list"
382
+ | "line-names"
383
+ | "line-style"
384
+ | "line-width"
385
+ | "linear()"
386
+ | "linear-color-hint"
387
+ | "linear-color-stop"
388
+ | "linear-easing-function"
389
+ | "linear-gradient()"
390
+ | "linear-gradient-syntax"
391
+ | "log()"
392
+ | "mask-layer"
393
+ | "mask-position"
394
+ | "mask-reference"
395
+ | "mask-source"
396
+ | "masking-mode"
397
+ | "matrix()"
398
+ | "matrix3d()"
399
+ | "max()"
400
+ | "media-and"
401
+ | "media-condition"
402
+ | "media-condition-without-or"
403
+ | "media-feature"
404
+ | "media-in-parens"
405
+ | "media-not"
406
+ | "media-or"
407
+ | "media-query"
408
+ | "media-query-list"
409
+ | "media-type"
410
+ | "mf-boolean"
411
+ | "mf-name"
412
+ | "mf-plain"
413
+ | "mf-range"
414
+ | "mf-value"
415
+ | "min()"
416
+ | "minmax()"
417
+ | "mod()"
418
+ | "n-dimension"
419
+ | "name-repeat"
420
+ | "named-color"
421
+ | "namespace-prefix"
422
+ | "ndash-dimension"
423
+ | "ndashdigit-dimension"
424
+ | "ndashdigit-ident"
425
+ | "ns-prefix"
426
+ | "number-percentage"
427
+ | "numeric-figure-values"
428
+ | "numeric-fraction-values"
429
+ | "numeric-spacing-values"
430
+ | "offset-path"
431
+ | "oklab()"
432
+ | "oklch()"
433
+ | "opacity()"
434
+ | "opacity-value"
435
+ | "outline-line-style"
436
+ | "outline-radius"
437
+ | "overflow-position"
438
+ | "page-body"
439
+ | "page-margin-box"
440
+ | "page-margin-box-type"
441
+ | "page-selector"
442
+ | "page-selector-list"
443
+ | "page-size"
444
+ | "paint"
445
+ | "paint()"
446
+ | "paint-box"
447
+ | "palette-identifier"
448
+ | "palette-mix()"
449
+ | "path()"
450
+ | "perspective()"
451
+ | "polar-color-space"
452
+ | "polygon()"
453
+ | "position"
454
+ | "position-area"
455
+ | "pow()"
456
+ | "predefined-rgb"
457
+ | "predefined-rgb-params"
458
+ | "pseudo-class-selector"
459
+ | "pseudo-element-selector"
460
+ | "pseudo-page"
461
+ | "query-in-parens"
462
+ | "quote"
463
+ | "radial-extent"
464
+ | "radial-gradient()"
465
+ | "radial-gradient-syntax"
466
+ | "radial-shape"
467
+ | "radial-size"
468
+ | "ratio"
469
+ | "ray()"
470
+ | "ray-size"
471
+ | "rect()"
472
+ | "rectangular-color-space"
473
+ | "relative-selector"
474
+ | "relative-selector-list"
475
+ | "relative-size"
476
+ | "rem()"
477
+ | "repeat-style"
478
+ | "repeating-conic-gradient()"
479
+ | "repeating-linear-gradient()"
480
+ | "repeating-radial-gradient()"
481
+ | "reversed-counter-name"
482
+ | "rgb()"
483
+ | "rgba()"
484
+ | "rotate()"
485
+ | "rotate3d()"
486
+ | "rotateX()"
487
+ | "rotateY()"
488
+ | "rotateZ()"
489
+ | "round()"
490
+ | "rounding-strategy"
491
+ | "saturate()"
492
+ | "scale()"
493
+ | "scale3d()"
494
+ | "scaleX()"
495
+ | "scaleY()"
496
+ | "scaleZ()"
497
+ | "scope-end"
498
+ | "scope-start"
499
+ | "scroll()"
500
+ | "scroller"
501
+ | "scroll-state-feature"
502
+ | "scroll-state-in-parens"
503
+ | "scroll-state-query"
504
+ | "selector-list"
505
+ | "self-position"
506
+ | "sepia()"
507
+ | "shadow"
508
+ | "shadow-t"
509
+ | "shape"
510
+ | "shape-box"
511
+ | "side-or-corner"
512
+ | "sign()"
513
+ | "signed-integer"
514
+ | "signless-integer"
515
+ | "sin()"
516
+ | "single-animation"
517
+ | "single-animation-composition"
518
+ | "single-animation-direction"
519
+ | "single-animation-fill-mode"
520
+ | "single-animation-iteration-count"
521
+ | "single-animation-play-state"
522
+ | "single-animation-timeline"
523
+ | "single-transition"
524
+ | "single-transition-property"
525
+ | "size"
526
+ | "size-feature"
527
+ | "skew()"
528
+ | "skewX()"
529
+ | "skewY()"
530
+ | "sqrt()"
531
+ | "step-position"
532
+ | "step-easing-function"
533
+ | "steps()"
534
+ | "style-feature"
535
+ | "style-in-parens"
536
+ | "style-query"
537
+ | "subclass-selector"
538
+ | "supports-condition"
539
+ | "supports-decl"
540
+ | "supports-feature"
541
+ | "supports-in-parens"
542
+ | "supports-selector-fn"
543
+ | "symbol"
544
+ | "symbols()"
545
+ | "symbols-type"
546
+ | "system-color"
547
+ | "system-family-name"
548
+ | "tan()"
549
+ | "target"
550
+ | "target-counter()"
551
+ | "target-counters()"
552
+ | "target-text()"
553
+ | "text-edge"
554
+ | "time-percentage"
555
+ | "timeline-range-name"
556
+ | "track-breadth"
557
+ | "track-list"
558
+ | "track-repeat"
559
+ | "track-size"
560
+ | "transform-function"
561
+ | "transform-list"
562
+ | "transition-behavior-value"
563
+ | "translate()"
564
+ | "translate3d()"
565
+ | "translateX()"
566
+ | "translateY()"
567
+ | "translateZ()"
568
+ | "try-size"
569
+ | "try-tactic"
570
+ | "type-or-unit"
571
+ | "type-selector"
572
+ | "var()"
573
+ | "view()"
574
+ | "viewport-length"
575
+ | "visual-box"
576
+ | "wq-name"
577
+ | "xywh()"
578
+ | "xyz"
579
+ | "xyz-params";