@unocss/preset-mini 66.5.10 → 66.5.12

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 (44) hide show
  1. package/dist/chunk-gol_9zmq.mjs +36 -0
  2. package/dist/colors-C9l2trjD.d.mts +431 -0
  3. package/dist/colors-Cxq9P2g9.mjs +362 -0
  4. package/dist/colors.d.mts +2 -354
  5. package/dist/colors.mjs +2 -360
  6. package/dist/index-CnsmLem5.d.mts +71 -0
  7. package/dist/index.d.mts +5 -76
  8. package/dist/index.mjs +67 -70
  9. package/dist/rules-CuP-xMI2.mjs +1683 -0
  10. package/dist/rules.d.mts +72 -48
  11. package/dist/rules.mjs +4 -5
  12. package/dist/theme-5nLH7UVx.d.mts +1085 -0
  13. package/dist/theme-DeYMqZAV.mjs +347 -0
  14. package/dist/theme.d.mts +3 -338
  15. package/dist/theme.mjs +5 -6
  16. package/dist/utils-CNv_IKMQ.d.mts +122 -0
  17. package/dist/utils-DLpYZ57Q.mjs +638 -0
  18. package/dist/utils.d.mts +5 -77
  19. package/dist/utils.mjs +5 -3
  20. package/dist/variants.d.mts +38 -24
  21. package/dist/variants.mjs +661 -4
  22. package/package.json +7 -8
  23. package/colors.d.ts +0 -1
  24. package/dist/colors.d.ts +0 -354
  25. package/dist/index.d.ts +0 -76
  26. package/dist/rules.d.ts +0 -130
  27. package/dist/shared/preset-mini.BSnAbT9I.d.mts +0 -748
  28. package/dist/shared/preset-mini.B_2UJsV2.mjs +0 -693
  29. package/dist/shared/preset-mini.BjJC-NnU.d.mts +0 -79
  30. package/dist/shared/preset-mini.BjJC-NnU.d.ts +0 -79
  31. package/dist/shared/preset-mini.CRliz1QB.d.ts +0 -76
  32. package/dist/shared/preset-mini.CVEK1uAa.mjs +0 -355
  33. package/dist/shared/preset-mini.CoOfBKs_.d.ts +0 -748
  34. package/dist/shared/preset-mini.DBTjVFxS.mjs +0 -580
  35. package/dist/shared/preset-mini.QLusboLD.mjs +0 -1064
  36. package/dist/shared/preset-mini.kmtdc_h1.mjs +0 -324
  37. package/dist/shared/preset-mini.oF7XTPi1.d.mts +0 -76
  38. package/dist/theme.d.ts +0 -338
  39. package/dist/utils.d.ts +0 -77
  40. package/dist/variants.d.ts +0 -52
  41. package/rules.d.ts +0 -1
  42. package/theme.d.ts +0 -1
  43. package/utils.d.ts +0 -1
  44. package/variants.d.ts +0 -1
@@ -1,580 +0,0 @@
1
- import { escapeSelector, toArray } from '@unocss/core';
2
- import { createValueHandler, colorToString, colorOpacityToString, parseCssColor, getStringComponent, getStringComponents } from '@unocss/rule-utils';
3
-
4
- const directionMap = {
5
- "l": ["-left"],
6
- "r": ["-right"],
7
- "t": ["-top"],
8
- "b": ["-bottom"],
9
- "s": ["-inline-start"],
10
- "e": ["-inline-end"],
11
- "x": ["-left", "-right"],
12
- "y": ["-top", "-bottom"],
13
- "": [""],
14
- "bs": ["-block-start"],
15
- "be": ["-block-end"],
16
- "is": ["-inline-start"],
17
- "ie": ["-inline-end"],
18
- "block": ["-block-start", "-block-end"],
19
- "inline": ["-inline-start", "-inline-end"]
20
- };
21
- const insetMap = {
22
- ...directionMap,
23
- s: ["-inset-inline-start"],
24
- start: ["-inset-inline-start"],
25
- e: ["-inset-inline-end"],
26
- end: ["-inset-inline-end"],
27
- bs: ["-inset-block-start"],
28
- be: ["-inset-block-end"],
29
- is: ["-inset-inline-start"],
30
- ie: ["-inset-inline-end"],
31
- block: ["-inset-block-start", "-inset-block-end"],
32
- inline: ["-inset-inline-start", "-inset-inline-end"]
33
- };
34
- const cornerMap = {
35
- "l": ["-top-left", "-bottom-left"],
36
- "r": ["-top-right", "-bottom-right"],
37
- "t": ["-top-left", "-top-right"],
38
- "b": ["-bottom-left", "-bottom-right"],
39
- "tl": ["-top-left"],
40
- "lt": ["-top-left"],
41
- "tr": ["-top-right"],
42
- "rt": ["-top-right"],
43
- "bl": ["-bottom-left"],
44
- "lb": ["-bottom-left"],
45
- "br": ["-bottom-right"],
46
- "rb": ["-bottom-right"],
47
- "": [""],
48
- "bs": ["-start-start", "-start-end"],
49
- "be": ["-end-start", "-end-end"],
50
- "s": ["-end-start", "-start-start"],
51
- "is": ["-end-start", "-start-start"],
52
- "e": ["-start-end", "-end-end"],
53
- "ie": ["-start-end", "-end-end"],
54
- "ss": ["-start-start"],
55
- "bs-is": ["-start-start"],
56
- "is-bs": ["-start-start"],
57
- "se": ["-start-end"],
58
- "bs-ie": ["-start-end"],
59
- "ie-bs": ["-start-end"],
60
- "es": ["-end-start"],
61
- "be-is": ["-end-start"],
62
- "is-be": ["-end-start"],
63
- "ee": ["-end-end"],
64
- "be-ie": ["-end-end"],
65
- "ie-be": ["-end-end"]
66
- };
67
- const xyzMap = {
68
- "x": ["-x"],
69
- "y": ["-y"],
70
- "z": ["-z"],
71
- "": ["-x", "-y"]
72
- };
73
- const xyzArray = ["x", "y", "z"];
74
- const basePositionMap = [
75
- "top",
76
- "top center",
77
- "top left",
78
- "top right",
79
- "bottom",
80
- "bottom center",
81
- "bottom left",
82
- "bottom right",
83
- "left",
84
- "left center",
85
- "left top",
86
- "left bottom",
87
- "right",
88
- "right center",
89
- "right top",
90
- "right bottom",
91
- "center",
92
- "center top",
93
- "center bottom",
94
- "center left",
95
- "center right",
96
- "center center"
97
- ];
98
- const positionMap = Object.assign(
99
- {},
100
- ...basePositionMap.map((p) => ({ [p.replace(/ /, "-")]: p })),
101
- ...basePositionMap.map((p) => ({ [p.replace(/\b(\w)\w+/g, "$1").replace(/ /, "")]: p }))
102
- );
103
- const globalKeywords = [
104
- "inherit",
105
- "initial",
106
- "revert",
107
- "revert-layer",
108
- "unset"
109
- ];
110
- const cssMathFnRE = /^(calc|clamp|min|max)\s*\((.+)\)(.*)/;
111
- const cssVarFnRE = /^(var)\s*\((.+)\)(.*)/;
112
-
113
- const numberWithUnitRE = /^(-?\d*(?:\.\d+)?)(px|pt|pc|%|r?(?:em|ex|lh|cap|ch|ic)|(?:[sld]?v|cq)(?:[whib]|min|max)|in|cm|mm|rpx)?$/i;
114
- const numberRE = /^(-?\d*(?:\.\d+)?)$/;
115
- const unitOnlyRE = /^(px|[sld]?v[wh])$/i;
116
- const unitOnlyMap = {
117
- px: 1,
118
- vw: 100,
119
- vh: 100,
120
- svw: 100,
121
- svh: 100,
122
- dvw: 100,
123
- dvh: 100,
124
- lvh: 100,
125
- lvw: 100
126
- };
127
- const bracketTypeRe = /^\[(color|image|length|size|position|quoted|string):/i;
128
- const splitComma = /,(?![^()]*\))/g;
129
-
130
- const cssProps = [
131
- // basic props
132
- "color",
133
- "border-color",
134
- "background-color",
135
- "outline-color",
136
- "text-decoration-color",
137
- "flex-grow",
138
- "flex",
139
- "flex-shrink",
140
- "caret-color",
141
- "font",
142
- "gap",
143
- "opacity",
144
- "visibility",
145
- "z-index",
146
- "font-weight",
147
- "zoom",
148
- "text-shadow",
149
- "transform",
150
- "box-shadow",
151
- "border",
152
- // positions
153
- "background-position",
154
- "left",
155
- "right",
156
- "top",
157
- "bottom",
158
- "object-position",
159
- // sizes
160
- "max-height",
161
- "min-height",
162
- "max-width",
163
- "min-width",
164
- "height",
165
- "width",
166
- "border-width",
167
- "margin",
168
- "padding",
169
- "outline-width",
170
- "outline-offset",
171
- "font-size",
172
- "line-height",
173
- "text-indent",
174
- "vertical-align",
175
- "border-spacing",
176
- "letter-spacing",
177
- "word-spacing",
178
- // enhances
179
- "stroke",
180
- "filter",
181
- "backdrop-filter",
182
- "fill",
183
- "mask",
184
- "mask-size",
185
- "mask-border",
186
- "clip-path",
187
- "clip",
188
- "border-radius"
189
- ];
190
- function round(n) {
191
- return +n.toFixed(10);
192
- }
193
- function numberWithUnit(str) {
194
- const match = str.match(numberWithUnitRE);
195
- if (!match)
196
- return;
197
- const [, n, unit] = match;
198
- const num = Number.parseFloat(n);
199
- if (unit && !Number.isNaN(num))
200
- return `${round(num)}${unit}`;
201
- }
202
- function auto(str) {
203
- if (str === "auto" || str === "a")
204
- return "auto";
205
- }
206
- function rem(str) {
207
- if (!str)
208
- return;
209
- if (unitOnlyRE.test(str))
210
- return `${unitOnlyMap[str]}${str}`;
211
- const match = str.match(numberWithUnitRE);
212
- if (!match)
213
- return;
214
- const [, n, unit] = match;
215
- const num = Number.parseFloat(n);
216
- if (!Number.isNaN(num)) {
217
- if (num === 0)
218
- return "0";
219
- return unit ? `${round(num)}${unit}` : `${round(num / 4)}rem`;
220
- }
221
- }
222
- function px(str) {
223
- if (unitOnlyRE.test(str))
224
- return `${unitOnlyMap[str]}${str}`;
225
- const match = str.match(numberWithUnitRE);
226
- if (!match)
227
- return;
228
- const [, n, unit] = match;
229
- const num = Number.parseFloat(n);
230
- if (!Number.isNaN(num))
231
- return unit ? `${round(num)}${unit}` : `${round(num)}px`;
232
- }
233
- function number(str) {
234
- if (!numberRE.test(str))
235
- return;
236
- const num = Number.parseFloat(str);
237
- if (!Number.isNaN(num))
238
- return round(num);
239
- }
240
- function percent(str) {
241
- if (str.endsWith("%"))
242
- str = str.slice(0, -1);
243
- if (!numberRE.test(str))
244
- return;
245
- const num = Number.parseFloat(str);
246
- if (!Number.isNaN(num))
247
- return `${round(num / 100)}`;
248
- }
249
- function fraction(str) {
250
- if (!str)
251
- return;
252
- if (str === "full")
253
- return "100%";
254
- const [left, right] = str.split("/");
255
- const num = Number.parseFloat(left) / Number.parseFloat(right);
256
- if (!Number.isNaN(num)) {
257
- if (num === 0)
258
- return "0";
259
- return `${round(num * 100)}%`;
260
- }
261
- }
262
- function bracketWithType(str, requiredType) {
263
- if (str && str.startsWith("[") && str.endsWith("]")) {
264
- let base;
265
- let hintedType;
266
- const match = str.match(bracketTypeRe);
267
- if (!match) {
268
- base = str.slice(1, -1);
269
- } else {
270
- if (!requiredType)
271
- hintedType = match[1];
272
- base = str.slice(match[0].length, -1);
273
- }
274
- if (!base)
275
- return;
276
- if (base === '=""')
277
- return;
278
- if (base.startsWith("--"))
279
- base = `var(${base})`;
280
- let curly = 0;
281
- for (const i of base) {
282
- if (i === "[") {
283
- curly += 1;
284
- } else if (i === "]") {
285
- curly -= 1;
286
- if (curly < 0)
287
- return;
288
- }
289
- }
290
- if (curly)
291
- return;
292
- switch (hintedType) {
293
- case "string":
294
- return base.replace(/(^|[^\\])_/g, "$1 ").replace(/\\_/g, "_");
295
- case "quoted":
296
- return base.replace(/(^|[^\\])_/g, "$1 ").replace(/\\_/g, "_").replace(/(["\\])/g, "\\$1").replace(/^(.+)$/, '"$1"');
297
- }
298
- return base.replace(/(url\(.*?\))/g, (v) => v.replace(/_/g, "\\_")).replace(/(^|[^\\])_/g, "$1 ").replace(/\\_/g, "_").replace(/(?:calc|clamp|max|min)\((.*)/g, (match2) => {
299
- const vars = [];
300
- return match2.replace(/var\((--.+?)[,)]/g, (match3, g1) => {
301
- vars.push(g1);
302
- return match3.replace(g1, "--un-calc");
303
- }).replace(/(-?\d*\.?\d(?!-\d.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([+\-/*])/g, "$1 $2 ").replace(/--un-calc/g, () => vars.shift());
304
- });
305
- }
306
- }
307
- function bracket(str) {
308
- return bracketWithType(str);
309
- }
310
- function bracketOfColor(str) {
311
- return bracketWithType(str, "color");
312
- }
313
- function bracketOfLength(str) {
314
- return bracketWithType(str, "length");
315
- }
316
- function bracketOfPosition(str) {
317
- return bracketWithType(str, "position");
318
- }
319
- function cssvar(str) {
320
- if (/^\$[^\s'"`;{}]/.test(str)) {
321
- const [name, defaultValue] = str.slice(1).split(",");
322
- return `var(--${escapeSelector(name)}${defaultValue ? `, ${defaultValue}` : ""})`;
323
- }
324
- }
325
- function time(str) {
326
- const match = str.match(/^(-?[0-9.]+)(s|ms)?$/i);
327
- if (!match)
328
- return;
329
- const [, n, unit] = match;
330
- const num = Number.parseFloat(n);
331
- if (!Number.isNaN(num)) {
332
- if (num === 0 && !unit)
333
- return "0s";
334
- return unit ? `${round(num)}${unit}` : `${round(num)}ms`;
335
- }
336
- }
337
- function degree(str) {
338
- const match = str.match(/^(-?[0-9.]+)(deg|rad|grad|turn)?$/i);
339
- if (!match)
340
- return;
341
- const [, n, unit] = match;
342
- const num = Number.parseFloat(n);
343
- if (!Number.isNaN(num)) {
344
- if (num === 0)
345
- return "0deg";
346
- return unit ? `${round(num)}${unit}` : `${round(num)}deg`;
347
- }
348
- }
349
- function global(str) {
350
- if (globalKeywords.includes(str))
351
- return str;
352
- }
353
- function properties(str) {
354
- if (str.split(",").every((prop) => cssProps.includes(prop)))
355
- return str;
356
- }
357
- function position(str) {
358
- if (["top", "left", "right", "bottom", "center"].includes(str))
359
- return str;
360
- }
361
-
362
- const valueHandlers = {
363
- __proto__: null,
364
- auto: auto,
365
- bracket: bracket,
366
- bracketOfColor: bracketOfColor,
367
- bracketOfLength: bracketOfLength,
368
- bracketOfPosition: bracketOfPosition,
369
- cssvar: cssvar,
370
- degree: degree,
371
- fraction: fraction,
372
- global: global,
373
- number: number,
374
- numberWithUnit: numberWithUnit,
375
- percent: percent,
376
- position: position,
377
- properties: properties,
378
- px: px,
379
- rem: rem,
380
- time: time
381
- };
382
-
383
- const handler = createValueHandler(valueHandlers);
384
- const h = handler;
385
-
386
- const CONTROL_MINI_NO_NEGATIVE = "$$mini-no-negative";
387
- function directionSize(propertyPrefix) {
388
- return ([_, direction, size], { theme }) => {
389
- const v = theme.spacing?.[size || "DEFAULT"] ?? h.bracket.cssvar.global.auto.fraction.rem(size);
390
- if (v != null) {
391
- return directionMap[direction].map((i) => [`${propertyPrefix}${i}`, v]);
392
- } else if (size?.startsWith("-")) {
393
- const v2 = theme.spacing?.[size.slice(1)];
394
- if (v2 != null)
395
- return directionMap[direction].map((i) => [`${propertyPrefix}${i}`, `calc(${v2} * -1)`]);
396
- }
397
- };
398
- }
399
- function getThemeColorForKey(theme, colors, key = "colors") {
400
- let obj = theme[key];
401
- let index = -1;
402
- for (const c of colors) {
403
- index += 1;
404
- if (obj && typeof obj !== "string") {
405
- const camel = colors.slice(index).join("-").replace(/(-[a-z])/g, (n) => n.slice(1).toUpperCase());
406
- if (obj[camel])
407
- return obj[camel];
408
- if (obj[c]) {
409
- obj = obj[c];
410
- continue;
411
- }
412
- }
413
- return void 0;
414
- }
415
- return obj;
416
- }
417
- function getThemeColor(theme, colors, key) {
418
- return getThemeColorForKey(theme, colors, key) || getThemeColorForKey(theme, colors, "colors");
419
- }
420
- function splitShorthand(body, type) {
421
- const [front, rest] = getStringComponent(body, "[", "]", ["/", ":"]) ?? [];
422
- if (front != null) {
423
- const match = (front.match(bracketTypeRe) ?? [])[1];
424
- if (match == null || match === type)
425
- return [front, rest];
426
- }
427
- }
428
- function parseColor(body, theme, key) {
429
- const split = splitShorthand(body, "color");
430
- if (!split)
431
- return;
432
- const [main, opacity] = split;
433
- const colors = main.replace(/([a-z])(\d)/g, "$1-$2").split(/-/g);
434
- const [name] = colors;
435
- if (!name)
436
- return;
437
- let color;
438
- const bracket = h.bracketOfColor(main);
439
- const bracketOrMain = bracket || main;
440
- if (h.numberWithUnit(bracketOrMain))
441
- return;
442
- if (/^#[\da-f]+$/i.test(bracketOrMain))
443
- color = bracketOrMain;
444
- else if (/^hex-[\da-fA-F]+$/.test(bracketOrMain))
445
- color = `#${bracketOrMain.slice(4)}`;
446
- else if (main.startsWith("$"))
447
- color = h.cssvar(main);
448
- color = color || bracket;
449
- if (!color) {
450
- const colorData = getThemeColor(theme, [main], key);
451
- if (typeof colorData === "string")
452
- color = colorData;
453
- }
454
- let no = "DEFAULT";
455
- if (!color) {
456
- let keys = colors;
457
- let _no;
458
- const [scale] = colors.slice(-1);
459
- if (/^\d+$/.test(scale)) {
460
- no = _no = scale;
461
- keys = colors.slice(0, -1);
462
- }
463
- const colorData = getThemeColor(theme, keys, key);
464
- if (typeof colorData === "object") {
465
- color = colorData[_no ?? no];
466
- } else if (typeof colorData === "string" && !_no) {
467
- color = colorData;
468
- }
469
- }
470
- return {
471
- opacity,
472
- name,
473
- no,
474
- color,
475
- cssColor: parseCssColor(color),
476
- alpha: h.bracket.cssvar.percent(opacity ?? "")
477
- };
478
- }
479
- function colorResolver(property, varName, key, shouldPass) {
480
- return ([, body], { theme, generator }) => {
481
- const data = parseColor(body ?? "", theme, key);
482
- if (!data)
483
- return;
484
- const { alpha, color, cssColor } = data;
485
- const isDev = generator.config.envMode === "dev";
486
- const rawColorComment = isDev && color ? ` /* ${color} */` : "";
487
- const css = {};
488
- if (cssColor) {
489
- if (alpha != null) {
490
- css[property] = colorToString(cssColor, alpha) + rawColorComment;
491
- } else {
492
- const opacityVar = `--un-${varName}-opacity`;
493
- const result = colorToString(cssColor, `var(${opacityVar})`);
494
- if (result.includes(opacityVar))
495
- css[opacityVar] = colorOpacityToString(cssColor);
496
- css[property] = result + rawColorComment;
497
- }
498
- } else if (color) {
499
- if (alpha != null) {
500
- css[property] = colorToString(color, alpha) + rawColorComment;
501
- } else {
502
- const opacityVar = `--un-${varName}-opacity`;
503
- const result = colorToString(color, `var(${opacityVar})`);
504
- if (result.includes(opacityVar))
505
- css[opacityVar] = 1;
506
- css[property] = result + rawColorComment;
507
- }
508
- }
509
- if (shouldPass?.(css) !== false)
510
- return css;
511
- };
512
- }
513
- function colorableShadows(shadows, colorVar) {
514
- const colored = [];
515
- shadows = toArray(shadows);
516
- for (let i = 0; i < shadows.length; i++) {
517
- const components = getStringComponents(shadows[i], " ", 6);
518
- if (!components || components.length < 3)
519
- return shadows;
520
- let isInset = false;
521
- const pos = components.indexOf("inset");
522
- if (pos !== -1) {
523
- components.splice(pos, 1);
524
- isInset = true;
525
- }
526
- let colorVarValue = "";
527
- const lastComp = components.at(-1);
528
- if (parseCssColor(components.at(0))) {
529
- const color = parseCssColor(components.shift());
530
- if (color)
531
- colorVarValue = `, ${colorToString(color)}`;
532
- } else if (parseCssColor(lastComp)) {
533
- const color = parseCssColor(components.pop());
534
- if (color)
535
- colorVarValue = `, ${colorToString(color)}`;
536
- } else if (lastComp && lastComp.startsWith("var(")) {
537
- const color = components.pop();
538
- colorVarValue = `, ${color}`;
539
- }
540
- colored.push(`${isInset ? "inset " : ""}${components.join(" ")} var(${colorVar}${colorVarValue})`);
541
- }
542
- return colored;
543
- }
544
- function hasParseableColor(color, theme, key) {
545
- return color != null && !!parseColor(color, theme, key)?.color;
546
- }
547
- const reLetters = /[a-z]+/gi;
548
- const resolvedBreakpoints = /* @__PURE__ */ new WeakMap();
549
- function resolveBreakpoints({ theme, generator }, key = "breakpoints") {
550
- const breakpoints = generator?.userConfig?.theme?.[key] || theme[key];
551
- if (!breakpoints)
552
- return void 0;
553
- if (resolvedBreakpoints.has(theme))
554
- return resolvedBreakpoints.get(theme);
555
- const resolved = Object.entries(breakpoints).sort((a, b) => Number.parseInt(a[1].replace(reLetters, "")) - Number.parseInt(b[1].replace(reLetters, ""))).map(([point, size]) => ({ point, size }));
556
- resolvedBreakpoints.set(theme, resolved);
557
- return resolved;
558
- }
559
- function resolveVerticalBreakpoints(context) {
560
- return resolveBreakpoints(context, "verticalBreakpoints");
561
- }
562
- function makeGlobalStaticRules(prefix, property) {
563
- return globalKeywords.map((keyword) => [`${prefix}-${keyword}`, { [property ?? prefix]: keyword }]);
564
- }
565
- function isCSSMathFn(value) {
566
- return value != null && cssMathFnRE.test(value);
567
- }
568
- function isSize(str) {
569
- if (str[0] === "[" && str.slice(-1) === "]")
570
- str = str.slice(1, -1);
571
- return cssMathFnRE.test(str) || numberWithUnitRE.test(str);
572
- }
573
- function transformXYZ(d, v, name) {
574
- const values = v.split(splitComma);
575
- if (d || !d && values.length === 1)
576
- return xyzMap[d].map((i) => [`--un-${name}${i}`, v]);
577
- return values.map((v2, i) => [`--un-${name}-${xyzArray[i]}`, v2]);
578
- }
579
-
580
- export { CONTROL_MINI_NO_NEGATIVE as C, h as a, xyzArray as b, cornerMap as c, directionMap as d, cssMathFnRE as e, cssVarFnRE as f, globalKeywords as g, handler as h, insetMap as i, directionSize as j, parseColor as k, colorResolver as l, colorableShadows as m, hasParseableColor as n, resolveVerticalBreakpoints as o, positionMap as p, makeGlobalStaticRules as q, resolveBreakpoints as r, splitShorthand as s, isCSSMathFn as t, isSize as u, valueHandlers as v, transformXYZ as w, xyzMap as x };