@nexub/react-native 0.0.0-stage → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +111 -2
  2. package/lib/module/components/actions.js +222 -0
  3. package/lib/module/components/actions.js.map +1 -0
  4. package/lib/module/components/containers.js +292 -0
  5. package/lib/module/components/containers.js.map +1 -0
  6. package/lib/module/components/display.js +266 -0
  7. package/lib/module/components/display.js.map +1 -0
  8. package/lib/module/components/feedback.js +464 -0
  9. package/lib/module/components/feedback.js.map +1 -0
  10. package/lib/module/components/inputs.js +746 -0
  11. package/lib/module/components/inputs.js.map +1 -0
  12. package/lib/module/components/mobile.js +811 -0
  13. package/lib/module/components/mobile.js.map +1 -0
  14. package/lib/module/components/overlays.js +418 -0
  15. package/lib/module/components/overlays.js.map +1 -0
  16. package/lib/module/components/shared.js +57 -0
  17. package/lib/module/components/shared.js.map +1 -0
  18. package/lib/module/hooks/useControllableState.js +23 -0
  19. package/lib/module/hooks/useControllableState.js.map +1 -0
  20. package/lib/module/index.js +30 -0
  21. package/lib/module/index.js.map +1 -0
  22. package/lib/module/package.json +1 -0
  23. package/lib/module/patterns/app.js +709 -0
  24. package/lib/module/patterns/app.js.map +1 -0
  25. package/lib/module/patterns/auth.js +224 -0
  26. package/lib/module/patterns/auth.js.map +1 -0
  27. package/lib/module/patterns/index.js +7 -0
  28. package/lib/module/patterns/index.js.map +1 -0
  29. package/lib/module/patterns/money.js +419 -0
  30. package/lib/module/patterns/money.js.map +1 -0
  31. package/lib/module/primitives/Icon.js +17 -0
  32. package/lib/module/primitives/Icon.js.map +1 -0
  33. package/lib/module/primitives/Layout.js +79 -0
  34. package/lib/module/primitives/Layout.js.map +1 -0
  35. package/lib/module/primitives/Pressable.js +77 -0
  36. package/lib/module/primitives/Pressable.js.map +1 -0
  37. package/lib/module/primitives/ScreenContainer.js +58 -0
  38. package/lib/module/primitives/ScreenContainer.js.map +1 -0
  39. package/lib/module/primitives/Surface.js +57 -0
  40. package/lib/module/primitives/Surface.js.map +1 -0
  41. package/lib/module/primitives/Text.js +70 -0
  42. package/lib/module/primitives/Text.js.map +1 -0
  43. package/lib/module/theme/ThemeProvider.js +127 -0
  44. package/lib/module/theme/ThemeProvider.js.map +1 -0
  45. package/lib/module/theme/fonts.js +56 -0
  46. package/lib/module/theme/fonts.js.map +1 -0
  47. package/lib/module/theme/haptics.js +56 -0
  48. package/lib/module/theme/haptics.js.map +1 -0
  49. package/lib/module/theme/navigation.js +99 -0
  50. package/lib/module/theme/navigation.js.map +1 -0
  51. package/lib/typescript/components/actions.d.ts +53 -0
  52. package/lib/typescript/components/actions.d.ts.map +1 -0
  53. package/lib/typescript/components/containers.d.ts +59 -0
  54. package/lib/typescript/components/containers.d.ts.map +1 -0
  55. package/lib/typescript/components/display.d.ts +62 -0
  56. package/lib/typescript/components/display.d.ts.map +1 -0
  57. package/lib/typescript/components/feedback.d.ts +93 -0
  58. package/lib/typescript/components/feedback.d.ts.map +1 -0
  59. package/lib/typescript/components/inputs.d.ts +141 -0
  60. package/lib/typescript/components/inputs.d.ts.map +1 -0
  61. package/lib/typescript/components/mobile.d.ts +173 -0
  62. package/lib/typescript/components/mobile.d.ts.map +1 -0
  63. package/lib/typescript/components/overlays.d.ts +74 -0
  64. package/lib/typescript/components/overlays.d.ts.map +1 -0
  65. package/lib/typescript/components/shared.d.ts +20 -0
  66. package/lib/typescript/components/shared.d.ts.map +1 -0
  67. package/lib/typescript/hooks/useControllableState.d.ts +6 -0
  68. package/lib/typescript/hooks/useControllableState.d.ts.map +1 -0
  69. package/lib/typescript/index.d.ts +37 -0
  70. package/lib/typescript/index.d.ts.map +1 -0
  71. package/lib/typescript/package.json +1 -0
  72. package/lib/typescript/patterns/app.d.ts +139 -0
  73. package/lib/typescript/patterns/app.d.ts.map +1 -0
  74. package/lib/typescript/patterns/auth.d.ts +54 -0
  75. package/lib/typescript/patterns/auth.d.ts.map +1 -0
  76. package/lib/typescript/patterns/index.d.ts +7 -0
  77. package/lib/typescript/patterns/index.d.ts.map +1 -0
  78. package/lib/typescript/patterns/money.d.ts +106 -0
  79. package/lib/typescript/patterns/money.d.ts.map +1 -0
  80. package/lib/typescript/primitives/Icon.d.ts +12 -0
  81. package/lib/typescript/primitives/Icon.d.ts.map +1 -0
  82. package/lib/typescript/primitives/Layout.d.ts +26 -0
  83. package/lib/typescript/primitives/Layout.d.ts.map +1 -0
  84. package/lib/typescript/primitives/Pressable.d.ts +21 -0
  85. package/lib/typescript/primitives/Pressable.d.ts.map +1 -0
  86. package/lib/typescript/primitives/ScreenContainer.d.ts +25 -0
  87. package/lib/typescript/primitives/ScreenContainer.d.ts.map +1 -0
  88. package/lib/typescript/primitives/Surface.d.ts +23 -0
  89. package/lib/typescript/primitives/Surface.d.ts.map +1 -0
  90. package/lib/typescript/primitives/Text.d.ts +21 -0
  91. package/lib/typescript/primitives/Text.d.ts.map +1 -0
  92. package/lib/typescript/theme/ThemeProvider.d.ts +69 -0
  93. package/lib/typescript/theme/ThemeProvider.d.ts.map +1 -0
  94. package/lib/typescript/theme/fonts.d.ts +25 -0
  95. package/lib/typescript/theme/fonts.d.ts.map +1 -0
  96. package/lib/typescript/theme/haptics.d.ts +3 -0
  97. package/lib/typescript/theme/haptics.d.ts.map +1 -0
  98. package/lib/typescript/theme/navigation.d.ts +158 -0
  99. package/lib/typescript/theme/navigation.d.ts.map +1 -0
  100. package/package.json +138 -3
  101. package/src/components/actions.tsx +259 -0
  102. package/src/components/containers.tsx +341 -0
  103. package/src/components/display.tsx +314 -0
  104. package/src/components/feedback.tsx +522 -0
  105. package/src/components/inputs.tsx +851 -0
  106. package/src/components/mobile.tsx +879 -0
  107. package/src/components/overlays.tsx +485 -0
  108. package/src/components/shared.ts +54 -0
  109. package/src/hooks/useControllableState.ts +27 -0
  110. package/src/index.ts +175 -0
  111. package/src/patterns/app.tsx +715 -0
  112. package/src/patterns/auth.tsx +266 -0
  113. package/src/patterns/index.ts +57 -0
  114. package/src/patterns/money.tsx +458 -0
  115. package/src/primitives/Icon.tsx +15 -0
  116. package/src/primitives/Layout.tsx +71 -0
  117. package/src/primitives/Pressable.tsx +94 -0
  118. package/src/primitives/ScreenContainer.tsx +65 -0
  119. package/src/primitives/Surface.tsx +75 -0
  120. package/src/primitives/Text.tsx +79 -0
  121. package/src/theme/ThemeProvider.tsx +210 -0
  122. package/src/theme/fonts.ts +52 -0
  123. package/src/theme/haptics.ts +57 -0
  124. package/src/theme/navigation.ts +68 -0
package/README.md CHANGED
@@ -1,3 +1,112 @@
1
- # Temporary Holding Version
1
+ # @nexub/react-native
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ React Native components and screen patterns for Nexub Design System. They use the same tokens, brands and prop names as `@nexub/react` on the web.
4
+
5
+ **Native chrome, Nexub content.** The system draws the tab bar, stack header, back gesture, action sheets, pickers and iOS 26 Liquid Glass; Nexub themes them. Everything inside a screen (lists, cards, buttons, inputs, money) is drawn by Nexub, so it looks the same on iOS, Android and the web.
6
+
7
+ Status: **alpha**. Built for Expo SDK 57+ / React Native 0.86+ (New Architecture). Works in Expo apps and bare React Native apps.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npx expo install @nexub/react-native react-native-reanimated react-native-worklets react-native-svg react-native-safe-area-context expo-font
13
+ ```
14
+
15
+ Optional peers. Add only what you use; without them the feature is a no-op or the component tells you what to install:
16
+
17
+ | Package | Used by |
18
+ |---|---|
19
+ | `expo-haptics` | Semantic haptics on every control |
20
+ | `expo-glass-effect` | Native Liquid Glass (`Surface material="glass"`) on iOS 26+ |
21
+ | `expo-screen-capture` | `PrivacyShield preventCapture` |
22
+ | `@react-native-community/datetimepicker` | `DateTimeField` |
23
+
24
+ `@nexub/tokens`, `@nexub/core`, `@nexub/icons` and the fonts (Inter, Plus Jakarta Sans, Geist Mono; OFL) come with the package.
25
+
26
+ ## Set up
27
+
28
+ ```tsx
29
+ import { useFonts } from 'expo-font';
30
+ import { Stack } from 'expo-router';
31
+ import { NexubNativeProvider, ToastProvider, nexubFonts, useNexubNavigation } from '@nexub/react-native';
32
+
33
+ function Screens() {
34
+ const nav = useNexubNavigation(); // native stack in Nexub colours and type
35
+ return <Stack screenOptions={nav.stack} />;
36
+ }
37
+
38
+ export default function RootLayout() {
39
+ const [ready] = useFonts(nexubFonts);
40
+ if (!ready) return null;
41
+ return (
42
+ <NexubNativeProvider product="payub">
43
+ <ToastProvider>
44
+ <Screens />
45
+ </ToastProvider>
46
+ </NexubNativeProvider>
47
+ );
48
+ }
49
+ ```
50
+
51
+ `NexubNativeProvider` props:
52
+
53
+ | Prop | Default | |
54
+ |---|---|---|
55
+ | `scheme` | `'system'` | `'light'`, `'dark'` or follow the OS |
56
+ | `contrast` | `'system'` | follows iOS Increase Contrast / Android high-contrast text (re-read on foreground) |
57
+ | `product` | none | `'leap' \| 'bookub' \| 'payub' \| 'founderub'`: remaps the tertiary family |
58
+ | `seed`, `seedTarget` | none | white-label colour: regenerates the primary (or tertiary) family with contrast-safe tones |
59
+ | `glass` | `'balanced'` | the user's glass dial; forced `'off'` under Reduce Transparency |
60
+ | `haptics` | `true` | the user's haptics setting |
61
+ | `fonts` | `'nexub'` | `'system'` to use the platform font |
62
+ | `locale`, `dir`, `messages` | `'en'` | Intl locale, RTL (derived from the locale) and translated strings, same as web `NexubProvider` |
63
+
64
+ Hooks: `useTheme()`, `useRoles()`, `useHaptics()`, `useNexubMessages()`, `useNexubNavigation()`.
65
+
66
+ ## Components
67
+
68
+ Names and props match `@nexub/react` where a web twin exists.
69
+
70
+ - **Primitives:** `Text`, `Heading`, `Pressable` (state layer, 0.97 press spring, haptic), `Surface` (tonal tiers, elevation, glass), `Box`, `Stack`, `Inline`, `Icon`, `ScreenContainer`.
71
+ - **Actions:** `Button`, `IconButton`, `ButtonGroup`, `Link`.
72
+ - **Data:** `Amount`, `Badge`, `Avatar`, `AvatarGroup`, `Divider`.
73
+ - **Inputs:** `TextField`, `PasswordInput`, `SearchField`, `MoneyInput`, `Stepper`, `Checkbox`, `RadioGroup` / `Radio`, `Switch` (the platform switch), `SegmentedControl`, `Slider`, `Chip`, `FilterChip`, `Select`, `DateTimeField`, `OTPInput`, `NumericKeypad`, `ExpressiveMoneyInput`.
74
+ - **Containers:** `Card`, `ListItem` (navigation, switch, checkbox, radio, button and value rows), `ListSection`, `Accordion`.
75
+ - **Overlays:** `BottomSheet` (detents), `ActionSheet` (system sheet on iOS), `ContextMenu`, `Dialog`.
76
+ - **Feedback:** `Banner`, `ToastProvider` / `useToast`, `Progress`, `LoadingIndicator`, `Skeleton`, `EmptyState`, `ErrorState`, `OfflineBanner`, `Coachmark`.
77
+ - **Mobile:** `SwipeableRow`, `RefreshControl`, `Carousel`, `PageIndicator`, `StickyFooter`, `SensitiveValue`, `PrivacyShield`, `FAB` (Android only by default).
78
+ - **Navigation helpers:** `nexubStackOptions`, `nexubNavigationTheme`, `nexubTabsOptions`.
79
+
80
+ Icons: `import { Search } from '@nexub/icons/native'`. These are the same names as `@nexub/icons`. Colour them with `<Icon icon={Search} color="primary" />`.
81
+
82
+ ## Patterns
83
+
84
+ `import { SignInScreen, AmountStep, ActivityList } from '@nexub/react-native/patterns'`. Each pattern is a screen template that takes data and callbacks, so it works with any router.
85
+
86
+ - **Auth:** `AuthScreen`, `SignInScreen`, `VerifyCodeScreen`, `LockScreen`.
87
+ - **Money:** `FlowStep`, `AmountStep`, `ReviewStep`, `ActivityList`, `TransactionDetail`, `ResultScreen`.
88
+ - **App:** `OnboardingScreen`, `PermissionPrimer`, `SettingsScreen`, `ProfileHeader`, `AppearanceSection`, `NotificationsInbox`, `SearchScreen`, `ChatScreen`, `PaywallScreen`, `AppSwitcherSheet`.
89
+
90
+ ## Rules the components follow
91
+
92
+ - **Touch targets:** every control reaches 44pt (`hitSlop` on smaller visuals). Primary actions use `size="lg"` (48).
93
+ - **Text scaling:** every role scales with the system text size. iOS follows Apple's Dynamic Type curve per role, and display and headline roles are capped so they don't push content off screen.
94
+ - **Screen readers:**
95
+ - A list row is one element ("Amazon, −$42.50, today").
96
+ - Swipe and long-press actions are also accessibility actions.
97
+ - Masked values read as "hidden".
98
+ - Toasts are announced.
99
+ - **Haptics are semantic** (`selection`, `toggleOn`/`toggleOff`, `confirm`, `reject`, `warning`, `snap`), never on plain taps, and never the only feedback.
100
+ - **Motion:** M3 springs (no overshoot by default), off under Reduce Motion.
101
+ - **Glass:** for the control layer only, never content. It is native Liquid Glass on iOS 26+, solid elsewhere and whenever the user turns transparency down.
102
+ - **Security:** `OTPInput` uses one field, so SMS autofill works. `PasswordInput` sets the platform autofill hints. `SensitiveValue` re-masks when the app backgrounds. `PrivacyShield` covers the app-switcher snapshot. The library makes no network calls and stores nothing.
103
+
104
+ ## Testing your app
105
+
106
+ The library's own tests use Jest (jest-expo) and React Native Testing Library. In your Jest setup, stub `react-native-reanimated`'s APIs and use `react-native-safe-area-context/jest/mock`; `packages/react-native/jest.setup.js` in the repo shows the pattern.
107
+
108
+ ## Links
109
+
110
+ - Docs: https://nexub-ds-docs.pages.dev/getting-started/react-native
111
+ - Plan and decisions: [MOBILE_PLAN.md](https://github.com/Nexub-AI/nexub-ds/blob/development/MOBILE_PLAN.md)
112
+ - Web components: `@nexub/react`
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+
3
+ import * as React from 'react';
4
+ import { ActivityIndicator, View } from 'react-native';
5
+ import { Pressable } from "../primitives/Pressable.js";
6
+ import { Surface } from "../primitives/Surface.js";
7
+ import { Text } from "../primitives/Text.js";
8
+ import { useTheme } from "../theme/ThemeProvider.js";
9
+ import { TONE_ROLES, controlHeight, disabledOpacity, hitSlopFor } from "./shared.js";
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ // [container role | undefined, content role]
12
+ const VARIANT = {
13
+ filled: ['primary', 'on-primary'],
14
+ tonal: ['secondary-container', 'on-secondary-container'],
15
+ outlined: [undefined, 'on-surface'],
16
+ text: [undefined, 'primary'],
17
+ glass: [undefined, 'on-surface']
18
+ };
19
+ const LABEL = {
20
+ xs: 'label-md',
21
+ sm: 'label-md',
22
+ md: 'label-lg',
23
+ lg: 'label-lg',
24
+ xl: 'title-md'
25
+ };
26
+ const PAD = {
27
+ xs: 10,
28
+ sm: 14,
29
+ md: 20,
30
+ lg: 24,
31
+ xl: 28
32
+ };
33
+ const ICON = {
34
+ xs: 'xs',
35
+ sm: 'sm',
36
+ md: 'sm',
37
+ lg: 'md',
38
+ xl: 'md'
39
+ };
40
+ /** Capsule button. One `filled` (or toned) action per screen; the rest tonal/outlined/text. */
41
+ export function Button({
42
+ children,
43
+ variant = 'filled',
44
+ tone,
45
+ size = 'md',
46
+ loading,
47
+ loadingLabel,
48
+ fullWidth,
49
+ leadingIcon: Leading,
50
+ trailingIcon: Trailing,
51
+ disabled,
52
+ style,
53
+ accessibilityLabel,
54
+ ...rest
55
+ }) {
56
+ const theme = useTheme();
57
+ const {
58
+ roles
59
+ } = theme;
60
+ const [bgRole, fgRole] = tone ? TONE_ROLES[tone] : VARIANT[variant];
61
+ const height = controlHeight(theme, size);
62
+ const fg = roles[fgRole];
63
+ const inactive = disabled || loading;
64
+ const label = typeof children === 'string' ? children : undefined;
65
+ const body = /*#__PURE__*/_jsxs(View, {
66
+ style: {
67
+ flexDirection: 'row',
68
+ alignItems: 'center',
69
+ justifyContent: 'center',
70
+ gap: 8,
71
+ opacity: disabled ? disabledOpacity(theme) : 1
72
+ },
73
+ children: [loading ? /*#__PURE__*/_jsx(ActivityIndicator, {
74
+ size: "small",
75
+ color: fg
76
+ }) : Leading && /*#__PURE__*/_jsx(Leading, {
77
+ size: ICON[size],
78
+ color: fg
79
+ }), typeof children === 'string' ? /*#__PURE__*/_jsx(Text, {
80
+ variant: LABEL[size],
81
+ style: {
82
+ color: fg
83
+ },
84
+ numberOfLines: 1,
85
+ children: children
86
+ }) : children, !loading && Trailing && /*#__PURE__*/_jsx(Trailing, {
87
+ size: ICON[size],
88
+ color: fg
89
+ })]
90
+ });
91
+ const shape = [{
92
+ height,
93
+ paddingHorizontal: PAD[size],
94
+ borderRadius: theme.tokens.shape.control,
95
+ justifyContent: 'center',
96
+ alignSelf: fullWidth ? 'stretch' : 'flex-start',
97
+ backgroundColor: bgRole ? roles[bgRole] : 'transparent'
98
+ }, variant === 'outlined' && !tone && {
99
+ borderWidth: 1,
100
+ borderColor: roles['outline-variant']
101
+ }, disabled && bgRole && {
102
+ backgroundColor: roles['on-surface'] + '1f'
103
+ },
104
+ // disabled-container 12%
105
+ style];
106
+ return /*#__PURE__*/_jsx(Pressable, {
107
+ accessibilityLabel: accessibilityLabel ?? (loading && loadingLabel ? loadingLabel : label),
108
+ accessibilityState: {
109
+ disabled: !!inactive,
110
+ busy: !!loading
111
+ },
112
+ disabled: inactive,
113
+ hitSlop: hitSlopFor(height),
114
+ stateLayer: fgRole,
115
+ style: variant === 'glass' && !tone ? {
116
+ alignSelf: fullWidth ? 'stretch' : 'flex-start'
117
+ } : shape,
118
+ ...rest,
119
+ children: variant === 'glass' && !tone ? /*#__PURE__*/_jsx(Surface, {
120
+ material: "glass",
121
+ radius: "control",
122
+ style: [{
123
+ height,
124
+ paddingHorizontal: PAD[size],
125
+ justifyContent: 'center'
126
+ }, style],
127
+ children: body
128
+ }) : body
129
+ });
130
+ }
131
+ /** Circular icon-only button; always 44pt+ to touch. */
132
+ export function IconButton({
133
+ icon: Glyph,
134
+ label,
135
+ variant = 'text',
136
+ tone,
137
+ size = 'md',
138
+ selected,
139
+ disabled,
140
+ style,
141
+ ...rest
142
+ }) {
143
+ const theme = useTheme();
144
+ const [bgRole, fgRole] = tone ? TONE_ROLES[tone] : VARIANT[variant];
145
+ const fgSelected = selected ? 'primary' : variant === 'text' && !tone ? 'on-surface-variant' : fgRole;
146
+ const height = controlHeight(theme, size);
147
+ return /*#__PURE__*/_jsx(Pressable, {
148
+ accessibilityLabel: label,
149
+ accessibilityState: {
150
+ disabled: !!disabled,
151
+ selected
152
+ },
153
+ disabled: disabled,
154
+ hitSlop: hitSlopFor(height),
155
+ stateLayer: fgRole,
156
+ style: [{
157
+ width: height,
158
+ height,
159
+ borderRadius: height / 2,
160
+ alignItems: 'center',
161
+ justifyContent: 'center',
162
+ backgroundColor: bgRole ? theme.roles[bgRole] : 'transparent',
163
+ opacity: disabled ? disabledOpacity(theme) : 1
164
+ }, variant === 'outlined' && {
165
+ borderWidth: 1,
166
+ borderColor: theme.roles['outline-variant']
167
+ }, style],
168
+ ...rest,
169
+ children: /*#__PURE__*/_jsx(Glyph, {
170
+ size: ICON[size] === 'xs' ? 'sm' : size === 'xl' ? 'lg' : 'md',
171
+ color: theme.roles[fgSelected]
172
+ })
173
+ });
174
+ }
175
+ /** Related actions together. In a stack, put the primary action first. */
176
+ export function ButtonGroup({
177
+ children,
178
+ direction = 'row',
179
+ style
180
+ }) {
181
+ const {
182
+ tokens
183
+ } = useTheme();
184
+ return /*#__PURE__*/_jsx(View, {
185
+ style: [direction === 'row' ? {
186
+ flexDirection: 'row',
187
+ flexWrap: 'wrap',
188
+ gap: tokens.spacing[2]
189
+ } : {
190
+ gap: tokens.spacing[3],
191
+ alignItems: 'stretch'
192
+ }, style],
193
+ children: direction === 'stack' ? React.Children.map(children, c => /*#__PURE__*/React.isValidElement(c) ? /*#__PURE__*/React.cloneElement(c, {
194
+ fullWidth: true
195
+ }) : c) : children
196
+ });
197
+ }
198
+ /** Inline text action. Opens nothing by itself: pass `onPress` (e.g. router.push / Linking.openURL). */
199
+ export function Link({
200
+ children,
201
+ style,
202
+ ...rest
203
+ }) {
204
+ return /*#__PURE__*/_jsx(Pressable, {
205
+ accessibilityRole: "link",
206
+ accessibilityLabel: children,
207
+ stateLayer: false,
208
+ pressScale: false,
209
+ hitSlop: 8,
210
+ style: style,
211
+ ...rest,
212
+ children: /*#__PURE__*/_jsx(Text, {
213
+ variant: "label-lg",
214
+ color: "primary",
215
+ style: {
216
+ textDecorationLine: 'underline'
217
+ },
218
+ children: children
219
+ })
220
+ });
221
+ }
222
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","ActivityIndicator","View","Pressable","Surface","Text","useTheme","TONE_ROLES","controlHeight","disabledOpacity","hitSlopFor","jsx","_jsx","jsxs","_jsxs","VARIANT","filled","tonal","outlined","undefined","text","glass","LABEL","xs","sm","md","lg","xl","PAD","ICON","Button","children","variant","tone","size","loading","loadingLabel","fullWidth","leadingIcon","Leading","trailingIcon","Trailing","disabled","style","accessibilityLabel","rest","theme","roles","bgRole","fgRole","height","fg","inactive","label","body","flexDirection","alignItems","justifyContent","gap","opacity","color","numberOfLines","shape","paddingHorizontal","borderRadius","tokens","control","alignSelf","backgroundColor","borderWidth","borderColor","accessibilityState","busy","hitSlop","stateLayer","material","radius","IconButton","icon","Glyph","selected","fgSelected","width","ButtonGroup","direction","flexWrap","spacing","Children","map","c","isValidElement","cloneElement","Link","accessibilityRole","pressScale","textDecorationLine"],"sourceRoot":"../../../src","sources":["components/actions.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+
3
+ import * as React from 'react';
4
+ import { Switch as RNSwitch, View } from 'react-native';
5
+ import { Check, ChevronDown, ChevronRight } from '@nexub/icons/native';
6
+ import { useControllableState } from "../hooks/useControllableState.js";
7
+ import { Pressable } from "../primitives/Pressable.js";
8
+ import { Surface } from "../primitives/Surface.js";
9
+ import { Text } from "../primitives/Text.js";
10
+ import { useTheme } from "../theme/ThemeProvider.js";
11
+ import { Divider } from "./display.js";
12
+ import { disabledOpacity } from "./shared.js";
13
+
14
+ // ─── Card ────────────────────────────────────────────────────────────────────
15
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
+ /** Content container on a tonal tier. Hierarchy through tone, not shadow (elevation for floating cards only). */
17
+ export function Card({
18
+ onPress,
19
+ accessibilityLabel,
20
+ tone = 'surface-container-low',
21
+ radius = 'container',
22
+ style,
23
+ children,
24
+ ...rest
25
+ }) {
26
+ const {
27
+ tokens
28
+ } = useTheme();
29
+ const surface = /*#__PURE__*/_jsx(Surface, {
30
+ tone: tone,
31
+ radius: radius,
32
+ style: [{
33
+ padding: tokens.spacing[4],
34
+ gap: tokens.spacing[2]
35
+ }, style],
36
+ ...rest,
37
+ children: children
38
+ });
39
+ if (!onPress) return surface;
40
+ return /*#__PURE__*/_jsx(Pressable, {
41
+ accessibilityLabel: accessibilityLabel,
42
+ onPress: onPress,
43
+ style: {
44
+ borderRadius: tokens.shape[radius] ?? radius
45
+ },
46
+ children: surface
47
+ });
48
+ }
49
+
50
+ // ─── ListItem ────────────────────────────────────────────────────────────────
51
+
52
+ /**
53
+ * One row of a list (Wise "List Item" model). The whole row is a single
54
+ * target and a single screen-reader element: "Title, subtitle, value".
55
+ */
56
+ export function ListItem({
57
+ title,
58
+ subtitle,
59
+ leading,
60
+ value,
61
+ trailing,
62
+ variant: variantProp,
63
+ checked,
64
+ onCheckedChange,
65
+ onPress,
66
+ destructive,
67
+ disabled,
68
+ style
69
+ }) {
70
+ const theme = useTheme();
71
+ const {
72
+ roles,
73
+ tokens,
74
+ dir
75
+ } = theme;
76
+ const variant = variantProp ?? (onPress ? 'navigation' : 'static');
77
+ const toggles = variant === 'switch' || variant === 'checkbox' || variant === 'radio';
78
+ const press = toggles ? () => onCheckedChange?.(variant === 'radio' ? true : !checked) : onPress;
79
+ const interactive = !!press && variant !== 'static' && variant !== 'value';
80
+ const role = {
81
+ switch: 'switch',
82
+ checkbox: 'checkbox',
83
+ radio: 'radio',
84
+ navigation: 'button',
85
+ button: 'button'
86
+ }[variant];
87
+ const trail = trailing ?? (variant === 'switch' ? /*#__PURE__*/_jsx(View, {
88
+ pointerEvents: "none",
89
+ importantForAccessibility: "no-hide-descendants",
90
+ accessibilityElementsHidden: true,
91
+ children: /*#__PURE__*/_jsx(RNSwitch, {
92
+ value: !!checked,
93
+ trackColor: {
94
+ false: roles['surface-container-highest'],
95
+ true: roles.primary
96
+ },
97
+ ios_backgroundColor: roles['surface-container-highest'],
98
+ thumbColor: roles['surface-container-lowest']
99
+ })
100
+ }) : variant === 'checkbox' || variant === 'radio' ? checked ? /*#__PURE__*/_jsx(Check, {
101
+ size: "md",
102
+ color: roles.primary
103
+ }) : null : variant === 'navigation' ? /*#__PURE__*/_jsxs(View, {
104
+ style: {
105
+ flexDirection: 'row',
106
+ alignItems: 'center',
107
+ gap: 4
108
+ },
109
+ children: [value && /*#__PURE__*/_jsx(Text, {
110
+ variant: "body-md",
111
+ color: "on-surface-variant",
112
+ tabular: true,
113
+ numberOfLines: 1,
114
+ children: value
115
+ }), /*#__PURE__*/_jsx(ChevronRight, {
116
+ size: "sm",
117
+ color: roles['on-surface-muted'],
118
+ style: dir === 'rtl' ? {
119
+ transform: [{
120
+ scaleX: -1
121
+ }]
122
+ } : undefined
123
+ })]
124
+ }) : variant === 'value' && value ? /*#__PURE__*/_jsx(Text, {
125
+ variant: "body-md",
126
+ color: "on-surface-variant",
127
+ tabular: true,
128
+ numberOfLines: 1,
129
+ children: value
130
+ }) : null);
131
+ const content = /*#__PURE__*/_jsxs(View, {
132
+ style: [{
133
+ minHeight: subtitle ? 72 : 56,
134
+ paddingHorizontal: tokens.spacing[4],
135
+ paddingVertical: tokens.spacing[3],
136
+ flexDirection: 'row',
137
+ alignItems: 'center',
138
+ gap: tokens.spacing[3],
139
+ opacity: disabled ? disabledOpacity(theme) : 1
140
+ }, style],
141
+ children: [leading, /*#__PURE__*/_jsxs(View, {
142
+ style: {
143
+ flex: 1,
144
+ gap: 2,
145
+ alignItems: variant === 'button' ? 'center' : 'flex-start'
146
+ },
147
+ children: [/*#__PURE__*/_jsx(Text, {
148
+ variant: "body-lg",
149
+ color: variant === 'button' ? destructive ? 'error' : 'primary' : 'on-surface',
150
+ children: title
151
+ }), subtitle && /*#__PURE__*/_jsx(Text, {
152
+ variant: "body-sm",
153
+ color: "on-surface-variant",
154
+ children: subtitle
155
+ })]
156
+ }), trail]
157
+ });
158
+ const a11yLabel = [title, subtitle, variant === 'switch' || toggles ? undefined : value].filter(Boolean).join(', ');
159
+ if (!interactive) {
160
+ return /*#__PURE__*/_jsx(View, {
161
+ accessible: true,
162
+ accessibilityLabel: a11yLabel,
163
+ children: content
164
+ });
165
+ }
166
+ return /*#__PURE__*/_jsx(Pressable, {
167
+ accessibilityRole: role,
168
+ accessibilityLabel: a11yLabel,
169
+ accessibilityState: {
170
+ disabled: !!disabled,
171
+ checked: toggles ? !!checked : undefined
172
+ },
173
+ disabled: disabled,
174
+ haptic: variant === 'radio' && !checked ? 'selection' : variant === 'checkbox' ? 'selection' : undefined,
175
+ onPress: press,
176
+ pressScale: false,
177
+ children: content
178
+ });
179
+ }
180
+
181
+ // ─── ListSection ─────────────────────────────────────────────────────────────
182
+
183
+ /** Inset-grouped rows on a container tier, hairlines between rows only. */
184
+ export function ListSection({
185
+ header,
186
+ footer,
187
+ inset = 16,
188
+ children,
189
+ style,
190
+ ...rest
191
+ }) {
192
+ const {
193
+ roles,
194
+ tokens
195
+ } = useTheme();
196
+ const rows = React.Children.toArray(children).filter(Boolean);
197
+ return /*#__PURE__*/_jsxs(View, {
198
+ style: [{
199
+ gap: tokens.spacing[2]
200
+ }, style],
201
+ ...rest,
202
+ children: [header && /*#__PURE__*/_jsx(Text, {
203
+ variant: "title-sm",
204
+ color: "on-surface-variant",
205
+ accessibilityRole: "header",
206
+ style: {
207
+ paddingHorizontal: tokens.spacing[4]
208
+ },
209
+ children: header
210
+ }), /*#__PURE__*/_jsx(View, {
211
+ style: {
212
+ borderRadius: tokens.shape.container,
213
+ overflow: 'hidden',
214
+ backgroundColor: roles['surface-container-lowest']
215
+ },
216
+ children: rows.map((row, i) => /*#__PURE__*/_jsxs(React.Fragment, {
217
+ children: [i > 0 && /*#__PURE__*/_jsx(Divider, {
218
+ inset: inset
219
+ }), row]
220
+ }, i))
221
+ }), footer && /*#__PURE__*/_jsx(Text, {
222
+ variant: "body-sm",
223
+ color: "on-surface-variant",
224
+ style: {
225
+ paddingHorizontal: tokens.spacing[4]
226
+ },
227
+ children: footer
228
+ })]
229
+ });
230
+ }
231
+
232
+ // ─── Accordion ───────────────────────────────────────────────────────────────
233
+
234
+ /** Disclosure: a header row that shows or hides its content. */
235
+ export function Accordion({
236
+ title,
237
+ expanded,
238
+ defaultExpanded = false,
239
+ onExpandedChange,
240
+ children,
241
+ style
242
+ }) {
243
+ const {
244
+ roles,
245
+ tokens
246
+ } = useTheme();
247
+ const [open, setOpen] = useControllableState({
248
+ value: expanded,
249
+ defaultValue: defaultExpanded,
250
+ onChange: onExpandedChange
251
+ });
252
+ return /*#__PURE__*/_jsxs(View, {
253
+ style: style,
254
+ children: [/*#__PURE__*/_jsxs(Pressable, {
255
+ accessibilityLabel: title,
256
+ accessibilityState: {
257
+ expanded: open
258
+ },
259
+ onPress: () => setOpen(!open),
260
+ pressScale: false,
261
+ style: {
262
+ minHeight: 56,
263
+ paddingHorizontal: tokens.spacing[4],
264
+ flexDirection: 'row',
265
+ alignItems: 'center',
266
+ gap: tokens.spacing[3]
267
+ },
268
+ children: [/*#__PURE__*/_jsx(Text, {
269
+ variant: "title-md",
270
+ style: {
271
+ flex: 1
272
+ },
273
+ children: title
274
+ }), /*#__PURE__*/_jsx(ChevronDown, {
275
+ size: "sm",
276
+ color: roles['on-surface-variant'],
277
+ style: open ? {
278
+ transform: [{
279
+ rotate: '180deg'
280
+ }]
281
+ } : undefined
282
+ })]
283
+ }), open && /*#__PURE__*/_jsx(View, {
284
+ style: {
285
+ paddingHorizontal: tokens.spacing[4],
286
+ paddingBottom: tokens.spacing[4]
287
+ },
288
+ children: children
289
+ })]
290
+ });
291
+ }
292
+ //# sourceMappingURL=containers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Switch","RNSwitch","View","Check","ChevronDown","ChevronRight","useControllableState","Pressable","Surface","Text","useTheme","Divider","disabledOpacity","jsx","_jsx","jsxs","_jsxs","Card","onPress","accessibilityLabel","tone","radius","style","children","rest","tokens","surface","padding","spacing","gap","borderRadius","shape","ListItem","title","subtitle","leading","value","trailing","variant","variantProp","checked","onCheckedChange","destructive","disabled","theme","roles","dir","toggles","press","interactive","role","switch","checkbox","radio","navigation","button","trail","pointerEvents","importantForAccessibility","accessibilityElementsHidden","trackColor","false","true","primary","ios_backgroundColor","thumbColor","size","color","flexDirection","alignItems","tabular","numberOfLines","transform","scaleX","undefined","content","minHeight","paddingHorizontal","paddingVertical","opacity","flex","a11yLabel","filter","Boolean","join","accessible","accessibilityRole","accessibilityState","haptic","pressScale","ListSection","header","footer","inset","rows","Children","toArray","container","overflow","backgroundColor","map","row","i","Fragment","Accordion","expanded","defaultExpanded","onExpandedChange","open","setOpen","defaultValue","onChange","rotate","paddingBottom"],"sourceRoot":"../../../src","sources":["components/containers.tsx"],"mappings":"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","ignoreList":[]}