@yahoo/uds-mobile 1.6.4 → 1.7.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/dist/bin/fixtures/dist/index.mjs +3 -0
- package/dist/bin/generateTheme.mjs +198 -11
- package/dist/components/Box.cjs +18 -4
- package/dist/components/Box.d.cts +4 -2
- package/dist/components/Box.d.cts.map +1 -1
- package/dist/components/Box.d.mts +4 -2
- package/dist/components/Box.d.mts.map +1 -1
- package/dist/components/Box.mjs +18 -4
- package/dist/components/Box.mjs.map +1 -1
- package/dist/components/Icon.cjs +1 -1
- package/dist/components/Icon.mjs +1 -1
- package/dist/components/Screen.cjs +1 -1
- package/dist/components/Screen.mjs +1 -1
- package/dist/components/Switch.cjs +1 -1
- package/dist/components/Switch.mjs +1 -1
- package/dist/types/dist/index.d.cts +5 -2
- package/dist/types/dist/index.d.cts.map +1 -1
- package/dist/types/dist/index.d.mts +5 -2
- package/dist/types/dist/index.d.mts.map +1 -1
- package/fonts/index.cjs +6 -6
- package/fonts/index.mjs +6 -6
- package/fonts/yas-black.otf +0 -0
- package/fonts/yas-bold.otf +0 -0
- package/fonts/yas-light.otf +0 -0
- package/fonts/yas-medium.otf +0 -0
- package/fonts/yas-regular.otf +0 -0
- package/fonts/yas-semibold.otf +0 -0
- package/generated/styles.cjs +133 -0
- package/generated/styles.d.ts +85 -3
- package/generated/styles.mjs +133 -0
- package/generated/unistyles.d.ts +174 -14
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ import { fontAliasToPostscript } from "@yahoo/uds-mobile/fonts";
|
|
|
10
10
|
/**
|
|
11
11
|
* Generate Unistyles theme from UDS tokens.
|
|
12
12
|
*
|
|
13
|
-
* Takes
|
|
13
|
+
* Takes UniversalTokensConfigGeneric and generates theme objects for React Native Unistyles.
|
|
14
14
|
*/
|
|
15
15
|
/**
|
|
16
16
|
* Converts an array of BoxShadowValue objects to a CSS box-shadow string.
|
|
@@ -72,11 +72,63 @@ function rgbStringToRgb(rgbString) {
|
|
|
72
72
|
return `rgb(${parts.join(", ")})`;
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
|
-
* Generates elevation colors from config.
|
|
75
|
+
* Generates elevation border colors (for line palette) from config.
|
|
76
|
+
* Resolves the borderColor from each elevation preset to an RGB value.
|
|
76
77
|
*/
|
|
77
|
-
function
|
|
78
|
+
function generateElevationBorderColors(config, colorMode) {
|
|
78
79
|
const result = {};
|
|
79
|
-
|
|
80
|
+
const palette = config.colorMode[colorMode].palette;
|
|
81
|
+
const spectrum = config.colorMode[colorMode].spectrum;
|
|
82
|
+
for (const level of Object.keys(config.elevation)) {
|
|
83
|
+
const borderColorDef = config.elevation[level][colorMode].borderColor;
|
|
84
|
+
let color = "transparent";
|
|
85
|
+
if (borderColorDef.type === "line") {
|
|
86
|
+
const colorDef = palette.line?.[borderColorDef.value];
|
|
87
|
+
if (colorDef) {
|
|
88
|
+
const rgbValue = spectrum[colorDef.hue]?.[colorDef.step];
|
|
89
|
+
if (rgbValue) {
|
|
90
|
+
const parts = rgbValue.trim().split(/\s+/);
|
|
91
|
+
color = colorDef.opacity !== void 0 ? `rgba(${parts.join(", ")}, ${parseInt(colorDef.opacity, 10) / 100})` : `rgb(${parts.join(", ")})`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
} else if (borderColorDef.type === "always") color = newAlwaysPalette[borderColorDef.value] ?? "transparent";
|
|
95
|
+
else if (borderColorDef.type === "spectrum") {
|
|
96
|
+
const spectrumValue = borderColorDef.value;
|
|
97
|
+
const rgbValue = spectrum[spectrumValue.hue]?.[spectrumValue.step];
|
|
98
|
+
if (rgbValue) color = `rgb(${rgbValue.trim().split(/\s+/).join(", ")})`;
|
|
99
|
+
}
|
|
100
|
+
result[`elevation-${level}`] = color;
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generates elevation background colors from config.
|
|
106
|
+
* Resolves backgroundFill from elevation preset through the background palette.
|
|
107
|
+
*/
|
|
108
|
+
function generateElevationBackgroundColors(config, colorMode) {
|
|
109
|
+
const result = {};
|
|
110
|
+
const palette = config.colorMode[colorMode].palette;
|
|
111
|
+
const spectrum = config.colorMode[colorMode].spectrum;
|
|
112
|
+
for (const level of Object.keys(config.elevation)) {
|
|
113
|
+
const backgroundFill = config.elevation[level][colorMode].backgroundFill;
|
|
114
|
+
let color = "transparent";
|
|
115
|
+
if (backgroundFill.type === "background") {
|
|
116
|
+
const colorDef = palette.background?.[backgroundFill.value];
|
|
117
|
+
if (colorDef) {
|
|
118
|
+
const rgbValue = spectrum[colorDef.hue]?.[colorDef.step];
|
|
119
|
+
if (rgbValue) {
|
|
120
|
+
const parts = rgbValue.trim().split(/\s+/);
|
|
121
|
+
color = colorDef.opacity !== void 0 ? `rgba(${parts.join(", ")}, ${parseInt(colorDef.opacity, 10) / 100})` : `rgb(${parts.join(", ")})`;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
} else if (backgroundFill.type === "always") color = newAlwaysPalette[backgroundFill.value] ?? "transparent";
|
|
125
|
+
else if (backgroundFill.type === "spectrum") {
|
|
126
|
+
const spectrumValue = backgroundFill.value;
|
|
127
|
+
const rgbValue = spectrum[spectrumValue.hue]?.[spectrumValue.step];
|
|
128
|
+
if (rgbValue) color = `rgb(${rgbValue.trim().split(/\s+/).join(", ")})`;
|
|
129
|
+
}
|
|
130
|
+
result[`elevation-${level}`] = color;
|
|
131
|
+
}
|
|
80
132
|
return result;
|
|
81
133
|
}
|
|
82
134
|
/**
|
|
@@ -180,12 +232,65 @@ function generateShadows(config) {
|
|
|
180
232
|
});
|
|
181
233
|
return result;
|
|
182
234
|
}
|
|
235
|
+
function isElevationCustomShadows(value) {
|
|
236
|
+
return Array.isArray(value);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Generates pre-computed boxShadow CSS strings for all shadow variants.
|
|
240
|
+
* Produces both drop and inset shadow maps keyed by variant name.
|
|
241
|
+
* Elevation levels resolve their dropShadow config (which may reference
|
|
242
|
+
* a ShadowVariant or provide custom ShadowPreset tuples).
|
|
243
|
+
*/
|
|
244
|
+
function generateBoxShadows(config, colorMode) {
|
|
245
|
+
const colorsConfig = config.colorMode[colorMode];
|
|
246
|
+
const spectrum = colorsConfig.spectrum;
|
|
247
|
+
const palette = colorsConfig.palette.foreground;
|
|
248
|
+
const drop = {};
|
|
249
|
+
const inset = {};
|
|
250
|
+
for (const [variant, presets] of Object.entries(config.shadow.drop)) {
|
|
251
|
+
if (variant === "none" || !presets || presets.length === 0) {
|
|
252
|
+
drop[variant] = "";
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
drop[variant] = boxShadowToCssString(convertShadowToBoxShadow(presets, spectrum, palette));
|
|
256
|
+
}
|
|
257
|
+
for (const [level, modePresets] of Object.entries(config.elevation)) {
|
|
258
|
+
const preset = modePresets[colorMode];
|
|
259
|
+
const key = `elevation-${level}`;
|
|
260
|
+
if (!preset.dropShadow || preset.dropShadow === "none") {
|
|
261
|
+
drop[key] = "";
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
if (isElevationCustomShadows(preset.dropShadow)) {
|
|
265
|
+
const allPresets = [...preset.dropShadow];
|
|
266
|
+
if (allPresets.length > 0) drop[key] = boxShadowToCssString(convertShadowToBoxShadow(allPresets, spectrum, palette));
|
|
267
|
+
else drop[key] = "";
|
|
268
|
+
} else {
|
|
269
|
+
const refPresets = config.shadow.drop[preset.dropShadow];
|
|
270
|
+
if (refPresets && refPresets.length > 0) drop[key] = boxShadowToCssString(convertShadowToBoxShadow(refPresets, spectrum, palette));
|
|
271
|
+
else drop[key] = "";
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
for (const [variant, presets] of Object.entries(config.shadow.inset)) {
|
|
275
|
+
if (variant === "none" || !presets || presets.length === 0) {
|
|
276
|
+
inset[variant] = "";
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
inset[variant] = boxShadowToCssString(convertShadowToBoxShadow(presets, spectrum, palette, true));
|
|
280
|
+
}
|
|
281
|
+
drop["none"] = drop["none"] ?? "";
|
|
282
|
+
inset["none"] = inset["none"] ?? "";
|
|
283
|
+
return {
|
|
284
|
+
drop,
|
|
285
|
+
inset
|
|
286
|
+
};
|
|
287
|
+
}
|
|
183
288
|
/**
|
|
184
289
|
* Resolves a typography variant name to React Native text styles.
|
|
185
290
|
* Looks up the typography config and converts to RN-compatible values.
|
|
186
291
|
*
|
|
187
292
|
* @param variantName - The typography variant name (e.g., 'body1', 'label4', 'ui2')
|
|
188
|
-
* @param typography - The typography config from
|
|
293
|
+
* @param typography - The typography config from UniversalTokensConfigGeneric
|
|
189
294
|
* @param config - The full config for resolving font family aliases
|
|
190
295
|
* @returns Resolved typography styles (fontSize, lineHeight, letterSpacing, fontFamily)
|
|
191
296
|
*/
|
|
@@ -208,7 +313,7 @@ function resolveTypographyStyles(variantName, typography, config) {
|
|
|
208
313
|
}
|
|
209
314
|
return result;
|
|
210
315
|
}
|
|
211
|
-
function resolveValue(variable, config, colorMode) {
|
|
316
|
+
function resolveValue(variable, config, colorMode, propName) {
|
|
212
317
|
const { type, value } = variable;
|
|
213
318
|
const palette = config.colorMode[colorMode].palette;
|
|
214
319
|
const spectrum = config.colorMode[colorMode].spectrum;
|
|
@@ -263,6 +368,69 @@ function resolveValue(variable, config, colorMode) {
|
|
|
263
368
|
if (dropPresets && dropPresets.length > 0) return convertShadowToBoxShadow(dropPresets, spectrum, palette.foreground, true);
|
|
264
369
|
return [];
|
|
265
370
|
}
|
|
371
|
+
if (type === "elevationAliases") {
|
|
372
|
+
const level = value.replace("elevation-", "");
|
|
373
|
+
const elevationPreset = config.elevation[level];
|
|
374
|
+
if (!elevationPreset) return;
|
|
375
|
+
const preset = elevationPreset[colorMode];
|
|
376
|
+
if (propName === "backgroundColor") {
|
|
377
|
+
const backgroundFill = preset.backgroundFill;
|
|
378
|
+
if (backgroundFill.type === "background") {
|
|
379
|
+
const colorDef = palette.background?.[backgroundFill.value];
|
|
380
|
+
if (colorDef) {
|
|
381
|
+
const rgbValue = spectrum[colorDef.hue]?.[colorDef.step];
|
|
382
|
+
if (rgbValue) {
|
|
383
|
+
const parts = rgbValue.trim().split(/\s+/);
|
|
384
|
+
if (colorDef.opacity !== void 0) return `rgba(${parts.join(", ")}, ${parseInt(colorDef.opacity, 10) / 100})`;
|
|
385
|
+
return `rgb(${parts.join(", ")})`;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
} else if (backgroundFill.type === "always") return newAlwaysPalette[backgroundFill.value] ?? "transparent";
|
|
389
|
+
else if (backgroundFill.type === "spectrum") {
|
|
390
|
+
const spectrumValue = backgroundFill.value;
|
|
391
|
+
const rgbValue = spectrum[spectrumValue.hue]?.[spectrumValue.step];
|
|
392
|
+
if (rgbValue) return `rgb(${rgbValue.trim().split(/\s+/).join(", ")})`;
|
|
393
|
+
}
|
|
394
|
+
return "transparent";
|
|
395
|
+
}
|
|
396
|
+
if (propName === "borderColor") {
|
|
397
|
+
const borderColorDef = preset.borderColor;
|
|
398
|
+
if (borderColorDef.type === "line") {
|
|
399
|
+
const colorDef = palette.line?.[borderColorDef.value];
|
|
400
|
+
if (colorDef) {
|
|
401
|
+
const rgbValue = spectrum[colorDef.hue]?.[colorDef.step];
|
|
402
|
+
if (rgbValue) {
|
|
403
|
+
const parts = rgbValue.trim().split(/\s+/);
|
|
404
|
+
if (colorDef.opacity !== void 0) return `rgba(${parts.join(", ")}, ${parseInt(colorDef.opacity, 10) / 100})`;
|
|
405
|
+
return `rgb(${parts.join(", ")})`;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
} else if (borderColorDef.type === "always") return newAlwaysPalette[borderColorDef.value] ?? "transparent";
|
|
409
|
+
else if (borderColorDef.type === "spectrum") {
|
|
410
|
+
const spectrumValue = borderColorDef.value;
|
|
411
|
+
const rgbValue = spectrum[spectrumValue.hue]?.[spectrumValue.step];
|
|
412
|
+
if (rgbValue) return `rgb(${rgbValue.trim().split(/\s+/).join(", ")})`;
|
|
413
|
+
}
|
|
414
|
+
return "transparent";
|
|
415
|
+
}
|
|
416
|
+
if (propName === "borderWidth") {
|
|
417
|
+
const borderWidthKey = preset.borderWidth;
|
|
418
|
+
return scaleConfig.borderWidth[borderWidthKey] ?? 0;
|
|
419
|
+
}
|
|
420
|
+
if (propName === "shadow") {
|
|
421
|
+
const elevationPreset = config.elevation[level];
|
|
422
|
+
if (!elevationPreset) return [];
|
|
423
|
+
const preset = elevationPreset[colorMode];
|
|
424
|
+
if (!preset.dropShadow || preset.dropShadow === "none") return [];
|
|
425
|
+
if (isElevationCustomShadows(preset.dropShadow)) {
|
|
426
|
+
const allPresets = [...preset.dropShadow];
|
|
427
|
+
return allPresets.length > 0 ? convertShadowToBoxShadow(allPresets, spectrum, palette.foreground) : [];
|
|
428
|
+
}
|
|
429
|
+
const refPresets = config.shadow.drop[preset.dropShadow];
|
|
430
|
+
return refPresets && refPresets.length > 0 ? convertShadowToBoxShadow(refPresets, spectrum, palette.foreground) : [];
|
|
431
|
+
}
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
266
434
|
if (type === "textDecorationLines") return value;
|
|
267
435
|
if (typeof value === "number") return value;
|
|
268
436
|
}
|
|
@@ -296,7 +464,7 @@ function generateComponents(config, colorMode) {
|
|
|
296
464
|
if (!rnProps) continue;
|
|
297
465
|
const stateValue = states[state];
|
|
298
466
|
if (!stateValue) continue;
|
|
299
|
-
const resolvedValue = resolveValue(stateValue, config, colorMode);
|
|
467
|
+
const resolvedValue = resolveValue(stateValue, config, colorMode, propName);
|
|
300
468
|
if (resolvedValue === void 0) continue;
|
|
301
469
|
if (SHADOW_PROPS.has(propName)) {
|
|
302
470
|
if (Array.isArray(resolvedValue)) shadowValues.push(...resolvedValue);
|
|
@@ -333,6 +501,16 @@ function generateComponents(config, colorMode) {
|
|
|
333
501
|
state
|
|
334
502
|
]);
|
|
335
503
|
result[flatKey] = textStyleObj;
|
|
504
|
+
if (variantPath[0] === "icon" && textStyleObj.color) {
|
|
505
|
+
const iconLayer = "icon";
|
|
506
|
+
const iconFlatKey = toSlashKey([
|
|
507
|
+
componentName,
|
|
508
|
+
...variantPath,
|
|
509
|
+
iconLayer,
|
|
510
|
+
state
|
|
511
|
+
]);
|
|
512
|
+
result[iconFlatKey] = { color: textStyleObj.color };
|
|
513
|
+
}
|
|
336
514
|
}
|
|
337
515
|
}
|
|
338
516
|
}
|
|
@@ -346,31 +524,40 @@ function generateComponents(config, colorMode) {
|
|
|
346
524
|
function generateTheme(config, colorMode) {
|
|
347
525
|
const colorsConfig = config.colorMode[colorMode];
|
|
348
526
|
const scaleConfig = config.scaleMode[DEFAULT_SCALE_MODE];
|
|
349
|
-
const
|
|
527
|
+
const elevationBackgroundColors = generateElevationBackgroundColors(config, colorMode);
|
|
528
|
+
const elevationBorderColors = generateElevationBorderColors(config, colorMode);
|
|
529
|
+
const boxShadows = generateBoxShadows(config, colorMode);
|
|
350
530
|
return {
|
|
351
531
|
colors: {
|
|
352
532
|
spectrum: sortKeys(generateSpectrum(colorsConfig.spectrum)),
|
|
353
533
|
background: sortKeys({
|
|
354
534
|
...generatePalette(colorsConfig.palette.background, colorsConfig.spectrum),
|
|
355
|
-
...
|
|
535
|
+
...elevationBackgroundColors
|
|
356
536
|
}),
|
|
357
537
|
foreground: sortKeys(generatePalette(colorsConfig.palette.foreground, colorsConfig.spectrum)),
|
|
358
538
|
line: sortKeys({
|
|
359
539
|
...generatePalette(colorsConfig.palette.line, colorsConfig.spectrum),
|
|
360
|
-
...
|
|
540
|
+
...elevationBorderColors
|
|
361
541
|
})
|
|
362
542
|
},
|
|
363
543
|
spacing: sortKeys({ ...spacingMap }),
|
|
364
544
|
borderRadius: sortKeys({ ...scaleConfig.borderRadius }),
|
|
365
545
|
borderWidth: sortKeys({
|
|
366
546
|
...scaleConfig.borderWidth,
|
|
367
|
-
...Object.fromEntries(Object.keys(config.elevation).map((level) =>
|
|
547
|
+
...Object.fromEntries(Object.keys(config.elevation).map((level) => {
|
|
548
|
+
const borderWidthKey = config.elevation[level].light.borderWidth;
|
|
549
|
+
return [`elevation-${level}`, scaleConfig.borderWidth[borderWidthKey] ?? 0];
|
|
550
|
+
}))
|
|
368
551
|
}),
|
|
369
552
|
iconSize: sortKeys({ ...scaleConfig.iconSizes }),
|
|
370
553
|
avatarSize: sortKeys({ ...scaleConfig.avatarSizes }),
|
|
371
554
|
font: sortKeys(generateFontAliases(config.font)),
|
|
372
555
|
typography: sortKeys(generateTypography(config.typography, config.font)),
|
|
373
556
|
shadow: sortKeys(generateShadows(config)),
|
|
557
|
+
boxShadow: {
|
|
558
|
+
drop: sortKeys(boxShadows.drop),
|
|
559
|
+
inset: sortKeys(boxShadows.inset)
|
|
560
|
+
},
|
|
374
561
|
components: generateComponents(config, colorMode)
|
|
375
562
|
};
|
|
376
563
|
}
|
package/dist/components/Box.cjs
CHANGED
|
@@ -4,6 +4,7 @@ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
|
4
4
|
let react = require("react");
|
|
5
5
|
let react_native = require("react-native");
|
|
6
6
|
let generated_styles = require("../../generated/styles");
|
|
7
|
+
let react_native_unistyles = require("react-native-unistyles");
|
|
7
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
9
|
|
|
9
10
|
//#region src/components/Box.tsx
|
|
@@ -35,20 +36,21 @@ let react_jsx_runtime = require("react/jsx-runtime");
|
|
|
35
36
|
* @see {@link HStack} for horizontal layouts
|
|
36
37
|
* @see {@link VStack} for vertical layouts
|
|
37
38
|
*/
|
|
38
|
-
const Box = (0, react.memo)(function Box({ backgroundColor, dangerouslySetBackgroundColor, borderRadius, borderTopStartRadius, borderTopEndRadius, borderBottomStartRadius, borderBottomEndRadius, borderColor, dangerouslySetBorderColor, borderStartColor, borderEndColor, borderTopColor, borderBottomColor, borderWidth, borderVerticalWidth, borderHorizontalWidth, borderStartWidth, borderEndWidth, borderTopWidth, borderBottomWidth, alignContent, alignItems, alignSelf, flex, flexDirection, flexGrow, flexShrink, flexWrap, justifyContent, display = "flex", overflow, spacing, spacingHorizontal, spacingVertical, spacingBottom, spacingEnd, spacingStart, spacingTop, offset, offsetVertical, offsetHorizontal, offsetBottom, offsetEnd, offsetStart, offsetTop, columnGap, rowGap, width, height, minWidth, maxWidth, minHeight, maxHeight, style, ref, ...props }) {
|
|
39
|
+
const Box = (0, react.memo)(function Box({ elevation, backgroundColor, dangerouslySetBackgroundColor, borderRadius, borderTopStartRadius, borderTopEndRadius, borderBottomStartRadius, borderBottomEndRadius, borderColor, dangerouslySetBorderColor, borderStartColor, borderEndColor, borderTopColor, borderBottomColor, borderWidth, borderVerticalWidth, borderHorizontalWidth, borderStartWidth, borderEndWidth, borderTopWidth, borderBottomWidth, alignContent, alignItems, alignSelf, flex, flexDirection, flexGrow, flexShrink, flexWrap, justifyContent, display = "flex", overflow, spacing, spacingHorizontal, spacingVertical, spacingBottom, spacingEnd, spacingStart, spacingTop, offset, offsetVertical, offsetHorizontal, offsetBottom, offsetEnd, offsetStart, offsetTop, columnGap, rowGap, width, height, minWidth, maxWidth, minHeight, maxHeight, dropShadow, insetShadow, style, ref, ...props }) {
|
|
40
|
+
const elevationAlias = elevation !== void 0 ? `elevation-${elevation}` : void 0;
|
|
39
41
|
const variants = {
|
|
40
|
-
backgroundColor,
|
|
42
|
+
backgroundColor: backgroundColor ?? elevationAlias,
|
|
41
43
|
borderRadius,
|
|
42
44
|
borderTopStartRadius,
|
|
43
45
|
borderTopEndRadius,
|
|
44
46
|
borderBottomStartRadius,
|
|
45
47
|
borderBottomEndRadius,
|
|
46
|
-
borderColor,
|
|
48
|
+
borderColor: borderColor ?? elevationAlias,
|
|
47
49
|
borderStartColor,
|
|
48
50
|
borderEndColor,
|
|
49
51
|
borderTopColor,
|
|
50
52
|
borderBottomColor,
|
|
51
|
-
borderWidth,
|
|
53
|
+
borderWidth: borderWidth ?? elevationAlias,
|
|
52
54
|
borderVerticalWidth,
|
|
53
55
|
borderHorizontalWidth,
|
|
54
56
|
borderStartWidth,
|
|
@@ -84,6 +86,8 @@ const Box = (0, react.memo)(function Box({ backgroundColor, dangerouslySetBackgr
|
|
|
84
86
|
rowGap
|
|
85
87
|
};
|
|
86
88
|
generated_styles.styles.useVariants(variants);
|
|
89
|
+
const effectiveDropShadow = dropShadow ?? elevationAlias;
|
|
90
|
+
const shadowStyle = effectiveDropShadow || insetShadow ? shadowSheet.shadow(effectiveDropShadow, insetShadow) : void 0;
|
|
87
91
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
88
92
|
ref,
|
|
89
93
|
style: (0, react.useMemo)(() => [
|
|
@@ -95,6 +99,7 @@ const Box = (0, react.memo)(function Box({ backgroundColor, dangerouslySetBackgr
|
|
|
95
99
|
maxWidth ? { maxWidth } : void 0,
|
|
96
100
|
minHeight ? { minHeight } : void 0,
|
|
97
101
|
maxHeight ? { maxHeight } : void 0,
|
|
102
|
+
shadowStyle,
|
|
98
103
|
generated_styles.styles.foundation,
|
|
99
104
|
style
|
|
100
105
|
], [
|
|
@@ -106,6 +111,7 @@ const Box = (0, react.memo)(function Box({ backgroundColor, dangerouslySetBackgr
|
|
|
106
111
|
maxWidth,
|
|
107
112
|
minHeight,
|
|
108
113
|
maxHeight,
|
|
114
|
+
shadowStyle,
|
|
109
115
|
generated_styles.styles.foundation,
|
|
110
116
|
style
|
|
111
117
|
]),
|
|
@@ -113,6 +119,14 @@ const Box = (0, react.memo)(function Box({ backgroundColor, dangerouslySetBackgr
|
|
|
113
119
|
});
|
|
114
120
|
});
|
|
115
121
|
Box.displayName = "Box";
|
|
122
|
+
/**
|
|
123
|
+
* Dynamic shadow stylesheet that merges drop and inset shadows into a single
|
|
124
|
+
* boxShadow CSS string. Theme-reactive so shadows update on color mode change.
|
|
125
|
+
*/
|
|
126
|
+
const shadowSheet = react_native_unistyles.StyleSheet.create((theme) => ({ shadow: (drop, inset) => {
|
|
127
|
+
const parts = [drop ? theme.boxShadow.drop[drop] : "", inset ? theme.boxShadow.inset[inset] : ""].filter(Boolean);
|
|
128
|
+
return parts.length > 0 ? { boxShadow: parts.join(", ") } : {};
|
|
129
|
+
} }));
|
|
116
130
|
|
|
117
131
|
//#endregion
|
|
118
132
|
exports.Box = Box;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
|
|
2
|
+
import { ElevationLevel } from "../types/dist/index.cjs";
|
|
2
3
|
import { SizeProps } from "../types.cjs";
|
|
3
4
|
import * as react from "react";
|
|
4
5
|
import { Ref } from "react";
|
|
@@ -7,9 +8,8 @@ import { StyleProps } from "../../generated/styles";
|
|
|
7
8
|
|
|
8
9
|
//#region src/components/Box.d.ts
|
|
9
10
|
interface BoxProps extends ViewProps, SizeProps {
|
|
10
|
-
/** Ref to the underlying View */
|
|
11
11
|
ref?: Ref<View>;
|
|
12
|
-
|
|
12
|
+
elevation?: ElevationLevel;
|
|
13
13
|
backgroundColor?: StyleProps['backgroundColor'];
|
|
14
14
|
borderRadius?: StyleProps['borderRadius'];
|
|
15
15
|
borderTopStartRadius?: StyleProps['borderTopStartRadius'];
|
|
@@ -55,6 +55,8 @@ interface BoxProps extends ViewProps, SizeProps {
|
|
|
55
55
|
offsetTop?: StyleProps['offsetTop'];
|
|
56
56
|
columnGap?: StyleProps['columnGap'];
|
|
57
57
|
rowGap?: StyleProps['rowGap'];
|
|
58
|
+
dropShadow?: StyleProps['dropShadow'];
|
|
59
|
+
insetShadow?: StyleProps['insetShadow'];
|
|
58
60
|
dangerouslySetBackgroundColor?: string;
|
|
59
61
|
dangerouslySetBorderColor?: string;
|
|
60
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Box.d.cts","names":[],"sources":["../../src/components/Box.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Box.d.cts","names":[],"sources":["../../src/components/Box.tsx"],"mappings":";;;;;;;;;UAWU,QAAA,SAAiB,SAAA,EAAW,SAAA;EACpC,GAAA,GAAM,GAAA,CAAI,IAAA;EACV,SAAA,GAAY,cAAA;EACZ,eAAA,GAAkB,UAAA;EAClB,YAAA,GAAe,UAAA;EACf,oBAAA,GAAuB,UAAA;EACvB,kBAAA,GAAqB,UAAA;EACrB,uBAAA,GAA0B,UAAA;EAC1B,qBAAA,GAAwB,UAAA;EACxB,WAAA,GAAc,UAAA;EACd,gBAAA,GAAmB,UAAA;EACnB,cAAA,GAAiB,UAAA;EACjB,cAAA,GAAiB,UAAA;EACjB,iBAAA,GAAoB,UAAA;EACpB,WAAA,GAAc,UAAA;EACd,mBAAA,GAAsB,UAAA;EACtB,qBAAA,GAAwB,UAAA;EACxB,gBAAA,GAAmB,UAAA;EACnB,cAAA,GAAiB,UAAA;EACjB,cAAA,GAAiB,UAAA;EACjB,iBAAA,GAAoB,UAAA;EACpB,YAAA,GAAe,UAAA;EACf,UAAA,GAAa,UAAA;EACb,SAAA,GAAY,UAAA;EACZ,IAAA,GAAO,UAAA;EACP,aAAA,GAAgB,UAAA;EAChB,QAAA,GAAW,UAAA;EACX,UAAA,GAAa,UAAA;EACb,QAAA,GAAW,UAAA;EACX,cAAA,GAAiB,UAAA;EAEjB,OAAA,GAAU,UAAA;EACV,QAAA,GAAW,UAAA;EAIX,OAAA,GAAU,UAAA;EACV,iBAAA,GAAoB,UAAA;EACpB,eAAA,GAAkB,UAAA;EAClB,aAAA,GAAgB,UAAA;EAChB,UAAA,GAAa,UAAA;EACb,YAAA,GAAe,UAAA;EACf,UAAA,GAAa,UAAA;EACb,MAAA,GAAS,UAAA;EACT,cAAA,GAAiB,UAAA;EACjB,gBAAA,GAAmB,UAAA;EACnB,YAAA,GAAe,UAAA;EACf,SAAA,GAAY,UAAA;EACZ,WAAA,GAAc,UAAA;EACd,SAAA,GAAY,UAAA;EACZ,SAAA,GAAY,UAAA;EACZ,MAAA,GAAS,UAAA;EACT,UAAA,GAAa,UAAA;EACb,WAAA,GAAc,UAAA;EACd,6BAAA;EACA,yBAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BI,GAAA,EAAG,KAAA,CAAA,oBAAA,CAAA,QAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
|
|
2
|
+
import { ElevationLevel } from "../types/dist/index.mjs";
|
|
2
3
|
import { SizeProps } from "../types.mjs";
|
|
3
4
|
import * as react from "react";
|
|
4
5
|
import { Ref } from "react";
|
|
@@ -7,9 +8,8 @@ import { StyleProps } from "../../generated/styles";
|
|
|
7
8
|
|
|
8
9
|
//#region src/components/Box.d.ts
|
|
9
10
|
interface BoxProps extends ViewProps, SizeProps {
|
|
10
|
-
/** Ref to the underlying View */
|
|
11
11
|
ref?: Ref<View>;
|
|
12
|
-
|
|
12
|
+
elevation?: ElevationLevel;
|
|
13
13
|
backgroundColor?: StyleProps['backgroundColor'];
|
|
14
14
|
borderRadius?: StyleProps['borderRadius'];
|
|
15
15
|
borderTopStartRadius?: StyleProps['borderTopStartRadius'];
|
|
@@ -55,6 +55,8 @@ interface BoxProps extends ViewProps, SizeProps {
|
|
|
55
55
|
offsetTop?: StyleProps['offsetTop'];
|
|
56
56
|
columnGap?: StyleProps['columnGap'];
|
|
57
57
|
rowGap?: StyleProps['rowGap'];
|
|
58
|
+
dropShadow?: StyleProps['dropShadow'];
|
|
59
|
+
insetShadow?: StyleProps['insetShadow'];
|
|
58
60
|
dangerouslySetBackgroundColor?: string;
|
|
59
61
|
dangerouslySetBorderColor?: string;
|
|
60
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Box.d.mts","names":[],"sources":["../../src/components/Box.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Box.d.mts","names":[],"sources":["../../src/components/Box.tsx"],"mappings":";;;;;;;;;UAWU,QAAA,SAAiB,SAAA,EAAW,SAAA;EACpC,GAAA,GAAM,GAAA,CAAI,IAAA;EACV,SAAA,GAAY,cAAA;EACZ,eAAA,GAAkB,UAAA;EAClB,YAAA,GAAe,UAAA;EACf,oBAAA,GAAuB,UAAA;EACvB,kBAAA,GAAqB,UAAA;EACrB,uBAAA,GAA0B,UAAA;EAC1B,qBAAA,GAAwB,UAAA;EACxB,WAAA,GAAc,UAAA;EACd,gBAAA,GAAmB,UAAA;EACnB,cAAA,GAAiB,UAAA;EACjB,cAAA,GAAiB,UAAA;EACjB,iBAAA,GAAoB,UAAA;EACpB,WAAA,GAAc,UAAA;EACd,mBAAA,GAAsB,UAAA;EACtB,qBAAA,GAAwB,UAAA;EACxB,gBAAA,GAAmB,UAAA;EACnB,cAAA,GAAiB,UAAA;EACjB,cAAA,GAAiB,UAAA;EACjB,iBAAA,GAAoB,UAAA;EACpB,YAAA,GAAe,UAAA;EACf,UAAA,GAAa,UAAA;EACb,SAAA,GAAY,UAAA;EACZ,IAAA,GAAO,UAAA;EACP,aAAA,GAAgB,UAAA;EAChB,QAAA,GAAW,UAAA;EACX,UAAA,GAAa,UAAA;EACb,QAAA,GAAW,UAAA;EACX,cAAA,GAAiB,UAAA;EAEjB,OAAA,GAAU,UAAA;EACV,QAAA,GAAW,UAAA;EAIX,OAAA,GAAU,UAAA;EACV,iBAAA,GAAoB,UAAA;EACpB,eAAA,GAAkB,UAAA;EAClB,aAAA,GAAgB,UAAA;EAChB,UAAA,GAAa,UAAA;EACb,YAAA,GAAe,UAAA;EACf,UAAA,GAAa,UAAA;EACb,MAAA,GAAS,UAAA;EACT,cAAA,GAAiB,UAAA;EACjB,gBAAA,GAAmB,UAAA;EACnB,YAAA,GAAe,UAAA;EACf,SAAA,GAAY,UAAA;EACZ,WAAA,GAAc,UAAA;EACd,SAAA,GAAY,UAAA;EACZ,SAAA,GAAY,UAAA;EACZ,MAAA,GAAS,UAAA;EACT,UAAA,GAAa,UAAA;EACb,WAAA,GAAc,UAAA;EACd,6BAAA;EACA,yBAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BI,GAAA,EAAG,KAAA,CAAA,oBAAA,CAAA,QAAA"}
|
package/dist/components/Box.mjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { memo, useMemo } from "react";
|
|
3
3
|
import { View } from "react-native";
|
|
4
4
|
import { styles } from "../../generated/styles";
|
|
5
|
+
import { StyleSheet } from "react-native-unistyles";
|
|
5
6
|
import { jsx } from "react/jsx-runtime";
|
|
6
7
|
|
|
7
8
|
//#region src/components/Box.tsx
|
|
@@ -33,20 +34,21 @@ import { jsx } from "react/jsx-runtime";
|
|
|
33
34
|
* @see {@link HStack} for horizontal layouts
|
|
34
35
|
* @see {@link VStack} for vertical layouts
|
|
35
36
|
*/
|
|
36
|
-
const Box = memo(function Box({ backgroundColor, dangerouslySetBackgroundColor, borderRadius, borderTopStartRadius, borderTopEndRadius, borderBottomStartRadius, borderBottomEndRadius, borderColor, dangerouslySetBorderColor, borderStartColor, borderEndColor, borderTopColor, borderBottomColor, borderWidth, borderVerticalWidth, borderHorizontalWidth, borderStartWidth, borderEndWidth, borderTopWidth, borderBottomWidth, alignContent, alignItems, alignSelf, flex, flexDirection, flexGrow, flexShrink, flexWrap, justifyContent, display = "flex", overflow, spacing, spacingHorizontal, spacingVertical, spacingBottom, spacingEnd, spacingStart, spacingTop, offset, offsetVertical, offsetHorizontal, offsetBottom, offsetEnd, offsetStart, offsetTop, columnGap, rowGap, width, height, minWidth, maxWidth, minHeight, maxHeight, style, ref, ...props }) {
|
|
37
|
+
const Box = memo(function Box({ elevation, backgroundColor, dangerouslySetBackgroundColor, borderRadius, borderTopStartRadius, borderTopEndRadius, borderBottomStartRadius, borderBottomEndRadius, borderColor, dangerouslySetBorderColor, borderStartColor, borderEndColor, borderTopColor, borderBottomColor, borderWidth, borderVerticalWidth, borderHorizontalWidth, borderStartWidth, borderEndWidth, borderTopWidth, borderBottomWidth, alignContent, alignItems, alignSelf, flex, flexDirection, flexGrow, flexShrink, flexWrap, justifyContent, display = "flex", overflow, spacing, spacingHorizontal, spacingVertical, spacingBottom, spacingEnd, spacingStart, spacingTop, offset, offsetVertical, offsetHorizontal, offsetBottom, offsetEnd, offsetStart, offsetTop, columnGap, rowGap, width, height, minWidth, maxWidth, minHeight, maxHeight, dropShadow, insetShadow, style, ref, ...props }) {
|
|
38
|
+
const elevationAlias = elevation !== void 0 ? `elevation-${elevation}` : void 0;
|
|
37
39
|
const variants = {
|
|
38
|
-
backgroundColor,
|
|
40
|
+
backgroundColor: backgroundColor ?? elevationAlias,
|
|
39
41
|
borderRadius,
|
|
40
42
|
borderTopStartRadius,
|
|
41
43
|
borderTopEndRadius,
|
|
42
44
|
borderBottomStartRadius,
|
|
43
45
|
borderBottomEndRadius,
|
|
44
|
-
borderColor,
|
|
46
|
+
borderColor: borderColor ?? elevationAlias,
|
|
45
47
|
borderStartColor,
|
|
46
48
|
borderEndColor,
|
|
47
49
|
borderTopColor,
|
|
48
50
|
borderBottomColor,
|
|
49
|
-
borderWidth,
|
|
51
|
+
borderWidth: borderWidth ?? elevationAlias,
|
|
50
52
|
borderVerticalWidth,
|
|
51
53
|
borderHorizontalWidth,
|
|
52
54
|
borderStartWidth,
|
|
@@ -82,6 +84,8 @@ const Box = memo(function Box({ backgroundColor, dangerouslySetBackgroundColor,
|
|
|
82
84
|
rowGap
|
|
83
85
|
};
|
|
84
86
|
styles.useVariants(variants);
|
|
87
|
+
const effectiveDropShadow = dropShadow ?? elevationAlias;
|
|
88
|
+
const shadowStyle = effectiveDropShadow || insetShadow ? shadowSheet.shadow(effectiveDropShadow, insetShadow) : void 0;
|
|
85
89
|
return /* @__PURE__ */ jsx(View, {
|
|
86
90
|
ref,
|
|
87
91
|
style: useMemo(() => [
|
|
@@ -93,6 +97,7 @@ const Box = memo(function Box({ backgroundColor, dangerouslySetBackgroundColor,
|
|
|
93
97
|
maxWidth ? { maxWidth } : void 0,
|
|
94
98
|
minHeight ? { minHeight } : void 0,
|
|
95
99
|
maxHeight ? { maxHeight } : void 0,
|
|
100
|
+
shadowStyle,
|
|
96
101
|
styles.foundation,
|
|
97
102
|
style
|
|
98
103
|
], [
|
|
@@ -104,6 +109,7 @@ const Box = memo(function Box({ backgroundColor, dangerouslySetBackgroundColor,
|
|
|
104
109
|
maxWidth,
|
|
105
110
|
minHeight,
|
|
106
111
|
maxHeight,
|
|
112
|
+
shadowStyle,
|
|
107
113
|
styles.foundation,
|
|
108
114
|
style
|
|
109
115
|
]),
|
|
@@ -111,6 +117,14 @@ const Box = memo(function Box({ backgroundColor, dangerouslySetBackgroundColor,
|
|
|
111
117
|
});
|
|
112
118
|
});
|
|
113
119
|
Box.displayName = "Box";
|
|
120
|
+
/**
|
|
121
|
+
* Dynamic shadow stylesheet that merges drop and inset shadows into a single
|
|
122
|
+
* boxShadow CSS string. Theme-reactive so shadows update on color mode change.
|
|
123
|
+
*/
|
|
124
|
+
const shadowSheet = StyleSheet.create((theme) => ({ shadow: (drop, inset) => {
|
|
125
|
+
const parts = [drop ? theme.boxShadow.drop[drop] : "", inset ? theme.boxShadow.inset[inset] : ""].filter(Boolean);
|
|
126
|
+
return parts.length > 0 ? { boxShadow: parts.join(", ") } : {};
|
|
127
|
+
} }));
|
|
114
128
|
|
|
115
129
|
//#endregion
|
|
116
130
|
export { Box };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Box.mjs","names":[],"sources":["../../src/components/Box.tsx"],"sourcesContent":["import type { Ref } from 'react';\nimport { memo, useMemo } from 'react';\nimport type { ViewProps } from 'react-native';\nimport { View } from 'react-native';\n\nimport type { StyleProps } from '../../generated/styles';\nimport { styles } from '../../generated/styles';\nimport type { SizeProps } from '../types';\n\ninterface BoxProps extends ViewProps, SizeProps {\n /** Ref to the underlying View */\n ref?: Ref<View>;\n /** Background color from the theme palette */\n backgroundColor?: StyleProps['backgroundColor'];\n borderRadius?: StyleProps['borderRadius'];\n borderTopStartRadius?: StyleProps['borderTopStartRadius'];\n borderTopEndRadius?: StyleProps['borderTopEndRadius'];\n borderBottomStartRadius?: StyleProps['borderBottomStartRadius'];\n borderBottomEndRadius?: StyleProps['borderBottomEndRadius'];\n borderColor?: StyleProps['borderColor'];\n borderStartColor?: StyleProps['borderStartColor'];\n borderEndColor?: StyleProps['borderEndColor'];\n borderTopColor?: StyleProps['borderTopColor'];\n borderBottomColor?: StyleProps['borderBottomColor'];\n borderWidth?: StyleProps['borderWidth'];\n borderVerticalWidth?: StyleProps['borderVerticalWidth'];\n borderHorizontalWidth?: StyleProps['borderHorizontalWidth'];\n borderStartWidth?: StyleProps['borderStartWidth'];\n borderEndWidth?: StyleProps['borderEndWidth'];\n borderTopWidth?: StyleProps['borderTopWidth'];\n borderBottomWidth?: StyleProps['borderBottomWidth'];\n alignContent?: StyleProps['alignContent'];\n alignItems?: StyleProps['alignItems'];\n alignSelf?: StyleProps['alignSelf'];\n flex?: StyleProps['flex'];\n flexDirection?: StyleProps['flexDirection'];\n flexGrow?: StyleProps['flexGrow'];\n flexShrink?: StyleProps['flexShrink'];\n flexWrap?: StyleProps['flexWrap'];\n justifyContent?: StyleProps['justifyContent'];\n // flexBasis?: StyleProps['flexBasis'];\n display?: StyleProps['display'];\n overflow?: StyleProps['overflow'];\n // overflowX?: StyleProps['overflowX'];\n // overflowY?: StyleProps['overflowY'];\n // position?: StyleProps['position'];\n spacing?: StyleProps['spacing'];\n spacingHorizontal?: StyleProps['spacingHorizontal'];\n spacingVertical?: StyleProps['spacingVertical'];\n spacingBottom?: StyleProps['spacingBottom'];\n spacingEnd?: StyleProps['spacingEnd'];\n spacingStart?: StyleProps['spacingStart'];\n spacingTop?: StyleProps['spacingTop'];\n offset?: StyleProps['offset'];\n offsetVertical?: StyleProps['offsetVertical'];\n offsetHorizontal?: StyleProps['offsetHorizontal'];\n offsetBottom?: StyleProps['offsetBottom'];\n offsetEnd?: StyleProps['offsetEnd'];\n offsetStart?: StyleProps['offsetStart'];\n offsetTop?: StyleProps['offsetTop'];\n columnGap?: StyleProps['columnGap'];\n rowGap?: StyleProps['rowGap'];\n dangerouslySetBackgroundColor?: string;\n dangerouslySetBorderColor?: string;\n}\n\n/**\n * **📦 A layout component that can be used to compose other components**\n *\n * @description\n * The most simple component we ship - a View. But with all the power of the UDS design system.\n * By default, `Box` is a flexbox container. When working with vertical or horizontal layouts,\n * consider using VStack or HStack respectively.\n *\n * @category Layout\n * @platform mobile\n *\n * @example\n * ```tsx\n * import { Box } from '@yahoo/uds-mobile';\n *\n * <Box backgroundColor=\"primary\" spacing=\"6\">\n * Any kind of content can go here!\n * </Box>\n * ```\n *\n * @usage\n * - Use as a container to apply padding, shapes, or other styling\n * - Use for creating card components\n * - Use HStack/VStack for directional layouts\n *\n * @see {@link HStack} for horizontal layouts\n * @see {@link VStack} for vertical layouts\n */\nconst Box = memo(function Box({\n // background\n backgroundColor,\n dangerouslySetBackgroundColor,\n // border\n borderRadius,\n borderTopStartRadius,\n borderTopEndRadius,\n borderBottomStartRadius,\n borderBottomEndRadius,\n borderColor,\n dangerouslySetBorderColor,\n borderStartColor,\n borderEndColor,\n borderTopColor,\n borderBottomColor,\n borderWidth,\n borderVerticalWidth,\n borderHorizontalWidth,\n borderStartWidth,\n borderEndWidth,\n borderTopWidth,\n borderBottomWidth,\n // flex\n alignContent,\n alignItems,\n alignSelf,\n flex,\n flexDirection,\n flexGrow,\n flexShrink,\n flexWrap,\n justifyContent,\n // flexBasis,\n // layout\n display = 'flex',\n overflow,\n // overflowX,\n // overflowY,\n // position,\n // spacing\n spacing,\n spacingHorizontal,\n spacingVertical,\n spacingBottom,\n spacingEnd,\n spacingStart,\n spacingTop,\n offset,\n offsetVertical,\n offsetHorizontal,\n offsetBottom,\n offsetEnd,\n offsetStart,\n offsetTop,\n columnGap,\n rowGap,\n // size\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n // // shadow\n // dropShadow,\n // insetShadow,\n // // nested border radius\n // nestedBorderRadius,\n // nestedBorderRadiusSize = nestedBorderRadius ? borderRadius : undefined,\n // nestedBorderRadiusSpacing = nestedBorderRadius ? spacing : undefined,\n // nestedBorderRadiusWidth = nestedBorderRadius ? borderWidth : undefined,\n // style - extracted to merge with variants\n style,\n ref,\n // rest\n ...props\n}: BoxProps) {\n const variants = {\n // background\n backgroundColor,\n // border\n borderRadius,\n borderTopStartRadius,\n borderTopEndRadius,\n borderBottomStartRadius,\n borderBottomEndRadius,\n // nestedBorderRadius,\n // nestedBorderRadiusSize,\n // nestedBorderRadiusSpacing,\n // nestedBorderRadiusWidth,\n borderColor,\n borderStartColor,\n borderEndColor,\n borderTopColor,\n borderBottomColor,\n borderWidth,\n borderVerticalWidth,\n borderHorizontalWidth,\n borderStartWidth,\n borderEndWidth,\n borderTopWidth,\n borderBottomWidth,\n // flex\n alignContent,\n alignItems,\n alignSelf,\n flex,\n flexDirection,\n flexGrow,\n flexShrink,\n flexWrap,\n justifyContent,\n // flexBasis,\n // layout\n display,\n overflow,\n // overflowX,\n // overflowY,\n // position,\n // spacing\n spacing,\n spacingHorizontal,\n spacingVertical,\n spacingBottom,\n spacingEnd,\n spacingStart,\n spacingTop,\n offset,\n offsetVertical,\n offsetHorizontal,\n offsetBottom,\n offsetEnd,\n offsetStart,\n offsetTop,\n columnGap,\n rowGap,\n // rest\n };\n\n styles.useVariants(variants);\n\n // styles.foundation must be in deps - it returns a new reference when variants change\n const boxStyles = useMemo(\n () => [\n dangerouslySetBackgroundColor\n ? { backgroundColor: dangerouslySetBackgroundColor }\n : undefined,\n dangerouslySetBorderColor ? { borderColor: dangerouslySetBorderColor } : undefined,\n width ? { width } : undefined,\n height ? { height } : undefined,\n minWidth ? { minWidth } : undefined,\n maxWidth ? { maxWidth } : undefined,\n minHeight ? { minHeight } : undefined,\n maxHeight ? { maxHeight } : undefined,\n styles.foundation,\n style,\n ],\n [\n dangerouslySetBackgroundColor,\n dangerouslySetBorderColor,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n styles.foundation,\n style,\n ],\n );\n\n // Merge variant styles with user-provided style prop\n // User styles come last so they can override variant styles if needed\n return <View ref={ref} style={boxStyles} {...props} />;\n});\n\nBox.displayName = 'Box';\n\nexport { Box, type BoxProps };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,MAAM,MAAM,KAAK,SAAS,IAAI,EAE5B,iBACA,+BAEA,cACA,sBACA,oBACA,yBACA,uBACA,aACA,2BACA,kBACA,gBACA,gBACA,mBACA,aACA,qBACA,uBACA,kBACA,gBACA,gBACA,mBAEA,cACA,YACA,WACA,MACA,eACA,UACA,YACA,UACA,gBAGA,UAAU,QACV,UAKA,SACA,mBACA,iBACA,eACA,YACA,cACA,YACA,QACA,gBACA,kBACA,cACA,WACA,aACA,WACA,WACA,QAEA,OACA,QACA,UACA,UACA,WACA,WAUA,OACA,KAEA,GAAG,SACQ;CACX,MAAM,WAAW;EAEf;EAEA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAED;AAED,QAAO,YAAY,SAAS;AAkC5B,QAAO,oBAAC;EAAU;EAAK,OA/BL,cACV;GACJ,gCACI,EAAE,iBAAiB,+BAA+B,GAClD;GACJ,4BAA4B,EAAE,aAAa,2BAA2B,GAAG;GACzE,QAAQ,EAAE,OAAO,GAAG;GACpB,SAAS,EAAE,QAAQ,GAAG;GACtB,WAAW,EAAE,UAAU,GAAG;GAC1B,WAAW,EAAE,UAAU,GAAG;GAC1B,YAAY,EAAE,WAAW,GAAG;GAC5B,YAAY,EAAE,WAAW,GAAG;GAC5B,OAAO;GACP;GACD,EACD;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,OAAO;GACP;GACD,CACF;EAIwC,GAAI;GAAS;EACtD;AAEF,IAAI,cAAc"}
|
|
1
|
+
{"version":3,"file":"Box.mjs","names":[],"sources":["../../src/components/Box.tsx"],"sourcesContent":["import type { ElevationLevel } from '@yahoo/uds-types';\nimport type { Ref } from 'react';\nimport { memo, useMemo } from 'react';\nimport type { ViewProps } from 'react-native';\nimport { View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport type { StyleProps } from '../../generated/styles';\nimport { styles } from '../../generated/styles';\nimport type { SizeProps } from '../types';\n\ninterface BoxProps extends ViewProps, SizeProps {\n ref?: Ref<View>;\n elevation?: ElevationLevel;\n backgroundColor?: StyleProps['backgroundColor'];\n borderRadius?: StyleProps['borderRadius'];\n borderTopStartRadius?: StyleProps['borderTopStartRadius'];\n borderTopEndRadius?: StyleProps['borderTopEndRadius'];\n borderBottomStartRadius?: StyleProps['borderBottomStartRadius'];\n borderBottomEndRadius?: StyleProps['borderBottomEndRadius'];\n borderColor?: StyleProps['borderColor'];\n borderStartColor?: StyleProps['borderStartColor'];\n borderEndColor?: StyleProps['borderEndColor'];\n borderTopColor?: StyleProps['borderTopColor'];\n borderBottomColor?: StyleProps['borderBottomColor'];\n borderWidth?: StyleProps['borderWidth'];\n borderVerticalWidth?: StyleProps['borderVerticalWidth'];\n borderHorizontalWidth?: StyleProps['borderHorizontalWidth'];\n borderStartWidth?: StyleProps['borderStartWidth'];\n borderEndWidth?: StyleProps['borderEndWidth'];\n borderTopWidth?: StyleProps['borderTopWidth'];\n borderBottomWidth?: StyleProps['borderBottomWidth'];\n alignContent?: StyleProps['alignContent'];\n alignItems?: StyleProps['alignItems'];\n alignSelf?: StyleProps['alignSelf'];\n flex?: StyleProps['flex'];\n flexDirection?: StyleProps['flexDirection'];\n flexGrow?: StyleProps['flexGrow'];\n flexShrink?: StyleProps['flexShrink'];\n flexWrap?: StyleProps['flexWrap'];\n justifyContent?: StyleProps['justifyContent'];\n // flexBasis?: StyleProps['flexBasis'];\n display?: StyleProps['display'];\n overflow?: StyleProps['overflow'];\n // overflowX?: StyleProps['overflowX'];\n // overflowY?: StyleProps['overflowY'];\n // position?: StyleProps['position'];\n spacing?: StyleProps['spacing'];\n spacingHorizontal?: StyleProps['spacingHorizontal'];\n spacingVertical?: StyleProps['spacingVertical'];\n spacingBottom?: StyleProps['spacingBottom'];\n spacingEnd?: StyleProps['spacingEnd'];\n spacingStart?: StyleProps['spacingStart'];\n spacingTop?: StyleProps['spacingTop'];\n offset?: StyleProps['offset'];\n offsetVertical?: StyleProps['offsetVertical'];\n offsetHorizontal?: StyleProps['offsetHorizontal'];\n offsetBottom?: StyleProps['offsetBottom'];\n offsetEnd?: StyleProps['offsetEnd'];\n offsetStart?: StyleProps['offsetStart'];\n offsetTop?: StyleProps['offsetTop'];\n columnGap?: StyleProps['columnGap'];\n rowGap?: StyleProps['rowGap'];\n dropShadow?: StyleProps['dropShadow'];\n insetShadow?: StyleProps['insetShadow'];\n dangerouslySetBackgroundColor?: string;\n dangerouslySetBorderColor?: string;\n}\n\n/**\n * **📦 A layout component that can be used to compose other components**\n *\n * @description\n * The most simple component we ship - a View. But with all the power of the UDS design system.\n * By default, `Box` is a flexbox container. When working with vertical or horizontal layouts,\n * consider using VStack or HStack respectively.\n *\n * @category Layout\n * @platform mobile\n *\n * @example\n * ```tsx\n * import { Box } from '@yahoo/uds-mobile';\n *\n * <Box backgroundColor=\"primary\" spacing=\"6\">\n * Any kind of content can go here!\n * </Box>\n * ```\n *\n * @usage\n * - Use as a container to apply padding, shapes, or other styling\n * - Use for creating card components\n * - Use HStack/VStack for directional layouts\n *\n * @see {@link HStack} for horizontal layouts\n * @see {@link VStack} for vertical layouts\n */\nconst Box = memo(function Box({\n // elevation\n elevation,\n // background\n backgroundColor,\n dangerouslySetBackgroundColor,\n // border\n borderRadius,\n borderTopStartRadius,\n borderTopEndRadius,\n borderBottomStartRadius,\n borderBottomEndRadius,\n borderColor,\n dangerouslySetBorderColor,\n borderStartColor,\n borderEndColor,\n borderTopColor,\n borderBottomColor,\n borderWidth,\n borderVerticalWidth,\n borderHorizontalWidth,\n borderStartWidth,\n borderEndWidth,\n borderTopWidth,\n borderBottomWidth,\n // flex\n alignContent,\n alignItems,\n alignSelf,\n flex,\n flexDirection,\n flexGrow,\n flexShrink,\n flexWrap,\n justifyContent,\n // flexBasis,\n // layout\n display = 'flex',\n overflow,\n // overflowX,\n // overflowY,\n // position,\n // spacing\n spacing,\n spacingHorizontal,\n spacingVertical,\n spacingBottom,\n spacingEnd,\n spacingStart,\n spacingTop,\n offset,\n offsetVertical,\n offsetHorizontal,\n offsetBottom,\n offsetEnd,\n offsetStart,\n offsetTop,\n columnGap,\n rowGap,\n // size\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n // shadow\n dropShadow,\n insetShadow,\n // // nested border radius\n // nestedBorderRadius,\n // nestedBorderRadiusSize = nestedBorderRadius ? borderRadius : undefined,\n // nestedBorderRadiusSpacing = nestedBorderRadius ? spacing : undefined,\n // nestedBorderRadiusWidth = nestedBorderRadius ? borderWidth : undefined,\n // style - extracted to merge with variants\n style,\n ref,\n // rest\n ...props\n}: BoxProps) {\n const elevationAlias = elevation !== undefined ? (`elevation-${elevation}` as const) : undefined;\n\n const variants = {\n // background\n backgroundColor: backgroundColor ?? elevationAlias,\n // border\n borderRadius,\n borderTopStartRadius,\n borderTopEndRadius,\n borderBottomStartRadius,\n borderBottomEndRadius,\n // nestedBorderRadius,\n // nestedBorderRadiusSize,\n // nestedBorderRadiusSpacing,\n // nestedBorderRadiusWidth,\n borderColor: borderColor ?? elevationAlias,\n borderStartColor,\n borderEndColor,\n borderTopColor,\n borderBottomColor,\n borderWidth: borderWidth ?? elevationAlias,\n borderVerticalWidth,\n borderHorizontalWidth,\n borderStartWidth,\n borderEndWidth,\n borderTopWidth,\n borderBottomWidth,\n // flex\n alignContent,\n alignItems,\n alignSelf,\n flex,\n flexDirection,\n flexGrow,\n flexShrink,\n flexWrap,\n justifyContent,\n // flexBasis,\n // layout\n display,\n overflow,\n // overflowX,\n // overflowY,\n // position,\n // spacing\n spacing,\n spacingHorizontal,\n spacingVertical,\n spacingBottom,\n spacingEnd,\n spacingStart,\n spacingTop,\n offset,\n offsetVertical,\n offsetHorizontal,\n offsetBottom,\n offsetEnd,\n offsetStart,\n offsetTop,\n columnGap,\n rowGap,\n // rest\n };\n\n styles.useVariants(variants);\n\n const effectiveDropShadow = dropShadow ?? elevationAlias;\n const shadowStyle =\n effectiveDropShadow || insetShadow\n ? shadowSheet.shadow(effectiveDropShadow, insetShadow)\n : undefined;\n\n // styles.foundation must be in deps - it returns a new reference when variants change\n const boxStyles = useMemo(\n () => [\n dangerouslySetBackgroundColor\n ? { backgroundColor: dangerouslySetBackgroundColor }\n : undefined,\n dangerouslySetBorderColor ? { borderColor: dangerouslySetBorderColor } : undefined,\n width ? { width } : undefined,\n height ? { height } : undefined,\n minWidth ? { minWidth } : undefined,\n maxWidth ? { maxWidth } : undefined,\n minHeight ? { minHeight } : undefined,\n maxHeight ? { maxHeight } : undefined,\n shadowStyle,\n styles.foundation,\n style,\n ],\n [\n dangerouslySetBackgroundColor,\n dangerouslySetBorderColor,\n width,\n height,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n shadowStyle,\n styles.foundation,\n style,\n ],\n );\n\n // Merge variant styles with user-provided style prop\n // User styles come last so they can override variant styles if needed\n return <View ref={ref} style={boxStyles} {...props} />;\n});\n\nBox.displayName = 'Box';\n\n/**\n * Dynamic shadow stylesheet that merges drop and inset shadows into a single\n * boxShadow CSS string. Theme-reactive so shadows update on color mode change.\n */\nconst shadowSheet = StyleSheet.create((theme) => ({\n shadow: (drop?: string, inset?: string) => {\n const parts = [\n drop ? theme.boxShadow.drop[drop as keyof typeof theme.boxShadow.drop] : '',\n inset ? theme.boxShadow.inset[inset as keyof typeof theme.boxShadow.inset] : '',\n ].filter(Boolean);\n return parts.length > 0 ? { boxShadow: parts.join(', ') } : {};\n },\n}));\n\nexport { Box, type BoxProps };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGA,MAAM,MAAM,KAAK,SAAS,IAAI,EAE5B,WAEA,iBACA,+BAEA,cACA,sBACA,oBACA,yBACA,uBACA,aACA,2BACA,kBACA,gBACA,gBACA,mBACA,aACA,qBACA,uBACA,kBACA,gBACA,gBACA,mBAEA,cACA,YACA,WACA,MACA,eACA,UACA,YACA,UACA,gBAGA,UAAU,QACV,UAKA,SACA,mBACA,iBACA,eACA,YACA,cACA,YACA,QACA,gBACA,kBACA,cACA,WACA,aACA,WACA,WACA,QAEA,OACA,QACA,UACA,UACA,WACA,WAEA,YACA,aAOA,OACA,KAEA,GAAG,SACQ;CACX,MAAM,iBAAiB,cAAc,SAAa,aAAa,cAAwB;CAEvF,MAAM,WAAW;EAEf,iBAAiB,mBAAmB;EAEpC;EACA;EACA;EACA;EACA;EAKA,aAAa,eAAe;EAC5B;EACA;EACA;EACA;EACA,aAAa,eAAe;EAC5B;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAED;AAED,QAAO,YAAY,SAAS;CAE5B,MAAM,sBAAsB,cAAc;CAC1C,MAAM,cACJ,uBAAuB,cACnB,YAAY,OAAO,qBAAqB,YAAY,GACpD;AAoCN,QAAO,oBAAC;EAAU;EAAK,OAjCL,cACV;GACJ,gCACI,EAAE,iBAAiB,+BAA+B,GAClD;GACJ,4BAA4B,EAAE,aAAa,2BAA2B,GAAG;GACzE,QAAQ,EAAE,OAAO,GAAG;GACpB,SAAS,EAAE,QAAQ,GAAG;GACtB,WAAW,EAAE,UAAU,GAAG;GAC1B,WAAW,EAAE,UAAU,GAAG;GAC1B,YAAY,EAAE,WAAW,GAAG;GAC5B,YAAY,EAAE,WAAW,GAAG;GAC5B;GACA,OAAO;GACP;GACD,EACD;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,OAAO;GACP;GACD,CACF;EAIwC,GAAI;GAAS;EACtD;AAEF,IAAI,cAAc;;;;;AAMlB,MAAM,cAAc,WAAW,QAAQ,WAAW,EAChD,SAAS,MAAe,UAAmB;CACzC,MAAM,QAAQ,CACZ,OAAO,MAAM,UAAU,KAAK,QAA6C,IACzE,QAAQ,MAAM,UAAU,MAAM,SAA+C,GAC9E,CAAC,OAAO,QAAQ;AACjB,QAAO,MAAM,SAAS,IAAI,EAAE,WAAW,MAAM,KAAK,KAAK,EAAE,GAAG,EAAE;GAEjE,EAAE"}
|
package/dist/components/Icon.cjs
CHANGED
|
@@ -7,9 +7,9 @@ const require_tokens = require('../icons/dist/tokens.cjs');
|
|
|
7
7
|
let react = require("react");
|
|
8
8
|
let react_native = require("react-native");
|
|
9
9
|
let generated_styles = require("../../generated/styles");
|
|
10
|
+
let react_native_unistyles = require("react-native-unistyles");
|
|
10
11
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
12
|
let react_native_svg = require("react-native-svg");
|
|
12
|
-
let react_native_unistyles = require("react-native-unistyles");
|
|
13
13
|
|
|
14
14
|
//#region src/components/Icon.tsx
|
|
15
15
|
const DEFAULT_PROPS = {
|
package/dist/components/Icon.mjs
CHANGED
|
@@ -5,9 +5,9 @@ import { ICON_SIZE_MAP } from "../icons/dist/tokens.mjs";
|
|
|
5
5
|
import { memo, useMemo } from "react";
|
|
6
6
|
import { Text, View } from "react-native";
|
|
7
7
|
import { styles } from "../../generated/styles";
|
|
8
|
+
import { useUnistyles } from "react-native-unistyles";
|
|
8
9
|
import { jsx } from "react/jsx-runtime";
|
|
9
10
|
import { SvgXml } from "react-native-svg";
|
|
10
|
-
import { useUnistyles } from "react-native-unistyles";
|
|
11
11
|
|
|
12
12
|
//#region src/components/Icon.tsx
|
|
13
13
|
const DEFAULT_PROPS = {
|
|
@@ -6,8 +6,8 @@ const require_components_VStack = require('./VStack.cjs');
|
|
|
6
6
|
let react = require("react");
|
|
7
7
|
let react_native = require("react-native");
|
|
8
8
|
let generated_styles = require("../../generated/styles");
|
|
9
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
9
|
let react_native_unistyles = require("react-native-unistyles");
|
|
10
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
11
|
|
|
12
12
|
//#region src/components/Screen.tsx
|
|
13
13
|
/**
|
|
@@ -4,8 +4,8 @@ import { VStack } from "./VStack.mjs";
|
|
|
4
4
|
import { memo, useMemo } from "react";
|
|
5
5
|
import { ScrollView } from "react-native";
|
|
6
6
|
import { styles } from "../../generated/styles";
|
|
7
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
7
|
import { StyleSheet } from "react-native-unistyles";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
|
|
10
10
|
//#region src/components/Screen.tsx
|
|
11
11
|
/**
|
|
@@ -7,8 +7,8 @@ const require_components_HStack = require('./HStack.cjs');
|
|
|
7
7
|
let react = require("react");
|
|
8
8
|
let react_native = require("react-native");
|
|
9
9
|
let generated_styles = require("../../generated/styles");
|
|
10
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
10
|
let react_native_unistyles = require("react-native-unistyles");
|
|
11
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
12
|
let react_native_reanimated = require("react-native-reanimated");
|
|
13
13
|
react_native_reanimated = require_runtime.__toESM(react_native_reanimated);
|
|
14
14
|
let react_native_unistyles_reanimated = require("react-native-unistyles/reanimated");
|
|
@@ -5,8 +5,8 @@ import { HStack } from "./HStack.mjs";
|
|
|
5
5
|
import { memo, useCallback, useEffect, useMemo, useState } from "react";
|
|
6
6
|
import { AccessibilityInfo, Pressable } from "react-native";
|
|
7
7
|
import { switchStyles } from "../../generated/styles";
|
|
8
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
8
|
import { StyleSheet } from "react-native-unistyles";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
10
|
import Animated, { useAnimatedStyle, useDerivedValue, withTiming } from "react-native-reanimated";
|
|
11
11
|
import { useAnimatedVariantColor } from "react-native-unistyles/reanimated";
|
|
12
12
|
|