@retray-dev/ui-kit 7.0.1 → 9.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.
- package/COMPONENTS.md +567 -14
- package/EXAMPLES.md +21 -14
- package/README.md +14 -8
- package/dist/Accordion.js +57 -5
- package/dist/Accordion.mjs +4 -3
- package/dist/AlertBanner.js +4 -1
- package/dist/AlertBanner.mjs +3 -2
- package/dist/AppHeader.d.mts +40 -0
- package/dist/AppHeader.d.ts +40 -0
- package/dist/AppHeader.js +515 -0
- package/dist/AppHeader.mjs +10 -0
- package/dist/Avatar.js +39 -29
- package/dist/Avatar.mjs +2 -1
- package/dist/Badge.js +11 -1
- package/dist/Badge.mjs +2 -1
- package/dist/Button.d.mts +8 -3
- package/dist/Button.d.ts +8 -3
- package/dist/Button.js +126 -108
- package/dist/Button.mjs +6 -5
- package/dist/ButtonGroup.mjs +1 -0
- package/dist/Card.js +90 -70
- package/dist/Card.mjs +5 -4
- package/dist/CategoryStrip.js +79 -22
- package/dist/CategoryStrip.mjs +6 -6
- package/dist/Checkbox.js +118 -86
- package/dist/Checkbox.mjs +5 -5
- package/dist/Chip.js +113 -80
- package/dist/Chip.mjs +5 -5
- package/dist/ConfirmDialog.js +140 -110
- package/dist/ConfirmDialog.mjs +7 -6
- package/dist/CurrencyDisplay.mjs +1 -0
- package/dist/CurrencyInput.d.mts +1 -1
- package/dist/CurrencyInput.d.ts +1 -1
- package/dist/CurrencyInput.js +9 -5
- package/dist/CurrencyInput.mjs +5 -4
- package/dist/DetailRow.mjs +1 -0
- package/dist/EmptyState.js +131 -111
- package/dist/EmptyState.mjs +7 -6
- package/dist/ErrorBoundary.d.mts +42 -0
- package/dist/ErrorBoundary.d.ts +42 -0
- package/dist/ErrorBoundary.js +351 -0
- package/dist/ErrorBoundary.mjs +7 -0
- package/dist/Form.mjs +1 -0
- package/dist/HolographicCard.d.mts +55 -0
- package/dist/HolographicCard.d.ts +55 -0
- package/dist/HolographicCard.js +316 -0
- package/dist/HolographicCard.mjs +191 -0
- package/dist/IconButton.d.mts +8 -3
- package/dist/IconButton.d.ts +8 -3
- package/dist/IconButton.js +115 -98
- package/dist/IconButton.mjs +5 -4
- package/dist/ImageViewer.d.mts +23 -0
- package/dist/ImageViewer.d.ts +23 -0
- package/dist/ImageViewer.js +582 -0
- package/dist/ImageViewer.mjs +8 -0
- package/dist/Input.mjs +4 -3
- package/dist/LabelValue.mjs +1 -0
- package/dist/ListGroup.mjs +1 -0
- package/dist/ListItem.js +131 -117
- package/dist/ListItem.mjs +6 -5
- package/dist/MediaCard.js +54 -6
- package/dist/MediaCard.mjs +6 -5
- package/dist/MenuGroup.mjs +1 -0
- package/dist/MenuItem.js +91 -79
- package/dist/MenuItem.mjs +6 -5
- package/dist/MonthPicker.d.mts +10 -2
- package/dist/MonthPicker.d.ts +10 -2
- package/dist/MonthPicker.js +80 -17
- package/dist/MonthPicker.mjs +3 -2
- package/dist/PagerDots.d.mts +35 -0
- package/dist/PagerDots.d.ts +35 -0
- package/dist/PagerDots.js +392 -0
- package/dist/PagerDots.mjs +7 -0
- package/dist/Pressable.d.mts +5 -5
- package/dist/Pressable.d.ts +5 -5
- package/dist/Pressable.js +97 -86
- package/dist/Pressable.mjs +5 -4
- package/dist/PricingCard.d.mts +50 -0
- package/dist/PricingCard.d.ts +50 -0
- package/dist/PricingCard.js +636 -0
- package/dist/PricingCard.mjs +11 -0
- package/dist/Progress.mjs +3 -2
- package/dist/RadioGroup.js +81 -30
- package/dist/RadioGroup.mjs +5 -5
- package/dist/RetrayProvider.d.mts +2 -0
- package/dist/RetrayProvider.d.ts +2 -0
- package/dist/RetrayProvider.js +214 -0
- package/dist/RetrayProvider.mjs +5 -0
- package/dist/Select.js +51 -4
- package/dist/Select.mjs +5 -4
- package/dist/SelectableGrid.d.mts +44 -0
- package/dist/SelectableGrid.d.ts +44 -0
- package/dist/SelectableGrid.js +448 -0
- package/dist/SelectableGrid.mjs +9 -0
- package/dist/Separator.mjs +1 -0
- package/dist/Sheet.d.mts +13 -1
- package/dist/Sheet.d.ts +13 -1
- package/dist/Sheet.js +115 -5
- package/dist/Sheet.mjs +4 -2
- package/dist/Skeleton.d.mts +50 -0
- package/dist/Skeleton.d.ts +50 -0
- package/dist/Skeleton.js +61 -0
- package/dist/Skeleton.mjs +4 -2
- package/dist/Slider.js +51 -4
- package/dist/Slider.mjs +3 -2
- package/dist/Spinner.js +28 -7
- package/dist/Spinner.mjs +2 -1
- package/dist/Switch.js +98 -48
- package/dist/Switch.mjs +4 -3
- package/dist/TabBar.d.mts +42 -0
- package/dist/TabBar.d.ts +42 -0
- package/dist/TabBar.js +361 -0
- package/dist/TabBar.mjs +6 -0
- package/dist/Tabs.js +92 -62
- package/dist/Tabs.mjs +5 -4
- package/dist/Text.js +16 -0
- package/dist/Text.mjs +2 -1
- package/dist/Textarea.mjs +4 -3
- package/dist/Toast.d.mts +7 -7
- package/dist/Toast.d.ts +7 -7
- package/dist/Toast.mjs +1 -0
- package/dist/Toggle.d.mts +6 -3
- package/dist/Toggle.d.ts +6 -3
- package/dist/Toggle.js +135 -120
- package/dist/Toggle.mjs +5 -5
- package/dist/VirtualList.mjs +1 -0
- package/dist/{chunk-7H2OR44A.mjs → chunk-26BCI223.mjs} +1 -1
- package/dist/{chunk-CRYBX2CM.mjs → chunk-2TFTAWVJ.mjs} +44 -59
- package/dist/chunk-3DKJ2GIC.mjs +30 -0
- package/dist/{chunk-KWCPOM6W.mjs → chunk-3U4SSNWP.mjs} +32 -48
- package/dist/chunk-4I7D47FH.mjs +139 -0
- package/dist/chunk-4K625MVM.mjs +142 -0
- package/dist/{chunk-MN7OG7IY.mjs → chunk-6OAZJ577.mjs} +6 -4
- package/dist/{chunk-L7E7TVEZ.mjs → chunk-756RAKE4.mjs} +2 -2
- package/dist/{chunk-HSPSMN6U.mjs → chunk-7QHVVCB3.mjs} +2 -2
- package/dist/{chunk-URLL5JBR.mjs → chunk-A3A6KNQN.mjs} +3 -3
- package/dist/chunk-AJ7ZDNBT.mjs +120 -0
- package/dist/{chunk-FTLJOUOQ.mjs → chunk-AV4EMIRH.mjs} +25 -28
- package/dist/chunk-AZJF2BLK.mjs +115 -0
- package/dist/chunk-BNP626TY.mjs +159 -0
- package/dist/{chunk-5IKW3VNC.mjs → chunk-DVK4G2GT.mjs} +17 -1
- package/dist/{chunk-6LQYY7HC.mjs → chunk-EH745HE5.mjs} +2 -2
- package/dist/chunk-EJ7ZPXOH.mjs +163 -0
- package/dist/{chunk-RKLHUDZS.mjs → chunk-GD6KXMG5.mjs} +29 -15
- package/dist/{chunk-RR2VQLKE.mjs → chunk-GQYFLP3D.mjs} +14 -17
- package/dist/{chunk-Y6MXOREN.mjs → chunk-ID72TK46.mjs} +8 -17
- package/dist/{chunk-NQGVLMWG.mjs → chunk-JMOZEC77.mjs} +1 -1
- package/dist/{chunk-GCWOGZYL.mjs → chunk-JT7HKXRB.mjs} +39 -29
- package/dist/{chunk-LWG526VX.mjs → chunk-KIHCWCWL.mjs} +47 -62
- package/dist/chunk-LXJIIOYQ.mjs +104 -0
- package/dist/{chunk-SBZYEV4S.mjs → chunk-M6ZXVBTK.mjs} +5 -2
- package/dist/{chunk-XDMN67KV.mjs → chunk-MAC465BB.mjs} +10 -8
- package/dist/chunk-MBMXYJJV.mjs +36 -0
- package/dist/chunk-MLF3EZFW.mjs +119 -0
- package/dist/chunk-NA7PARID.mjs +147 -0
- package/dist/{chunk-QXGYKWI7.mjs → chunk-O3HA6TYM.mjs} +9 -4
- package/dist/{chunk-63357L2X.mjs → chunk-OB4JUQ3O.mjs} +1 -1
- package/dist/{chunk-AU2VDY4P.mjs → chunk-PFZTM6D5.mjs} +52 -4
- package/dist/chunk-QKH5ZOD5.mjs +97 -0
- package/dist/{chunk-KZJRQOIU.mjs → chunk-TERDKCLE.mjs} +11 -1
- package/dist/{chunk-U4N7WF4Z.mjs → chunk-UREA2GYY.mjs} +28 -23
- package/dist/{chunk-TAJ2PQ2O.mjs → chunk-VGTDN7SW.mjs} +7 -6
- package/dist/{chunk-URDE3EUU.mjs → chunk-VQ57HWPL.mjs} +27 -15
- package/dist/chunk-WBOOUHSS.mjs +62 -0
- package/dist/{chunk-GNGLDL6Z.mjs → chunk-WJLKJMKR.mjs} +18 -0
- package/dist/{chunk-YZJAFS4P.mjs → chunk-X4G6APW6.mjs} +22 -19
- package/dist/chunk-Y6FXYEAI.mjs +8 -0
- package/dist/chunk-YFZ3ELX5.mjs +16 -0
- package/dist/{chunk-QCNARS3X.mjs → chunk-YNROWHQJ.mjs} +1 -1
- package/dist/chunk-Z4BVUWW6.mjs +196 -0
- package/dist/{chunk-GPOUINK5.mjs → chunk-ZJKGQMYH.mjs} +10 -27
- package/dist/index-wt-orHUi.d.mts +85 -0
- package/dist/index-wt-orHUi.d.ts +85 -0
- package/dist/index.d.mts +59 -51
- package/dist/index.d.ts +59 -51
- package/dist/index.js +1940 -744
- package/dist/index.mjs +49 -39
- package/package.json +35 -5
- package/src/components/Accordion/Accordion.tsx +12 -1
- package/src/components/AlertBanner/AlertBanner.tsx +5 -0
- package/src/components/AppHeader/AppHeader.tsx +172 -0
- package/src/components/AppHeader/index.ts +1 -0
- package/src/components/Avatar/Avatar.tsx +10 -2
- package/src/components/Badge/Badge.tsx +8 -1
- package/src/components/Button/Button.tsx +20 -27
- package/src/components/Card/Card.tsx +12 -23
- package/src/components/CategoryStrip/CategoryStrip.tsx +17 -21
- package/src/components/Checkbox/Checkbox.tsx +26 -40
- package/src/components/Chip/Chip.tsx +24 -33
- package/src/components/CurrencyInput/CurrencyInput.tsx +10 -8
- package/src/components/EmptyState/EmptyState.tsx +2 -1
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +153 -0
- package/src/components/ErrorBoundary/index.ts +1 -0
- package/src/components/HolographicCard/HolographicCard.tsx +315 -0
- package/src/components/HolographicCard/index.ts +1 -0
- package/src/components/IconButton/IconButton.tsx +19 -27
- package/src/components/ImageViewer/ImageViewer.tsx +290 -0
- package/src/components/ImageViewer/index.ts +1 -0
- package/src/components/ListItem/ListItem.tsx +70 -67
- package/src/components/MediaCard/MediaCard.tsx +8 -2
- package/src/components/MenuItem/MenuItem.tsx +10 -25
- package/src/components/MonthPicker/MonthPicker.tsx +39 -13
- package/src/components/MonthPicker/index.ts +1 -1
- package/src/components/PagerDots/PagerDots.tsx +200 -0
- package/src/components/PagerDots/index.ts +1 -0
- package/src/components/Pressable/Pressable.tsx +19 -35
- package/src/components/PricingCard/PricingCard.tsx +220 -0
- package/src/components/PricingCard/index.ts +1 -0
- package/src/components/RadioGroup/RadioGroup.tsx +14 -27
- package/src/components/RetrayProvider/RetrayProvider.tsx +59 -0
- package/src/components/RetrayProvider/index.ts +1 -0
- package/src/components/SelectableGrid/SelectableGrid.tsx +205 -0
- package/src/components/SelectableGrid/index.ts +1 -0
- package/src/components/Sheet/Sheet.tsx +65 -1
- package/src/components/Skeleton/Skeleton.tsx +142 -1
- package/src/components/Spinner/Spinner.tsx +17 -2
- package/src/components/Switch/Switch.tsx +30 -58
- package/src/components/TabBar/TabBar.tsx +169 -0
- package/src/components/TabBar/index.ts +1 -0
- package/src/components/Tabs/Tabs.tsx +23 -26
- package/src/components/Text/Text.tsx +2 -0
- package/src/components/Toggle/Toggle.tsx +35 -51
- package/src/fonts.ts +4 -1
- package/src/index.ts +23 -2
- package/src/utils/animations.ts +29 -1
- package/src/utils/fontGuard.ts +34 -0
- package/src/utils/haptics.ts +211 -9
- package/src/utils/pressable.ts +66 -0
- package/dist/chunk-76PFOSM2.mjs +0 -41
- package/dist/chunk-DITNP6PL.mjs +0 -106
- package/dist/chunk-JBLL7U3U.mjs +0 -64
- package/dist/chunk-LG4DO3DK.mjs +0 -174
- package/dist/chunk-RMMK64W5.mjs +0 -54
- package/dist/chunk-RTC3CFXF.mjs +0 -29
package/dist/CategoryStrip.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var React3 = require('react');
|
|
4
4
|
var reactNative = require('react-native');
|
|
5
5
|
var Animated = require('react-native-reanimated');
|
|
6
|
+
var reactNativeEase = require('react-native-ease');
|
|
6
7
|
var reactNativeSizeMatters = require('react-native-size-matters');
|
|
7
8
|
var AntDesign = require('@expo/vector-icons/AntDesign');
|
|
8
9
|
var Entypo = require('@expo/vector-icons/Entypo');
|
|
@@ -22,18 +23,65 @@ var FontAwesome5__default = /*#__PURE__*/_interopDefault(FontAwesome5);
|
|
|
22
23
|
var MaterialIcons__default = /*#__PURE__*/_interopDefault(MaterialIcons);
|
|
23
24
|
var Ionicons__default = /*#__PURE__*/_interopDefault(Ionicons);
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
27
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
28
|
+
}) : x)(function(x) {
|
|
29
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
30
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
31
|
+
});
|
|
26
32
|
var _haptics = null;
|
|
33
|
+
var _hapticsLoaded = false;
|
|
27
34
|
async function getHaptics() {
|
|
28
35
|
if (reactNative.Platform.OS === "web") return null;
|
|
29
|
-
if (!
|
|
30
|
-
|
|
36
|
+
if (!_hapticsLoaded) {
|
|
37
|
+
_hapticsLoaded = true;
|
|
38
|
+
try {
|
|
39
|
+
_haptics = await import('expo-haptics');
|
|
40
|
+
} catch {
|
|
41
|
+
_haptics = null;
|
|
42
|
+
}
|
|
31
43
|
}
|
|
32
44
|
return _haptics;
|
|
33
45
|
}
|
|
46
|
+
var _pulsar = null;
|
|
47
|
+
var _pulsarChecked = false;
|
|
48
|
+
var _pulsarAvailable = false;
|
|
49
|
+
function isPulsarNativeRegistered() {
|
|
50
|
+
try {
|
|
51
|
+
const g = globalThis;
|
|
52
|
+
if (typeof g.__turboModuleProxy === "function") {
|
|
53
|
+
return g.__turboModuleProxy("RNPulsar") != null;
|
|
54
|
+
}
|
|
55
|
+
return reactNative.NativeModules?.RNPulsar != null;
|
|
56
|
+
} catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function getPulsar() {
|
|
61
|
+
if (reactNative.Platform.OS === "web") return null;
|
|
62
|
+
if (!_pulsarChecked) {
|
|
63
|
+
_pulsarChecked = true;
|
|
64
|
+
try {
|
|
65
|
+
if (isPulsarNativeRegistered()) {
|
|
66
|
+
_pulsar = __require("react-native-pulsar");
|
|
67
|
+
_pulsarAvailable = true;
|
|
68
|
+
}
|
|
69
|
+
} catch {
|
|
70
|
+
_pulsar = null;
|
|
71
|
+
_pulsarAvailable = false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return _pulsarAvailable ? _pulsar : null;
|
|
75
|
+
}
|
|
34
76
|
function selectionAsync() {
|
|
35
77
|
if (reactNative.Platform.OS === "web") return;
|
|
36
|
-
getHaptics().then((h) =>
|
|
78
|
+
getHaptics().then((h) => {
|
|
79
|
+
if (h) {
|
|
80
|
+
h.selectionAsync();
|
|
81
|
+
} else {
|
|
82
|
+
getPulsar()?.Presets.System.selection();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
37
85
|
}
|
|
38
86
|
|
|
39
87
|
// src/theme/colorUtils.ts
|
|
@@ -206,13 +254,18 @@ var SPRINGS = {
|
|
|
206
254
|
var TIMINGS = {
|
|
207
255
|
/** Color/opacity transitions on toggles, checkboxes, switches. */
|
|
208
256
|
state: { duration: 160 }};
|
|
209
|
-
|
|
257
|
+
({
|
|
210
258
|
/** Material-style ease-out — natural deceleration for state changes. */
|
|
211
259
|
standard: Animated.Easing.bezier(0.2, 0, 0, 1),
|
|
212
260
|
/** Strong ease-out for expanding surfaces (Accordion open). */
|
|
213
261
|
expand: Animated.Easing.bezier(0.23, 1, 0.32, 1),
|
|
214
262
|
/** Quick ease-in for collapsing. */
|
|
215
263
|
collapse: Animated.Easing.in(Animated.Easing.ease)
|
|
264
|
+
});
|
|
265
|
+
var COLOR_TRANSITION = {
|
|
266
|
+
type: "timing",
|
|
267
|
+
duration: TIMINGS.state.duration,
|
|
268
|
+
easing: [0.2, 0, 0, 1]
|
|
216
269
|
};
|
|
217
270
|
var PRESS_SCALE = {
|
|
218
271
|
button: 0.95,
|
|
@@ -259,14 +312,6 @@ function usePressScale({
|
|
|
259
312
|
hoverHandlers
|
|
260
313
|
};
|
|
261
314
|
}
|
|
262
|
-
function useColorTransition(active, options = {}) {
|
|
263
|
-
const { duration = TIMINGS.state.duration } = options;
|
|
264
|
-
const progress = Animated.useSharedValue(active ? 1 : 0);
|
|
265
|
-
React3.useEffect(() => {
|
|
266
|
-
progress.value = Animated.withTiming(active ? 1 : 0, { duration, easing: EASINGS.standard });
|
|
267
|
-
}, [active, duration, progress]);
|
|
268
|
-
return progress;
|
|
269
|
-
}
|
|
270
315
|
|
|
271
316
|
// src/tokens.ts
|
|
272
317
|
var RADIUS = {
|
|
@@ -283,14 +328,6 @@ var CategoryChip = React3__default.default.memo(function CategoryChip2({
|
|
|
283
328
|
const { animatedStyle: scaleStyle, onPressIn, onPressOut, hoverHandlers } = usePressScale({
|
|
284
329
|
pressScale: PRESS_SCALE.chip
|
|
285
330
|
});
|
|
286
|
-
const progress = useColorTransition(selected);
|
|
287
|
-
const surfaceStyle = Animated.useAnimatedStyle(() => ({
|
|
288
|
-
backgroundColor: Animated.interpolateColor(progress.value, [0, 1], [colors.surface, colors.primary]),
|
|
289
|
-
borderColor: Animated.interpolateColor(progress.value, [0, 1], [colors.border, colors.primary])
|
|
290
|
-
}));
|
|
291
|
-
const textColorStyle = Animated.useAnimatedStyle(() => ({
|
|
292
|
-
color: Animated.interpolateColor(progress.value, [0, 1], [colors.foregroundSubtle, colors.primaryForeground])
|
|
293
|
-
}));
|
|
294
331
|
const iconColor = selected ? colors.primaryForeground : colors.foregroundSubtle;
|
|
295
332
|
const resolvedIcon = typeof item.icon === "string" ? renderIcon(item.icon, 16, iconColor) : item.icon ?? null;
|
|
296
333
|
return /* @__PURE__ */ React3__default.default.createElement(Animated__default.default.View, { style: scaleStyle, ...hoverHandlers }, /* @__PURE__ */ React3__default.default.createElement(
|
|
@@ -305,7 +342,27 @@ var CategoryChip = React3__default.default.memo(function CategoryChip2({
|
|
|
305
342
|
accessibilityLabel: item.label,
|
|
306
343
|
accessibilityState: { selected }
|
|
307
344
|
},
|
|
308
|
-
/* @__PURE__ */ React3__default.default.createElement(
|
|
345
|
+
/* @__PURE__ */ React3__default.default.createElement(
|
|
346
|
+
reactNativeEase.EaseView,
|
|
347
|
+
{
|
|
348
|
+
style: styles.chip,
|
|
349
|
+
animate: {
|
|
350
|
+
backgroundColor: selected ? colors.primary : colors.surface,
|
|
351
|
+
borderColor: selected ? colors.primary : colors.border
|
|
352
|
+
},
|
|
353
|
+
transition: COLOR_TRANSITION
|
|
354
|
+
},
|
|
355
|
+
resolvedIcon && /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: styles.chipIcon }, resolvedIcon),
|
|
356
|
+
/* @__PURE__ */ React3__default.default.createElement(
|
|
357
|
+
reactNative.Text,
|
|
358
|
+
{
|
|
359
|
+
style: [styles.chipLabel, { color: selected ? colors.primaryForeground : colors.foregroundSubtle }],
|
|
360
|
+
allowFontScaling: true
|
|
361
|
+
},
|
|
362
|
+
item.label
|
|
363
|
+
),
|
|
364
|
+
item.badge !== void 0 && item.badge > 0 && /* @__PURE__ */ React3__default.default.createElement(reactNative.View, { style: [styles.chipBadge, { backgroundColor: colors.primary }] }, /* @__PURE__ */ React3__default.default.createElement(reactNative.Text, { style: [styles.chipBadgeText, { color: colors.primaryForeground }] }, Math.min(item.badge, 99)))
|
|
365
|
+
)
|
|
309
366
|
));
|
|
310
367
|
});
|
|
311
368
|
function CategoryStrip({
|
package/dist/CategoryStrip.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { CategoryStrip } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-RTC3CFXF.mjs';
|
|
6
|
-
import './chunk-5IKW3VNC.mjs';
|
|
1
|
+
export { CategoryStrip } from './chunk-VQ57HWPL.mjs';
|
|
2
|
+
import './chunk-YNROWHQJ.mjs';
|
|
3
|
+
import './chunk-EJ7ZPXOH.mjs';
|
|
4
|
+
import './chunk-DVK4G2GT.mjs';
|
|
7
5
|
import './chunk-QY3X2UYR.mjs';
|
|
6
|
+
import './chunk-T7XZ7H7Y.mjs';
|
|
8
7
|
import './chunk-SOYNZDVY.mjs';
|
|
9
8
|
import './chunk-2CE3TQVY.mjs';
|
|
9
|
+
import './chunk-Y6FXYEAI.mjs';
|
package/dist/Checkbox.js
CHANGED
|
@@ -2,26 +2,74 @@
|
|
|
2
2
|
|
|
3
3
|
var React2 = require('react');
|
|
4
4
|
var reactNative = require('react-native');
|
|
5
|
-
var
|
|
5
|
+
var reactNativeEase = require('react-native-ease');
|
|
6
6
|
var reactNativeSizeMatters = require('react-native-size-matters');
|
|
7
|
+
var reactNativeReanimated = require('react-native-reanimated');
|
|
8
|
+
var pressto = require('pressto');
|
|
7
9
|
|
|
8
10
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
11
|
|
|
10
12
|
var React2__default = /*#__PURE__*/_interopDefault(React2);
|
|
11
|
-
var Animated__default = /*#__PURE__*/_interopDefault(Animated);
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
15
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
16
|
+
}) : x)(function(x) {
|
|
17
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
18
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
19
|
+
});
|
|
14
20
|
var _haptics = null;
|
|
21
|
+
var _hapticsLoaded = false;
|
|
15
22
|
async function getHaptics() {
|
|
16
23
|
if (reactNative.Platform.OS === "web") return null;
|
|
17
|
-
if (!
|
|
18
|
-
|
|
24
|
+
if (!_hapticsLoaded) {
|
|
25
|
+
_hapticsLoaded = true;
|
|
26
|
+
try {
|
|
27
|
+
_haptics = await import('expo-haptics');
|
|
28
|
+
} catch {
|
|
29
|
+
_haptics = null;
|
|
30
|
+
}
|
|
19
31
|
}
|
|
20
32
|
return _haptics;
|
|
21
33
|
}
|
|
34
|
+
var _pulsar = null;
|
|
35
|
+
var _pulsarChecked = false;
|
|
36
|
+
var _pulsarAvailable = false;
|
|
37
|
+
function isPulsarNativeRegistered() {
|
|
38
|
+
try {
|
|
39
|
+
const g = globalThis;
|
|
40
|
+
if (typeof g.__turboModuleProxy === "function") {
|
|
41
|
+
return g.__turboModuleProxy("RNPulsar") != null;
|
|
42
|
+
}
|
|
43
|
+
return reactNative.NativeModules?.RNPulsar != null;
|
|
44
|
+
} catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function getPulsar() {
|
|
49
|
+
if (reactNative.Platform.OS === "web") return null;
|
|
50
|
+
if (!_pulsarChecked) {
|
|
51
|
+
_pulsarChecked = true;
|
|
52
|
+
try {
|
|
53
|
+
if (isPulsarNativeRegistered()) {
|
|
54
|
+
_pulsar = __require("react-native-pulsar");
|
|
55
|
+
_pulsarAvailable = true;
|
|
56
|
+
}
|
|
57
|
+
} catch {
|
|
58
|
+
_pulsar = null;
|
|
59
|
+
_pulsarAvailable = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return _pulsarAvailable ? _pulsar : null;
|
|
63
|
+
}
|
|
22
64
|
function selectionAsync() {
|
|
23
65
|
if (reactNative.Platform.OS === "web") return;
|
|
24
|
-
getHaptics().then((h) =>
|
|
66
|
+
getHaptics().then((h) => {
|
|
67
|
+
if (h) {
|
|
68
|
+
h.selectionAsync();
|
|
69
|
+
} else {
|
|
70
|
+
getPulsar()?.Presets.System.selection();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
25
73
|
}
|
|
26
74
|
|
|
27
75
|
// src/theme/colorUtils.ts
|
|
@@ -147,72 +195,58 @@ var s = isWeb ? (n) => n : reactNativeSizeMatters.scale;
|
|
|
147
195
|
var vs = isWeb ? (n) => n : reactNativeSizeMatters.verticalScale;
|
|
148
196
|
var ms = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateScale;
|
|
149
197
|
var mvs = isWeb ? (n, _factor) => n : reactNativeSizeMatters.moderateVerticalScale;
|
|
150
|
-
var SPRINGS = {
|
|
151
|
-
/** Tight, premium press feel — Buttons, Toggle, Tabs triggers. */
|
|
152
|
-
pressIn: { stiffness: 600, damping: 35, mass: 0.8 },
|
|
153
|
-
pressOut: { stiffness: 280, damping: 22, mass: 0.8 }};
|
|
154
198
|
var TIMINGS = {
|
|
155
199
|
/** Color/opacity transitions on toggles, checkboxes, switches. */
|
|
156
200
|
state: { duration: 160 }};
|
|
157
|
-
|
|
201
|
+
({
|
|
158
202
|
/** Material-style ease-out — natural deceleration for state changes. */
|
|
159
|
-
standard:
|
|
203
|
+
standard: reactNativeReanimated.Easing.bezier(0.2, 0, 0, 1),
|
|
160
204
|
/** Strong ease-out for expanding surfaces (Accordion open). */
|
|
161
|
-
expand:
|
|
205
|
+
expand: reactNativeReanimated.Easing.bezier(0.23, 1, 0.32, 1),
|
|
162
206
|
/** Quick ease-in for collapsing. */
|
|
163
|
-
collapse:
|
|
207
|
+
collapse: reactNativeReanimated.Easing.in(reactNativeReanimated.Easing.ease)
|
|
208
|
+
});
|
|
209
|
+
var COLOR_TRANSITION = {
|
|
210
|
+
type: "timing",
|
|
211
|
+
duration: TIMINGS.state.duration,
|
|
212
|
+
easing: [0.2, 0, 0, 1]
|
|
213
|
+
};
|
|
214
|
+
var OPACITY_TRANSITION = {
|
|
215
|
+
type: "timing",
|
|
216
|
+
duration: TIMINGS.state.duration,
|
|
217
|
+
easing: [0.2, 0, 0, 1]
|
|
164
218
|
};
|
|
165
219
|
var PRESS_SCALE = {
|
|
166
|
-
button: 0.95
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
return {
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const animatedStyle = Animated.useAnimatedStyle(() => ({
|
|
197
|
-
transform: [
|
|
198
|
-
{ scale: scale2.value * (hoverActive ? hoverScale : 1) }
|
|
199
|
-
]
|
|
200
|
-
}));
|
|
201
|
-
return {
|
|
202
|
-
animatedStyle,
|
|
203
|
-
onPressIn,
|
|
204
|
-
onPressOut,
|
|
205
|
-
hoverHandlers
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
function useColorTransition(active, options = {}) {
|
|
209
|
-
const { duration = TIMINGS.state.duration } = options;
|
|
210
|
-
const progress = Animated.useSharedValue(active ? 1 : 0);
|
|
211
|
-
React2.useEffect(() => {
|
|
212
|
-
progress.value = Animated.withTiming(active ? 1 : 0, { duration, easing: EASINGS.standard });
|
|
213
|
-
}, [active, duration, progress]);
|
|
214
|
-
return progress;
|
|
215
|
-
}
|
|
220
|
+
button: 0.95,
|
|
221
|
+
card: 0.98,
|
|
222
|
+
row: 0.97,
|
|
223
|
+
chip: 0.94
|
|
224
|
+
};
|
|
225
|
+
var PressableButton = pressto.createAnimatedPressable((progress) => {
|
|
226
|
+
"worklet";
|
|
227
|
+
const scale2 = 1 - (1 - PRESS_SCALE.button) * progress;
|
|
228
|
+
return { transform: [{ scale: scale2 }] };
|
|
229
|
+
});
|
|
230
|
+
pressto.createAnimatedPressable((progress) => {
|
|
231
|
+
"worklet";
|
|
232
|
+
const scale2 = 1 - (1 - PRESS_SCALE.card) * progress;
|
|
233
|
+
return { transform: [{ scale: scale2 }] };
|
|
234
|
+
});
|
|
235
|
+
pressto.createAnimatedPressable((progress) => {
|
|
236
|
+
"worklet";
|
|
237
|
+
const scale2 = 1 - (1 - PRESS_SCALE.row) * progress;
|
|
238
|
+
return { transform: [{ scale: scale2 }] };
|
|
239
|
+
});
|
|
240
|
+
pressto.createAnimatedPressable((progress) => {
|
|
241
|
+
"worklet";
|
|
242
|
+
const scale2 = 1 - (1 - PRESS_SCALE.chip) * progress;
|
|
243
|
+
return { transform: [{ scale: scale2 }] };
|
|
244
|
+
});
|
|
245
|
+
pressto.createAnimatedPressable((progress) => {
|
|
246
|
+
"worklet";
|
|
247
|
+
const scale2 = 1 - (1 - PRESS_SCALE.button) * progress;
|
|
248
|
+
return { transform: [{ scale: scale2 }] };
|
|
249
|
+
});
|
|
216
250
|
|
|
217
251
|
// src/components/Checkbox/Checkbox.tsx
|
|
218
252
|
function Checkbox({
|
|
@@ -224,40 +258,38 @@ function Checkbox({
|
|
|
224
258
|
accessibilityLabel
|
|
225
259
|
}) {
|
|
226
260
|
const { colors } = useTheme();
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
const progress = useColorTransition(checked);
|
|
232
|
-
const boxStyle = Animated.useAnimatedStyle(() => ({
|
|
233
|
-
borderColor: Animated.interpolateColor(progress.value, [0, 1], [colors.border, colors.primary]),
|
|
234
|
-
backgroundColor: Animated.interpolateColor(progress.value, [0, 1], ["transparent", colors.primary])
|
|
235
|
-
}));
|
|
236
|
-
const checkStyle = Animated.useAnimatedStyle(() => ({
|
|
237
|
-
opacity: Animated.withTiming(checked ? 1 : 0, { duration: TIMINGS.state.duration, easing: EASINGS.standard })
|
|
238
|
-
}));
|
|
261
|
+
const handlePress = () => {
|
|
262
|
+
selectionAsync();
|
|
263
|
+
onCheckedChange?.(!checked);
|
|
264
|
+
};
|
|
239
265
|
return (
|
|
240
266
|
// AUDIT FIX: opacity was applied only to the box, leaving the label at full
|
|
241
267
|
// opacity when disabled — a contradictory visual signal. Now the entire row
|
|
242
268
|
// dims uniformly so label and control communicate the same disabled state.
|
|
243
269
|
/* @__PURE__ */ React2__default.default.createElement(
|
|
244
|
-
|
|
270
|
+
PressableButton,
|
|
245
271
|
{
|
|
246
272
|
style: [styles.row, disabled && styles.rowDisabled, style],
|
|
247
|
-
onPress:
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
},
|
|
251
|
-
onPressIn,
|
|
252
|
-
onPressOut,
|
|
253
|
-
disabled,
|
|
254
|
-
activeOpacity: 1,
|
|
273
|
+
onPress: handlePress,
|
|
274
|
+
enabled: !disabled,
|
|
275
|
+
rippleColor: "transparent",
|
|
255
276
|
touchSoundDisabled: true,
|
|
256
277
|
accessibilityRole: "checkbox",
|
|
257
278
|
accessibilityLabel: accessibilityLabel ?? label,
|
|
258
279
|
accessibilityState: { checked, disabled: !!disabled }
|
|
259
280
|
},
|
|
260
|
-
/* @__PURE__ */ React2__default.default.createElement(
|
|
281
|
+
/* @__PURE__ */ React2__default.default.createElement(
|
|
282
|
+
reactNativeEase.EaseView,
|
|
283
|
+
{
|
|
284
|
+
style: styles.box,
|
|
285
|
+
animate: {
|
|
286
|
+
borderColor: checked ? colors.primary : colors.border,
|
|
287
|
+
backgroundColor: checked ? colors.primary : "transparent"
|
|
288
|
+
},
|
|
289
|
+
transition: COLOR_TRANSITION
|
|
290
|
+
},
|
|
291
|
+
/* @__PURE__ */ React2__default.default.createElement(reactNativeEase.EaseView, { animate: { opacity: checked ? 1 : 0 }, transition: OPACITY_TRANSITION }, /* @__PURE__ */ React2__default.default.createElement(reactNative.View, { style: [styles.checkmark, { borderColor: colors.primaryForeground }] }))
|
|
292
|
+
),
|
|
261
293
|
label ? /* @__PURE__ */ React2__default.default.createElement(
|
|
262
294
|
reactNative.Text,
|
|
263
295
|
{
|
package/dist/Checkbox.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { Checkbox } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-5IKW3VNC.mjs';
|
|
1
|
+
export { Checkbox } from './chunk-AV4EMIRH.mjs';
|
|
2
|
+
import './chunk-3DKJ2GIC.mjs';
|
|
3
|
+
import './chunk-EJ7ZPXOH.mjs';
|
|
4
|
+
import './chunk-DVK4G2GT.mjs';
|
|
6
5
|
import './chunk-SOYNZDVY.mjs';
|
|
7
6
|
import './chunk-2CE3TQVY.mjs';
|
|
7
|
+
import './chunk-Y6FXYEAI.mjs';
|