@tutti-os/ui-system 0.0.323 → 0.0.325
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/{chunk-YSDCTWIA.js → chunk-KKRH7LL6.js} +9 -1
- package/dist/chunk-KKRH7LL6.js.map +1 -0
- package/dist/{chunk-E5CACAWB.js → chunk-SM2YFZCC.js} +2 -2
- package/dist/components/index.js +2 -2
- package/dist/icons/index.d.ts +3 -1
- package/dist/icons/index.js +7 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -3
- package/dist/metadata/components.json +49 -0
- package/dist/metadata/index.js +49 -0
- package/dist/metadata/index.js.map +1 -1
- package/dist/native.d.ts +15 -1
- package/dist/native.js +268 -23
- package/dist/native.js.map +1 -1
- package/package.json +1 -1
- package/ui-system.md +6 -0
- package/dist/chunk-YSDCTWIA.js.map +0 -1
- /package/dist/{chunk-E5CACAWB.js.map → chunk-SM2YFZCC.js.map} +0 -0
package/dist/native.d.ts
CHANGED
|
@@ -36,6 +36,20 @@ interface NativeButtonProps {
|
|
|
36
36
|
*/
|
|
37
37
|
declare function NativeButton({ accessibilityLabel, disabled, label, leading, loading, onPress, size, style, testID, variant }: NativeButtonProps): react_jsx_runtime.JSX.Element;
|
|
38
38
|
|
|
39
|
+
type NativeControlGlyphVariant = "add" | "back" | "chevron" | "send" | "status" | "stop";
|
|
40
|
+
interface NativeControlGlyphBaseProps {
|
|
41
|
+
color: string;
|
|
42
|
+
size?: number;
|
|
43
|
+
}
|
|
44
|
+
type NativeControlGlyphProps = NativeControlGlyphBaseProps & ({
|
|
45
|
+
direction: "down" | "left" | "right" | "up";
|
|
46
|
+
variant: "chevron";
|
|
47
|
+
} | {
|
|
48
|
+
direction?: never;
|
|
49
|
+
variant: Exclude<NativeControlGlyphVariant, "chevron">;
|
|
50
|
+
});
|
|
51
|
+
declare function NativeControlGlyph(props: NativeControlGlyphProps): react_jsx_runtime.JSX.Element;
|
|
52
|
+
|
|
39
53
|
interface NativeIconButtonProps {
|
|
40
54
|
accessibilityLabel: string;
|
|
41
55
|
disabled?: boolean;
|
|
@@ -242,4 +256,4 @@ interface NativeThemeProviderProps extends PropsWithChildren {
|
|
|
242
256
|
declare function NativeThemeProvider({ children, mode }: NativeThemeProviderProps): react_jsx_runtime.JSX.Element;
|
|
243
257
|
declare function useNativeTheme(): NativeTheme;
|
|
244
258
|
|
|
245
|
-
export { type ButtonSize, type ButtonVariant, NativeAvatar, type NativeAvatarProps, type NativeAvatarSize, NativeButton, type NativeButtonProps, NativeIconButton, type NativeIconButtonProps, NativeListRow, type NativeListRowProps, NativeProgressBar, type NativeProgressBarProps, NativeSheet, type NativeSheetProps, type NativeTheme, type NativeThemeMode, type NativeThemePalette, type NativeThemePreference, NativeThemeProvider, type NativeThemeProviderProps, nativeTheme, nativeThemeDimensions, nativeThemes, resolveNativeTheme, useNativeTheme };
|
|
259
|
+
export { type ButtonSize, type ButtonVariant, NativeAvatar, type NativeAvatarProps, type NativeAvatarSize, NativeButton, type NativeButtonProps, NativeControlGlyph, type NativeControlGlyphProps, type NativeControlGlyphVariant, NativeIconButton, type NativeIconButtonProps, NativeListRow, type NativeListRowProps, NativeProgressBar, type NativeProgressBarProps, NativeSheet, type NativeSheetProps, type NativeTheme, type NativeThemeMode, type NativeThemePalette, type NativeThemePreference, NativeThemeProvider, type NativeThemeProviderProps, nativeTheme, nativeThemeDimensions, nativeThemes, resolveNativeTheme, useNativeTheme };
|
package/dist/native.js
CHANGED
|
@@ -334,11 +334,255 @@ function createStyles2(theme) {
|
|
|
334
334
|
});
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
+
// src/native/control-glyph.tsx
|
|
338
|
+
import { View as View3 } from "react-native";
|
|
339
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
340
|
+
function NativeControlGlyph(props) {
|
|
341
|
+
switch (props.variant) {
|
|
342
|
+
case "add":
|
|
343
|
+
return /* @__PURE__ */ jsx4(AddGlyph, { color: props.color, size: props.size ?? 20 });
|
|
344
|
+
case "back":
|
|
345
|
+
return /* @__PURE__ */ jsx4(BackGlyph, { color: props.color, size: props.size ?? 20 });
|
|
346
|
+
case "chevron":
|
|
347
|
+
return /* @__PURE__ */ jsx4(
|
|
348
|
+
ChevronGlyph,
|
|
349
|
+
{
|
|
350
|
+
color: props.color,
|
|
351
|
+
direction: props.direction,
|
|
352
|
+
size: props.size ?? 18
|
|
353
|
+
}
|
|
354
|
+
);
|
|
355
|
+
case "send":
|
|
356
|
+
return /* @__PURE__ */ jsx4(SendGlyph, { color: props.color, size: props.size ?? 20 });
|
|
357
|
+
case "status":
|
|
358
|
+
return /* @__PURE__ */ jsx4(StatusGlyph, { color: props.color, size: props.size ?? 8 });
|
|
359
|
+
case "stop":
|
|
360
|
+
return /* @__PURE__ */ jsx4(StopGlyph, { color: props.color, size: props.size ?? 20 });
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
function AddGlyph({ color, size }) {
|
|
364
|
+
const stroke = Math.max(2, size * 0.1);
|
|
365
|
+
return /* @__PURE__ */ jsxs3(GlyphFrame, { size, children: [
|
|
366
|
+
/* @__PURE__ */ jsx4(
|
|
367
|
+
View3,
|
|
368
|
+
{
|
|
369
|
+
style: {
|
|
370
|
+
backgroundColor: color,
|
|
371
|
+
borderRadius: stroke / 2,
|
|
372
|
+
height: stroke,
|
|
373
|
+
left: size * 0.2,
|
|
374
|
+
position: "absolute",
|
|
375
|
+
top: (size - stroke) / 2,
|
|
376
|
+
width: size * 0.6
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
),
|
|
380
|
+
/* @__PURE__ */ jsx4(
|
|
381
|
+
View3,
|
|
382
|
+
{
|
|
383
|
+
style: {
|
|
384
|
+
backgroundColor: color,
|
|
385
|
+
borderRadius: stroke / 2,
|
|
386
|
+
height: size * 0.6,
|
|
387
|
+
left: (size - stroke) / 2,
|
|
388
|
+
position: "absolute",
|
|
389
|
+
top: size * 0.2,
|
|
390
|
+
width: stroke
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
)
|
|
394
|
+
] });
|
|
395
|
+
}
|
|
396
|
+
function BackGlyph({ color, size }) {
|
|
397
|
+
const stroke = Math.max(2, size * 0.1);
|
|
398
|
+
const wing = size * 0.38;
|
|
399
|
+
return /* @__PURE__ */ jsxs3(GlyphFrame, { size, children: [
|
|
400
|
+
/* @__PURE__ */ jsx4(
|
|
401
|
+
View3,
|
|
402
|
+
{
|
|
403
|
+
style: {
|
|
404
|
+
backgroundColor: color,
|
|
405
|
+
borderRadius: stroke / 2,
|
|
406
|
+
height: stroke,
|
|
407
|
+
left: size * 0.16,
|
|
408
|
+
position: "absolute",
|
|
409
|
+
top: (size - stroke) / 2,
|
|
410
|
+
width: size * 0.68
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
),
|
|
414
|
+
/* @__PURE__ */ jsx4(
|
|
415
|
+
View3,
|
|
416
|
+
{
|
|
417
|
+
style: {
|
|
418
|
+
backgroundColor: color,
|
|
419
|
+
borderRadius: stroke / 2,
|
|
420
|
+
height: stroke,
|
|
421
|
+
left: size * 0.14,
|
|
422
|
+
position: "absolute",
|
|
423
|
+
top: size * 0.34,
|
|
424
|
+
transform: [{ rotate: "-45deg" }],
|
|
425
|
+
width: wing
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
),
|
|
429
|
+
/* @__PURE__ */ jsx4(
|
|
430
|
+
View3,
|
|
431
|
+
{
|
|
432
|
+
style: {
|
|
433
|
+
backgroundColor: color,
|
|
434
|
+
borderRadius: stroke / 2,
|
|
435
|
+
height: stroke,
|
|
436
|
+
left: size * 0.14,
|
|
437
|
+
position: "absolute",
|
|
438
|
+
top: size * 0.61,
|
|
439
|
+
transform: [{ rotate: "45deg" }],
|
|
440
|
+
width: wing
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
)
|
|
444
|
+
] });
|
|
445
|
+
}
|
|
446
|
+
function ChevronGlyph({
|
|
447
|
+
color,
|
|
448
|
+
direction,
|
|
449
|
+
size
|
|
450
|
+
}) {
|
|
451
|
+
const stroke = Math.max(2, size * 0.11);
|
|
452
|
+
const bar = size * 0.48;
|
|
453
|
+
const transforms = direction === "down" ? ["45deg", "-45deg"] : direction === "up" ? ["-45deg", "45deg"] : direction === "right" ? ["45deg", "-45deg"] : ["-45deg", "45deg"];
|
|
454
|
+
const vertical = direction === "left" || direction === "right";
|
|
455
|
+
return /* @__PURE__ */ jsxs3(GlyphFrame, { size, children: [
|
|
456
|
+
/* @__PURE__ */ jsx4(
|
|
457
|
+
View3,
|
|
458
|
+
{
|
|
459
|
+
style: {
|
|
460
|
+
backgroundColor: color,
|
|
461
|
+
borderRadius: stroke / 2,
|
|
462
|
+
height: stroke,
|
|
463
|
+
left: vertical ? size * 0.28 : size * 0.18,
|
|
464
|
+
position: "absolute",
|
|
465
|
+
top: vertical ? size * 0.34 : size * 0.42,
|
|
466
|
+
transform: [{ rotate: transforms[0] }],
|
|
467
|
+
width: bar
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
),
|
|
471
|
+
/* @__PURE__ */ jsx4(
|
|
472
|
+
View3,
|
|
473
|
+
{
|
|
474
|
+
style: {
|
|
475
|
+
backgroundColor: color,
|
|
476
|
+
borderRadius: stroke / 2,
|
|
477
|
+
height: stroke,
|
|
478
|
+
left: vertical ? size * 0.28 : size * 0.48,
|
|
479
|
+
position: "absolute",
|
|
480
|
+
top: vertical ? size * 0.6 : size * 0.42,
|
|
481
|
+
transform: [{ rotate: transforms[1] }],
|
|
482
|
+
width: bar
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
)
|
|
486
|
+
] });
|
|
487
|
+
}
|
|
488
|
+
function SendGlyph({ color, size }) {
|
|
489
|
+
const stroke = Math.max(2, size * 0.1);
|
|
490
|
+
return /* @__PURE__ */ jsxs3(GlyphFrame, { size, children: [
|
|
491
|
+
/* @__PURE__ */ jsx4(
|
|
492
|
+
View3,
|
|
493
|
+
{
|
|
494
|
+
style: {
|
|
495
|
+
backgroundColor: color,
|
|
496
|
+
borderRadius: stroke / 2,
|
|
497
|
+
height: size * 0.68,
|
|
498
|
+
left: (size - stroke) / 2,
|
|
499
|
+
position: "absolute",
|
|
500
|
+
top: size * 0.2,
|
|
501
|
+
width: stroke
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
),
|
|
505
|
+
/* @__PURE__ */ jsx4(
|
|
506
|
+
View3,
|
|
507
|
+
{
|
|
508
|
+
style: {
|
|
509
|
+
backgroundColor: color,
|
|
510
|
+
borderRadius: stroke / 2,
|
|
511
|
+
height: stroke,
|
|
512
|
+
left: size * 0.28,
|
|
513
|
+
position: "absolute",
|
|
514
|
+
top: size * 0.26,
|
|
515
|
+
transform: [{ rotate: "-45deg" }],
|
|
516
|
+
width: size * 0.38
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
),
|
|
520
|
+
/* @__PURE__ */ jsx4(
|
|
521
|
+
View3,
|
|
522
|
+
{
|
|
523
|
+
style: {
|
|
524
|
+
backgroundColor: color,
|
|
525
|
+
borderRadius: stroke / 2,
|
|
526
|
+
height: stroke,
|
|
527
|
+
left: size * 0.46,
|
|
528
|
+
position: "absolute",
|
|
529
|
+
top: size * 0.26,
|
|
530
|
+
transform: [{ rotate: "45deg" }],
|
|
531
|
+
width: size * 0.38
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
)
|
|
535
|
+
] });
|
|
536
|
+
}
|
|
537
|
+
function StatusGlyph({ color, size }) {
|
|
538
|
+
return /* @__PURE__ */ jsx4(
|
|
539
|
+
View3,
|
|
540
|
+
{
|
|
541
|
+
accessibilityElementsHidden: true,
|
|
542
|
+
importantForAccessibility: "no-hide-descendants",
|
|
543
|
+
style: {
|
|
544
|
+
backgroundColor: color,
|
|
545
|
+
borderRadius: size / 2,
|
|
546
|
+
height: size,
|
|
547
|
+
width: size
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
);
|
|
551
|
+
}
|
|
552
|
+
function StopGlyph({ color, size }) {
|
|
553
|
+
const square = size * 0.48;
|
|
554
|
+
return /* @__PURE__ */ jsx4(GlyphFrame, { size, children: /* @__PURE__ */ jsx4(
|
|
555
|
+
View3,
|
|
556
|
+
{
|
|
557
|
+
style: {
|
|
558
|
+
backgroundColor: color,
|
|
559
|
+
borderRadius: Math.max(2, size * 0.08),
|
|
560
|
+
height: square,
|
|
561
|
+
left: (size - square) / 2,
|
|
562
|
+
position: "absolute",
|
|
563
|
+
top: (size - square) / 2,
|
|
564
|
+
width: square
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
) });
|
|
568
|
+
}
|
|
569
|
+
function GlyphFrame({ children, size }) {
|
|
570
|
+
return /* @__PURE__ */ jsx4(
|
|
571
|
+
View3,
|
|
572
|
+
{
|
|
573
|
+
accessibilityElementsHidden: true,
|
|
574
|
+
importantForAccessibility: "no-hide-descendants",
|
|
575
|
+
style: { height: size, width: size },
|
|
576
|
+
children
|
|
577
|
+
}
|
|
578
|
+
);
|
|
579
|
+
}
|
|
580
|
+
|
|
337
581
|
// src/native/icon-button.tsx
|
|
338
582
|
import {
|
|
339
583
|
StyleSheet as StyleSheet3
|
|
340
584
|
} from "react-native";
|
|
341
|
-
import { jsx as
|
|
585
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
342
586
|
function NativeIconButton({
|
|
343
587
|
accessibilityLabel,
|
|
344
588
|
disabled = false,
|
|
@@ -349,7 +593,7 @@ function NativeIconButton({
|
|
|
349
593
|
testID,
|
|
350
594
|
variant = "ghost"
|
|
351
595
|
}) {
|
|
352
|
-
return /* @__PURE__ */
|
|
596
|
+
return /* @__PURE__ */ jsx5(
|
|
353
597
|
NativeButton,
|
|
354
598
|
{
|
|
355
599
|
accessibilityLabel,
|
|
@@ -373,9 +617,9 @@ import {
|
|
|
373
617
|
Pressable as Pressable2,
|
|
374
618
|
StyleSheet as StyleSheet4,
|
|
375
619
|
Text as Text3,
|
|
376
|
-
View as
|
|
620
|
+
View as View4
|
|
377
621
|
} from "react-native";
|
|
378
|
-
import { jsx as
|
|
622
|
+
import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
379
623
|
function NativeListRow({
|
|
380
624
|
accessibilityLabel,
|
|
381
625
|
description,
|
|
@@ -392,7 +636,7 @@ function NativeListRow({
|
|
|
392
636
|
const theme = useNativeTheme();
|
|
393
637
|
const styles2 = createStyles3(theme);
|
|
394
638
|
const interactive = onLongPress !== void 0 || onPress !== void 0;
|
|
395
|
-
return /* @__PURE__ */
|
|
639
|
+
return /* @__PURE__ */ jsx6(
|
|
396
640
|
Pressable2,
|
|
397
641
|
{
|
|
398
642
|
accessibilityLabel: accessibilityLabel ?? title,
|
|
@@ -408,11 +652,11 @@ function NativeListRow({
|
|
|
408
652
|
disabled ? styles2.disabled : void 0,
|
|
409
653
|
style
|
|
410
654
|
],
|
|
411
|
-
children: /* @__PURE__ */
|
|
412
|
-
selected ? /* @__PURE__ */
|
|
413
|
-
leading ? /* @__PURE__ */
|
|
414
|
-
/* @__PURE__ */
|
|
415
|
-
/* @__PURE__ */
|
|
655
|
+
children: /* @__PURE__ */ jsxs4(View4, { style: styles2.content, children: [
|
|
656
|
+
selected ? /* @__PURE__ */ jsx6(View4, { style: styles2.selectedIndicator }) : null,
|
|
657
|
+
leading ? /* @__PURE__ */ jsx6(View4, { style: styles2.leading, children: leading }) : null,
|
|
658
|
+
/* @__PURE__ */ jsxs4(View4, { style: styles2.copy, children: [
|
|
659
|
+
/* @__PURE__ */ jsx6(
|
|
416
660
|
Text3,
|
|
417
661
|
{
|
|
418
662
|
numberOfLines: titleNumberOfLines,
|
|
@@ -420,9 +664,9 @@ function NativeListRow({
|
|
|
420
664
|
children: title
|
|
421
665
|
}
|
|
422
666
|
),
|
|
423
|
-
typeof description === "string" ? /* @__PURE__ */
|
|
667
|
+
typeof description === "string" ? /* @__PURE__ */ jsx6(Text3, { numberOfLines: 1, style: styles2.description, children: description }) : description ? /* @__PURE__ */ jsx6(View4, { style: styles2.descriptionSlot, children: description }) : null
|
|
424
668
|
] }),
|
|
425
|
-
trailing ? /* @__PURE__ */
|
|
669
|
+
trailing ? /* @__PURE__ */ jsx6(View4, { style: styles2.trailing, children: trailing }) : null
|
|
426
670
|
] })
|
|
427
671
|
}
|
|
428
672
|
);
|
|
@@ -475,8 +719,8 @@ function createStyles3(theme) {
|
|
|
475
719
|
}
|
|
476
720
|
|
|
477
721
|
// src/native/progress-bar.tsx
|
|
478
|
-
import { StyleSheet as StyleSheet5, View as
|
|
479
|
-
import { jsx as
|
|
722
|
+
import { StyleSheet as StyleSheet5, View as View5 } from "react-native";
|
|
723
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
480
724
|
function NativeProgressBar({
|
|
481
725
|
accessibilityLabel,
|
|
482
726
|
style,
|
|
@@ -487,16 +731,16 @@ function NativeProgressBar({
|
|
|
487
731
|
const styles2 = createStyles4(theme);
|
|
488
732
|
const normalized = value === null ? null : Math.min(1, Math.max(0, value));
|
|
489
733
|
const percent = normalized === null ? null : Math.round(normalized * 100);
|
|
490
|
-
return /* @__PURE__ */
|
|
491
|
-
|
|
734
|
+
return /* @__PURE__ */ jsx7(
|
|
735
|
+
View5,
|
|
492
736
|
{
|
|
493
737
|
accessibilityLabel,
|
|
494
738
|
accessibilityRole: "progressbar",
|
|
495
739
|
accessibilityValue: percent === null ? void 0 : { max: 100, min: 0, now: percent },
|
|
496
740
|
style: [styles2.track, style],
|
|
497
741
|
testID,
|
|
498
|
-
children: /* @__PURE__ */
|
|
499
|
-
|
|
742
|
+
children: /* @__PURE__ */ jsx7(
|
|
743
|
+
View5,
|
|
500
744
|
{
|
|
501
745
|
style: [
|
|
502
746
|
styles2.fill,
|
|
@@ -535,7 +779,7 @@ import {
|
|
|
535
779
|
Pressable as Pressable3,
|
|
536
780
|
StyleSheet as StyleSheet6
|
|
537
781
|
} from "react-native";
|
|
538
|
-
import { jsx as
|
|
782
|
+
import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
539
783
|
function NativeSheet({
|
|
540
784
|
children,
|
|
541
785
|
closeAccessibilityLabel,
|
|
@@ -546,7 +790,7 @@ function NativeSheet({
|
|
|
546
790
|
const theme = useNativeTheme();
|
|
547
791
|
const styles2 = createStyles5(theme);
|
|
548
792
|
const dismiss = () => onOpenChange(false);
|
|
549
|
-
return /* @__PURE__ */
|
|
793
|
+
return /* @__PURE__ */ jsx8(
|
|
550
794
|
Modal,
|
|
551
795
|
{
|
|
552
796
|
animationType: "fade",
|
|
@@ -555,7 +799,7 @@ function NativeSheet({
|
|
|
555
799
|
statusBarTranslucent: true,
|
|
556
800
|
transparent: true,
|
|
557
801
|
visible: open,
|
|
558
|
-
children: /* @__PURE__ */
|
|
802
|
+
children: /* @__PURE__ */ jsxs5(
|
|
559
803
|
KeyboardAvoidingView,
|
|
560
804
|
{
|
|
561
805
|
accessible: false,
|
|
@@ -564,7 +808,7 @@ function NativeSheet({
|
|
|
564
808
|
onAccessibilityEscape: dismiss,
|
|
565
809
|
style: styles2.backdrop,
|
|
566
810
|
children: [
|
|
567
|
-
/* @__PURE__ */
|
|
811
|
+
/* @__PURE__ */ jsx8(
|
|
568
812
|
Pressable3,
|
|
569
813
|
{
|
|
570
814
|
accessibilityLabel: closeAccessibilityLabel,
|
|
@@ -575,7 +819,7 @@ function NativeSheet({
|
|
|
575
819
|
testID: "native-sheet-backdrop"
|
|
576
820
|
}
|
|
577
821
|
),
|
|
578
|
-
/* @__PURE__ */
|
|
822
|
+
/* @__PURE__ */ jsx8(
|
|
579
823
|
Pressable3,
|
|
580
824
|
{
|
|
581
825
|
accessible: false,
|
|
@@ -610,6 +854,7 @@ function createStyles5(theme) {
|
|
|
610
854
|
export {
|
|
611
855
|
NativeAvatar,
|
|
612
856
|
NativeButton,
|
|
857
|
+
NativeControlGlyph,
|
|
613
858
|
NativeIconButton,
|
|
614
859
|
NativeListRow,
|
|
615
860
|
NativeProgressBar,
|
package/dist/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/native/avatar.tsx","../src/native/theme-provider.tsx","../src/native/generated-tokens.ts","../src/native/tokens.ts","../src/native/button.tsx","../src/native/icon-button.tsx","../src/native/list-row.tsx","../src/native/progress-bar.tsx","../src/native/sheet.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport {\n ActivityIndicator,\n Image,\n StyleSheet,\n Text,\n View,\n type ImageStyle,\n type StyleProp,\n type ViewStyle\n} from \"react-native\";\nimport { type NativeTheme } from \"./tokens\";\nimport { useNativeTheme } from \"./theme-provider\";\n\nexport type NativeAvatarSize = \"compact\" | \"regular\" | \"large\";\n\nexport interface NativeAvatarProps {\n initial?: string;\n label: string;\n loading?: boolean;\n size?: NativeAvatarSize;\n src?: string | null;\n style?: StyleProp<ViewStyle>;\n}\n\nfunction avatarInitial(label: string, initial?: string): string {\n const value = initial?.trim() || label.trim();\n return Array.from(value)[0]?.toLocaleUpperCase() || \"?\";\n}\n\n/** Decorative identity image with loading and broken-image fallback states. */\nexport function NativeAvatar({\n initial,\n label,\n loading = false,\n size = \"regular\",\n src,\n style\n}: NativeAvatarProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const normalizedSrc = src?.trim() ?? \"\";\n const [failedSrc, setFailedSrc] = useState(\"\");\n const [loadedSrc, setLoadedSrc] = useState(\"\");\n\n useEffect(() => {\n setFailedSrc(\"\");\n setLoadedSrc(\"\");\n }, [normalizedSrc]);\n\n const imageAvailable =\n !loading && normalizedSrc.length > 0 && failedSrc !== normalizedSrc;\n const imageLoaded = imageAvailable && loadedSrc === normalizedSrc;\n const dimension = avatarDimensions(theme)[size];\n const imageStyle: StyleProp<ImageStyle> = [\n styles.image,\n imageLoaded ? styles.imageVisible : styles.imageHidden\n ];\n\n return (\n <View\n accessibilityElementsHidden\n accessible={false}\n importantForAccessibility=\"no-hide-descendants\"\n style={[styles.root, dimension, style]}\n >\n {loading || imageAvailable ? (\n imageLoaded ? null : (\n <ActivityIndicator color={theme.color.muted} size=\"small\" />\n )\n ) : (\n <Text numberOfLines={1} style={styles.initial}>\n {avatarInitial(label, initial)}\n </Text>\n )}\n {imageAvailable ? (\n <Image\n onError={() => setFailedSrc(normalizedSrc)}\n onLoad={() => setLoadedSrc(normalizedSrc)}\n resizeMode=\"cover\"\n source={{ uri: normalizedSrc }}\n style={imageStyle}\n />\n ) : null}\n </View>\n );\n}\n\nfunction avatarDimensions(\n theme: NativeTheme\n): Record<NativeAvatarSize, ViewStyle> {\n return {\n compact: {\n height: theme.control.compact,\n width: theme.control.compact\n },\n large: {\n height: theme.control.row,\n width: theme.control.row\n },\n regular: {\n height: theme.control.regular,\n width: theme.control.regular\n }\n };\n}\n\nfunction createStyles(theme: NativeTheme) {\n return StyleSheet.create({\n image: {\n height: \"100%\",\n left: 0,\n position: \"absolute\",\n top: 0,\n width: \"100%\"\n },\n imageHidden: { opacity: 0 },\n imageVisible: { opacity: 1 },\n initial: {\n color: theme.color.text,\n fontSize: theme.space.medium,\n fontWeight: \"700\"\n },\n root: {\n alignItems: \"center\",\n backgroundColor: theme.color.panelRaised,\n borderColor: theme.color.border,\n borderRadius: theme.control.row / 2,\n borderWidth: StyleSheet.hairlineWidth,\n justifyContent: \"center\",\n overflow: \"hidden\"\n }\n });\n}\n","import {\n createContext,\n type PropsWithChildren,\n useContext,\n useMemo\n} from \"react\";\nimport { useColorScheme } from \"react-native\";\nimport {\n nativeTheme,\n resolveNativeTheme,\n type NativeTheme,\n type NativeThemeMode\n} from \"./tokens\";\n\nexport type NativeThemePreference = NativeThemeMode | \"system\";\n\nconst NativeThemeContext = createContext<NativeTheme>(nativeTheme);\n\nexport interface NativeThemeProviderProps extends PropsWithChildren {\n /** Defaults to the operating system preference when no product override exists. */\n mode?: NativeThemePreference;\n}\n\n/**\n * Supplies the resolved Native semantic theme to UI System primitives and\n * application composition. The provider is intentionally UI-only: product\n * settings decide which preference, if any, it receives.\n */\nexport function NativeThemeProvider({\n children,\n mode = \"system\"\n}: NativeThemeProviderProps) {\n const systemMode = useColorScheme();\n const resolvedMode =\n mode === \"system\" ? (systemMode === \"light\" ? \"light\" : \"dark\") : mode;\n const theme = useMemo(() => resolveNativeTheme(resolvedMode), [resolvedMode]);\n\n return (\n <NativeThemeContext.Provider value={theme}>\n {children}\n </NativeThemeContext.Provider>\n );\n}\n\nexport function useNativeTheme(): NativeTheme {\n return useContext(NativeThemeContext);\n}\n","/* This file is generated from ../tokens/renderer-theme.json. Do not edit it directly. */\nexport const nativeThemeDimensions = {\n control: {\n compact: 40,\n icon: 40,\n large: 52,\n regular: 48,\n row: 60\n },\n radius: {\n large: 18,\n medium: 12,\n small: 8\n },\n space: {\n large: 24,\n medium: 16,\n small: 10,\n xlarge: 32\n }\n} as const;\n\nexport const nativeThemes = {\n light: {\n accent: \"#4182f5\",\n accentPressed: \"#3975df\",\n background: \"#f7f8fa\",\n backgroundFronted: \"#ffffff\",\n backgroundPanel: \"#f8fafc\",\n border: \"#e5e7eb\",\n danger: \"#dc2626\",\n foreground: \"#29313d\",\n muted: \"#6b7280\",\n panel: \"#f8f8fa\",\n scrim: \"rgba(0, 0, 0, 0.6)\",\n scrimStrong: \"rgba(0, 0, 0, 0.64)\",\n success: \"#22c55e\",\n textPrimary: \"#3c3c3c\",\n textSecondary: \"#6c6c6c\"\n },\n dark: {\n accent: \"#5a9bff\",\n accentPressed: \"#4f8fff\",\n background: \"#111216\",\n backgroundFronted: \"#22252d\",\n backgroundPanel: \"#1a1c22\",\n border: \"#30333b\",\n danger: \"#ff716c\",\n foreground: \"#f6f6f7\",\n muted: \"#9398a5\",\n panel: \"#1a1c22\",\n scrim: \"rgba(0, 0, 0, 0.6)\",\n scrimStrong: \"rgba(0, 0, 0, 0.64)\",\n success: \"#62d49f\",\n textPrimary: \"#f6f6f7\",\n textSecondary: \"#c3c6ce\"\n }\n} as const;\n\nexport type NativeThemeMode = keyof typeof nativeThemes;\nexport type NativeThemePalette = (typeof nativeThemes)[NativeThemeMode];\n","import {\n nativeThemeDimensions,\n nativeThemes,\n type NativeThemeMode,\n type NativeThemePalette\n} from \"./generated-tokens\";\n\nexport { nativeThemeDimensions, nativeThemes };\nexport type { NativeThemeMode, NativeThemePalette };\n\n/**\n * Resolves a renderer-neutral semantic theme for React Native.\n */\nexport function resolveNativeTheme(mode: NativeThemeMode) {\n const palette = nativeThemes[mode];\n\n return {\n control: nativeThemeDimensions.control,\n color: {\n accent: palette.accent,\n accentPressed: palette.accentPressed,\n background: palette.background,\n border: palette.border,\n danger: palette.danger,\n muted: palette.muted,\n panel: palette.panel,\n panelRaised: palette.backgroundFronted,\n scrim: palette.scrim,\n scrimStrong: palette.scrimStrong,\n success: palette.success,\n text: palette.textPrimary,\n textSecondary: palette.textSecondary\n },\n mode,\n radius: nativeThemeDimensions.radius,\n space: nativeThemeDimensions.space\n } as const;\n}\n\n/**\n * Backwards-compatible dark Native theme.\n *\n * New components should consume the context-backed `useNativeTheme` hook so\n * they respond to the Native renderer's configured color scheme.\n */\nexport const nativeTheme = resolveNativeTheme(\"dark\");\n\nexport type NativeTheme = typeof nativeTheme;\n","import { type ReactNode, useState } from \"react\";\nimport {\n ActivityIndicator,\n type GestureResponderEvent,\n Pressable,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle\n} from \"react-native\";\nimport { type NativeTheme } from \"./tokens\";\nimport { useNativeTheme } from \"./theme-provider\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"destructive\"\n | \"destructiveGhost\"\n | \"ghost\";\n\nexport type ButtonSize = \"regular\" | \"large\" | \"compact\" | \"icon\";\n\nexport interface NativeButtonProps {\n accessibilityLabel?: string;\n disabled?: boolean;\n label: string;\n leading?: ReactNode;\n loading?: boolean;\n onPress(event: GestureResponderEvent): void;\n size?: ButtonSize;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n variant?: ButtonVariant;\n}\n\n/**\n * Native counterpart of the UI System Button contract.\n *\n * Its interaction hierarchy is adapted from React Native Reusables' Button,\n * while the styling is deliberately token-backed and platform-native.\n */\nexport function NativeButton({\n accessibilityLabel,\n disabled = false,\n label,\n leading,\n loading = false,\n onPress,\n size = \"regular\",\n style,\n testID,\n variant = \"primary\"\n}: NativeButtonProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const [pressed, setPressed] = useState(false);\n const unavailable = disabled || loading;\n const foreground = textColorByVariant(theme)[variant];\n const hasLabel = label.trim().length > 0;\n\n return (\n <Pressable\n accessibilityLabel={accessibilityLabel ?? label}\n accessibilityRole=\"button\"\n accessibilityState={{ busy: loading, disabled: unavailable }}\n disabled={unavailable}\n onPress={onPress}\n onPressIn={() => setPressed(true)}\n onPressOut={() => setPressed(false)}\n style={[\n styles.button,\n styles[size],\n variantStyles(theme)[variant],\n pressed && !unavailable ? styles.pressed : undefined,\n unavailable ? styles.disabled : undefined,\n style\n ]}\n testID={testID}\n >\n <View style={styles.content}>\n {loading ? (\n <ActivityIndicator color={foreground} size=\"small\" />\n ) : (\n <>\n {leading ? (\n <View style={[styles.leading, !hasLabel && styles.leadingOnly]}>\n {leading}\n </View>\n ) : null}\n {hasLabel ? (\n <Text\n numberOfLines={1}\n style={[styles.label, { color: foreground }]}\n >\n {label}\n </Text>\n ) : null}\n </>\n )}\n </View>\n </Pressable>\n );\n}\n\nfunction textColorByVariant(theme: NativeTheme): Record<ButtonVariant, string> {\n return {\n primary: theme.color.background,\n secondary: theme.color.text,\n destructive: theme.color.background,\n destructiveGhost: theme.color.danger,\n ghost: theme.color.text\n };\n}\n\nfunction variantStyles(theme: NativeTheme): Record<ButtonVariant, ViewStyle> {\n return {\n primary: { backgroundColor: theme.color.accent },\n secondary: {\n backgroundColor: theme.color.panelRaised,\n borderColor: theme.color.border,\n borderWidth: StyleSheet.hairlineWidth\n },\n destructive: { backgroundColor: theme.color.danger },\n destructiveGhost: { backgroundColor: \"transparent\" },\n ghost: { backgroundColor: \"transparent\" }\n };\n}\n\nfunction createStyles(theme: NativeTheme) {\n return StyleSheet.create({\n button: {\n alignItems: \"center\",\n borderRadius: theme.radius.medium,\n justifyContent: \"center\"\n },\n compact: {\n minHeight: theme.control.compact,\n paddingHorizontal: theme.space.small\n },\n content: {\n alignItems: \"center\",\n flexDirection: \"row\",\n justifyContent: \"center\"\n },\n disabled: { opacity: 0.45 },\n icon: {\n height: theme.control.icon,\n paddingHorizontal: 0,\n width: theme.control.icon\n },\n label: { fontSize: theme.space.medium, fontWeight: \"700\" },\n large: {\n minHeight: theme.control.large,\n paddingHorizontal: theme.space.medium\n },\n leading: { marginRight: theme.space.small },\n leadingOnly: { marginRight: 0 },\n pressed: { opacity: 0.82 },\n regular: {\n minHeight: theme.control.regular,\n paddingHorizontal: theme.space.medium\n }\n });\n}\n","import type { ReactNode } from \"react\";\nimport {\n StyleSheet,\n type GestureResponderEvent,\n type StyleProp,\n type ViewStyle\n} from \"react-native\";\nimport { NativeButton, type ButtonSize, type ButtonVariant } from \"./button\";\n\nexport interface NativeIconButtonProps {\n accessibilityLabel: string;\n disabled?: boolean;\n icon: ReactNode;\n onPress(event: GestureResponderEvent): void;\n size?: Extract<ButtonSize, \"compact\" | \"icon\">;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n variant?: ButtonVariant;\n}\n\nexport function NativeIconButton({\n accessibilityLabel,\n disabled = false,\n icon,\n onPress,\n size = \"icon\",\n style,\n testID,\n variant = \"ghost\"\n}: NativeIconButtonProps) {\n return (\n <NativeButton\n accessibilityLabel={accessibilityLabel}\n disabled={disabled}\n label=\"\"\n leading={icon}\n onPress={onPress}\n size={size}\n style={[styles.button, style]}\n testID={testID}\n variant={variant}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n button: { paddingHorizontal: 0 }\n});\n","import type { ReactNode } from \"react\";\nimport {\n Pressable,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle\n} from \"react-native\";\nimport { type NativeTheme } from \"./tokens\";\nimport { useNativeTheme } from \"./theme-provider\";\n\nexport interface NativeListRowProps {\n accessibilityLabel?: string;\n description?: ReactNode;\n disabled?: boolean;\n leading?: ReactNode;\n onLongPress?(): void;\n onPress?(): void;\n selected?: boolean;\n style?: StyleProp<ViewStyle>;\n title: string;\n titleNumberOfLines?: number;\n trailing?: ReactNode;\n}\n\nexport function NativeListRow({\n accessibilityLabel,\n description,\n disabled = false,\n leading,\n onLongPress,\n onPress,\n selected = false,\n style,\n title,\n titleNumberOfLines = 2,\n trailing\n}: NativeListRowProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const interactive = onLongPress !== undefined || onPress !== undefined;\n\n return (\n <Pressable\n accessibilityLabel={accessibilityLabel ?? title}\n accessibilityRole={interactive ? \"button\" : undefined}\n accessibilityState={{ disabled, selected }}\n disabled={!interactive || disabled}\n onLongPress={onLongPress}\n onPress={onPress}\n style={({ pressed }) => [\n styles.row,\n selected ? styles.selected : undefined,\n pressed && interactive && !disabled ? styles.pressed : undefined,\n disabled ? styles.disabled : undefined,\n style\n ]}\n >\n <View style={styles.content}>\n {selected ? <View style={styles.selectedIndicator} /> : null}\n {leading ? <View style={styles.leading}>{leading}</View> : null}\n <View style={styles.copy}>\n <Text\n numberOfLines={titleNumberOfLines}\n style={[styles.title, selected ? styles.titleSelected : undefined]}\n >\n {title}\n </Text>\n {typeof description === \"string\" ? (\n <Text numberOfLines={1} style={styles.description}>\n {description}\n </Text>\n ) : description ? (\n <View style={styles.descriptionSlot}>{description}</View>\n ) : null}\n </View>\n {trailing ? <View style={styles.trailing}>{trailing}</View> : null}\n </View>\n </Pressable>\n );\n}\n\nfunction createStyles(theme: NativeTheme) {\n return StyleSheet.create({\n content: {\n alignItems: \"center\",\n flex: 1,\n flexDirection: \"row\",\n minHeight: theme.control.row,\n paddingHorizontal: theme.space.small,\n position: \"relative\",\n width: \"100%\"\n },\n copy: { flex: 1, paddingVertical: theme.space.small },\n description: {\n color: theme.color.muted,\n fontSize: theme.space.small,\n marginTop: theme.space.small / 2\n },\n descriptionSlot: { marginTop: theme.space.small / 2 },\n disabled: { opacity: 0.45 },\n leading: { marginRight: theme.space.small },\n pressed: { opacity: 0.7 },\n row: {\n borderRadius: theme.radius.small,\n minHeight: theme.control.row,\n overflow: \"hidden\"\n },\n selected: { backgroundColor: theme.color.panelRaised },\n selectedIndicator: {\n backgroundColor: theme.color.accent,\n borderRadius: theme.radius.small / 2,\n bottom: theme.radius.small,\n left: 0,\n position: \"absolute\",\n top: theme.radius.small,\n width: theme.radius.small / 2\n },\n title: {\n color: theme.color.textSecondary,\n fontSize: theme.space.medium - 2,\n fontWeight: \"600\",\n lineHeight: theme.space.medium + theme.space.small - 1\n },\n titleSelected: { color: theme.color.text },\n trailing: { marginLeft: theme.space.small }\n });\n}\n","import { StyleSheet, View, type StyleProp, type ViewStyle } from \"react-native\";\nimport { useNativeTheme } from \"./theme-provider\";\nimport type { NativeTheme } from \"./tokens\";\n\nexport interface NativeProgressBarProps {\n accessibilityLabel: string;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n value: number | null;\n}\n\n/** Token-backed determinate or indeterminate progress for Native renderers. */\nexport function NativeProgressBar({\n accessibilityLabel,\n style,\n testID,\n value\n}: NativeProgressBarProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const normalized = value === null ? null : Math.min(1, Math.max(0, value));\n const percent = normalized === null ? null : Math.round(normalized * 100);\n\n return (\n <View\n accessibilityLabel={accessibilityLabel}\n accessibilityRole=\"progressbar\"\n accessibilityValue={\n percent === null ? undefined : { max: 100, min: 0, now: percent }\n }\n style={[styles.track, style]}\n testID={testID}\n >\n <View\n style={[\n styles.fill,\n normalized === null\n ? styles.indeterminate\n : { width: `${percent ?? 0}%` }\n ]}\n />\n </View>\n );\n}\n\nfunction createStyles(theme: NativeTheme) {\n return StyleSheet.create({\n fill: {\n backgroundColor: theme.color.accent,\n borderRadius: theme.radius.small,\n height: \"100%\"\n },\n indeterminate: { alignSelf: \"center\", width: \"35%\" },\n track: {\n backgroundColor: theme.color.panelRaised,\n borderColor: theme.color.border,\n borderRadius: theme.radius.small,\n borderWidth: StyleSheet.hairlineWidth,\n height: theme.space.small,\n overflow: \"hidden\",\n width: \"100%\"\n }\n });\n}\n","import type { ReactNode } from \"react\";\nimport {\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n StyleSheet\n} from \"react-native\";\nimport { useNativeTheme } from \"./theme-provider\";\n\nexport interface NativeSheetProps {\n children: ReactNode;\n closeAccessibilityLabel: string;\n height?: number | `${number}%`;\n onOpenChange(open: boolean): void;\n open: boolean;\n}\n\n/**\n * Controlled sheet backed by React Native's window-level Modal.\n *\n * Callers own whether the sheet is open and what product actions its content\n * performs.\n */\nexport function NativeSheet({\n children,\n closeAccessibilityLabel,\n height,\n onOpenChange,\n open\n}: NativeSheetProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const dismiss = () => onOpenChange(false);\n\n return (\n <Modal\n animationType=\"fade\"\n onRequestClose={dismiss}\n presentationStyle=\"overFullScreen\"\n statusBarTranslucent\n transparent\n visible={open}\n >\n <KeyboardAvoidingView\n accessible={false}\n behavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n keyboardVerticalOffset={0}\n onAccessibilityEscape={dismiss}\n style={styles.backdrop}\n >\n <Pressable\n accessibilityLabel={closeAccessibilityLabel}\n accessibilityRole=\"button\"\n accessible\n onPress={dismiss}\n style={StyleSheet.absoluteFill}\n testID=\"native-sheet-backdrop\"\n />\n <Pressable\n accessible={false}\n onPress={() => undefined}\n style={[styles.sheet, height === undefined ? null : { height }]}\n testID=\"native-sheet-panel\"\n >\n {children}\n </Pressable>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n\nfunction createStyles(theme: ReturnType<typeof useNativeTheme>) {\n return StyleSheet.create({\n backdrop: {\n backgroundColor: theme.color.scrim,\n flex: 1,\n justifyContent: \"flex-end\"\n },\n sheet: {\n backgroundColor: theme.color.panelRaised,\n borderTopLeftRadius: theme.radius.large,\n borderTopRightRadius: theme.radius.large,\n maxHeight: \"80%\",\n overflow: \"hidden\"\n }\n });\n}\n"],"mappings":"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","names":["jsx","styles","useState","ActivityIndicator","StyleSheet","Text","View","jsx","jsxs","styles","createStyles","useState","View","ActivityIndicator","Text","StyleSheet","StyleSheet","jsx","StyleSheet","Pressable","StyleSheet","Text","View","jsx","jsxs","styles","createStyles","Pressable","View","Text","StyleSheet","StyleSheet","View","jsx","styles","createStyles","View","StyleSheet","Pressable","StyleSheet","jsx","jsxs","styles","createStyles","Pressable","StyleSheet"]}
|
|
1
|
+
{"version":3,"sources":["../src/native/avatar.tsx","../src/native/theme-provider.tsx","../src/native/generated-tokens.ts","../src/native/tokens.ts","../src/native/button.tsx","../src/native/control-glyph.tsx","../src/native/icon-button.tsx","../src/native/list-row.tsx","../src/native/progress-bar.tsx","../src/native/sheet.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport {\n ActivityIndicator,\n Image,\n StyleSheet,\n Text,\n View,\n type ImageStyle,\n type StyleProp,\n type ViewStyle\n} from \"react-native\";\nimport { type NativeTheme } from \"./tokens\";\nimport { useNativeTheme } from \"./theme-provider\";\n\nexport type NativeAvatarSize = \"compact\" | \"regular\" | \"large\";\n\nexport interface NativeAvatarProps {\n initial?: string;\n label: string;\n loading?: boolean;\n size?: NativeAvatarSize;\n src?: string | null;\n style?: StyleProp<ViewStyle>;\n}\n\nfunction avatarInitial(label: string, initial?: string): string {\n const value = initial?.trim() || label.trim();\n return Array.from(value)[0]?.toLocaleUpperCase() || \"?\";\n}\n\n/** Decorative identity image with loading and broken-image fallback states. */\nexport function NativeAvatar({\n initial,\n label,\n loading = false,\n size = \"regular\",\n src,\n style\n}: NativeAvatarProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const normalizedSrc = src?.trim() ?? \"\";\n const [failedSrc, setFailedSrc] = useState(\"\");\n const [loadedSrc, setLoadedSrc] = useState(\"\");\n\n useEffect(() => {\n setFailedSrc(\"\");\n setLoadedSrc(\"\");\n }, [normalizedSrc]);\n\n const imageAvailable =\n !loading && normalizedSrc.length > 0 && failedSrc !== normalizedSrc;\n const imageLoaded = imageAvailable && loadedSrc === normalizedSrc;\n const dimension = avatarDimensions(theme)[size];\n const imageStyle: StyleProp<ImageStyle> = [\n styles.image,\n imageLoaded ? styles.imageVisible : styles.imageHidden\n ];\n\n return (\n <View\n accessibilityElementsHidden\n accessible={false}\n importantForAccessibility=\"no-hide-descendants\"\n style={[styles.root, dimension, style]}\n >\n {loading || imageAvailable ? (\n imageLoaded ? null : (\n <ActivityIndicator color={theme.color.muted} size=\"small\" />\n )\n ) : (\n <Text numberOfLines={1} style={styles.initial}>\n {avatarInitial(label, initial)}\n </Text>\n )}\n {imageAvailable ? (\n <Image\n onError={() => setFailedSrc(normalizedSrc)}\n onLoad={() => setLoadedSrc(normalizedSrc)}\n resizeMode=\"cover\"\n source={{ uri: normalizedSrc }}\n style={imageStyle}\n />\n ) : null}\n </View>\n );\n}\n\nfunction avatarDimensions(\n theme: NativeTheme\n): Record<NativeAvatarSize, ViewStyle> {\n return {\n compact: {\n height: theme.control.compact,\n width: theme.control.compact\n },\n large: {\n height: theme.control.row,\n width: theme.control.row\n },\n regular: {\n height: theme.control.regular,\n width: theme.control.regular\n }\n };\n}\n\nfunction createStyles(theme: NativeTheme) {\n return StyleSheet.create({\n image: {\n height: \"100%\",\n left: 0,\n position: \"absolute\",\n top: 0,\n width: \"100%\"\n },\n imageHidden: { opacity: 0 },\n imageVisible: { opacity: 1 },\n initial: {\n color: theme.color.text,\n fontSize: theme.space.medium,\n fontWeight: \"700\"\n },\n root: {\n alignItems: \"center\",\n backgroundColor: theme.color.panelRaised,\n borderColor: theme.color.border,\n borderRadius: theme.control.row / 2,\n borderWidth: StyleSheet.hairlineWidth,\n justifyContent: \"center\",\n overflow: \"hidden\"\n }\n });\n}\n","import {\n createContext,\n type PropsWithChildren,\n useContext,\n useMemo\n} from \"react\";\nimport { useColorScheme } from \"react-native\";\nimport {\n nativeTheme,\n resolveNativeTheme,\n type NativeTheme,\n type NativeThemeMode\n} from \"./tokens\";\n\nexport type NativeThemePreference = NativeThemeMode | \"system\";\n\nconst NativeThemeContext = createContext<NativeTheme>(nativeTheme);\n\nexport interface NativeThemeProviderProps extends PropsWithChildren {\n /** Defaults to the operating system preference when no product override exists. */\n mode?: NativeThemePreference;\n}\n\n/**\n * Supplies the resolved Native semantic theme to UI System primitives and\n * application composition. The provider is intentionally UI-only: product\n * settings decide which preference, if any, it receives.\n */\nexport function NativeThemeProvider({\n children,\n mode = \"system\"\n}: NativeThemeProviderProps) {\n const systemMode = useColorScheme();\n const resolvedMode =\n mode === \"system\" ? (systemMode === \"light\" ? \"light\" : \"dark\") : mode;\n const theme = useMemo(() => resolveNativeTheme(resolvedMode), [resolvedMode]);\n\n return (\n <NativeThemeContext.Provider value={theme}>\n {children}\n </NativeThemeContext.Provider>\n );\n}\n\nexport function useNativeTheme(): NativeTheme {\n return useContext(NativeThemeContext);\n}\n","/* This file is generated from ../tokens/renderer-theme.json. Do not edit it directly. */\nexport const nativeThemeDimensions = {\n control: {\n compact: 40,\n icon: 40,\n large: 52,\n regular: 48,\n row: 60\n },\n radius: {\n large: 18,\n medium: 12,\n small: 8\n },\n space: {\n large: 24,\n medium: 16,\n small: 10,\n xlarge: 32\n }\n} as const;\n\nexport const nativeThemes = {\n light: {\n accent: \"#4182f5\",\n accentPressed: \"#3975df\",\n background: \"#f7f8fa\",\n backgroundFronted: \"#ffffff\",\n backgroundPanel: \"#f8fafc\",\n border: \"#e5e7eb\",\n danger: \"#dc2626\",\n foreground: \"#29313d\",\n muted: \"#6b7280\",\n panel: \"#f8f8fa\",\n scrim: \"rgba(0, 0, 0, 0.6)\",\n scrimStrong: \"rgba(0, 0, 0, 0.64)\",\n success: \"#22c55e\",\n textPrimary: \"#3c3c3c\",\n textSecondary: \"#6c6c6c\"\n },\n dark: {\n accent: \"#5a9bff\",\n accentPressed: \"#4f8fff\",\n background: \"#111216\",\n backgroundFronted: \"#22252d\",\n backgroundPanel: \"#1a1c22\",\n border: \"#30333b\",\n danger: \"#ff716c\",\n foreground: \"#f6f6f7\",\n muted: \"#9398a5\",\n panel: \"#1a1c22\",\n scrim: \"rgba(0, 0, 0, 0.6)\",\n scrimStrong: \"rgba(0, 0, 0, 0.64)\",\n success: \"#62d49f\",\n textPrimary: \"#f6f6f7\",\n textSecondary: \"#c3c6ce\"\n }\n} as const;\n\nexport type NativeThemeMode = keyof typeof nativeThemes;\nexport type NativeThemePalette = (typeof nativeThemes)[NativeThemeMode];\n","import {\n nativeThemeDimensions,\n nativeThemes,\n type NativeThemeMode,\n type NativeThemePalette\n} from \"./generated-tokens\";\n\nexport { nativeThemeDimensions, nativeThemes };\nexport type { NativeThemeMode, NativeThemePalette };\n\n/**\n * Resolves a renderer-neutral semantic theme for React Native.\n */\nexport function resolveNativeTheme(mode: NativeThemeMode) {\n const palette = nativeThemes[mode];\n\n return {\n control: nativeThemeDimensions.control,\n color: {\n accent: palette.accent,\n accentPressed: palette.accentPressed,\n background: palette.background,\n border: palette.border,\n danger: palette.danger,\n muted: palette.muted,\n panel: palette.panel,\n panelRaised: palette.backgroundFronted,\n scrim: palette.scrim,\n scrimStrong: palette.scrimStrong,\n success: palette.success,\n text: palette.textPrimary,\n textSecondary: palette.textSecondary\n },\n mode,\n radius: nativeThemeDimensions.radius,\n space: nativeThemeDimensions.space\n } as const;\n}\n\n/**\n * Backwards-compatible dark Native theme.\n *\n * New components should consume the context-backed `useNativeTheme` hook so\n * they respond to the Native renderer's configured color scheme.\n */\nexport const nativeTheme = resolveNativeTheme(\"dark\");\n\nexport type NativeTheme = typeof nativeTheme;\n","import { type ReactNode, useState } from \"react\";\nimport {\n ActivityIndicator,\n type GestureResponderEvent,\n Pressable,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle\n} from \"react-native\";\nimport { type NativeTheme } from \"./tokens\";\nimport { useNativeTheme } from \"./theme-provider\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"destructive\"\n | \"destructiveGhost\"\n | \"ghost\";\n\nexport type ButtonSize = \"regular\" | \"large\" | \"compact\" | \"icon\";\n\nexport interface NativeButtonProps {\n accessibilityLabel?: string;\n disabled?: boolean;\n label: string;\n leading?: ReactNode;\n loading?: boolean;\n onPress(event: GestureResponderEvent): void;\n size?: ButtonSize;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n variant?: ButtonVariant;\n}\n\n/**\n * Native counterpart of the UI System Button contract.\n *\n * Its interaction hierarchy is adapted from React Native Reusables' Button,\n * while the styling is deliberately token-backed and platform-native.\n */\nexport function NativeButton({\n accessibilityLabel,\n disabled = false,\n label,\n leading,\n loading = false,\n onPress,\n size = \"regular\",\n style,\n testID,\n variant = \"primary\"\n}: NativeButtonProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const [pressed, setPressed] = useState(false);\n const unavailable = disabled || loading;\n const foreground = textColorByVariant(theme)[variant];\n const hasLabel = label.trim().length > 0;\n\n return (\n <Pressable\n accessibilityLabel={accessibilityLabel ?? label}\n accessibilityRole=\"button\"\n accessibilityState={{ busy: loading, disabled: unavailable }}\n disabled={unavailable}\n onPress={onPress}\n onPressIn={() => setPressed(true)}\n onPressOut={() => setPressed(false)}\n style={[\n styles.button,\n styles[size],\n variantStyles(theme)[variant],\n pressed && !unavailable ? styles.pressed : undefined,\n unavailable ? styles.disabled : undefined,\n style\n ]}\n testID={testID}\n >\n <View style={styles.content}>\n {loading ? (\n <ActivityIndicator color={foreground} size=\"small\" />\n ) : (\n <>\n {leading ? (\n <View style={[styles.leading, !hasLabel && styles.leadingOnly]}>\n {leading}\n </View>\n ) : null}\n {hasLabel ? (\n <Text\n numberOfLines={1}\n style={[styles.label, { color: foreground }]}\n >\n {label}\n </Text>\n ) : null}\n </>\n )}\n </View>\n </Pressable>\n );\n}\n\nfunction textColorByVariant(theme: NativeTheme): Record<ButtonVariant, string> {\n return {\n primary: theme.color.background,\n secondary: theme.color.text,\n destructive: theme.color.background,\n destructiveGhost: theme.color.danger,\n ghost: theme.color.text\n };\n}\n\nfunction variantStyles(theme: NativeTheme): Record<ButtonVariant, ViewStyle> {\n return {\n primary: { backgroundColor: theme.color.accent },\n secondary: {\n backgroundColor: theme.color.panelRaised,\n borderColor: theme.color.border,\n borderWidth: StyleSheet.hairlineWidth\n },\n destructive: { backgroundColor: theme.color.danger },\n destructiveGhost: { backgroundColor: \"transparent\" },\n ghost: { backgroundColor: \"transparent\" }\n };\n}\n\nfunction createStyles(theme: NativeTheme) {\n return StyleSheet.create({\n button: {\n alignItems: \"center\",\n borderRadius: theme.radius.medium,\n justifyContent: \"center\"\n },\n compact: {\n minHeight: theme.control.compact,\n paddingHorizontal: theme.space.small\n },\n content: {\n alignItems: \"center\",\n flexDirection: \"row\",\n justifyContent: \"center\"\n },\n disabled: { opacity: 0.45 },\n icon: {\n height: theme.control.icon,\n paddingHorizontal: 0,\n width: theme.control.icon\n },\n label: { fontSize: theme.space.medium, fontWeight: \"700\" },\n large: {\n minHeight: theme.control.large,\n paddingHorizontal: theme.space.medium\n },\n leading: { marginRight: theme.space.small },\n leadingOnly: { marginRight: 0 },\n pressed: { opacity: 0.82 },\n regular: {\n minHeight: theme.control.regular,\n paddingHorizontal: theme.space.medium\n }\n });\n}\n","import type { ReactNode } from \"react\";\nimport { View } from \"react-native\";\n\nexport type NativeControlGlyphVariant =\n | \"add\"\n | \"back\"\n | \"chevron\"\n | \"send\"\n | \"status\"\n | \"stop\";\n\ninterface NativeControlGlyphBaseProps {\n color: string;\n size?: number;\n}\n\ninterface NativeGlyphRenderProps {\n color: string;\n size: number;\n}\n\nexport type NativeControlGlyphProps = NativeControlGlyphBaseProps &\n (\n | {\n direction: \"down\" | \"left\" | \"right\" | \"up\";\n variant: \"chevron\";\n }\n | {\n direction?: never;\n variant: Exclude<NativeControlGlyphVariant, \"chevron\">;\n }\n );\n\nexport function NativeControlGlyph(props: NativeControlGlyphProps) {\n switch (props.variant) {\n case \"add\":\n return <AddGlyph color={props.color} size={props.size ?? 20} />;\n case \"back\":\n return <BackGlyph color={props.color} size={props.size ?? 20} />;\n case \"chevron\":\n return (\n <ChevronGlyph\n color={props.color}\n direction={props.direction}\n size={props.size ?? 18}\n />\n );\n case \"send\":\n return <SendGlyph color={props.color} size={props.size ?? 20} />;\n case \"status\":\n return <StatusGlyph color={props.color} size={props.size ?? 8} />;\n case \"stop\":\n return <StopGlyph color={props.color} size={props.size ?? 20} />;\n }\n}\n\nfunction AddGlyph({ color, size }: NativeGlyphRenderProps) {\n const stroke = Math.max(2, size * 0.1);\n return (\n <GlyphFrame size={size}>\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: stroke,\n left: size * 0.2,\n position: \"absolute\",\n top: (size - stroke) / 2,\n width: size * 0.6\n }}\n />\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: size * 0.6,\n left: (size - stroke) / 2,\n position: \"absolute\",\n top: size * 0.2,\n width: stroke\n }}\n />\n </GlyphFrame>\n );\n}\n\nfunction BackGlyph({ color, size }: NativeGlyphRenderProps) {\n const stroke = Math.max(2, size * 0.1);\n const wing = size * 0.38;\n return (\n <GlyphFrame size={size}>\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: stroke,\n left: size * 0.16,\n position: \"absolute\",\n top: (size - stroke) / 2,\n width: size * 0.68\n }}\n />\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: stroke,\n left: size * 0.14,\n position: \"absolute\",\n top: size * 0.34,\n transform: [{ rotate: \"-45deg\" }],\n width: wing\n }}\n />\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: stroke,\n left: size * 0.14,\n position: \"absolute\",\n top: size * 0.61,\n transform: [{ rotate: \"45deg\" }],\n width: wing\n }}\n />\n </GlyphFrame>\n );\n}\n\nfunction ChevronGlyph({\n color,\n direction,\n size\n}: NativeGlyphRenderProps & {\n direction: \"down\" | \"left\" | \"right\" | \"up\";\n}) {\n const stroke = Math.max(2, size * 0.11);\n const bar = size * 0.48;\n const transforms =\n direction === \"down\"\n ? ([\"45deg\", \"-45deg\"] as const)\n : direction === \"up\"\n ? ([\"-45deg\", \"45deg\"] as const)\n : direction === \"right\"\n ? ([\"45deg\", \"-45deg\"] as const)\n : ([\"-45deg\", \"45deg\"] as const);\n const vertical = direction === \"left\" || direction === \"right\";\n\n return (\n <GlyphFrame size={size}>\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: stroke,\n left: vertical ? size * 0.28 : size * 0.18,\n position: \"absolute\",\n top: vertical ? size * 0.34 : size * 0.42,\n transform: [{ rotate: transforms[0] }],\n width: bar\n }}\n />\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: stroke,\n left: vertical ? size * 0.28 : size * 0.48,\n position: \"absolute\",\n top: vertical ? size * 0.6 : size * 0.42,\n transform: [{ rotate: transforms[1] }],\n width: bar\n }}\n />\n </GlyphFrame>\n );\n}\n\nfunction SendGlyph({ color, size }: NativeGlyphRenderProps) {\n const stroke = Math.max(2, size * 0.1);\n return (\n <GlyphFrame size={size}>\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: size * 0.68,\n left: (size - stroke) / 2,\n position: \"absolute\",\n top: size * 0.2,\n width: stroke\n }}\n />\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: stroke,\n left: size * 0.28,\n position: \"absolute\",\n top: size * 0.26,\n transform: [{ rotate: \"-45deg\" }],\n width: size * 0.38\n }}\n />\n <View\n style={{\n backgroundColor: color,\n borderRadius: stroke / 2,\n height: stroke,\n left: size * 0.46,\n position: \"absolute\",\n top: size * 0.26,\n transform: [{ rotate: \"45deg\" }],\n width: size * 0.38\n }}\n />\n </GlyphFrame>\n );\n}\n\nfunction StatusGlyph({ color, size }: NativeGlyphRenderProps) {\n return (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{\n backgroundColor: color,\n borderRadius: size / 2,\n height: size,\n width: size\n }}\n />\n );\n}\n\nfunction StopGlyph({ color, size }: NativeGlyphRenderProps) {\n const square = size * 0.48;\n return (\n <GlyphFrame size={size}>\n <View\n style={{\n backgroundColor: color,\n borderRadius: Math.max(2, size * 0.08),\n height: square,\n left: (size - square) / 2,\n position: \"absolute\",\n top: (size - square) / 2,\n width: square\n }}\n />\n </GlyphFrame>\n );\n}\n\nfunction GlyphFrame({ children, size }: { children: ReactNode; size: number }) {\n return (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={{ height: size, width: size }}\n >\n {children}\n </View>\n );\n}\n","import type { ReactNode } from \"react\";\nimport {\n StyleSheet,\n type GestureResponderEvent,\n type StyleProp,\n type ViewStyle\n} from \"react-native\";\nimport { NativeButton, type ButtonSize, type ButtonVariant } from \"./button\";\n\nexport interface NativeIconButtonProps {\n accessibilityLabel: string;\n disabled?: boolean;\n icon: ReactNode;\n onPress(event: GestureResponderEvent): void;\n size?: Extract<ButtonSize, \"compact\" | \"icon\">;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n variant?: ButtonVariant;\n}\n\nexport function NativeIconButton({\n accessibilityLabel,\n disabled = false,\n icon,\n onPress,\n size = \"icon\",\n style,\n testID,\n variant = \"ghost\"\n}: NativeIconButtonProps) {\n return (\n <NativeButton\n accessibilityLabel={accessibilityLabel}\n disabled={disabled}\n label=\"\"\n leading={icon}\n onPress={onPress}\n size={size}\n style={[styles.button, style]}\n testID={testID}\n variant={variant}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n button: { paddingHorizontal: 0 }\n});\n","import type { ReactNode } from \"react\";\nimport {\n Pressable,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle\n} from \"react-native\";\nimport { type NativeTheme } from \"./tokens\";\nimport { useNativeTheme } from \"./theme-provider\";\n\nexport interface NativeListRowProps {\n accessibilityLabel?: string;\n description?: ReactNode;\n disabled?: boolean;\n leading?: ReactNode;\n onLongPress?(): void;\n onPress?(): void;\n selected?: boolean;\n style?: StyleProp<ViewStyle>;\n title: string;\n titleNumberOfLines?: number;\n trailing?: ReactNode;\n}\n\nexport function NativeListRow({\n accessibilityLabel,\n description,\n disabled = false,\n leading,\n onLongPress,\n onPress,\n selected = false,\n style,\n title,\n titleNumberOfLines = 2,\n trailing\n}: NativeListRowProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const interactive = onLongPress !== undefined || onPress !== undefined;\n\n return (\n <Pressable\n accessibilityLabel={accessibilityLabel ?? title}\n accessibilityRole={interactive ? \"button\" : undefined}\n accessibilityState={{ disabled, selected }}\n disabled={!interactive || disabled}\n onLongPress={onLongPress}\n onPress={onPress}\n style={({ pressed }) => [\n styles.row,\n selected ? styles.selected : undefined,\n pressed && interactive && !disabled ? styles.pressed : undefined,\n disabled ? styles.disabled : undefined,\n style\n ]}\n >\n <View style={styles.content}>\n {selected ? <View style={styles.selectedIndicator} /> : null}\n {leading ? <View style={styles.leading}>{leading}</View> : null}\n <View style={styles.copy}>\n <Text\n numberOfLines={titleNumberOfLines}\n style={[styles.title, selected ? styles.titleSelected : undefined]}\n >\n {title}\n </Text>\n {typeof description === \"string\" ? (\n <Text numberOfLines={1} style={styles.description}>\n {description}\n </Text>\n ) : description ? (\n <View style={styles.descriptionSlot}>{description}</View>\n ) : null}\n </View>\n {trailing ? <View style={styles.trailing}>{trailing}</View> : null}\n </View>\n </Pressable>\n );\n}\n\nfunction createStyles(theme: NativeTheme) {\n return StyleSheet.create({\n content: {\n alignItems: \"center\",\n flex: 1,\n flexDirection: \"row\",\n minHeight: theme.control.row,\n paddingHorizontal: theme.space.small,\n position: \"relative\",\n width: \"100%\"\n },\n copy: { flex: 1, paddingVertical: theme.space.small },\n description: {\n color: theme.color.muted,\n fontSize: theme.space.small,\n marginTop: theme.space.small / 2\n },\n descriptionSlot: { marginTop: theme.space.small / 2 },\n disabled: { opacity: 0.45 },\n leading: { marginRight: theme.space.small },\n pressed: { opacity: 0.7 },\n row: {\n borderRadius: theme.radius.small,\n minHeight: theme.control.row,\n overflow: \"hidden\"\n },\n selected: { backgroundColor: theme.color.panelRaised },\n selectedIndicator: {\n backgroundColor: theme.color.accent,\n borderRadius: theme.radius.small / 2,\n bottom: theme.radius.small,\n left: 0,\n position: \"absolute\",\n top: theme.radius.small,\n width: theme.radius.small / 2\n },\n title: {\n color: theme.color.textSecondary,\n fontSize: theme.space.medium - 2,\n fontWeight: \"600\",\n lineHeight: theme.space.medium + theme.space.small - 1\n },\n titleSelected: { color: theme.color.text },\n trailing: { marginLeft: theme.space.small }\n });\n}\n","import { StyleSheet, View, type StyleProp, type ViewStyle } from \"react-native\";\nimport { useNativeTheme } from \"./theme-provider\";\nimport type { NativeTheme } from \"./tokens\";\n\nexport interface NativeProgressBarProps {\n accessibilityLabel: string;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n value: number | null;\n}\n\n/** Token-backed determinate or indeterminate progress for Native renderers. */\nexport function NativeProgressBar({\n accessibilityLabel,\n style,\n testID,\n value\n}: NativeProgressBarProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const normalized = value === null ? null : Math.min(1, Math.max(0, value));\n const percent = normalized === null ? null : Math.round(normalized * 100);\n\n return (\n <View\n accessibilityLabel={accessibilityLabel}\n accessibilityRole=\"progressbar\"\n accessibilityValue={\n percent === null ? undefined : { max: 100, min: 0, now: percent }\n }\n style={[styles.track, style]}\n testID={testID}\n >\n <View\n style={[\n styles.fill,\n normalized === null\n ? styles.indeterminate\n : { width: `${percent ?? 0}%` }\n ]}\n />\n </View>\n );\n}\n\nfunction createStyles(theme: NativeTheme) {\n return StyleSheet.create({\n fill: {\n backgroundColor: theme.color.accent,\n borderRadius: theme.radius.small,\n height: \"100%\"\n },\n indeterminate: { alignSelf: \"center\", width: \"35%\" },\n track: {\n backgroundColor: theme.color.panelRaised,\n borderColor: theme.color.border,\n borderRadius: theme.radius.small,\n borderWidth: StyleSheet.hairlineWidth,\n height: theme.space.small,\n overflow: \"hidden\",\n width: \"100%\"\n }\n });\n}\n","import type { ReactNode } from \"react\";\nimport {\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n StyleSheet\n} from \"react-native\";\nimport { useNativeTheme } from \"./theme-provider\";\n\nexport interface NativeSheetProps {\n children: ReactNode;\n closeAccessibilityLabel: string;\n height?: number | `${number}%`;\n onOpenChange(open: boolean): void;\n open: boolean;\n}\n\n/**\n * Controlled sheet backed by React Native's window-level Modal.\n *\n * Callers own whether the sheet is open and what product actions its content\n * performs.\n */\nexport function NativeSheet({\n children,\n closeAccessibilityLabel,\n height,\n onOpenChange,\n open\n}: NativeSheetProps) {\n const theme = useNativeTheme();\n const styles = createStyles(theme);\n const dismiss = () => onOpenChange(false);\n\n return (\n <Modal\n animationType=\"fade\"\n onRequestClose={dismiss}\n presentationStyle=\"overFullScreen\"\n statusBarTranslucent\n transparent\n visible={open}\n >\n <KeyboardAvoidingView\n accessible={false}\n behavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n keyboardVerticalOffset={0}\n onAccessibilityEscape={dismiss}\n style={styles.backdrop}\n >\n <Pressable\n accessibilityLabel={closeAccessibilityLabel}\n accessibilityRole=\"button\"\n accessible\n onPress={dismiss}\n style={StyleSheet.absoluteFill}\n testID=\"native-sheet-backdrop\"\n />\n <Pressable\n accessible={false}\n onPress={() => undefined}\n style={[styles.sheet, height === undefined ? null : { height }]}\n testID=\"native-sheet-panel\"\n >\n {children}\n </Pressable>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n\nfunction createStyles(theme: ReturnType<typeof useNativeTheme>) {\n return StyleSheet.create({\n backdrop: {\n backgroundColor: theme.color.scrim,\n flex: 1,\n justifyContent: \"flex-end\"\n },\n sheet: {\n backgroundColor: theme.color.panelRaised,\n borderTopLeftRadius: theme.radius.large,\n borderTopRightRadius: theme.radius.large,\n maxHeight: \"80%\",\n overflow: \"hidden\"\n }\n });\n}\n"],"mappings":"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","names":["jsx","styles","useState","ActivityIndicator","StyleSheet","Text","View","jsx","jsxs","styles","createStyles","useState","View","ActivityIndicator","Text","StyleSheet","View","jsx","jsxs","StyleSheet","jsx","StyleSheet","Pressable","StyleSheet","Text","View","jsx","jsxs","styles","createStyles","Pressable","View","Text","StyleSheet","StyleSheet","View","jsx","styles","createStyles","View","StyleSheet","Pressable","StyleSheet","jsx","jsxs","styles","createStyles","Pressable","StyleSheet"]}
|
package/package.json
CHANGED
package/ui-system.md
CHANGED
|
@@ -79,6 +79,12 @@ determinate values to the inclusive zero-to-one range, exposes progressbar
|
|
|
79
79
|
accessibility semantics, and accepts `null` for an indeterminate task. Product
|
|
80
80
|
phase labels, byte counts, cancellation, and workflow state stay caller-owned.
|
|
81
81
|
|
|
82
|
+
`NativeControlGlyph` is the decorative React Native control-glyph primitive.
|
|
83
|
+
Its finite variants cover add, back, chevron, send, status, and stop shapes;
|
|
84
|
+
callers supply the semantic token color and keep the localized accessible name
|
|
85
|
+
on the owning control. Chevron direction is explicit, and glyph content remains
|
|
86
|
+
hidden from the accessibility tree.
|
|
87
|
+
|
|
82
88
|
## Current Package Role
|
|
83
89
|
|
|
84
90
|
`@tutti-os/ui-system` is the single source of truth for:
|