react-native-terra-ui 0.10.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +8 -4
- package/lib/module/components/button/Button.js +21 -13
- package/lib/module/components/button/Button.js.map +1 -1
- package/lib/module/components/button/index.js.map +1 -1
- package/lib/module/components/divider/Divider.js +127 -0
- package/lib/module/components/divider/Divider.js.map +1 -0
- package/lib/module/components/divider/index.js +4 -0
- package/lib/module/components/divider/index.js.map +1 -0
- package/lib/module/components/index.js +2 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/components/pressable/index.js +4 -0
- package/lib/module/components/pressable/index.js.map +1 -0
- package/lib/module/components/pressable/variants/PressableScale/index.js +110 -0
- package/lib/module/components/pressable/variants/PressableScale/index.js.map +1 -0
- package/lib/module/context/ThemeProvider.js +5 -5
- package/lib/module/context/ThemeProvider.js.map +1 -1
- package/lib/module/theme/define-config.js +5 -5
- package/lib/module/theme/define-config.js.map +1 -1
- package/lib/module/theme/errors.js +1 -1
- package/lib/module/theme/index.js +2 -2
- package/lib/module/theme/index.js.map +1 -1
- package/lib/module/theme/registry.js +15 -21
- package/lib/module/theme/registry.js.map +1 -1
- package/lib/module/theme/resolve-config.js +68 -68
- package/lib/module/theme/resolve-config.js.map +1 -1
- package/lib/module/theme/runtime.js +11 -11
- package/lib/module/theme/runtime.js.map +1 -1
- package/lib/module/theme/selection-store.js +7 -7
- package/lib/module/theme/selection-store.js.map +1 -1
- package/lib/module/theme/unistyles-adapter.js +1 -1
- package/lib/module/utils/accent-utils.js +24 -24
- package/lib/module/utils/accent-utils.js.map +1 -1
- package/lib/typescript/src/components/button/Button.d.ts +7 -0
- package/lib/typescript/src/components/button/Button.d.ts.map +1 -1
- package/lib/typescript/src/components/button/index.d.ts +1 -1
- package/lib/typescript/src/components/button/index.d.ts.map +1 -1
- package/lib/typescript/src/components/divider/Divider.d.ts +49 -0
- package/lib/typescript/src/components/divider/Divider.d.ts.map +1 -0
- package/lib/typescript/src/components/divider/index.d.ts +3 -0
- package/lib/typescript/src/components/divider/index.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +2 -0
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/components/pressable/index.d.ts +3 -0
- package/lib/typescript/src/components/pressable/index.d.ts.map +1 -0
- package/lib/typescript/src/components/pressable/variants/PressableScale/index.d.ts +47 -0
- package/lib/typescript/src/components/pressable/variants/PressableScale/index.d.ts.map +1 -0
- package/lib/typescript/src/context/ThemeProvider.d.ts +7 -7
- package/lib/typescript/src/context/ThemeProvider.d.ts.map +1 -1
- package/lib/typescript/src/theme/define-config.d.ts +11 -8
- package/lib/typescript/src/theme/define-config.d.ts.map +1 -1
- package/lib/typescript/src/theme/errors.d.ts +1 -1
- package/lib/typescript/src/theme/index.d.ts +3 -3
- package/lib/typescript/src/theme/index.d.ts.map +1 -1
- package/lib/typescript/src/theme/registry.d.ts +5 -5
- package/lib/typescript/src/theme/registry.d.ts.map +1 -1
- package/lib/typescript/src/theme/resolve-config.d.ts +25 -25
- package/lib/typescript/src/theme/resolve-config.d.ts.map +1 -1
- package/lib/typescript/src/theme/runtime.d.ts +5 -5
- package/lib/typescript/src/theme/runtime.d.ts.map +1 -1
- package/lib/typescript/src/theme/selection-store.d.ts +5 -5
- package/lib/typescript/src/theme/selection-store.d.ts.map +1 -1
- package/lib/typescript/src/theme/types.d.ts +20 -47
- package/lib/typescript/src/theme/types.d.ts.map +1 -1
- package/lib/typescript/src/theme/unistyles-adapter.d.ts +1 -1
- package/lib/typescript/src/utils/accent-utils.d.ts +6 -7
- package/lib/typescript/src/utils/accent-utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/button/Button.tsx +32 -13
- package/src/components/button/index.ts +1 -0
- package/src/components/divider/Divider.tsx +164 -0
- package/src/components/divider/index.ts +7 -0
- package/src/components/index.ts +2 -0
- package/src/components/pressable/index.ts +5 -0
- package/src/components/pressable/variants/PressableScale/index.tsx +166 -0
- package/src/context/ThemeProvider.tsx +10 -10
- package/src/theme/define-config.ts +12 -7
- package/src/theme/errors.ts +1 -1
- package/src/theme/index.ts +6 -8
- package/src/theme/registry.ts +15 -23
- package/src/theme/resolve-config.ts +88 -95
- package/src/theme/runtime.ts +11 -11
- package/src/theme/selection-store.ts +9 -9
- package/src/theme/types.ts +21 -47
- package/src/theme/unistyles-adapter.ts +1 -1
- package/src/utils/accent-utils.ts +25 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.11.0](https://github.com/earthlin9/react-native-terra-ui/compare/v0.10.2...v0.11.0) (2026-09-12)
|
|
4
|
+
|
|
5
|
+
### ⚠ BREAKING CHANGES
|
|
6
|
+
|
|
7
|
+
* **theme:** `accents` is now `themes`, `defaultAccent` is now
|
|
8
|
+
`defaultTheme`, and `schemes.light/dark` is removed — move those tokens
|
|
9
|
+
into each named theme's `light`/`dark` entry. The `{ seed, overrides }`
|
|
10
|
+
form is now `{ seed, color }`. `applyAccent`/`getCurrentAccent`/
|
|
11
|
+
`getAccentNames` become `setTheme`/`getCurrentTheme`/`getThemeNames`,
|
|
12
|
+
`useTheme().accent`/`setAccent` become `themeName`/`setTheme`,
|
|
13
|
+
`createTerraThemes(config, { accent })` takes `{ theme }`, and
|
|
14
|
+
`ThemeSelection.accent` is `ThemeSelection.themeName`.
|
|
15
|
+
See docs/named-theme-migration.md.
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **theme:** replace schemes and accents with named themes ([#25](https://github.com/earthlin9/react-native-terra-ui/issues/25))
|
|
20
|
+
|
|
21
|
+
### Documentation
|
|
22
|
+
|
|
23
|
+
* scaffold the component API reference ([#24](https://github.com/earthlin9/react-native-terra-ui/issues/24)) ([3204657](https://github.com/earthlin9/react-native-terra-ui/commit/3204657868ec2c008d628ec9a06307227d0587cc))
|
|
24
|
+
|
|
25
|
+
## [0.10.2](https://github.com/earthlin9/react-native-terra-ui/compare/v0.10.1...v0.10.2) (2026-09-11)
|
|
26
|
+
|
|
27
|
+
### Features
|
|
28
|
+
|
|
29
|
+
* **ui:** [button] add PressableScale and a Button animation prop ([#22](https://github.com/earthlin9/react-native-terra-ui/issues/22)) ([ff91d4f](https://github.com/earthlin9/react-native-terra-ui/commit/ff91d4f9f1d68ea68c779b647f2320dab49516fe))
|
|
30
|
+
* **ui:** [divider] add Divider ([#23](https://github.com/earthlin9/react-native-terra-ui/issues/23)) ([132c83b](https://github.com/earthlin9/react-native-terra-ui/commit/132c83bcb134bdfb552f4f0070805ab7efdf7e45))
|
|
31
|
+
|
|
3
32
|
## [0.10.1](https://github.com/earthlin9/react-native-terra-ui/compare/v0.10.0...v0.10.1) (2026-09-10)
|
|
4
33
|
|
|
5
34
|
### Bug Fixes
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Themeable React Native UI components built on react-native-unistyles.
|
|
|
9
9
|
| `react-native-terra-ui` | Components, `TerraUIProvider`, `useTheme` |
|
|
10
10
|
| `react-native-terra-ui/theme` | `configureTerraUI`, theme types, color utilities (no import-time side effects) |
|
|
11
11
|
|
|
12
|
-
Use the `/theme` entry for `configureTerraUI()` in your app entry file. See [docs/getting-started.md](../../docs/getting-started.md); upgrading an existing configuration is covered in [docs/theme-
|
|
12
|
+
Use the `/theme` entry for `configureTerraUI()` in your app entry file. See [docs/getting-started.md](../../docs/getting-started.md); upgrading an existing configuration is covered in [docs/named-theme-migration.md](../../docs/named-theme-migration.md).
|
|
13
13
|
|
|
14
14
|
## Components
|
|
15
15
|
|
|
@@ -51,15 +51,19 @@ toast.show({ label: 'Saved', variant: 'success' });
|
|
|
51
51
|
| Export | Description |
|
|
52
52
|
|--------|-------------|
|
|
53
53
|
| `TerraUIProvider` | Root provider — wrap your app once |
|
|
54
|
-
| `useTheme` |
|
|
54
|
+
| `useTheme` | Resolved tokens, named theme selection, and appearance mode |
|
|
55
55
|
| `ToastProvider`, `useToast` | Toast stack provider and manager hook |
|
|
56
56
|
|
|
57
57
|
## Theme API (`react-native-terra-ui/theme`)
|
|
58
58
|
|
|
59
|
-
- `configureTerraUI` — register themes,
|
|
59
|
+
- `configureTerraUI` — register named light/dark themes, icons, and component defaults
|
|
60
|
+
- `defineTerraConfig` — author config with typed `defaultTheme` names
|
|
61
|
+
- `createTerraThemes` — resolve named themes for previews and tests
|
|
62
|
+
- `setTheme`, `getCurrentTheme`, `getThemeNames` — select and inspect named themes
|
|
63
|
+
- `setThemeMode`, `getThemeMode` — control system/light/dark appearance
|
|
60
64
|
- `defaultLightTheme`, `defaultDarkTheme` — built-in theme objects
|
|
61
65
|
- `resolveThemeColor`, `deepMerge`, `shade`, `withAlpha`, `readableOn` — color utilities
|
|
62
|
-
- Types: `TerraTheme`, `TerraConfig`, `
|
|
66
|
+
- Types: `TerraTheme`, `TerraConfig`, `NamedTheme`, `ThemeSchemeInput`, `ThemeSeed`, `ThemeMode`, `Scheme`, `ColorToken`, etc.
|
|
63
67
|
|
|
64
68
|
## Showcase
|
|
65
69
|
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { Pressable } from "react-native-unistyles/components/native/Pressable";
|
|
4
3
|
import { Children, createContext, forwardRef, useContext } from "react";
|
|
5
4
|
import { StyleSheet, useUnistyles } from "react-native-unistyles";
|
|
6
5
|
import { getDefaultRadius } from "../../theme/registry.js";
|
|
7
6
|
import { readableOn } from "../../utils/color-utils.js";
|
|
8
7
|
import { resolveThemeColor } from "../../utils/resolve-theme-color.js";
|
|
9
8
|
import { Icon } from "../icon/index.js";
|
|
9
|
+
import { PressableScale } from "../pressable/index.js";
|
|
10
10
|
import { Spinner } from "../spinner/index.js";
|
|
11
11
|
import { Text } from "../text/index.js";
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
/** Matches pressto's `minScale` default — enough to feel, not enough to distract. */
|
|
14
|
+
const PRESSED_SCALE = 0.96;
|
|
12
15
|
|
|
13
16
|
// ─── Context (lets icons/labels read the resolved foreground + size) ───────────
|
|
14
|
-
|
|
17
|
+
|
|
15
18
|
const ButtonContext = /*#__PURE__*/createContext({
|
|
16
19
|
color: "",
|
|
17
20
|
size: "md"
|
|
@@ -147,6 +150,7 @@ const ButtonRoot = /*#__PURE__*/forwardRef(function Button({
|
|
|
147
150
|
isIconOnly = false,
|
|
148
151
|
fullWidth = true,
|
|
149
152
|
compact = false,
|
|
153
|
+
animation = "scale",
|
|
150
154
|
background,
|
|
151
155
|
children,
|
|
152
156
|
onPress,
|
|
@@ -177,30 +181,34 @@ const ButtonRoot = /*#__PURE__*/forwardRef(function Button({
|
|
|
177
181
|
style: externalStyle,
|
|
178
182
|
...pressableRest
|
|
179
183
|
} = rest;
|
|
184
|
+
const ownStyles = [styles.base, {
|
|
185
|
+
backgroundColor: bg,
|
|
186
|
+
borderColor: border,
|
|
187
|
+
borderWidth
|
|
188
|
+
}, compact ? styles.compact : null, isDisabled ? {
|
|
189
|
+
opacity: theme.opacity.disabled
|
|
190
|
+
} : null];
|
|
191
|
+
// Only the function form forces a re-render per touch, so keep the array form
|
|
192
|
+
// whenever the caller's style doesn't need the pressed state.
|
|
193
|
+
const style = typeof externalStyle === "function" ? state => [...ownStyles, externalStyle(state)] : [...ownStyles, externalStyle];
|
|
180
194
|
return /*#__PURE__*/_jsx(ButtonContext.Provider, {
|
|
181
195
|
value: {
|
|
182
196
|
color: fg,
|
|
183
197
|
size
|
|
184
198
|
},
|
|
185
|
-
children: /*#__PURE__*/_jsxs(
|
|
199
|
+
children: /*#__PURE__*/_jsxs(PressableScale, {
|
|
186
200
|
ref: ref,
|
|
187
201
|
onPress: blocked ? undefined : onPress,
|
|
188
|
-
|
|
202
|
+
isDisabled: blocked,
|
|
203
|
+
minScale: animation === "scale" ? PRESSED_SCALE : 1,
|
|
204
|
+
pressedOpacity: animation === "opacity" ? theme.opacity.pressed : undefined,
|
|
189
205
|
accessibilityRole: "button",
|
|
190
206
|
accessibilityState: {
|
|
191
207
|
disabled: blocked,
|
|
192
208
|
busy: isLoading
|
|
193
209
|
},
|
|
194
210
|
...pressableRest,
|
|
195
|
-
style:
|
|
196
|
-
backgroundColor: bg,
|
|
197
|
-
borderColor: border,
|
|
198
|
-
borderWidth
|
|
199
|
-
}, compact ? styles.compact : null, state.pressed && !blocked ? {
|
|
200
|
-
opacity: theme.opacity.pressed
|
|
201
|
-
} : null, isDisabled ? {
|
|
202
|
-
opacity: theme.opacity.disabled
|
|
203
|
-
} : null, typeof externalStyle === "function" ? externalStyle(state) : externalStyle],
|
|
211
|
+
style: style,
|
|
204
212
|
children: [isLoading && /*#__PURE__*/_jsx(Spinner, {
|
|
205
213
|
size: "sm",
|
|
206
214
|
color: fg
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Children","createContext","forwardRef","useContext","StyleSheet","useUnistyles","getDefaultRadius","readableOn","resolveThemeColor","Icon","Spinner","Text","jsx","_jsx","jsxs","_jsxs","ButtonContext","color","size","useButtonContext","getColors","variant","theme","c","get","key","bg","border","borderWidth","fg","LABEL_TYPOGRAPHY","sm","weight","md","lg","ButtonLabel","children","typography","style","ICON_SIZE","ButtonIcon","name","sizeProp","colorProp","strokeWidth","renderChildren","map","child","trim","length","ButtonRoot","Button","radius","isDisabled","isLoading","isIconOnly","fullWidth","compact","background","onPress","rest","ref","_styles","styles","useVariants","iconOnly","variantBg","variantFg","resolvedBackground","undefined","blocked","externalStyle","pressableRest","
|
|
1
|
+
{"version":3,"names":["Children","createContext","forwardRef","useContext","StyleSheet","useUnistyles","getDefaultRadius","readableOn","resolveThemeColor","Icon","PressableScale","Spinner","Text","jsx","_jsx","jsxs","_jsxs","PRESSED_SCALE","ButtonContext","color","size","useButtonContext","getColors","variant","theme","c","get","key","bg","border","borderWidth","fg","LABEL_TYPOGRAPHY","sm","weight","md","lg","ButtonLabel","children","typography","style","ICON_SIZE","ButtonIcon","name","sizeProp","colorProp","strokeWidth","renderChildren","map","child","trim","length","ButtonRoot","Button","radius","isDisabled","isLoading","isIconOnly","fullWidth","compact","animation","background","onPress","rest","ref","_styles","styles","useVariants","iconOnly","variantBg","variantFg","resolvedBackground","undefined","blocked","externalStyle","pressableRest","ownStyles","base","backgroundColor","borderColor","opacity","disabled","state","Provider","value","minScale","pressedOpacity","pressed","accessibilityRole","accessibilityState","busy","Label","create","flexDirection","alignItems","justifyContent","alignSelf","variants","height","paddingHorizontal","gap","none","borderRadius","xl","full","true","false","aspectRatio","uni__dependencies","paddingVertical"],"sourceRoot":"../../../../src","sources":["components/button/Button.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Button","useButtonContext"],"sourceRoot":"../../../../src","sources":["components/button/index.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"names":["Button","useButtonContext"],"sourceRoot":"../../../../src","sources":["components/button/index.ts"],"mappings":";;AAQA,SAASA,MAAM,EAAEC,gBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { View } from "react-native-unistyles/components/native/View";
|
|
4
|
+
import { Children, forwardRef } from "react";
|
|
5
|
+
import { StyleSheet as RNStyleSheet } from "react-native";
|
|
6
|
+
import { StyleSheet, useUnistyles } from "react-native-unistyles";
|
|
7
|
+
import { resolveThemeColor } from "../../utils/resolve-theme-color.js";
|
|
8
|
+
import { Text } from "../text/index.js";
|
|
9
|
+
|
|
10
|
+
/** `number | 'hairline'`, mirroring `Box`'s `borderWidth`. */
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
function resolveThickness(thickness) {
|
|
13
|
+
return thickness === "hairline" ? RNStyleSheet.hairlineWidth : thickness;
|
|
14
|
+
}
|
|
15
|
+
function renderLabel(children) {
|
|
16
|
+
return Children.map(children, child => {
|
|
17
|
+
if (typeof child === "string") {
|
|
18
|
+
return child.trim().length > 0 ? /*#__PURE__*/_jsx(Text, {
|
|
19
|
+
variant: "label-sm",
|
|
20
|
+
color: "text.secondary",
|
|
21
|
+
children: child
|
|
22
|
+
}) : null;
|
|
23
|
+
}
|
|
24
|
+
if (typeof child === "number") {
|
|
25
|
+
return /*#__PURE__*/_jsx(Text, {
|
|
26
|
+
variant: "label-sm",
|
|
27
|
+
color: "text.secondary",
|
|
28
|
+
children: child
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return child;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* A rule that separates content.
|
|
37
|
+
*
|
|
38
|
+
* Decorative by default — screen readers skip it, because the separation it
|
|
39
|
+
* expresses is already carried by the content either side. A labelled divider
|
|
40
|
+
* keeps its label readable.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* <Divider />
|
|
44
|
+
* <Divider spacing="4" />
|
|
45
|
+
* <Divider orientation="vertical" />
|
|
46
|
+
* <Divider>OR</Divider>
|
|
47
|
+
*/
|
|
48
|
+
export const Divider = /*#__PURE__*/forwardRef(function Divider({
|
|
49
|
+
orientation = "horizontal",
|
|
50
|
+
color = "border.default",
|
|
51
|
+
thickness = "hairline",
|
|
52
|
+
spacing,
|
|
53
|
+
labelAlign = "center",
|
|
54
|
+
children,
|
|
55
|
+
style,
|
|
56
|
+
...rest
|
|
57
|
+
}, ref) {
|
|
58
|
+
const {
|
|
59
|
+
theme
|
|
60
|
+
} = useUnistyles();
|
|
61
|
+
const isVertical = orientation === "vertical";
|
|
62
|
+
// A vertical rule has no room to run either side of a label, so children are
|
|
63
|
+
// dropped rather than silently laid out in a direction they were not written for.
|
|
64
|
+
const label = isVertical ? null : renderLabel(children);
|
|
65
|
+
const hasLabel = Children.count(label) > 0;
|
|
66
|
+
const lineColor = resolveThemeColor(color, theme);
|
|
67
|
+
const weight = resolveThickness(thickness);
|
|
68
|
+
const margin = spacing !== undefined ? theme.spacing[spacing] : undefined;
|
|
69
|
+
const line = {
|
|
70
|
+
backgroundColor: lineColor,
|
|
71
|
+
...(isVertical ? {
|
|
72
|
+
width: weight
|
|
73
|
+
} : {
|
|
74
|
+
height: weight
|
|
75
|
+
})
|
|
76
|
+
};
|
|
77
|
+
if (!hasLabel) {
|
|
78
|
+
return /*#__PURE__*/_jsx(View, {
|
|
79
|
+
ref: ref,
|
|
80
|
+
accessibilityElementsHidden: true,
|
|
81
|
+
importantForAccessibility: "no-hide-descendants",
|
|
82
|
+
"aria-hidden": true,
|
|
83
|
+
...rest,
|
|
84
|
+
style: [styles.rule, line, margin !== undefined ? isVertical ? {
|
|
85
|
+
marginHorizontal: margin
|
|
86
|
+
} : {
|
|
87
|
+
marginVertical: margin
|
|
88
|
+
} : null, style]
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// The label stays readable, so the wrapper is not hidden from accessibility —
|
|
93
|
+
// only the two rule segments are, and each is a bare decorative View.
|
|
94
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
95
|
+
ref: ref,
|
|
96
|
+
...rest,
|
|
97
|
+
style: [styles.labelledRoot, margin !== undefined ? {
|
|
98
|
+
marginVertical: margin
|
|
99
|
+
} : null, style],
|
|
100
|
+
children: [labelAlign !== "start" && /*#__PURE__*/_jsx(View, {
|
|
101
|
+
style: [styles.labelledSegment, line]
|
|
102
|
+
}), label, labelAlign !== "end" && /*#__PURE__*/_jsx(View, {
|
|
103
|
+
style: [styles.labelledSegment, line]
|
|
104
|
+
})]
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// ─── Styles ───────────────────────────────────────────────────────────────────
|
|
109
|
+
|
|
110
|
+
const styles = StyleSheet.create(theme => ({
|
|
111
|
+
// Stretches across its parent's cross axis: full width in a column, full
|
|
112
|
+
// height in a row. The `line` style supplies the other dimension.
|
|
113
|
+
rule: {
|
|
114
|
+
alignSelf: "stretch"
|
|
115
|
+
},
|
|
116
|
+
labelledRoot: {
|
|
117
|
+
alignSelf: "stretch",
|
|
118
|
+
flexDirection: "row",
|
|
119
|
+
alignItems: "center",
|
|
120
|
+
gap: theme.spacing["3"],
|
|
121
|
+
uni__dependencies: [0]
|
|
122
|
+
},
|
|
123
|
+
labelledSegment: {
|
|
124
|
+
flex: 1
|
|
125
|
+
}
|
|
126
|
+
}));
|
|
127
|
+
//# sourceMappingURL=Divider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Children","forwardRef","StyleSheet","RNStyleSheet","useUnistyles","resolveThemeColor","Text","jsx","_jsx","jsxs","_jsxs","resolveThickness","thickness","hairlineWidth","renderLabel","children","map","child","trim","length","variant","color","Divider","orientation","spacing","labelAlign","style","rest","ref","theme","isVertical","label","hasLabel","count","lineColor","weight","margin","undefined","line","backgroundColor","width","height","View","accessibilityElementsHidden","importantForAccessibility","styles","rule","marginHorizontal","marginVertical","labelledRoot","labelledSegment","create","alignSelf","flexDirection","alignItems","gap","uni__dependencies","flex"],"sourceRoot":"../../../../src","sources":["components/divider/Divider.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Divider"],"sourceRoot":"../../../../src","sources":["components/divider/index.ts"],"mappings":";;AAMA,SAASA,OAAO","ignoreList":[]}
|
|
@@ -4,12 +4,14 @@ export * from "./avatar/index.js";
|
|
|
4
4
|
export * from "./box/index.js";
|
|
5
5
|
export * from "./button/index.js";
|
|
6
6
|
export * from "./chip/index.js";
|
|
7
|
+
export * from "./divider/index.js";
|
|
7
8
|
export * from "./empty-state/index.js";
|
|
8
9
|
export * from "./header/index.js";
|
|
9
10
|
export * from "./icon/index.js";
|
|
10
11
|
export * from "./image/index.js";
|
|
11
12
|
export * from "./page-indicator/index.js";
|
|
12
13
|
export * from "./portal/index.js";
|
|
14
|
+
export * from "./pressable/index.js";
|
|
13
15
|
export * from "./screen/index.js";
|
|
14
16
|
export * from "./slot/index.js";
|
|
15
17
|
export * from "./spinner/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["components/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["components/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PressableScale"],"sourceRoot":"../../../../src","sources":["components/pressable/index.ts"],"mappings":";;AAIA,SAASA,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Pressable } from "react-native-unistyles/components/native/Pressable";
|
|
4
|
+
import { forwardRef, useCallback, useEffect, useState } from "react";
|
|
5
|
+
import Animated, { Easing, interpolate, useAnimatedStyle, useSharedValue, withSpring, withTiming } from "react-native-reanimated";
|
|
6
|
+
import { StyleSheet } from "react-native-unistyles";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
const AnimatedPressable = Animated.createAnimatedComponent(Pressable);
|
|
9
|
+
|
|
10
|
+
/** A 250ms ease that reads as instant on press-in but never snaps back on release. */
|
|
11
|
+
const DEFAULT_TIMING = {
|
|
12
|
+
duration: 250,
|
|
13
|
+
easing: Easing.bezier(0.25, 0.1, 0.25, 1)
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A `Pressable` that animates a scale (and optionally an opacity) between its
|
|
17
|
+
* resting and pressed states, driven by a single shared `progress` value on the
|
|
18
|
+
* UI thread.
|
|
19
|
+
*
|
|
20
|
+
* Use it anywhere a press deserves physical feedback — cards, list rows, custom
|
|
21
|
+
* controls. `Button` renders one internally via its `animation` prop.
|
|
22
|
+
*/
|
|
23
|
+
export const PressableScale = /*#__PURE__*/forwardRef(function PressableScale({
|
|
24
|
+
baseScale = 1,
|
|
25
|
+
minScale = 0.96,
|
|
26
|
+
pressedOpacity,
|
|
27
|
+
animationConfig,
|
|
28
|
+
isDisabled = false,
|
|
29
|
+
style,
|
|
30
|
+
onPressIn,
|
|
31
|
+
onPressOut,
|
|
32
|
+
...rest
|
|
33
|
+
}, ref) {
|
|
34
|
+
const progress = useSharedValue(0);
|
|
35
|
+
|
|
36
|
+
// Only the function form of `style` needs a re-render to resolve; tracking
|
|
37
|
+
// `pressed` unconditionally would re-render every consumer on every touch.
|
|
38
|
+
const isStyleFunction = typeof style === "function";
|
|
39
|
+
const [pressed, setPressed] = useState(false);
|
|
40
|
+
const animateTo = useCallback(to => {
|
|
41
|
+
if (animationConfig?.type === "spring") {
|
|
42
|
+
progress.value = withSpring(to, animationConfig.config);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
progress.value = withTiming(to, {
|
|
46
|
+
...DEFAULT_TIMING,
|
|
47
|
+
...animationConfig?.config
|
|
48
|
+
});
|
|
49
|
+
}, [animationConfig, progress]);
|
|
50
|
+
const handlePressIn = useCallback(event => {
|
|
51
|
+
animateTo(1);
|
|
52
|
+
if (isStyleFunction) setPressed(true);
|
|
53
|
+
onPressIn?.(event);
|
|
54
|
+
}, [animateTo, isStyleFunction, onPressIn]);
|
|
55
|
+
const handlePressOut = useCallback(event => {
|
|
56
|
+
animateTo(0);
|
|
57
|
+
if (isStyleFunction) setPressed(false);
|
|
58
|
+
onPressOut?.(event);
|
|
59
|
+
}, [animateTo, isStyleFunction, onPressOut]);
|
|
60
|
+
|
|
61
|
+
// A press that disables its own pressable — `onPress` flipping a button into
|
|
62
|
+
// a loading state — never gets an `onPressOut`, so release it here instead
|
|
63
|
+
// of leaving it stuck at the pressed scale.
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (!isDisabled) return;
|
|
66
|
+
animateTo(0);
|
|
67
|
+
setPressed(false);
|
|
68
|
+
}, [isDisabled, animateTo]);
|
|
69
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
70
|
+
const scale = interpolate(progress.value, [0, 1], [baseScale, minScale]);
|
|
71
|
+
if (pressedOpacity === undefined) {
|
|
72
|
+
return {
|
|
73
|
+
transform: [{
|
|
74
|
+
scale
|
|
75
|
+
}]
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
transform: [{
|
|
80
|
+
scale
|
|
81
|
+
}],
|
|
82
|
+
opacity: interpolate(progress.value, [0, 1], [1, pressedOpacity])
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
const pressableState = {
|
|
86
|
+
pressed
|
|
87
|
+
};
|
|
88
|
+
return /*#__PURE__*/_jsx(AnimatedPressable, {
|
|
89
|
+
ref: ref,
|
|
90
|
+
disabled: isDisabled,
|
|
91
|
+
...rest,
|
|
92
|
+
onPressIn: handlePressIn,
|
|
93
|
+
onPressOut: handlePressOut
|
|
94
|
+
// The animated style goes first so anything the caller sets — a disabled
|
|
95
|
+
// opacity, say — still wins.
|
|
96
|
+
,
|
|
97
|
+
style: [styles.root, animatedStyle, isStyleFunction ? style(pressableState) : style]
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// ─── Styles ───────────────────────────────────────────────────────────────────
|
|
102
|
+
//
|
|
103
|
+
// PressableScale has no style of its own — this stylesheet exists so the
|
|
104
|
+
// Unistyles Babel plugin swaps the `Pressable` imported above for its
|
|
105
|
+
// Unistyles-aware counterpart. Without it a themed style handed in through
|
|
106
|
+
// `style` freezes at whichever theme was active when it was created.
|
|
107
|
+
const styles = StyleSheet.create(() => ({
|
|
108
|
+
root: {}
|
|
109
|
+
}));
|
|
110
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["forwardRef","useCallback","useEffect","useState","Animated","Easing","interpolate","useAnimatedStyle","useSharedValue","withSpring","withTiming","StyleSheet","jsx","_jsx","AnimatedPressable","createAnimatedComponent","Pressable","DEFAULT_TIMING","duration","easing","bezier","PressableScale","baseScale","minScale","pressedOpacity","animationConfig","isDisabled","style","onPressIn","onPressOut","rest","ref","progress","isStyleFunction","pressed","setPressed","animateTo","to","type","value","config","handlePressIn","event","handlePressOut","animatedStyle","scale","undefined","transform","opacity","pressableState","disabled","styles","root","create"],"sourceRoot":"../../../../../../src","sources":["components/pressable/variants/PressableScale/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,7 +4,7 @@ import { useSyncExternalStore } from "react";
|
|
|
4
4
|
import { SafeAreaProvider } from "react-native-safe-area-context";
|
|
5
5
|
import { useUnistyles } from "react-native-unistyles";
|
|
6
6
|
import { bootstrapTerraUI } from "../theme/registry.js";
|
|
7
|
-
import {
|
|
7
|
+
import { applyScheme, getThemeSelection, setTheme, setThemeMode, subscribeThemeSelection } from "../theme/runtime.js";
|
|
8
8
|
import { resolveScreenPadding } from "../theme/screen-padding.js";
|
|
9
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
10
|
// Ensure the default theme is registered on first import. An app that calls
|
|
@@ -26,8 +26,8 @@ export const TerraUIProvider = ({
|
|
|
26
26
|
children: children
|
|
27
27
|
});
|
|
28
28
|
/**
|
|
29
|
-
* Access the active theme and switch scheme / mode /
|
|
30
|
-
* comes from the runtime store, so changes made imperatively (`
|
|
29
|
+
* Access the active theme and switch scheme / mode / theme. Selection state
|
|
30
|
+
* comes from the runtime store, so changes made imperatively (`setTheme`,
|
|
31
31
|
* `setThemeMode`) and through this hook are observed by every consumer.
|
|
32
32
|
*/
|
|
33
33
|
export function useTheme() {
|
|
@@ -40,8 +40,8 @@ export function useTheme() {
|
|
|
40
40
|
theme,
|
|
41
41
|
scheme: rt.themeName ?? "light",
|
|
42
42
|
setScheme: applyScheme,
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
themeName: selection.themeName,
|
|
44
|
+
setTheme,
|
|
45
45
|
mode: selection.mode,
|
|
46
46
|
setMode: setThemeMode
|
|
47
47
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useSyncExternalStore","SafeAreaProvider","useUnistyles","bootstrapTerraUI","
|
|
1
|
+
{"version":3,"names":["useSyncExternalStore","SafeAreaProvider","useUnistyles","bootstrapTerraUI","applyScheme","getThemeSelection","setTheme","setThemeMode","subscribeThemeSelection","resolveScreenPadding","jsx","_jsx","TerraUIProvider","children","useTheme","theme","rt","selection","scheme","themeName","setScheme","mode","setMode","useScreenPadding","breakpoint","useScreenMargin"],"sourceRoot":"../../../src","sources":["context/ThemeProvider.tsx"],"mappings":";;AAAA,SAAiCA,oBAAoB,QAAQ,OAAO;AAEpE,SAASC,gBAAgB,QAAQ,gCAAgC;AACjE,SAASC,YAAY,QAAQ,wBAAwB;AAErD,SAASC,gBAAgB;AACzB,SACEC,WAAW,EACXC,iBAAiB,EACjBC,QAAQ,EACRC,YAAY,EACZC,uBAAuB;AAEzB,SAAqCC,oBAAoB;AAAkC,SAAAC,GAAA,IAAAC,IAAA;AAG3F;AACA;AACA;AACAR,gBAAgB,CAAC,CAAC;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMS,eAAe,GAAGA,CAAC;EAAEC;AAA4B,CAAC,kBAC7DF,IAAA,CAACV,gBAAgB;EAAAY,QAAA,EAAEA;AAAQ,CAAmB,CAC/C;AA6BD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAAA,EAAmB;EACzC,MAAM;IAAEC,KAAK;IAAEC;EAAG,CAAC,GAAGd,YAAY,CAAC,CAAC;EACpC,MAAMe,SAAS,GAAGjB,oBAAoB,CAACQ,uBAAuB,EAAEH,iBAAiB,EAAEA,iBAAiB,CAAC;EAErG,OAAO;IACLU,KAAK;IACLG,MAAM,EAAGF,EAAE,CAACG,SAAS,IAAI,OAAkB;IAC3CC,SAAS,EAAEhB,WAAW;IACtBe,SAAS,EAAEF,SAAS,CAACE,SAAS;IAC9Bb,QAAQ;IACRe,IAAI,EAAEJ,SAAS,CAACI,IAAI;IACpBC,OAAO,EAAEf;EACX,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASgB,gBAAgBA,CAAA,EAA0B;EACxD,MAAM;IAAER,KAAK;IAAEC;EAAG,CAAC,GAAGd,YAAY,CAAC,CAAC;EACpC,OAAOO,oBAAoB,CAACM,KAAK,EAAEC,EAAE,CAACQ,UAAU,CAAC;AACnD;;AAEA;AACA,OAAO,MAAMC,eAAe,GAAGF,gBAAgB","ignoreList":[]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
/** The literal
|
|
3
|
+
/** The literal theme names declared in `T.themes`, or `never` when none are declared. */
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Identity helper for authoring a {@link TerraConfig} with contextual typing.
|
|
7
|
-
* Has no side effects. With literal `
|
|
8
|
-
* them; a dynamic `Record<string,
|
|
7
|
+
* Has no side effects. With literal `themes`, `defaultTheme` must name one of
|
|
8
|
+
* them; a dynamic `Record<string, NamedTheme>` keeps `defaultTheme` as `string`
|
|
9
9
|
* and defers to runtime validation.
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* const config = defineTerraConfig({
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* themes: { indigo: { light: "#4f46e5", dark: "#818cf8" } },
|
|
14
|
+
* defaultTheme: "indigo",
|
|
15
15
|
* });
|
|
16
16
|
* configureTerraUI(config);
|
|
17
17
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defineTerraConfig","config"],"sourceRoot":"../../../src","sources":["theme/define-config.ts"],"mappings":";;AAEA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAC/BC,
|
|
1
|
+
{"version":3,"names":["defineTerraConfig","config"],"sourceRoot":"../../../src","sources":["theme/define-config.ts"],"mappings":";;AAEA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAC/BC,MAKC,EACE;EACH,OAAOA,MAAM;AACf","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Thrown for invalid pure configuration input — before any registry, selection,
|
|
5
5
|
* or native state is touched. `path` points at the offending config entry, e.g.
|
|
6
|
-
* `
|
|
6
|
+
* `themes.indigo.dark.seed` or `defaultTheme`.
|
|
7
7
|
*/
|
|
8
8
|
export class TerraConfigError extends Error {
|
|
9
9
|
constructor(path, message) {
|
|
@@ -21,9 +21,9 @@ export { breakpoints, resolveBreakpointValue } from "./breakpoints.js";
|
|
|
21
21
|
// ─── Config + runtime ───────────────────────────────────────────────────────
|
|
22
22
|
export { defineTerraConfig } from "./define-config.js";
|
|
23
23
|
export { TerraConfigError } from "./errors.js";
|
|
24
|
-
export { configureTerraUI,
|
|
24
|
+
export { configureTerraUI, getDefaultRadius, getIcon, getImageComponent, getIsConfigured, getRequiredIcon, getSurfaceElevation, getThemeNames, resolveTheme } from "./registry.js";
|
|
25
25
|
export { createTerraThemes } from "./resolve-config.js";
|
|
26
|
-
export {
|
|
26
|
+
export { applyScheme, getCurrentTheme, getThemeMode, getThemeSelection, setTheme, setThemeMode } from "./runtime.js";
|
|
27
27
|
export { resolveScreenMargin } from "./screen-margin.js";
|
|
28
28
|
export { resolveScreenPadding } from "./screen-padding.js";
|
|
29
29
|
// ─── Default themes ───────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["checkAccentContrast","generateAccentColors","isSupportedAccentSeed","normalizeAccent","readableOn","shade","withAlpha","deepMerge","resolveThemeColor","FONT_WEIGHT_VALUE","SYSTEM_FONT","breakpoints","resolveBreakpointValue","defineTerraConfig","TerraConfigError","configureTerraUI","
|
|
1
|
+
{"version":3,"names":["checkAccentContrast","generateAccentColors","isSupportedAccentSeed","normalizeAccent","readableOn","shade","withAlpha","deepMerge","resolveThemeColor","FONT_WEIGHT_VALUE","SYSTEM_FONT","breakpoints","resolveBreakpointValue","defineTerraConfig","TerraConfigError","configureTerraUI","getDefaultRadius","getIcon","getImageComponent","getIsConfigured","getRequiredIcon","getSurfaceElevation","getThemeNames","resolveTheme","createTerraThemes","applyScheme","getCurrentTheme","getThemeMode","getThemeSelection","setTheme","setThemeMode","resolveScreenMargin","resolveScreenPadding","defaultDarkTheme","defaultLightTheme"],"sourceRoot":"../../../src","sources":["theme/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AASA,SACEA,mBAAmB,EACnBC,oBAAoB,EACpBC,qBAAqB;AAEvB,SAASC,eAAe;AACxB,SAASC,UAAU,EAAEC,KAAK,EAAEC,SAAS;AAErC,SAASC,SAAS;AAClB,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB,EAAEC,WAAW;AACvC;;AAEA,SAASC,WAAW,EAAEC,sBAAsB;AAC5C;AACA,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SACEC,gBAAgB,EAChBC,gBAAgB,EAChBC,OAAO,EACPC,iBAAiB,EACjBC,eAAe,EACfC,eAAe,EACfC,mBAAmB,EACnBC,aAAa,EACbC,YAAY;AAEd,SAASC,iBAAiB;AAE1B,SACEC,WAAW,EACXC,eAAe,EACfC,YAAY,EACZC,iBAAiB,EACjBC,QAAQ,EACRC,YAAY;AAGd,SAASC,mBAAmB;AAE5B,SAASC,oBAAoB;AAC7B;AACA,SAASC,gBAAgB,EAAEC,iBAAiB;AAC5C","ignoreList":[]}
|