@tutti-os/ui-system 0.0.323 → 0.0.324

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/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 jsx4 } from "react/jsx-runtime";
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__ */ jsx4(
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 View3
620
+ View as View4
377
621
  } from "react-native";
378
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
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__ */ jsx5(
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__ */ jsxs3(View3, { style: styles2.content, children: [
412
- selected ? /* @__PURE__ */ jsx5(View3, { style: styles2.selectedIndicator }) : null,
413
- leading ? /* @__PURE__ */ jsx5(View3, { style: styles2.leading, children: leading }) : null,
414
- /* @__PURE__ */ jsxs3(View3, { style: styles2.copy, children: [
415
- /* @__PURE__ */ jsx5(
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__ */ jsx5(Text3, { numberOfLines: 1, style: styles2.description, children: description }) : description ? /* @__PURE__ */ jsx5(View3, { style: styles2.descriptionSlot, children: description }) : null
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__ */ jsx5(View3, { style: styles2.trailing, children: trailing }) : null
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 View4 } from "react-native";
479
- import { jsx as jsx6 } from "react/jsx-runtime";
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__ */ jsx6(
491
- View4,
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__ */ jsx6(
499
- View4,
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 jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
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__ */ jsx7(
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__ */ jsxs4(
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__ */ jsx7(
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__ */ jsx7(
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,
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/ui-system",
3
- "version": "0.0.323",
3
+ "version": "0.0.324",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
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: