@retray-dev/ui-kit 10.2.0 → 12.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 +287 -37
- package/README.md +11 -2
- package/dist/Accordion.mjs +2 -2
- package/dist/AlertBanner.mjs +2 -2
- package/dist/AppHeader.mjs +3 -3
- package/dist/Avatar.mjs +2 -2
- package/dist/Badge.mjs +2 -2
- package/dist/Button.mjs +2 -2
- package/dist/Card.mjs +2 -2
- package/dist/CategoryStrip.mjs +2 -2
- package/dist/Checkbox.mjs +2 -2
- package/dist/Chip.mjs +2 -2
- package/dist/ConfirmDialog.d.mts +1 -6
- package/dist/ConfirmDialog.d.ts +1 -6
- package/dist/ConfirmDialog.js +29 -23
- package/dist/ConfirmDialog.mjs +3 -3
- package/dist/CurrencyDisplay.mjs +2 -2
- package/dist/CurrencyInput.d.mts +3 -8
- package/dist/CurrencyInput.d.ts +3 -8
- package/dist/CurrencyInput.js +3 -1
- package/dist/CurrencyInput.mjs +3 -3
- package/dist/DetailRow.mjs +2 -2
- package/dist/EmptyState.mjs +3 -3
- package/dist/ErrorBoundary.mjs +2 -2
- package/dist/Form.mjs +2 -2
- package/dist/IconButton.mjs +2 -2
- package/dist/IconPicker.js +675 -248
- package/dist/IconPicker.mjs +3 -2
- package/dist/ImageUpload.mjs +3 -3
- package/dist/ImageViewer.mjs +4 -4
- package/dist/Input.mjs +2 -2
- package/dist/LabelValue.mjs +2 -2
- package/dist/ListGroup.mjs +2 -2
- package/dist/ListItem.d.mts +7 -7
- package/dist/ListItem.d.ts +7 -7
- package/dist/ListItem.js +12 -7
- package/dist/ListItem.mjs +2 -2
- package/dist/MediaCard.mjs +2 -2
- package/dist/MenuGroup.mjs +2 -2
- package/dist/MenuItem.mjs +2 -2
- package/dist/MonthPicker.mjs +2 -2
- package/dist/NumberStepper.mjs +2 -2
- package/dist/PagerDots.mjs +2 -2
- package/dist/Pressable.d.mts +15 -7
- package/dist/Pressable.d.ts +15 -7
- package/dist/Pressable.js +7 -3
- package/dist/Pressable.mjs +1 -1
- package/dist/PricingCard.mjs +4 -4
- package/dist/Progress.mjs +2 -2
- package/dist/RadioGroup.mjs +2 -2
- package/dist/RetrayProvider.mjs +3 -3
- package/dist/Select.mjs +2 -2
- package/dist/SelectableGrid.mjs +2 -2
- package/dist/Separator.mjs +2 -2
- package/dist/Sheet.d.mts +4 -46
- package/dist/Sheet.d.ts +4 -46
- package/dist/Sheet.js +46 -114
- package/dist/Sheet.mjs +2 -3
- package/dist/SheetSelect.mjs +2 -2
- package/dist/Skeleton.mjs +2 -2
- package/dist/Slider.mjs +2 -2
- package/dist/Spinner.mjs +2 -2
- package/dist/Stats.d.mts +30 -0
- package/dist/Stats.d.ts +30 -0
- package/dist/Stats.js +429 -0
- package/dist/Stats.mjs +9 -0
- package/dist/Switch.mjs +2 -2
- package/dist/TabBar.mjs +2 -2
- package/dist/Tabs.mjs +2 -2
- package/dist/Text.d.mts +3 -1
- package/dist/Text.d.ts +3 -1
- package/dist/Text.js +3 -3
- package/dist/Text.mjs +2 -2
- package/dist/Textarea.mjs +2 -2
- package/dist/Toast.mjs +2 -2
- package/dist/Toggle.mjs +2 -2
- package/dist/{chunk-YJ7I257J.mjs → chunk-265G6A46.mjs} +1 -1
- package/dist/{chunk-ELXBDILQ.mjs → chunk-2A2LEFZG.mjs} +2 -2
- package/dist/{chunk-ID72TK46.mjs → chunk-2CBQKU7H.mjs} +1 -1
- package/dist/{chunk-OB4JUQ3O.mjs → chunk-2I2AYECM.mjs} +1 -1
- package/dist/{chunk-WJLKJMKR.mjs → chunk-357YO24D.mjs} +4 -4
- package/dist/{chunk-GQYFLP3D.mjs → chunk-3GEYJ7I5.mjs} +1 -1
- package/dist/{chunk-AV4EMIRH.mjs → chunk-3N2M3WZL.mjs} +1 -1
- package/dist/{chunk-VF2ATYN3.mjs → chunk-3UYAZ7I4.mjs} +1 -1
- package/dist/{chunk-JMOZEC77.mjs → chunk-4WFMPFZB.mjs} +1 -1
- package/dist/chunk-5OLNXP3S.mjs +144 -0
- package/dist/{chunk-6SECQ2ZF.mjs → chunk-7HSILTC4.mjs} +2 -2
- package/dist/{chunk-IRRY3CRZ.mjs → chunk-AKM4EPOT.mjs} +1 -1
- package/dist/{chunk-IX3NYLYQ.mjs → chunk-AQEVCEXV.mjs} +1 -1
- package/dist/{chunk-WBOOUHSS.mjs → chunk-BCWEHE34.mjs} +1 -1
- package/dist/{chunk-AJ7ZDNBT.mjs → chunk-BOVUP27T.mjs} +1 -1
- package/dist/{chunk-BRKYVJVV.mjs → chunk-BQZE3HAW.mjs} +1 -1
- package/dist/{chunk-Z6SFHN6T.mjs → chunk-D3Y2T42P.mjs} +1 -1
- package/dist/{chunk-T2KCAHOS.mjs → chunk-DF6DU42P.mjs} +1 -1
- package/dist/{chunk-TB6SD2FT.mjs → chunk-DI7CBDL6.mjs} +1 -1
- package/dist/{chunk-HTHGSXFG.mjs → chunk-DOGIPOF5.mjs} +1 -1
- package/dist/{chunk-MBMXYJJV.mjs → chunk-E7NEHHXV.mjs} +7 -3
- package/dist/{chunk-MX6HRKMI.mjs → chunk-EFLFRAHD.mjs} +1 -1
- package/dist/{chunk-SOYNZDVY.mjs → chunk-EMUWGDWC.mjs} +6 -1
- package/dist/{chunk-AJRVDP2H.mjs → chunk-F4V6XLP4.mjs} +3 -3
- package/dist/{chunk-DYT7BG5I.mjs → chunk-FA2KMTH5.mjs} +1 -1
- package/dist/{chunk-Y2NS74WS.mjs → chunk-FFTYLPSB.mjs} +46 -98
- package/dist/{chunk-VKID2D2I.mjs → chunk-FUVYSVGR.mjs} +13 -8
- package/dist/{chunk-7LWRKMF5.mjs → chunk-FVTVCJAH.mjs} +1 -1
- package/dist/{chunk-TZDGAP5N.mjs → chunk-GK4VRMNE.mjs} +2 -2
- package/dist/{chunk-6Q64UFIA.mjs → chunk-HJ46DTJE.mjs} +1 -1
- package/dist/{chunk-WF2XDFRK.mjs → chunk-HLMPMUK2.mjs} +1 -1
- package/dist/{chunk-GD6KXMG5.mjs → chunk-I4V5XZPS.mjs} +1 -1
- package/dist/{chunk-TBNZHU6C.mjs → chunk-ISY26JQJ.mjs} +2 -2
- package/dist/{chunk-X4G6APW6.mjs → chunk-J6Q2YJEV.mjs} +1 -1
- package/dist/{chunk-WYEUNUTP.mjs → chunk-JCZQOY4O.mjs} +31 -24
- package/dist/{chunk-U2XJFYED.mjs → chunk-JNVAIDLK.mjs} +1 -1
- package/dist/{chunk-SOA2Z4RB.mjs → chunk-JULSIZDM.mjs} +1 -1
- package/dist/chunk-KHYX4IOM.mjs +1114 -0
- package/dist/{chunk-RYZC432S.mjs → chunk-LRM4AVYY.mjs} +1 -1
- package/dist/{chunk-6L4G6PBT.mjs → chunk-MYZ2EDYU.mjs} +1 -1
- package/dist/{chunk-BUMAMSTZ.mjs → chunk-N4ZPVCJH.mjs} +1 -1
- package/dist/{chunk-Z4VHZ7B5.mjs → chunk-NXI4YDZ2.mjs} +1 -1
- package/dist/{chunk-ZZ2R6KZ3.mjs → chunk-OULVKTWL.mjs} +1 -1
- package/dist/{chunk-FCSSQK3L.mjs → chunk-P64WHW4A.mjs} +1 -1
- package/dist/{chunk-KOO4WITD.mjs → chunk-P73V2EKS.mjs} +1 -1
- package/dist/{chunk-SXLKNTA4.mjs → chunk-PGERH3P7.mjs} +1 -1
- package/dist/{chunk-2UYENBLV.mjs → chunk-QSFV2P7O.mjs} +1 -1
- package/dist/{chunk-JT7HKXRB.mjs → chunk-S3KJCPEJ.mjs} +1 -1
- package/dist/{chunk-BEMIQXXU.mjs → chunk-V6NFJXKO.mjs} +1 -1
- package/dist/{chunk-A3A6KNQN.mjs → chunk-WOEWGSTU.mjs} +1 -1
- package/dist/{chunk-NMU5FMQJ.mjs → chunk-X26S5EVZ.mjs} +4 -2
- package/dist/{chunk-YFZ3ELX5.mjs → chunk-XBAGGKLW.mjs} +2 -2
- package/dist/{chunk-S2R7UVOE.mjs → chunk-ZHMSAYLT.mjs} +1 -1
- package/dist/fonts.d.mts +1 -7
- package/dist/fonts.d.ts +1 -7
- package/dist/fonts.js +0 -2
- package/dist/fonts.mjs +1 -2
- package/dist/index.d.mts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1184 -708
- package/dist/index.mjs +53 -52
- package/package.json +3 -3
- package/src/components/ConfirmDialog/ConfirmDialog.tsx +39 -30
- package/src/components/CurrencyInput/CurrencyInput.tsx +4 -7
- package/src/components/IconPicker/IconPicker.tsx +124 -112
- package/src/components/ListItem/ListItem.tsx +43 -28
- package/src/components/Pressable/Pressable.tsx +20 -8
- package/src/components/Sheet/Sheet.tsx +64 -172
- package/src/components/Stats/Stats.tsx +226 -0
- package/src/components/Stats/index.ts +2 -0
- package/src/components/Text/Text.tsx +4 -2
- package/src/fonts.ts +0 -7
- package/src/index.ts +4 -0
- package/src/theme/colorUtils.ts +9 -0
- package/src/utils/curatedIcons.ts +698 -135
- package/src/utils/fontGuard.ts +2 -1
- package/dist/chunk-53Z3NYGE.mjs +0 -742
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React54 = require('react');
|
|
4
4
|
var reactNative = require('react-native');
|
|
5
5
|
var reactNativeSizeMatters = require('react-native-size-matters');
|
|
6
6
|
var AntDesign = require('@expo/vector-icons/AntDesign');
|
|
@@ -12,7 +12,7 @@ var Ionicons = require('@expo/vector-icons/Ionicons');
|
|
|
12
12
|
var pressto = require('pressto');
|
|
13
13
|
var Animated12 = require('react-native-reanimated');
|
|
14
14
|
var expoFont = require('expo-font');
|
|
15
|
-
var
|
|
15
|
+
var bottomSheet = require('@gorhom/bottom-sheet');
|
|
16
16
|
var reactNativeEase = require('react-native-ease');
|
|
17
17
|
var vectorIcons = require('@expo/vector-icons');
|
|
18
18
|
var expoLinearGradient = require('expo-linear-gradient');
|
|
@@ -24,7 +24,7 @@ var reactNativeGestureHandler = require('react-native-gesture-handler');
|
|
|
24
24
|
|
|
25
25
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
26
26
|
|
|
27
|
-
var
|
|
27
|
+
var React54__default = /*#__PURE__*/_interopDefault(React54);
|
|
28
28
|
var AntDesign__default = /*#__PURE__*/_interopDefault(AntDesign);
|
|
29
29
|
var Entypo__default = /*#__PURE__*/_interopDefault(Entypo);
|
|
30
30
|
var Feather__default = /*#__PURE__*/_interopDefault(Feather);
|
|
@@ -32,7 +32,6 @@ var FontAwesome5__default = /*#__PURE__*/_interopDefault(FontAwesome5);
|
|
|
32
32
|
var MaterialIcons__default = /*#__PURE__*/_interopDefault(MaterialIcons);
|
|
33
33
|
var Ionicons__default = /*#__PURE__*/_interopDefault(Ionicons);
|
|
34
34
|
var Animated12__default = /*#__PURE__*/_interopDefault(Animated12);
|
|
35
|
-
var BottomSheet__default = /*#__PURE__*/_interopDefault(BottomSheet);
|
|
36
35
|
var RNSlider__default = /*#__PURE__*/_interopDefault(RNSlider);
|
|
37
36
|
|
|
38
37
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
@@ -93,6 +92,11 @@ function darken(hex, amount) {
|
|
|
93
92
|
if (!rgb) return hex;
|
|
94
93
|
return rgbToHex(rgb.r * (1 - amount), rgb.g * (1 - amount), rgb.b * (1 - amount));
|
|
95
94
|
}
|
|
95
|
+
function withAlpha(hex, alpha) {
|
|
96
|
+
const rgb = hexToRgb(hex);
|
|
97
|
+
if (!rgb) return hex;
|
|
98
|
+
return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;
|
|
99
|
+
}
|
|
96
100
|
|
|
97
101
|
// src/theme/colors.ts
|
|
98
102
|
var defaultLight = {
|
|
@@ -168,23 +172,23 @@ function deriveColors(t, scheme) {
|
|
|
168
172
|
}
|
|
169
173
|
|
|
170
174
|
// src/theme/ThemeProvider.tsx
|
|
171
|
-
var ThemeContext =
|
|
175
|
+
var ThemeContext = React54.createContext({
|
|
172
176
|
colors: deriveColors(defaultLight, "light"),
|
|
173
177
|
colorScheme: "light"
|
|
174
178
|
});
|
|
175
179
|
function ThemeProvider({ children, theme, colorScheme = "system" }) {
|
|
176
180
|
const systemScheme = reactNative.useColorScheme() ?? "light";
|
|
177
181
|
const resolvedScheme = colorScheme === "system" ? systemScheme : colorScheme;
|
|
178
|
-
const colors =
|
|
182
|
+
const colors = React54.useMemo(() => {
|
|
179
183
|
const base = resolvedScheme === "dark" ? defaultDark : defaultLight;
|
|
180
184
|
const override = resolvedScheme === "dark" ? theme?.dark : theme?.light;
|
|
181
185
|
const merged = override ? { ...base, ...override } : base;
|
|
182
186
|
return deriveColors(merged, resolvedScheme);
|
|
183
187
|
}, [resolvedScheme, theme]);
|
|
184
|
-
return /* @__PURE__ */
|
|
188
|
+
return /* @__PURE__ */ React54__default.default.createElement(ThemeContext.Provider, { value: { colors, colorScheme: resolvedScheme } }, children);
|
|
185
189
|
}
|
|
186
190
|
function useTheme() {
|
|
187
|
-
const context =
|
|
191
|
+
const context = React54.useContext(ThemeContext);
|
|
188
192
|
if (!context) {
|
|
189
193
|
throw new Error("useTheme must be used within a ThemeProvider");
|
|
190
194
|
}
|
|
@@ -408,10 +412,10 @@ function Icon({ name, size, color, family }) {
|
|
|
408
412
|
}
|
|
409
413
|
if (!resolved) return null;
|
|
410
414
|
const Component = resolved.component;
|
|
411
|
-
return
|
|
415
|
+
return React54__default.default.createElement(Component, { name, size, color });
|
|
412
416
|
}
|
|
413
417
|
function renderIcon(name, size, color) {
|
|
414
|
-
return
|
|
418
|
+
return React54__default.default.createElement(Icon, { name, size, color });
|
|
415
419
|
}
|
|
416
420
|
|
|
417
421
|
// src/tokens.ts
|
|
@@ -736,7 +740,7 @@ function ButtonBase({
|
|
|
736
740
|
const styleArray = Array.isArray(style) ? style : style ? [style] : [];
|
|
737
741
|
const flatStyle = reactNative.StyleSheet.flatten(styleArray);
|
|
738
742
|
const { flex, ...restStyle } = flatStyle || {};
|
|
739
|
-
return /* @__PURE__ */
|
|
743
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [fullWidth && styles.fullWidth, flex !== void 0 && { flex }] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
740
744
|
PressableButton,
|
|
741
745
|
{
|
|
742
746
|
style: [
|
|
@@ -757,7 +761,7 @@ function ButtonBase({
|
|
|
757
761
|
accessibilityHint,
|
|
758
762
|
accessibilityState: { disabled: isDisabled, busy: loading }
|
|
759
763
|
},
|
|
760
|
-
loading ? /* @__PURE__ */
|
|
764
|
+
loading ? /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, /* @__PURE__ */ React54__default.default.createElement(reactNative.ActivityIndicator, { size: "small", color: spinnerColor, style: { marginRight: s(6) } }), /* @__PURE__ */ React54__default.default.createElement(
|
|
761
765
|
reactNative.Text,
|
|
762
766
|
{
|
|
763
767
|
style: [styles.label, labelVariantStyle, labelSizeStyles[size], styles.labelLoading],
|
|
@@ -765,7 +769,7 @@ function ButtonBase({
|
|
|
765
769
|
numberOfLines: 1
|
|
766
770
|
},
|
|
767
771
|
label
|
|
768
|
-
)) : /* @__PURE__ */
|
|
772
|
+
)) : /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, effectiveIcon && iconPosition === "left" && /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, effectiveIcon), /* @__PURE__ */ React54__default.default.createElement(
|
|
769
773
|
reactNative.Text,
|
|
770
774
|
{
|
|
771
775
|
style: [styles.label, labelVariantStyle, labelSizeStyles[size], effectiveIcon ? styles.labelWithIcon : void 0],
|
|
@@ -773,10 +777,10 @@ function ButtonBase({
|
|
|
773
777
|
numberOfLines: 1
|
|
774
778
|
},
|
|
775
779
|
label
|
|
776
|
-
), effectiveIcon && iconPosition === "right" && /* @__PURE__ */
|
|
780
|
+
), effectiveIcon && iconPosition === "right" && /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, effectiveIcon))
|
|
777
781
|
));
|
|
778
782
|
}
|
|
779
|
-
var Button =
|
|
783
|
+
var Button = React54__default.default.memo(ButtonBase);
|
|
780
784
|
var styles = reactNative.StyleSheet.create({
|
|
781
785
|
base: {
|
|
782
786
|
borderRadius: RADIUS.md,
|
|
@@ -802,7 +806,7 @@ var styles = reactNative.StyleSheet.create({
|
|
|
802
806
|
}
|
|
803
807
|
});
|
|
804
808
|
function ButtonGroup({ children, gap = 12, vertical = false, style }) {
|
|
805
|
-
return /* @__PURE__ */
|
|
809
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
806
810
|
reactNative.View,
|
|
807
811
|
{
|
|
808
812
|
style: [
|
|
@@ -812,8 +816,8 @@ function ButtonGroup({ children, gap = 12, vertical = false, style }) {
|
|
|
812
816
|
style
|
|
813
817
|
]
|
|
814
818
|
},
|
|
815
|
-
|
|
816
|
-
if (!
|
|
819
|
+
React54__default.default.Children.map(children, (child) => {
|
|
820
|
+
if (!React54__default.default.isValidElement(child)) return child;
|
|
817
821
|
const childProps = child.props;
|
|
818
822
|
const extraProps = {
|
|
819
823
|
style: [child.props.style, { flex: 1 }]
|
|
@@ -821,7 +825,7 @@ function ButtonGroup({ children, gap = 12, vertical = false, style }) {
|
|
|
821
825
|
if (!vertical && "label" in childProps && childProps["size"] === void 0) {
|
|
822
826
|
extraProps["size"] = "sm";
|
|
823
827
|
}
|
|
824
|
-
return
|
|
828
|
+
return React54__default.default.cloneElement(child, extraProps);
|
|
825
829
|
})
|
|
826
830
|
);
|
|
827
831
|
}
|
|
@@ -882,7 +886,7 @@ function IconButtonBase({
|
|
|
882
886
|
const showBadge = badge !== void 0 && badge !== false && badge !== 0;
|
|
883
887
|
const badgeCount = typeof badge === "number" ? Math.min(badge, 99) : null;
|
|
884
888
|
const showCount = typeof badge === "number" && badge > 0;
|
|
885
|
-
return /* @__PURE__ */
|
|
889
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles3.wrapper }, /* @__PURE__ */ React54__default.default.createElement(
|
|
886
890
|
PressableButton,
|
|
887
891
|
{
|
|
888
892
|
style: [
|
|
@@ -902,14 +906,14 @@ function IconButtonBase({
|
|
|
902
906
|
accessibilityHint,
|
|
903
907
|
accessibilityState: { disabled: isDisabled, busy: loading }
|
|
904
908
|
},
|
|
905
|
-
loading ? /* @__PURE__ */
|
|
906
|
-
), showBadge && /* @__PURE__ */
|
|
909
|
+
loading ? /* @__PURE__ */ React54__default.default.createElement(reactNative.ActivityIndicator, { size: "small", color: spinnerColor }) : resolvedIcon
|
|
910
|
+
), showBadge && /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [
|
|
907
911
|
styles3.badge,
|
|
908
912
|
{ backgroundColor: colors.primary },
|
|
909
913
|
showCount ? styles3.badgeCount : styles3.badgeDot
|
|
910
|
-
] }, showCount && /* @__PURE__ */
|
|
914
|
+
] }, showCount && /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles3.badgeText, { color: colors.primaryForeground }] }, badgeCount)));
|
|
911
915
|
}
|
|
912
|
-
var IconButton =
|
|
916
|
+
var IconButton = React54__default.default.memo(IconButtonBase);
|
|
913
917
|
var styles3 = reactNative.StyleSheet.create({
|
|
914
918
|
wrapper: {
|
|
915
919
|
alignSelf: "flex-start"
|
|
@@ -954,7 +958,7 @@ function warnIfFontsMissing() {
|
|
|
954
958
|
try {
|
|
955
959
|
if (!expoFont.isLoaded("Sohne-Regular")) {
|
|
956
960
|
console.warn(
|
|
957
|
-
"[retray-ui-kit] Sohne fonts are not loaded \u2014 text will fall back to the system font. Load them at your app root before rendering any UI kit component:\n\n import { useFonts } from 'expo-font'\n import {
|
|
961
|
+
"[retray-ui-kit] Sohne fonts are not loaded \u2014 text will fall back to the system font. Load them at your app root before rendering any UI kit component:\n\n import { useFonts } from 'expo-font'\n import { SohneFontNames } from '@retray-dev/ui-kit/fonts'\n // Copy the SohneFonts boilerplate from CONSUMER.md into your App.tsx\n\n const [fontsLoaded] = useFonts(SohneFonts)\n if (!fontsLoaded) return null\n"
|
|
958
962
|
);
|
|
959
963
|
}
|
|
960
964
|
} catch {
|
|
@@ -999,32 +1003,32 @@ var defaultColorVariant = {
|
|
|
999
1003
|
"button-lg": "foreground",
|
|
1000
1004
|
"button-sm": "foreground"
|
|
1001
1005
|
};
|
|
1002
|
-
function TextBase({ variant = "body-md", color, style, children, ...props }) {
|
|
1006
|
+
function TextBase({ variant = "body-md", color, style, uppercase, children, ...props }) {
|
|
1003
1007
|
warnIfFontsMissing();
|
|
1004
1008
|
const { colors } = useTheme();
|
|
1005
1009
|
const colorKey = defaultColorVariant[variant] ?? "foreground";
|
|
1006
1010
|
const resolvedColor = color ?? colors[colorKey];
|
|
1007
|
-
return /* @__PURE__ */
|
|
1011
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1008
1012
|
reactNative.Text,
|
|
1009
1013
|
{
|
|
1010
|
-
style: [variantStyles[variant], { color: resolvedColor }, style],
|
|
1014
|
+
style: [variantStyles[variant], { color: resolvedColor }, uppercase && { textTransform: "uppercase" }, style],
|
|
1011
1015
|
allowFontScaling: true,
|
|
1012
1016
|
...props
|
|
1013
1017
|
},
|
|
1014
1018
|
children
|
|
1015
1019
|
);
|
|
1016
1020
|
}
|
|
1017
|
-
var Text3 =
|
|
1021
|
+
var Text3 = React54__default.default.memo(TextBase);
|
|
1018
1022
|
var webInputResetStyle = reactNative.Platform.OS === "web" ? { outlineStyle: "none", outlineWidth: 0, outlineColor: "transparent", boxShadow: "none" } : {};
|
|
1019
1023
|
function Input({ label, error, hint, disabled, prefix, suffix, prefixStyle, suffixStyle, prefixIcon, suffixIcon, prefixIconColor, suffixIconColor, type = "text", containerStyle, inputWrapperStyle, sheetMode = false, style, onFocus, onBlur, secureTextEntry, editable, accessibilityLabel, ...props }) {
|
|
1020
1024
|
const { colors } = useTheme();
|
|
1021
|
-
const [focused, setFocused] =
|
|
1022
|
-
const [showPassword, setShowPassword] =
|
|
1025
|
+
const [focused, setFocused] = React54.useState(false);
|
|
1026
|
+
const [showPassword, setShowPassword] = React54.useState(false);
|
|
1023
1027
|
const isDisabled = disabled || editable === false;
|
|
1024
1028
|
const isPassword = type === "password";
|
|
1025
1029
|
const effectiveSecure = isPassword ? !showPassword : secureTextEntry;
|
|
1026
1030
|
const effectivePrefix = prefixIcon ? renderIcon(prefixIcon, 20, prefixIconColor ?? colors.foregroundMuted) : prefix;
|
|
1027
|
-
const effectiveSuffix = isPassword && !suffix && !suffixIcon ? /* @__PURE__ */
|
|
1031
|
+
const effectiveSuffix = isPassword && !suffix && !suffixIcon ? /* @__PURE__ */ React54__default.default.createElement(
|
|
1028
1032
|
reactNative.TouchableOpacity,
|
|
1029
1033
|
{
|
|
1030
1034
|
onPress: () => setShowPassword(!showPassword),
|
|
@@ -1033,10 +1037,10 @@ function Input({ label, error, hint, disabled, prefix, suffix, prefixStyle, suff
|
|
|
1033
1037
|
accessibilityRole: "button",
|
|
1034
1038
|
accessibilityLabel: showPassword ? "Hide password" : "Show password"
|
|
1035
1039
|
},
|
|
1036
|
-
/* @__PURE__ */
|
|
1040
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.AntDesign, { name: showPassword ? "eye" : "eye-invisible", size: 20, color: colors.foregroundMuted })
|
|
1037
1041
|
) : suffixIcon ? renderIcon(suffixIcon, 20, suffixIconColor ?? colors.foregroundMuted) : suffix;
|
|
1038
1042
|
const borderColor = error ? colors.destructive : focused ? colors.primary : colors.border;
|
|
1039
|
-
return /* @__PURE__ */
|
|
1043
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles4.container, isDisabled && styles4.containerDisabled, containerStyle] }, label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles4.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React54__default.default.createElement(
|
|
1040
1044
|
reactNativeEase.EaseView,
|
|
1041
1045
|
{
|
|
1042
1046
|
style: [
|
|
@@ -1048,9 +1052,9 @@ function Input({ label, error, hint, disabled, prefix, suffix, prefixStyle, suff
|
|
|
1048
1052
|
animate: { borderColor },
|
|
1049
1053
|
transition: COLOR_TRANSITION
|
|
1050
1054
|
},
|
|
1051
|
-
effectivePrefix ? typeof effectivePrefix === "string" ? /* @__PURE__ */
|
|
1052
|
-
sheetMode ? /* @__PURE__ */
|
|
1053
|
-
|
|
1055
|
+
effectivePrefix ? typeof effectivePrefix === "string" ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles4.prefixText, { color: colors.foregroundMuted }, prefixStyle], allowFontScaling: true }, effectivePrefix) : /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles4.prefixContainer }, effectivePrefix) : null,
|
|
1056
|
+
sheetMode ? /* @__PURE__ */ React54__default.default.createElement(
|
|
1057
|
+
bottomSheet.BottomSheetTextInput,
|
|
1054
1058
|
{
|
|
1055
1059
|
style: [
|
|
1056
1060
|
styles4.input,
|
|
@@ -1073,7 +1077,7 @@ function Input({ label, error, hint, disabled, prefix, suffix, prefixStyle, suff
|
|
|
1073
1077
|
accessibilityLabel: accessibilityLabel ?? label,
|
|
1074
1078
|
...props
|
|
1075
1079
|
}
|
|
1076
|
-
) : /* @__PURE__ */
|
|
1080
|
+
) : /* @__PURE__ */ React54__default.default.createElement(
|
|
1077
1081
|
reactNative.TextInput,
|
|
1078
1082
|
{
|
|
1079
1083
|
style: [
|
|
@@ -1098,8 +1102,8 @@ function Input({ label, error, hint, disabled, prefix, suffix, prefixStyle, suff
|
|
|
1098
1102
|
...props
|
|
1099
1103
|
}
|
|
1100
1104
|
),
|
|
1101
|
-
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */
|
|
1102
|
-
), error ? /* @__PURE__ */
|
|
1105
|
+
effectiveSuffix ? typeof effectiveSuffix === "string" ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles4.suffixText, { color: colors.foregroundMuted }, suffixStyle], allowFontScaling: true }, effectiveSuffix) : /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles4.suffixContainer }, effectiveSuffix) : null
|
|
1106
|
+
), error ? /* @__PURE__ */ React54__default.default.createElement(
|
|
1103
1107
|
reactNative.Text,
|
|
1104
1108
|
{
|
|
1105
1109
|
style: [styles4.helperText, { color: colors.destructive }],
|
|
@@ -1107,7 +1111,7 @@ function Input({ label, error, hint, disabled, prefix, suffix, prefixStyle, suff
|
|
|
1107
1111
|
accessibilityLiveRegion: "polite"
|
|
1108
1112
|
},
|
|
1109
1113
|
error
|
|
1110
|
-
) : null, !error && hint ? /* @__PURE__ */
|
|
1114
|
+
) : null, !error && hint ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles4.helperText, { color: colors.foregroundMuted }], allowFontScaling: true }, hint) : null);
|
|
1111
1115
|
}
|
|
1112
1116
|
var styles4 = reactNative.StyleSheet.create({
|
|
1113
1117
|
container: {
|
|
@@ -1209,7 +1213,7 @@ function BadgeBase({ label, children, variant = "default", size = "md", icon, ic
|
|
|
1209
1213
|
const effectiveIcon = iconName ? renderIcon(iconName, sizeIconSize[size], iconColor ?? textColor) : icon;
|
|
1210
1214
|
const content = children ?? label;
|
|
1211
1215
|
const a11yLabel = typeof content === "string" ? content : label;
|
|
1212
|
-
return /* @__PURE__ */
|
|
1216
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1213
1217
|
reactNative.View,
|
|
1214
1218
|
{
|
|
1215
1219
|
style: [styles5.container, containerStyle, sizePadding[size], { gap: sizeIconGap[size] }, style],
|
|
@@ -1217,10 +1221,10 @@ function BadgeBase({ label, children, variant = "default", size = "md", icon, ic
|
|
|
1217
1221
|
accessibilityLabel: a11yLabel
|
|
1218
1222
|
},
|
|
1219
1223
|
effectiveIcon,
|
|
1220
|
-
typeof content === "string" ? /* @__PURE__ */
|
|
1224
|
+
typeof content === "string" ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles5.label, { color: textColor }, sizeFontSize[size]], allowFontScaling: true }, content) : content
|
|
1221
1225
|
);
|
|
1222
1226
|
}
|
|
1223
|
-
var Badge =
|
|
1227
|
+
var Badge = React54__default.default.memo(BadgeBase);
|
|
1224
1228
|
var styles5 = reactNative.StyleSheet.create({
|
|
1225
1229
|
container: {
|
|
1226
1230
|
borderRadius: 9999,
|
|
@@ -1265,9 +1269,9 @@ function Card({ children, variant = "elevated", onPress, style, accessibilityLab
|
|
|
1265
1269
|
elevation: 0
|
|
1266
1270
|
}
|
|
1267
1271
|
}[variant];
|
|
1268
|
-
const cardContent = /* @__PURE__ */
|
|
1272
|
+
const cardContent = /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles6.card, variantStyle, style] }, children);
|
|
1269
1273
|
if (onPress) {
|
|
1270
|
-
return /* @__PURE__ */
|
|
1274
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1271
1275
|
PressableCard,
|
|
1272
1276
|
{
|
|
1273
1277
|
onPress: handlePress,
|
|
@@ -1283,21 +1287,21 @@ function Card({ children, variant = "elevated", onPress, style, accessibilityLab
|
|
|
1283
1287
|
return cardContent;
|
|
1284
1288
|
}
|
|
1285
1289
|
function CardHeader({ children, style }) {
|
|
1286
|
-
return /* @__PURE__ */
|
|
1290
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles6.header, style] }, children);
|
|
1287
1291
|
}
|
|
1288
1292
|
function CardTitle({ children, style }) {
|
|
1289
1293
|
const { colors } = useTheme();
|
|
1290
|
-
return /* @__PURE__ */
|
|
1294
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles6.title, { color: colors.foreground }, style], allowFontScaling: true }, children);
|
|
1291
1295
|
}
|
|
1292
1296
|
function CardDescription({ children, style }) {
|
|
1293
1297
|
const { colors } = useTheme();
|
|
1294
|
-
return /* @__PURE__ */
|
|
1298
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles6.description, { color: colors.foregroundSubtle }, style], allowFontScaling: true }, children);
|
|
1295
1299
|
}
|
|
1296
1300
|
function CardContent({ children, style }) {
|
|
1297
|
-
return /* @__PURE__ */
|
|
1301
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles6.content, style] }, children);
|
|
1298
1302
|
}
|
|
1299
1303
|
function CardFooter({ children, style }) {
|
|
1300
|
-
return /* @__PURE__ */
|
|
1304
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles6.footer, style] }, children);
|
|
1301
1305
|
}
|
|
1302
1306
|
var styles6 = reactNative.StyleSheet.create({
|
|
1303
1307
|
card: {
|
|
@@ -1335,7 +1339,7 @@ var styles6 = reactNative.StyleSheet.create({
|
|
|
1335
1339
|
});
|
|
1336
1340
|
function Separator({ orientation = "horizontal", style }) {
|
|
1337
1341
|
const { colors } = useTheme();
|
|
1338
|
-
return /* @__PURE__ */
|
|
1342
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1339
1343
|
reactNative.View,
|
|
1340
1344
|
{
|
|
1341
1345
|
style: [
|
|
@@ -1370,7 +1374,7 @@ function Spinner({ size = "md", color, label, ...props }) {
|
|
|
1370
1374
|
const { colors } = useTheme();
|
|
1371
1375
|
const a11yLabel = label || "Loading";
|
|
1372
1376
|
if (label) {
|
|
1373
|
-
return /* @__PURE__ */
|
|
1377
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1374
1378
|
reactNative.View,
|
|
1375
1379
|
{
|
|
1376
1380
|
style: styles8.wrapper,
|
|
@@ -1378,8 +1382,8 @@ function Spinner({ size = "md", color, label, ...props }) {
|
|
|
1378
1382
|
accessibilityLabel: a11yLabel,
|
|
1379
1383
|
accessibilityState: { busy: true }
|
|
1380
1384
|
},
|
|
1381
|
-
/* @__PURE__ */
|
|
1382
|
-
/* @__PURE__ */
|
|
1385
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.ActivityIndicator, { size: sizeMap2[size], color: color ?? colors.primary, ...props }),
|
|
1386
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
1383
1387
|
reactNative.Text,
|
|
1384
1388
|
{
|
|
1385
1389
|
style: [styles8.label, { color: colors.foregroundMuted, fontSize: labelFontSize[size] }],
|
|
@@ -1389,7 +1393,7 @@ function Spinner({ size = "md", color, label, ...props }) {
|
|
|
1389
1393
|
)
|
|
1390
1394
|
);
|
|
1391
1395
|
}
|
|
1392
|
-
return /* @__PURE__ */
|
|
1396
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1393
1397
|
reactNative.ActivityIndicator,
|
|
1394
1398
|
{
|
|
1395
1399
|
size: sizeMap2[size],
|
|
@@ -1421,9 +1425,9 @@ function Skeleton({
|
|
|
1421
1425
|
}) {
|
|
1422
1426
|
const { colors, colorScheme } = useTheme();
|
|
1423
1427
|
const shimmer = Animated12.useSharedValue(0);
|
|
1424
|
-
const [containerWidth, setContainerWidth] =
|
|
1428
|
+
const [containerWidth, setContainerWidth] = React54.useState(300);
|
|
1425
1429
|
const shimmerHighlight = colorScheme === "dark" ? "rgba(255,255,255,0.08)" : "rgba(255,255,255,0.7)";
|
|
1426
|
-
|
|
1430
|
+
React54.useEffect(() => {
|
|
1427
1431
|
shimmer.value = Animated12.withRepeat(
|
|
1428
1432
|
Animated12.withTiming(1, { duration: TIMINGS.shimmer.duration, easing: Animated12.Easing.linear }),
|
|
1429
1433
|
-1,
|
|
@@ -1436,7 +1440,7 @@ function Skeleton({
|
|
|
1436
1440
|
const resolvedWidth = preset === "circle" ? s(diameter) : preset === "text" ? "60%" : width;
|
|
1437
1441
|
const resolvedHeight = preset === "circle" ? s(diameter) : preset === "text" ? 14 : height;
|
|
1438
1442
|
const resolvedRadius = preset === "circle" ? 9999 : preset === "text" ? 4 : borderRadius;
|
|
1439
|
-
return /* @__PURE__ */
|
|
1443
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1440
1444
|
reactNative.View,
|
|
1441
1445
|
{
|
|
1442
1446
|
style: [
|
|
@@ -1449,7 +1453,7 @@ function Skeleton({
|
|
|
1449
1453
|
accessibilityLabel: "Loading",
|
|
1450
1454
|
accessibilityState: { busy: true }
|
|
1451
1455
|
},
|
|
1452
|
-
/* @__PURE__ */
|
|
1456
|
+
/* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [reactNative.StyleSheet.absoluteFill, shimmerStyle] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
1453
1457
|
expoLinearGradient.LinearGradient,
|
|
1454
1458
|
{
|
|
1455
1459
|
colors: ["transparent", shimmerHighlight, "transparent"],
|
|
@@ -1469,10 +1473,10 @@ var aspectRatioMap = {
|
|
|
1469
1473
|
};
|
|
1470
1474
|
function MediaCardSkeleton({ aspectRatio = "4:3", showSubtitle = true, style }) {
|
|
1471
1475
|
const ratio = aspectRatioMap[aspectRatio];
|
|
1472
|
-
return /* @__PURE__ */
|
|
1476
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: { paddingTop: `${ratio * 100}%` } }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: reactNative.StyleSheet.absoluteFill }, /* @__PURE__ */ React54__default.default.createElement(Skeleton, { width: "100%", height: void 0, style: skeletonStyles.fill, borderRadius: RADIUS.md }))), /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: skeletonStyles.meta }, /* @__PURE__ */ React54__default.default.createElement(Skeleton, { width: "70%", height: vs(14), borderRadius: RADIUS.xs }), showSubtitle ? /* @__PURE__ */ React54__default.default.createElement(Skeleton, { width: "45%", height: vs(12), borderRadius: RADIUS.xs }) : null));
|
|
1473
1477
|
}
|
|
1474
1478
|
function ListItemSkeleton({ showAvatar = true, showSubtitle = true, style }) {
|
|
1475
|
-
return /* @__PURE__ */
|
|
1479
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [skeletonStyles.row, style] }, showAvatar ? /* @__PURE__ */ React54__default.default.createElement(Skeleton, { preset: "circle", diameter: 40 }) : null, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: skeletonStyles.rowText }, /* @__PURE__ */ React54__default.default.createElement(Skeleton, { width: "60%", height: vs(14), borderRadius: RADIUS.xs }), showSubtitle ? /* @__PURE__ */ React54__default.default.createElement(Skeleton, { width: "40%", height: vs(12), borderRadius: RADIUS.xs }) : null));
|
|
1476
1480
|
}
|
|
1477
1481
|
function ListSkeleton({
|
|
1478
1482
|
count = 6,
|
|
@@ -1483,10 +1487,10 @@ function ListSkeleton({
|
|
|
1483
1487
|
style
|
|
1484
1488
|
}) {
|
|
1485
1489
|
if (columns <= 1) {
|
|
1486
|
-
return /* @__PURE__ */
|
|
1490
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [{ gap: vs(gap) }, style] }, Array.from({ length: count }).map((_, i) => /* @__PURE__ */ React54__default.default.createElement(ListItemSkeleton, { key: i, showAvatar })));
|
|
1487
1491
|
}
|
|
1488
1492
|
const widthPct = `${100 / columns}%`;
|
|
1489
|
-
return /* @__PURE__ */
|
|
1493
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [skeletonStyles.grid, { marginHorizontal: -s(gap) / 2 }, style] }, Array.from({ length: count }).map((_, i) => /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { key: i, style: { width: widthPct, paddingHorizontal: s(gap) / 2, marginBottom: vs(gap) } }, /* @__PURE__ */ React54__default.default.createElement(MediaCardSkeleton, { aspectRatio }))));
|
|
1490
1494
|
}
|
|
1491
1495
|
Skeleton.MediaCard = MediaCardSkeleton;
|
|
1492
1496
|
Skeleton.ListItem = ListItemSkeleton;
|
|
@@ -1549,7 +1553,7 @@ function getInitials(fallback, fallbackText) {
|
|
|
1549
1553
|
}
|
|
1550
1554
|
function AvatarBase({ src, fallback, fallbackText, size = "md", status, style }) {
|
|
1551
1555
|
const { colors } = useTheme();
|
|
1552
|
-
const [imageError, setImageError] =
|
|
1556
|
+
const [imageError, setImageError] = React54.useState(false);
|
|
1553
1557
|
const dimension = typeof size === "number" ? size : sizeMap3[size];
|
|
1554
1558
|
const fontSize = typeof size === "number" ? size * 0.38 : fontSizeMap[size];
|
|
1555
1559
|
const showFallback = !src || imageError;
|
|
@@ -1568,21 +1572,21 @@ function AvatarBase({ src, fallback, fallbackText, size = "md", status, style })
|
|
|
1568
1572
|
overflow: "hidden"
|
|
1569
1573
|
};
|
|
1570
1574
|
const a11yLabel = fallbackText || fallback || "Avatar";
|
|
1571
|
-
return /* @__PURE__ */
|
|
1575
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1572
1576
|
reactNative.View,
|
|
1573
1577
|
{
|
|
1574
1578
|
style: [styles10.wrapper, style],
|
|
1575
1579
|
accessibilityRole: "image",
|
|
1576
1580
|
accessibilityLabel: a11yLabel
|
|
1577
1581
|
},
|
|
1578
|
-
/* @__PURE__ */
|
|
1582
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles10.base, containerStyle] }, !showFallback ? /* @__PURE__ */ React54__default.default.createElement(
|
|
1579
1583
|
reactNative.Image,
|
|
1580
1584
|
{
|
|
1581
1585
|
source: { uri: src },
|
|
1582
1586
|
style: { width: dimension, height: dimension },
|
|
1583
1587
|
onError: () => setImageError(true)
|
|
1584
1588
|
}
|
|
1585
|
-
) : /* @__PURE__ */
|
|
1589
|
+
) : /* @__PURE__ */ React54__default.default.createElement(
|
|
1586
1590
|
reactNative.Text,
|
|
1587
1591
|
{
|
|
1588
1592
|
style: [styles10.fallback, { color: colors.foregroundMuted, fontSize }],
|
|
@@ -1590,7 +1594,7 @@ function AvatarBase({ src, fallback, fallbackText, size = "md", status, style })
|
|
|
1590
1594
|
},
|
|
1591
1595
|
getInitials(fallback, fallbackText)
|
|
1592
1596
|
)),
|
|
1593
|
-
status && /* @__PURE__ */
|
|
1597
|
+
status && /* @__PURE__ */ React54__default.default.createElement(
|
|
1594
1598
|
reactNative.View,
|
|
1595
1599
|
{
|
|
1596
1600
|
style: [
|
|
@@ -1608,7 +1612,7 @@ function AvatarBase({ src, fallback, fallbackText, size = "md", status, style })
|
|
|
1608
1612
|
)
|
|
1609
1613
|
);
|
|
1610
1614
|
}
|
|
1611
|
-
var Avatar =
|
|
1615
|
+
var Avatar = React54__default.default.memo(AvatarBase);
|
|
1612
1616
|
var styles10 = reactNative.StyleSheet.create({
|
|
1613
1617
|
wrapper: {
|
|
1614
1618
|
alignSelf: "flex-start",
|
|
@@ -1633,15 +1637,15 @@ function AlertBanner({ title, description, variant = "default", icon, iconName,
|
|
|
1633
1637
|
const accentColor = variant === "destructive" ? colors.destructive : variant === "success" ? colors.success : variant === "warning" ? colors.warning : colors.foreground;
|
|
1634
1638
|
const bgColor = variant === "destructive" ? isDark ? "rgba(239, 83, 80, 0.15)" : "rgba(199, 40, 40, 0.10)" : variant === "success" ? isDark ? "rgba(46, 125, 82, 0.15)" : "rgba(26, 122, 69, 0.10)" : variant === "warning" ? isDark ? "rgba(245, 166, 35, 0.15)" : "rgba(154, 82, 0, 0.10)" : colors.surface;
|
|
1635
1639
|
const borderColor = variant === "destructive" ? isDark ? "rgba(239, 83, 80, 0.30)" : "rgba(199, 40, 40, 0.25)" : variant === "success" ? isDark ? "rgba(46, 125, 82, 0.30)" : "rgba(26, 122, 69, 0.25)" : variant === "warning" ? isDark ? "rgba(245, 166, 35, 0.30)" : "rgba(154, 82, 0, 0.25)" : colors.border;
|
|
1636
|
-
const defaultIcon = variant === "success" ? /* @__PURE__ */
|
|
1640
|
+
const defaultIcon = variant === "success" ? /* @__PURE__ */ React54__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: ms(16), color: accentColor }) : variant === "destructive" ? /* @__PURE__ */ React54__default.default.createElement(vectorIcons.MaterialIcons, { name: "error-outline", size: ms(17), color: accentColor }) : variant === "warning" ? /* @__PURE__ */ React54__default.default.createElement(vectorIcons.MaterialIcons, { name: "warning-amber", size: ms(17), color: accentColor }) : (
|
|
1637
1641
|
// AUDIT FIX: default variant previously used colors.primary (near-black)
|
|
1638
1642
|
// as the info icon tint — ambiguous and heavy. accentResolved gives it
|
|
1639
1643
|
// a meaningful chromatic signal when an accent is defined.
|
|
1640
|
-
/* @__PURE__ */
|
|
1644
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.Entypo, { name: "info-with-circle", size: ms(16), color: accentColor })
|
|
1641
1645
|
);
|
|
1642
1646
|
const effectiveIcon = iconName ? renderIcon(iconName, ms(16), iconColor ?? accentColor) : icon ?? defaultIcon;
|
|
1643
1647
|
const a11yLabel = description ? `${title}. ${description}` : title;
|
|
1644
|
-
return /* @__PURE__ */
|
|
1648
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1645
1649
|
reactNative.View,
|
|
1646
1650
|
{
|
|
1647
1651
|
style: [
|
|
@@ -1652,9 +1656,9 @@ function AlertBanner({ title, description, variant = "default", icon, iconName,
|
|
|
1652
1656
|
accessibilityRole: "alert",
|
|
1653
1657
|
accessibilityLabel: a11yLabel
|
|
1654
1658
|
},
|
|
1655
|
-
/* @__PURE__ */
|
|
1656
|
-
/* @__PURE__ */
|
|
1657
|
-
onDismiss ? /* @__PURE__ */
|
|
1659
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles11.iconSlot }, effectiveIcon),
|
|
1660
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles11.content }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles11.title, { color: colors.foreground }], allowFontScaling: true }, title), description ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles11.description, { color: colors.foreground, opacity: 0.85 }], allowFontScaling: true }, description) : null),
|
|
1661
|
+
onDismiss ? /* @__PURE__ */ React54__default.default.createElement(
|
|
1658
1662
|
reactNative.TouchableOpacity,
|
|
1659
1663
|
{
|
|
1660
1664
|
onPress: onDismiss,
|
|
@@ -1663,7 +1667,7 @@ function AlertBanner({ title, description, variant = "default", icon, iconName,
|
|
|
1663
1667
|
accessibilityRole: "button",
|
|
1664
1668
|
accessibilityLabel: "Dismiss"
|
|
1665
1669
|
},
|
|
1666
|
-
/* @__PURE__ */
|
|
1670
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.Feather, { name: "x", size: ms(16), color: colors.foregroundMuted })
|
|
1667
1671
|
) : null
|
|
1668
1672
|
);
|
|
1669
1673
|
}
|
|
@@ -1700,9 +1704,9 @@ var styles11 = reactNative.StyleSheet.create({
|
|
|
1700
1704
|
function Progress({ value = 0, max = 100, variant = "default", style, accessibilityLabel }) {
|
|
1701
1705
|
const { colors } = useTheme();
|
|
1702
1706
|
const percent = Math.min(Math.max(value / max * 100, 0), 100);
|
|
1703
|
-
const [trackWidth, setTrackWidth] =
|
|
1707
|
+
const [trackWidth, setTrackWidth] = React54.useState(0);
|
|
1704
1708
|
const animatedWidth = Animated12.useSharedValue(0);
|
|
1705
|
-
|
|
1709
|
+
React54.useEffect(() => {
|
|
1706
1710
|
if (trackWidth === 0) return;
|
|
1707
1711
|
animatedWidth.value = Animated12.withSpring(percent / 100 * trackWidth, SPRINGS.glide);
|
|
1708
1712
|
}, [percent, trackWidth, animatedWidth]);
|
|
@@ -1710,7 +1714,7 @@ function Progress({ value = 0, max = 100, variant = "default", style, accessibil
|
|
|
1710
1714
|
width: animatedWidth.value
|
|
1711
1715
|
}));
|
|
1712
1716
|
const indicatorColor = variant === "success" ? colors.success : variant === "warning" ? colors.warning : variant === "destructive" ? colors.destructive : colors.primary;
|
|
1713
|
-
return /* @__PURE__ */
|
|
1717
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1714
1718
|
reactNative.View,
|
|
1715
1719
|
{
|
|
1716
1720
|
style: [styles12.track, { backgroundColor: colors.surface }, style],
|
|
@@ -1719,7 +1723,7 @@ function Progress({ value = 0, max = 100, variant = "default", style, accessibil
|
|
|
1719
1723
|
accessibilityLabel,
|
|
1720
1724
|
accessibilityValue: { min: 0, max: 100, now: Math.round(percent) }
|
|
1721
1725
|
},
|
|
1722
|
-
/* @__PURE__ */
|
|
1726
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
1723
1727
|
Animated12__default.default.View,
|
|
1724
1728
|
{
|
|
1725
1729
|
style: [styles12.indicator, { backgroundColor: indicatorColor }, indicatorAnimatedStyle]
|
|
@@ -1743,7 +1747,7 @@ function EmptyState({ icon, iconName, iconColor, title, description, action, act
|
|
|
1743
1747
|
const { colors } = useTheme();
|
|
1744
1748
|
const isCompact = size === "compact";
|
|
1745
1749
|
const effectiveIcon = iconName ? renderIcon(iconName, isCompact ? 32 : 48, iconColor ?? colors.foregroundMuted) : icon;
|
|
1746
|
-
return /* @__PURE__ */
|
|
1750
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
1747
1751
|
reactNative.View,
|
|
1748
1752
|
{
|
|
1749
1753
|
style: [
|
|
@@ -1753,7 +1757,7 @@ function EmptyState({ icon, iconName, iconColor, title, description, action, act
|
|
|
1753
1757
|
style
|
|
1754
1758
|
]
|
|
1755
1759
|
},
|
|
1756
|
-
effectiveIcon ? /* @__PURE__ */
|
|
1760
|
+
effectiveIcon ? /* @__PURE__ */ React54__default.default.createElement(
|
|
1757
1761
|
reactNative.View,
|
|
1758
1762
|
{
|
|
1759
1763
|
style: [
|
|
@@ -1764,15 +1768,15 @@ function EmptyState({ icon, iconName, iconColor, title, description, action, act
|
|
|
1764
1768
|
},
|
|
1765
1769
|
effectiveIcon
|
|
1766
1770
|
) : null,
|
|
1767
|
-
/* @__PURE__ */
|
|
1771
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles13.textWrapper }, /* @__PURE__ */ React54__default.default.createElement(
|
|
1768
1772
|
reactNative.Text,
|
|
1769
1773
|
{
|
|
1770
1774
|
style: [styles13.title, isCompact && styles13.titleCompact, { color: colors.foreground }],
|
|
1771
1775
|
allowFontScaling: true
|
|
1772
1776
|
},
|
|
1773
1777
|
title
|
|
1774
|
-
), description && !isCompact ? /* @__PURE__ */
|
|
1775
|
-
!isCompact && (action ? /* @__PURE__ */
|
|
1778
|
+
), description && !isCompact ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles13.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null),
|
|
1779
|
+
!isCompact && (action ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles13.action }, action) : actionLabel && onAction ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles13.action }, /* @__PURE__ */ React54__default.default.createElement(Button, { label: actionLabel, variant: "primary", onPress: onAction })) : null)
|
|
1776
1780
|
);
|
|
1777
1781
|
}
|
|
1778
1782
|
var styles13 = reactNative.StyleSheet.create({
|
|
@@ -1831,7 +1835,7 @@ var styles13 = reactNative.StyleSheet.create({
|
|
|
1831
1835
|
function useColorTransition(active, options = {}) {
|
|
1832
1836
|
const { duration = TIMINGS.state.duration } = options;
|
|
1833
1837
|
const progress = Animated12.useSharedValue(active ? 1 : 0);
|
|
1834
|
-
|
|
1838
|
+
React54.useEffect(() => {
|
|
1835
1839
|
progress.value = Animated12.withTiming(active ? 1 : 0, { duration, easing: EASINGS.standard });
|
|
1836
1840
|
}, [active, duration, progress]);
|
|
1837
1841
|
return progress;
|
|
@@ -1855,7 +1859,7 @@ function Textarea({
|
|
|
1855
1859
|
...props
|
|
1856
1860
|
}) {
|
|
1857
1861
|
const { colors } = useTheme();
|
|
1858
|
-
const [focused, setFocused] =
|
|
1862
|
+
const [focused, setFocused] = React54.useState(false);
|
|
1859
1863
|
const focusProgress = useColorTransition(focused, {
|
|
1860
1864
|
duration: focused ? TIMINGS.focusIn.duration : TIMINGS.focusOut.duration
|
|
1861
1865
|
});
|
|
@@ -1864,7 +1868,7 @@ function Textarea({
|
|
|
1864
1868
|
borderColor: error ? colors.destructive : Animated12.interpolateColor(focusProgress.value, [0, 1], [colors.border, colors.primary]),
|
|
1865
1869
|
borderWidth: error ? 2 : Animated12.interpolate(focusProgress.value, [0, 1], [1, 2])
|
|
1866
1870
|
}));
|
|
1867
|
-
return /* @__PURE__ */
|
|
1871
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles14.container, containerStyle] }, label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles14.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React54__default.default.createElement(
|
|
1868
1872
|
Animated12__default.default.View,
|
|
1869
1873
|
{
|
|
1870
1874
|
style: [
|
|
@@ -1872,9 +1876,9 @@ function Textarea({
|
|
|
1872
1876
|
{ backgroundColor: colors.background }
|
|
1873
1877
|
]
|
|
1874
1878
|
},
|
|
1875
|
-
/* @__PURE__ */
|
|
1876
|
-
resolvedPrefixIcon ? /* @__PURE__ */
|
|
1877
|
-
/* @__PURE__ */
|
|
1879
|
+
/* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [styles14.borderOverlay, borderAnimStyle], pointerEvents: "none" }),
|
|
1880
|
+
resolvedPrefixIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles14.prefixIcon }, resolvedPrefixIcon) : null,
|
|
1881
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
1878
1882
|
reactNative.TextInput,
|
|
1879
1883
|
{
|
|
1880
1884
|
multiline: true,
|
|
@@ -1903,7 +1907,7 @@ function Textarea({
|
|
|
1903
1907
|
...props
|
|
1904
1908
|
}
|
|
1905
1909
|
)
|
|
1906
|
-
), error ? /* @__PURE__ */
|
|
1910
|
+
), error ? /* @__PURE__ */ React54__default.default.createElement(
|
|
1907
1911
|
reactNative.Text,
|
|
1908
1912
|
{
|
|
1909
1913
|
style: [styles14.helperText, { color: colors.destructive }],
|
|
@@ -1911,7 +1915,7 @@ function Textarea({
|
|
|
1911
1915
|
accessibilityLiveRegion: "polite"
|
|
1912
1916
|
},
|
|
1913
1917
|
error
|
|
1914
|
-
) : null, !error && hint ? /* @__PURE__ */
|
|
1918
|
+
) : null, !error && hint ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles14.helperText, { color: colors.foregroundMuted }], allowFontScaling: true }, hint) : null);
|
|
1915
1919
|
}
|
|
1916
1920
|
var styles14 = reactNative.StyleSheet.create({
|
|
1917
1921
|
container: {
|
|
@@ -1971,7 +1975,7 @@ function Checkbox({
|
|
|
1971
1975
|
// AUDIT FIX: opacity was applied only to the box, leaving the label at full
|
|
1972
1976
|
// opacity when disabled — a contradictory visual signal. Now the entire row
|
|
1973
1977
|
// dims uniformly so label and control communicate the same disabled state.
|
|
1974
|
-
/* @__PURE__ */
|
|
1978
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
1975
1979
|
PressableButton,
|
|
1976
1980
|
{
|
|
1977
1981
|
style: [styles15.row, disabled && styles15.rowDisabled, style],
|
|
@@ -1983,7 +1987,7 @@ function Checkbox({
|
|
|
1983
1987
|
accessibilityLabel: accessibilityLabel ?? label,
|
|
1984
1988
|
accessibilityState: { checked, disabled: !!disabled }
|
|
1985
1989
|
},
|
|
1986
|
-
/* @__PURE__ */
|
|
1990
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
1987
1991
|
reactNativeEase.EaseView,
|
|
1988
1992
|
{
|
|
1989
1993
|
style: styles15.box,
|
|
@@ -1993,9 +1997,9 @@ function Checkbox({
|
|
|
1993
1997
|
},
|
|
1994
1998
|
transition: COLOR_TRANSITION
|
|
1995
1999
|
},
|
|
1996
|
-
/* @__PURE__ */
|
|
2000
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNativeEase.EaseView, { animate: { opacity: checked ? 1 : 0 }, transition: OPACITY_TRANSITION }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles15.checkmark, { borderColor: colors.primaryForeground }] }))
|
|
1997
2001
|
),
|
|
1998
|
-
label ? /* @__PURE__ */
|
|
2002
|
+
label ? /* @__PURE__ */ React54__default.default.createElement(
|
|
1999
2003
|
reactNative.Text,
|
|
2000
2004
|
{
|
|
2001
2005
|
style: [styles15.label, { color: colors.foreground }],
|
|
@@ -2047,7 +2051,7 @@ var DISABLED_OPACITY = 0.45;
|
|
|
2047
2051
|
function Switch({ checked = false, onCheckedChange, disabled, style, accessibilityLabel }) {
|
|
2048
2052
|
const { colors } = useTheme();
|
|
2049
2053
|
const isDisabled = !!disabled;
|
|
2050
|
-
return /* @__PURE__ */
|
|
2054
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [{ alignSelf: "flex-start" }, style] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2051
2055
|
reactNative.TouchableOpacity,
|
|
2052
2056
|
{
|
|
2053
2057
|
onPress: () => {
|
|
@@ -2062,14 +2066,14 @@ function Switch({ checked = false, onCheckedChange, disabled, style, accessibili
|
|
|
2062
2066
|
accessibilityState: { checked, disabled: isDisabled },
|
|
2063
2067
|
style: styles16.touchable
|
|
2064
2068
|
},
|
|
2065
|
-
/* @__PURE__ */
|
|
2069
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles16.trackContainer }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2066
2070
|
reactNativeEase.EaseView,
|
|
2067
2071
|
{
|
|
2068
2072
|
style: [styles16.track, isDisabled && styles16.disabledTrack],
|
|
2069
2073
|
animate: { backgroundColor: checked ? colors.primary : colors.surfaceStrong },
|
|
2070
2074
|
transition: COLOR_TRANSITION
|
|
2071
2075
|
}
|
|
2072
|
-
), /* @__PURE__ */
|
|
2076
|
+
), /* @__PURE__ */ React54__default.default.createElement(
|
|
2073
2077
|
reactNativeEase.EaseView,
|
|
2074
2078
|
{
|
|
2075
2079
|
style: [styles16.trackBorder, { borderWidth: 1.5 }],
|
|
@@ -2077,30 +2081,30 @@ function Switch({ checked = false, onCheckedChange, disabled, style, accessibili
|
|
|
2077
2081
|
animate: { borderColor: checked ? "transparent" : colors.border },
|
|
2078
2082
|
transition: COLOR_TRANSITION
|
|
2079
2083
|
}
|
|
2080
|
-
), /* @__PURE__ */
|
|
2084
|
+
), /* @__PURE__ */ React54__default.default.createElement(
|
|
2081
2085
|
reactNativeEase.EaseView,
|
|
2082
2086
|
{
|
|
2083
2087
|
style: [styles16.thumb, { backgroundColor: colors.primaryForeground }],
|
|
2084
2088
|
animate: { translateX: checked ? THUMB_TRAVEL : 0 },
|
|
2085
2089
|
transition: SPRING_ELASTIC
|
|
2086
2090
|
},
|
|
2087
|
-
/* @__PURE__ */
|
|
2091
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
2088
2092
|
reactNativeEase.EaseView,
|
|
2089
2093
|
{
|
|
2090
2094
|
style: styles16.iconWrapper,
|
|
2091
2095
|
animate: { opacity: checked ? isDisabled ? DISABLED_OPACITY : 1 : 0 },
|
|
2092
2096
|
transition: OPACITY_TRANSITION
|
|
2093
2097
|
},
|
|
2094
|
-
/* @__PURE__ */
|
|
2098
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.Feather, { name: "check", size: ICON_SIZE, color: colors.primary })
|
|
2095
2099
|
),
|
|
2096
|
-
/* @__PURE__ */
|
|
2100
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
2097
2101
|
reactNativeEase.EaseView,
|
|
2098
2102
|
{
|
|
2099
2103
|
style: styles16.iconWrapper,
|
|
2100
2104
|
animate: { opacity: checked ? 0 : isDisabled ? DISABLED_OPACITY : 1 },
|
|
2101
2105
|
transition: OPACITY_TRANSITION
|
|
2102
2106
|
},
|
|
2103
|
-
/* @__PURE__ */
|
|
2107
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.Feather, { name: "x", size: ICON_SIZE, color: colors.foregroundMuted })
|
|
2104
2108
|
)
|
|
2105
2109
|
))
|
|
2106
2110
|
));
|
|
@@ -2153,15 +2157,15 @@ function ToggleIcon({ pressed, iconName, activeIconName, icon, activeIcon, iconC
|
|
|
2153
2157
|
return prop;
|
|
2154
2158
|
};
|
|
2155
2159
|
if (pressed) {
|
|
2156
|
-
if (activeIconName) return /* @__PURE__ */
|
|
2160
|
+
if (activeIconName) return /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, renderIcon(activeIconName, iconSize, activeIconColor ?? primaryColor));
|
|
2157
2161
|
const active = renderProp(activeIcon);
|
|
2158
|
-
if (active) return /* @__PURE__ */
|
|
2159
|
-
return /* @__PURE__ */
|
|
2162
|
+
if (active) return /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, active);
|
|
2163
|
+
return /* @__PURE__ */ React54__default.default.createElement(vectorIcons.FontAwesome5, { name: "check-circle", size: iconSize, color: primaryColor });
|
|
2160
2164
|
}
|
|
2161
|
-
if (iconName) return /* @__PURE__ */
|
|
2165
|
+
if (iconName) return /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, renderIcon(iconName, iconSize, iconColor ?? mutedColor));
|
|
2162
2166
|
const custom = renderProp(icon);
|
|
2163
|
-
if (custom) return /* @__PURE__ */
|
|
2164
|
-
return /* @__PURE__ */
|
|
2167
|
+
if (custom) return /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, custom);
|
|
2168
|
+
return /* @__PURE__ */ React54__default.default.createElement(vectorIcons.FontAwesome5, { name: "circle", size: iconSize, color: mutedColor });
|
|
2165
2169
|
}
|
|
2166
2170
|
var sizeStyles = {
|
|
2167
2171
|
sm: { paddingHorizontal: s(12), paddingVertical: vs(8), minWidth: s(40), minHeight: vs(40) },
|
|
@@ -2192,7 +2196,7 @@ function Toggle({
|
|
|
2192
2196
|
selectionAsync();
|
|
2193
2197
|
onPressedChange?.(!pressed);
|
|
2194
2198
|
};
|
|
2195
|
-
return /* @__PURE__ */
|
|
2199
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [disabled && styles17.disabled, style] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2196
2200
|
PressableButton,
|
|
2197
2201
|
{
|
|
2198
2202
|
onPress: handlePress,
|
|
@@ -2204,7 +2208,7 @@ function Toggle({
|
|
|
2204
2208
|
accessibilityLabel: accessibilityLabel ?? label,
|
|
2205
2209
|
accessibilityState: { selected: pressed, disabled: !!disabled }
|
|
2206
2210
|
},
|
|
2207
|
-
/* @__PURE__ */
|
|
2211
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
2208
2212
|
reactNativeEase.EaseView,
|
|
2209
2213
|
{
|
|
2210
2214
|
style: [styles17.base, sizeStyles[size], { borderWidth: 2 }],
|
|
@@ -2214,7 +2218,7 @@ function Toggle({
|
|
|
2214
2218
|
},
|
|
2215
2219
|
transition: COLOR_TRANSITION
|
|
2216
2220
|
},
|
|
2217
|
-
/* @__PURE__ */
|
|
2221
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles17.inner }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2218
2222
|
ToggleIcon,
|
|
2219
2223
|
{
|
|
2220
2224
|
pressed,
|
|
@@ -2228,7 +2232,7 @@ function Toggle({
|
|
|
2228
2232
|
primaryColor: colors.primary,
|
|
2229
2233
|
mutedColor: colors.foregroundMuted
|
|
2230
2234
|
}
|
|
2231
|
-
), label ? /* @__PURE__ */
|
|
2235
|
+
), label ? /* @__PURE__ */ React54__default.default.createElement(
|
|
2232
2236
|
reactNative.Text,
|
|
2233
2237
|
{
|
|
2234
2238
|
style: [styles17.label, { color: pressed ? colors.primary : colors.foreground }],
|
|
@@ -2258,9 +2262,9 @@ var styles17 = reactNative.StyleSheet.create({
|
|
|
2258
2262
|
}
|
|
2259
2263
|
});
|
|
2260
2264
|
function useHover() {
|
|
2261
|
-
const [hovered, setHovered] =
|
|
2262
|
-
const onMouseEnter =
|
|
2263
|
-
const onMouseLeave =
|
|
2265
|
+
const [hovered, setHovered] = React54.useState(false);
|
|
2266
|
+
const onMouseEnter = React54.useCallback(() => setHovered(true), []);
|
|
2267
|
+
const onMouseLeave = React54.useCallback(() => setHovered(false), []);
|
|
2264
2268
|
if (reactNative.Platform.OS !== "web") {
|
|
2265
2269
|
return { hovered: false, hoverHandlers: {} };
|
|
2266
2270
|
}
|
|
@@ -2277,11 +2281,11 @@ function usePressScale({
|
|
|
2277
2281
|
} = {}) {
|
|
2278
2282
|
const scale2 = Animated12.useSharedValue(1);
|
|
2279
2283
|
const { hovered, hoverHandlers } = useHover();
|
|
2280
|
-
const onPressIn =
|
|
2284
|
+
const onPressIn = React54.useCallback(() => {
|
|
2281
2285
|
if (disabled) return;
|
|
2282
2286
|
scale2.value = Animated12.withSpring(pressScale, pressInSpring);
|
|
2283
2287
|
}, [disabled, pressScale, pressInSpring, scale2]);
|
|
2284
|
-
const onPressOut =
|
|
2288
|
+
const onPressOut = React54.useCallback(() => {
|
|
2285
2289
|
if (disabled) return;
|
|
2286
2290
|
scale2.value = Animated12.withSpring(1, pressOutSpring);
|
|
2287
2291
|
}, [disabled, pressOutSpring, scale2]);
|
|
@@ -2314,7 +2318,7 @@ function RadioItem({
|
|
|
2314
2318
|
// AUDIT FIX: opacity was applied only to the radio circle, leaving the label
|
|
2315
2319
|
// at full opacity when disabled. The whole row now dims uniformly so users
|
|
2316
2320
|
// get a single, consistent disabled signal across the entire item.
|
|
2317
|
-
/* @__PURE__ */
|
|
2321
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
2318
2322
|
reactNative.TouchableOpacity,
|
|
2319
2323
|
{
|
|
2320
2324
|
style: [styles18.row, option.disabled && styles18.rowDisabled],
|
|
@@ -2333,14 +2337,14 @@ function RadioItem({
|
|
|
2333
2337
|
accessibilityLabel: option.label,
|
|
2334
2338
|
accessibilityState: { checked: selected, disabled: !!option.disabled }
|
|
2335
2339
|
},
|
|
2336
|
-
/* @__PURE__ */
|
|
2340
|
+
/* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: scaleStyle }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2337
2341
|
reactNativeEase.EaseView,
|
|
2338
2342
|
{
|
|
2339
2343
|
style: styles18.radio,
|
|
2340
2344
|
animate: { borderColor: selected ? colors.primary : colors.border },
|
|
2341
2345
|
transition: COLOR_TRANSITION
|
|
2342
2346
|
},
|
|
2343
|
-
/* @__PURE__ */
|
|
2347
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
2344
2348
|
reactNativeEase.EaseView,
|
|
2345
2349
|
{
|
|
2346
2350
|
style: [styles18.dot, { backgroundColor: colors.primary }],
|
|
@@ -2349,7 +2353,7 @@ function RadioItem({
|
|
|
2349
2353
|
}
|
|
2350
2354
|
)
|
|
2351
2355
|
)),
|
|
2352
|
-
/* @__PURE__ */
|
|
2356
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
2353
2357
|
reactNative.Text,
|
|
2354
2358
|
{
|
|
2355
2359
|
style: [styles18.label, { color: colors.foreground }],
|
|
@@ -2368,14 +2372,14 @@ function RadioGroup({
|
|
|
2368
2372
|
style,
|
|
2369
2373
|
accessibilityLabel
|
|
2370
2374
|
}) {
|
|
2371
|
-
return /* @__PURE__ */
|
|
2375
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
2372
2376
|
reactNative.View,
|
|
2373
2377
|
{
|
|
2374
2378
|
style: [styles18.container, orientation === "horizontal" && styles18.horizontal, style],
|
|
2375
2379
|
accessibilityRole: "radiogroup",
|
|
2376
2380
|
accessibilityLabel
|
|
2377
2381
|
},
|
|
2378
|
-
options.map((option) => /* @__PURE__ */
|
|
2382
|
+
options.map((option) => /* @__PURE__ */ React54__default.default.createElement(
|
|
2379
2383
|
RadioItem,
|
|
2380
2384
|
{
|
|
2381
2385
|
key: option.value,
|
|
@@ -2431,7 +2435,7 @@ function TabTrigger({
|
|
|
2431
2435
|
}) {
|
|
2432
2436
|
const { colors } = useTheme();
|
|
2433
2437
|
const isUnderline = variant === "underline";
|
|
2434
|
-
return /* @__PURE__ */
|
|
2438
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { onLayout, style: styles19.triggerWrap }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2435
2439
|
PressableTab,
|
|
2436
2440
|
{
|
|
2437
2441
|
style: [
|
|
@@ -2446,7 +2450,7 @@ function TabTrigger({
|
|
|
2446
2450
|
accessibilityState: { selected: isActive },
|
|
2447
2451
|
accessibilityLabel: tab.label
|
|
2448
2452
|
},
|
|
2449
|
-
/* @__PURE__ */
|
|
2453
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles19.triggerInner }, tab.icon ? typeof tab.icon === "function" ? tab.icon(isActive) : tab.icon : null, /* @__PURE__ */ React54__default.default.createElement(
|
|
2450
2454
|
reactNative.Text,
|
|
2451
2455
|
{
|
|
2452
2456
|
style: [
|
|
@@ -2464,14 +2468,14 @@ function TabTrigger({
|
|
|
2464
2468
|
));
|
|
2465
2469
|
}
|
|
2466
2470
|
function Tabs({ tabs, variant = "pill", value, onValueChange, children, style }) {
|
|
2467
|
-
const [internal, setInternal] =
|
|
2471
|
+
const [internal, setInternal] = React54.useState(tabs[0]?.value ?? "");
|
|
2468
2472
|
const { colors } = useTheme();
|
|
2469
2473
|
const active = value ?? internal;
|
|
2470
|
-
const tabLayouts =
|
|
2474
|
+
const tabLayouts = React54.useRef({});
|
|
2471
2475
|
const pillX = Animated12.useSharedValue(0);
|
|
2472
2476
|
const pillWidth = Animated12.useSharedValue(0);
|
|
2473
|
-
const initialised =
|
|
2474
|
-
const animatePill =
|
|
2477
|
+
const initialised = React54.useRef(false);
|
|
2478
|
+
const animatePill = React54.useCallback((tabValue, animate) => {
|
|
2475
2479
|
const layout = tabLayouts.current[tabValue];
|
|
2476
2480
|
if (!layout) return;
|
|
2477
2481
|
if (animate) {
|
|
@@ -2482,7 +2486,7 @@ function Tabs({ tabs, variant = "pill", value, onValueChange, children, style })
|
|
|
2482
2486
|
pillWidth.value = layout.width;
|
|
2483
2487
|
}
|
|
2484
2488
|
}, [pillX, pillWidth]);
|
|
2485
|
-
|
|
2489
|
+
React54.useEffect(() => {
|
|
2486
2490
|
if (initialised.current) animatePill(active, true);
|
|
2487
2491
|
}, [active, animatePill]);
|
|
2488
2492
|
const handlePress = (v) => {
|
|
@@ -2494,7 +2498,7 @@ function Tabs({ tabs, variant = "pill", value, onValueChange, children, style })
|
|
|
2494
2498
|
transform: [{ translateX: pillX.value }],
|
|
2495
2499
|
width: pillWidth.value
|
|
2496
2500
|
}));
|
|
2497
|
-
return /* @__PURE__ */
|
|
2501
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2498
2502
|
reactNative.View,
|
|
2499
2503
|
{
|
|
2500
2504
|
style: [
|
|
@@ -2502,7 +2506,7 @@ function Tabs({ tabs, variant = "pill", value, onValueChange, children, style })
|
|
|
2502
2506
|
],
|
|
2503
2507
|
accessibilityRole: "tablist"
|
|
2504
2508
|
},
|
|
2505
|
-
variant === "pill" && /* @__PURE__ */
|
|
2509
|
+
variant === "pill" && /* @__PURE__ */ React54__default.default.createElement(
|
|
2506
2510
|
Animated12__default.default.View,
|
|
2507
2511
|
{
|
|
2508
2512
|
style: [
|
|
@@ -2524,7 +2528,7 @@ function Tabs({ tabs, variant = "pill", value, onValueChange, children, style })
|
|
|
2524
2528
|
]
|
|
2525
2529
|
}
|
|
2526
2530
|
),
|
|
2527
|
-
tabs.map((tab) => /* @__PURE__ */
|
|
2531
|
+
tabs.map((tab) => /* @__PURE__ */ React54__default.default.createElement(
|
|
2528
2532
|
TabTrigger,
|
|
2529
2533
|
{
|
|
2530
2534
|
key: tab.value,
|
|
@@ -2546,7 +2550,7 @@ function Tabs({ tabs, variant = "pill", value, onValueChange, children, style })
|
|
|
2546
2550
|
}
|
|
2547
2551
|
function TabsContent({ value, activeValue, children, style }) {
|
|
2548
2552
|
if (value !== activeValue) return null;
|
|
2549
|
-
return /* @__PURE__ */
|
|
2553
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style, accessibilityRole: "none" }, children);
|
|
2550
2554
|
}
|
|
2551
2555
|
var styles19 = reactNative.StyleSheet.create({
|
|
2552
2556
|
list: {
|
|
@@ -2607,7 +2611,7 @@ function AccordionItemComponent({
|
|
|
2607
2611
|
const resolvedIcon = item.iconName ? renderIcon(item.iconName, ms(16), item.iconColor ?? colors.foregroundMuted) : item.icon;
|
|
2608
2612
|
const isExpanded = Animated12.useSharedValue(isOpen);
|
|
2609
2613
|
const height = Animated12.useSharedValue(0);
|
|
2610
|
-
|
|
2614
|
+
React54__default.default.useEffect(() => {
|
|
2611
2615
|
isExpanded.value = isOpen;
|
|
2612
2616
|
}, [isOpen, isExpanded]);
|
|
2613
2617
|
const derivedHeight = Animated12.useDerivedValue(
|
|
@@ -2629,7 +2633,7 @@ function AccordionItemComponent({
|
|
|
2629
2633
|
const rotationStyle = Animated12.useAnimatedStyle(() => ({
|
|
2630
2634
|
transform: [{ rotate: `${derivedRotation.value * 180}deg` }]
|
|
2631
2635
|
}));
|
|
2632
|
-
return /* @__PURE__ */
|
|
2636
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles20.item, { backgroundColor: colors.card, borderColor: colors.border }] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2633
2637
|
reactNative.Pressable,
|
|
2634
2638
|
{
|
|
2635
2639
|
style: ({ pressed }) => [styles20.trigger, { opacity: pressed ? 0.6 : 1 }],
|
|
@@ -2641,9 +2645,9 @@ function AccordionItemComponent({
|
|
|
2641
2645
|
accessibilityState: { expanded: isOpen },
|
|
2642
2646
|
accessibilityLabel: typeof item.trigger === "string" ? item.trigger : void 0
|
|
2643
2647
|
},
|
|
2644
|
-
/* @__PURE__ */
|
|
2645
|
-
/* @__PURE__ */
|
|
2646
|
-
), /* @__PURE__ */
|
|
2648
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles20.triggerContent }, resolvedIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles20.icon }, resolvedIcon) : null, typeof item.trigger === "string" ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles20.triggerText, { color: colors.foreground }], allowFontScaling: true }, item.trigger) : item.trigger),
|
|
2649
|
+
/* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [styles20.chevron, rotationStyle] }, /* @__PURE__ */ React54__default.default.createElement(vectorIcons.Entypo, { name: "chevron-down", size: 18, color: colors.foregroundMuted }))
|
|
2650
|
+
), /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: bodyStyle }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2647
2651
|
reactNative.View,
|
|
2648
2652
|
{
|
|
2649
2653
|
style: styles20.content,
|
|
@@ -2651,11 +2655,11 @@ function AccordionItemComponent({
|
|
|
2651
2655
|
height.value = e.nativeEvent.layout.height;
|
|
2652
2656
|
}
|
|
2653
2657
|
},
|
|
2654
|
-
typeof item.content === "string" || typeof item.content === "number" ? /* @__PURE__ */
|
|
2658
|
+
typeof item.content === "string" || typeof item.content === "number" ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles20.contentText, { color: colors.foregroundMuted }], allowFontScaling: true }, item.content) : item.content
|
|
2655
2659
|
)));
|
|
2656
2660
|
}
|
|
2657
2661
|
function Accordion({ items, type = "single", defaultValue, style }) {
|
|
2658
|
-
const [openValues, setOpenValues] =
|
|
2662
|
+
const [openValues, setOpenValues] = React54.useState(() => {
|
|
2659
2663
|
if (!defaultValue) return [];
|
|
2660
2664
|
return Array.isArray(defaultValue) ? defaultValue : [defaultValue];
|
|
2661
2665
|
});
|
|
@@ -2668,7 +2672,7 @@ function Accordion({ items, type = "single", defaultValue, style }) {
|
|
|
2668
2672
|
);
|
|
2669
2673
|
}
|
|
2670
2674
|
};
|
|
2671
|
-
return /* @__PURE__ */
|
|
2675
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles20.list, style] }, items.map((item) => /* @__PURE__ */ React54__default.default.createElement(
|
|
2672
2676
|
AccordionItemComponent,
|
|
2673
2677
|
{
|
|
2674
2678
|
key: item.value,
|
|
@@ -2740,7 +2744,7 @@ function Slider({
|
|
|
2740
2744
|
style
|
|
2741
2745
|
}) {
|
|
2742
2746
|
const { colors } = useTheme();
|
|
2743
|
-
const lastSteppedValue =
|
|
2747
|
+
const lastSteppedValue = React54.useRef(value);
|
|
2744
2748
|
const handleValueChange = (v) => {
|
|
2745
2749
|
if (step && v !== lastSteppedValue.current) {
|
|
2746
2750
|
lastSteppedValue.current = v;
|
|
@@ -2748,7 +2752,7 @@ function Slider({
|
|
|
2748
2752
|
}
|
|
2749
2753
|
onValueChange?.(v);
|
|
2750
2754
|
};
|
|
2751
|
-
return /* @__PURE__ */
|
|
2755
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
2752
2756
|
reactNative.View,
|
|
2753
2757
|
{
|
|
2754
2758
|
style: [styles21.wrapper, style],
|
|
@@ -2761,8 +2765,8 @@ function Slider({
|
|
|
2761
2765
|
text: formatValue2(value)
|
|
2762
2766
|
}
|
|
2763
2767
|
},
|
|
2764
|
-
label || showValue ? /* @__PURE__ */
|
|
2765
|
-
/* @__PURE__ */
|
|
2768
|
+
label || showValue ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles21.header }, label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles21.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, showValue ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles21.valueText, { color: colors.foregroundMuted }], allowFontScaling: true }, formatValue2(value)) : null) : null,
|
|
2769
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: disabled ? styles21.disabled : void 0 }, /* @__PURE__ */ React54__default.default.createElement(
|
|
2766
2770
|
RNSlider__default.default,
|
|
2767
2771
|
{
|
|
2768
2772
|
value,
|
|
@@ -2806,73 +2810,69 @@ var styles21 = reactNative.StyleSheet.create({
|
|
|
2806
2810
|
opacity: 0.45
|
|
2807
2811
|
}
|
|
2808
2812
|
});
|
|
2809
|
-
var SCREEN_HEIGHT = reactNative.Dimensions.get("window").height;
|
|
2810
|
-
var DEFAULT_MAX_HEIGHT = SCREEN_HEIGHT * 0.85;
|
|
2811
|
-
var isAndroid = reactNative.Platform.OS === "android";
|
|
2812
2813
|
function SheetHeader({ children, style }) {
|
|
2813
|
-
return /* @__PURE__ */
|
|
2814
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles22.header, style] }, children);
|
|
2814
2815
|
}
|
|
2815
2816
|
function SheetContent({ children, style }) {
|
|
2816
|
-
return /* @__PURE__ */
|
|
2817
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles22.sheetContent, style] }, children);
|
|
2817
2818
|
}
|
|
2818
2819
|
function SheetFooter({ children, style }) {
|
|
2819
2820
|
const { colors } = useTheme();
|
|
2820
|
-
return /* @__PURE__ */
|
|
2821
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles22.sheetFooter, { backgroundColor: colors.card, borderTopColor: colors.border }, style] }, children);
|
|
2821
2822
|
}
|
|
2822
2823
|
function Sheet({
|
|
2823
2824
|
open,
|
|
2824
2825
|
onClose,
|
|
2825
2826
|
title,
|
|
2826
2827
|
subtitle,
|
|
2827
|
-
description,
|
|
2828
2828
|
showCloseButton = false,
|
|
2829
2829
|
children,
|
|
2830
2830
|
style,
|
|
2831
2831
|
contentStyle,
|
|
2832
|
-
scrollable,
|
|
2832
|
+
scrollable = false,
|
|
2833
2833
|
maxHeight,
|
|
2834
|
-
keyboardBehavior,
|
|
2834
|
+
keyboardBehavior = "interactive",
|
|
2835
2835
|
keyboardBlurBehavior = "restore",
|
|
2836
2836
|
enableBlurKeyboardOnGesture = true,
|
|
2837
2837
|
android_keyboardInputMode = "adjustPan",
|
|
2838
2838
|
footer,
|
|
2839
|
-
snapPoints
|
|
2840
|
-
responsive = false,
|
|
2841
|
-
dialogMaxWidth = 480
|
|
2839
|
+
snapPoints
|
|
2842
2840
|
}) {
|
|
2843
2841
|
const { colors } = useTheme();
|
|
2844
2842
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
2845
|
-
const
|
|
2846
|
-
const
|
|
2847
|
-
const
|
|
2848
|
-
|
|
2849
|
-
React25.useEffect(() => {
|
|
2843
|
+
const ref = React54.useRef(null);
|
|
2844
|
+
const wasOpened = React54.useRef(false);
|
|
2845
|
+
const name = React54.useId();
|
|
2846
|
+
React54.useEffect(() => {
|
|
2850
2847
|
if (open) {
|
|
2851
2848
|
impactMedium();
|
|
2852
|
-
ref.current?.
|
|
2853
|
-
|
|
2854
|
-
|
|
2849
|
+
ref.current?.present();
|
|
2850
|
+
wasOpened.current = true;
|
|
2851
|
+
} else if (wasOpened.current) {
|
|
2852
|
+
ref.current?.dismiss();
|
|
2855
2853
|
}
|
|
2856
2854
|
}, [open]);
|
|
2857
|
-
const renderBackdrop =
|
|
2858
|
-
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
const
|
|
2855
|
+
const renderBackdrop = React54.useCallback(
|
|
2856
|
+
(props) => /* @__PURE__ */ React54__default.default.createElement(
|
|
2857
|
+
bottomSheet.BottomSheetBackdrop,
|
|
2858
|
+
{
|
|
2859
|
+
...props,
|
|
2860
|
+
disappearsOnIndex: -1,
|
|
2861
|
+
appearsOnIndex: 0,
|
|
2862
|
+
pressBehavior: "close"
|
|
2863
|
+
}
|
|
2864
|
+
),
|
|
2865
|
+
[]
|
|
2866
|
+
);
|
|
2867
|
+
const childArray = React54__default.default.Children.toArray(children);
|
|
2868
|
+
const customHeader = childArray.find((child) => React54__default.default.isValidElement(child) && child.type === SheetHeader);
|
|
2869
|
+
const customContent = childArray.find((child) => React54__default.default.isValidElement(child) && child.type === SheetContent);
|
|
2870
|
+
const customFooter = childArray.find((child) => React54__default.default.isValidElement(child) && child.type === SheetFooter);
|
|
2870
2871
|
const filteredChildren = customHeader || customContent || customFooter ? childArray.filter(
|
|
2871
|
-
(child) => !
|
|
2872
|
+
(child) => !React54__default.default.isValidElement(child) || child.type !== SheetHeader && child.type !== SheetContent && child.type !== SheetFooter
|
|
2872
2873
|
) : children;
|
|
2873
|
-
const
|
|
2874
|
-
const
|
|
2875
|
-
const headerNode = customHeader ? customHeader : showHeader ? /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: [styles22.header, { backgroundColor: colors.card }], accessibilityRole: "header" }, /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: styles22.headerRow }, title ? /* @__PURE__ */ React25__default.default.createElement(reactNative.Text, { style: [styles22.title, { color: colors.foreground }], allowFontScaling: true }, title) : /* @__PURE__ */ React25__default.default.createElement(reactNative.View, { style: { flex: 1 } }), showCloseButton ? /* @__PURE__ */ React25__default.default.createElement(
|
|
2874
|
+
const showHeader = !!(title || subtitle || showCloseButton) && !customHeader;
|
|
2875
|
+
const headerNode = customHeader ? customHeader : showHeader ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles22.header, { backgroundColor: colors.card }], accessibilityRole: "header" }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles22.headerRow }, title ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles22.title, { color: colors.foreground }], allowFontScaling: true }, title) : /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: { flex: 1 } }), showCloseButton ? /* @__PURE__ */ React54__default.default.createElement(
|
|
2876
2876
|
reactNative.TouchableOpacity,
|
|
2877
2877
|
{
|
|
2878
2878
|
onPress: onClose,
|
|
@@ -2883,78 +2883,50 @@ function Sheet({
|
|
|
2883
2883
|
accessibilityLabel: "Close",
|
|
2884
2884
|
hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }
|
|
2885
2885
|
},
|
|
2886
|
-
/* @__PURE__ */
|
|
2887
|
-
) : null),
|
|
2886
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.AntDesign, { name: "close", size: ms(18), color: colors.foregroundMuted })
|
|
2887
|
+
) : null), subtitle ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles22.subtitle, { color: colors.foregroundMuted }], allowFontScaling: true }, subtitle) : null) : null;
|
|
2888
2888
|
const contentNode = customContent ? customContent : filteredChildren;
|
|
2889
2889
|
const effectiveFooter = customFooter ? customFooter : footer;
|
|
2890
|
-
const renderFooter =
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
{
|
|
2898
|
-
style: [
|
|
2899
|
-
styles22.dialogCard,
|
|
2900
|
-
{ backgroundColor: colors.card, maxWidth: dialogMaxWidth, maxHeight: SCREEN_HEIGHT * 0.85 }
|
|
2901
|
-
],
|
|
2902
|
-
onPress: () => {
|
|
2903
|
-
}
|
|
2904
|
-
},
|
|
2905
|
-
headerNode,
|
|
2906
|
-
/* @__PURE__ */ React25__default.default.createElement(
|
|
2907
|
-
reactNative.ScrollView,
|
|
2908
|
-
{
|
|
2909
|
-
contentContainerStyle: [styles22.dialogContent, style],
|
|
2910
|
-
style: contentStyle,
|
|
2911
|
-
showsVerticalScrollIndicator: true,
|
|
2912
|
-
bounces: false
|
|
2913
|
-
},
|
|
2914
|
-
contentNode
|
|
2915
|
-
),
|
|
2916
|
-
effectiveFooter
|
|
2917
|
-
)));
|
|
2918
|
-
}
|
|
2919
|
-
const useScroll = scrollable || !!maxHeight;
|
|
2920
|
-
const effectiveMaxHeight = maxHeight ?? DEFAULT_MAX_HEIGHT;
|
|
2890
|
+
const renderFooter = React54.useCallback(
|
|
2891
|
+
(props) => {
|
|
2892
|
+
if (!effectiveFooter) return null;
|
|
2893
|
+
return /* @__PURE__ */ React54__default.default.createElement(bottomSheet.BottomSheetFooter, { ...props }, effectiveFooter);
|
|
2894
|
+
},
|
|
2895
|
+
[effectiveFooter]
|
|
2896
|
+
);
|
|
2921
2897
|
const useDynamicSizing = !snapPoints;
|
|
2922
|
-
return /* @__PURE__ */
|
|
2923
|
-
|
|
2898
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
2899
|
+
bottomSheet.BottomSheetModal,
|
|
2924
2900
|
{
|
|
2925
2901
|
ref,
|
|
2926
|
-
|
|
2927
|
-
onClose,
|
|
2902
|
+
name,
|
|
2903
|
+
onDismiss: onClose,
|
|
2928
2904
|
enableDynamicSizing: useDynamicSizing,
|
|
2929
2905
|
snapPoints,
|
|
2930
|
-
maxDynamicContentSize: useDynamicSizing ?
|
|
2906
|
+
maxDynamicContentSize: useDynamicSizing && maxHeight ? maxHeight : void 0,
|
|
2931
2907
|
backdropComponent: renderBackdrop,
|
|
2932
2908
|
footerComponent: effectiveFooter ? renderFooter : void 0,
|
|
2933
|
-
backgroundStyle:
|
|
2934
|
-
handleIndicatorStyle:
|
|
2909
|
+
backgroundStyle: { ...styles22.background, backgroundColor: colors.card },
|
|
2910
|
+
handleIndicatorStyle: { ...styles22.handle, backgroundColor: colors.border },
|
|
2935
2911
|
enablePanDownToClose: true,
|
|
2936
2912
|
topInset: insets.top,
|
|
2937
|
-
keyboardBehavior
|
|
2913
|
+
keyboardBehavior,
|
|
2938
2914
|
keyboardBlurBehavior,
|
|
2939
2915
|
android_keyboardInputMode,
|
|
2940
2916
|
enableBlurKeyboardOnGesture
|
|
2941
2917
|
},
|
|
2942
|
-
|
|
2943
|
-
|
|
2918
|
+
scrollable ? /* @__PURE__ */ React54__default.default.createElement(
|
|
2919
|
+
bottomSheet.BottomSheetScrollView,
|
|
2944
2920
|
{
|
|
2945
|
-
contentContainerStyle: [
|
|
2946
|
-
styles22.scrollContent,
|
|
2947
|
-
style
|
|
2948
|
-
],
|
|
2921
|
+
contentContainerStyle: [styles22.scrollContent, style],
|
|
2949
2922
|
style: contentStyle,
|
|
2950
2923
|
showsVerticalScrollIndicator: true,
|
|
2951
|
-
|
|
2952
|
-
persistentScrollbar: isAndroid,
|
|
2924
|
+
bounces: false,
|
|
2953
2925
|
stickyHeaderIndices: headerNode ? [0] : void 0
|
|
2954
2926
|
},
|
|
2955
2927
|
headerNode,
|
|
2956
2928
|
contentNode
|
|
2957
|
-
) : /* @__PURE__ */
|
|
2929
|
+
) : /* @__PURE__ */ React54__default.default.createElement(bottomSheet.BottomSheetView, { style: [styles22.content, contentStyle, style] }, headerNode, contentNode)
|
|
2958
2930
|
);
|
|
2959
2931
|
}
|
|
2960
2932
|
Sheet.Header = SheetHeader;
|
|
@@ -3001,8 +2973,7 @@ var styles22 = reactNative.StyleSheet.create({
|
|
|
3001
2973
|
},
|
|
3002
2974
|
scrollContent: {
|
|
3003
2975
|
paddingHorizontal: s(16),
|
|
3004
|
-
paddingBottom: vs(32)
|
|
3005
|
-
paddingRight: s(16)
|
|
2976
|
+
paddingBottom: vs(32)
|
|
3006
2977
|
},
|
|
3007
2978
|
sheetContent: {
|
|
3008
2979
|
gap: vs(16)
|
|
@@ -3013,28 +2984,10 @@ var styles22 = reactNative.StyleSheet.create({
|
|
|
3013
2984
|
borderTopWidth: 1,
|
|
3014
2985
|
flexDirection: "row",
|
|
3015
2986
|
gap: s(12)
|
|
3016
|
-
},
|
|
3017
|
-
dialogBackdrop: {
|
|
3018
|
-
flex: 1,
|
|
3019
|
-
backgroundColor: "rgba(0,0,0,0.5)",
|
|
3020
|
-
alignItems: "center",
|
|
3021
|
-
justifyContent: "center",
|
|
3022
|
-
padding: s(24)
|
|
3023
|
-
},
|
|
3024
|
-
dialogCard: {
|
|
3025
|
-
width: "100%",
|
|
3026
|
-
borderRadius: RADIUS.lg,
|
|
3027
|
-
paddingTop: vs(16),
|
|
3028
|
-
overflow: "hidden",
|
|
3029
|
-
...SHADOWS.xl
|
|
3030
|
-
},
|
|
3031
|
-
dialogContent: {
|
|
3032
|
-
paddingHorizontal: s(16),
|
|
3033
|
-
paddingBottom: vs(16)
|
|
3034
2987
|
}
|
|
3035
2988
|
});
|
|
3036
2989
|
var isIOS = reactNative.Platform.OS === "ios";
|
|
3037
|
-
var
|
|
2990
|
+
var isAndroid = reactNative.Platform.OS === "android";
|
|
3038
2991
|
var isWeb2 = reactNative.Platform.OS === "web";
|
|
3039
2992
|
function Select({
|
|
3040
2993
|
options,
|
|
@@ -3052,9 +3005,9 @@ function Select({
|
|
|
3052
3005
|
pressScale: PRESS_SCALE.button,
|
|
3053
3006
|
disabled
|
|
3054
3007
|
});
|
|
3055
|
-
const [pickerVisible, setPickerVisible] =
|
|
3056
|
-
const [pendingValue, setPendingValue] =
|
|
3057
|
-
const pickerRef =
|
|
3008
|
+
const [pickerVisible, setPickerVisible] = React54.useState(false);
|
|
3009
|
+
const [pendingValue, setPendingValue] = React54.useState(value);
|
|
3010
|
+
const pickerRef = React54.useRef(null);
|
|
3058
3011
|
const selected = options.find((o) => o.value === value);
|
|
3059
3012
|
const handleOpen = () => {
|
|
3060
3013
|
if (disabled) return;
|
|
@@ -3062,7 +3015,7 @@ function Select({
|
|
|
3062
3015
|
if (isIOS) {
|
|
3063
3016
|
setPendingValue(value);
|
|
3064
3017
|
setPickerVisible(true);
|
|
3065
|
-
} else if (
|
|
3018
|
+
} else if (isAndroid) {
|
|
3066
3019
|
pickerRef.current?.focus?.();
|
|
3067
3020
|
}
|
|
3068
3021
|
};
|
|
@@ -3076,7 +3029,7 @@ function Select({
|
|
|
3076
3029
|
}
|
|
3077
3030
|
setPickerVisible(false);
|
|
3078
3031
|
};
|
|
3079
|
-
return /* @__PURE__ */
|
|
3032
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles23.container, style] }, label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles23.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, !isWeb2 ? /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [animatedStyle, { opacity: disabled ? 0.45 : 1 }] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
3080
3033
|
reactNative.TouchableOpacity,
|
|
3081
3034
|
{
|
|
3082
3035
|
style: [
|
|
@@ -3096,7 +3049,7 @@ function Select({
|
|
|
3096
3049
|
accessibilityValue: { text: selected?.label ?? placeholder },
|
|
3097
3050
|
accessibilityState: { disabled: !!disabled, expanded: pickerVisible }
|
|
3098
3051
|
},
|
|
3099
|
-
/* @__PURE__ */
|
|
3052
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
3100
3053
|
reactNative.Text,
|
|
3101
3054
|
{
|
|
3102
3055
|
style: [
|
|
@@ -3108,8 +3061,8 @@ function Select({
|
|
|
3108
3061
|
},
|
|
3109
3062
|
selected?.label ?? placeholder
|
|
3110
3063
|
),
|
|
3111
|
-
/* @__PURE__ */
|
|
3112
|
-
)) : null, isIOS ? /* @__PURE__ */
|
|
3064
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.Entypo, { name: "chevron-down", size: 20, color: colors.foregroundMuted })
|
|
3065
|
+
)) : null, isIOS ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3113
3066
|
reactNative.Modal,
|
|
3114
3067
|
{
|
|
3115
3068
|
visible: pickerVisible,
|
|
@@ -3117,16 +3070,16 @@ function Select({
|
|
|
3117
3070
|
animationType: "slide",
|
|
3118
3071
|
onRequestClose: handleDismiss
|
|
3119
3072
|
},
|
|
3120
|
-
/* @__PURE__ */
|
|
3121
|
-
/* @__PURE__ */
|
|
3073
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.TouchableOpacity, { style: styles23.iosBackdrop, activeOpacity: 1, onPress: handleDismiss }),
|
|
3074
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles23.iosSheet, { backgroundColor: colors.card }] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles23.iosToolbar, { borderBottomColor: colors.border }] }, label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles23.iosToolbarTitle, { color: colors.foreground }], allowFontScaling: true }, label) : /* @__PURE__ */ React54__default.default.createElement(reactNative.View, null), /* @__PURE__ */ React54__default.default.createElement(reactNative.TouchableOpacity, { onPress: handleConfirm, style: styles23.iosDoneBtn, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 } }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles23.iosDoneBtnText, { color: colors.primary }], allowFontScaling: true }, "Done"))), /* @__PURE__ */ React54__default.default.createElement(
|
|
3122
3075
|
picker.Picker,
|
|
3123
3076
|
{
|
|
3124
3077
|
selectedValue: pendingValue ?? "",
|
|
3125
3078
|
onValueChange: (val) => setPendingValue(val),
|
|
3126
3079
|
itemStyle: { color: colors.foreground }
|
|
3127
3080
|
},
|
|
3128
|
-
!value ? /* @__PURE__ */
|
|
3129
|
-
options.map((o) => /* @__PURE__ */
|
|
3081
|
+
!value ? /* @__PURE__ */ React54__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", color: colors.foregroundMuted, enabled: false }) : null,
|
|
3082
|
+
options.map((o) => /* @__PURE__ */ React54__default.default.createElement(
|
|
3130
3083
|
picker.Picker.Item,
|
|
3131
3084
|
{
|
|
3132
3085
|
key: o.value,
|
|
@@ -3137,7 +3090,7 @@ function Select({
|
|
|
3137
3090
|
}
|
|
3138
3091
|
))
|
|
3139
3092
|
))
|
|
3140
|
-
) : null,
|
|
3093
|
+
) : null, isAndroid ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3141
3094
|
picker.Picker,
|
|
3142
3095
|
{
|
|
3143
3096
|
ref: pickerRef,
|
|
@@ -3153,8 +3106,8 @@ function Select({
|
|
|
3153
3106
|
prompt: label,
|
|
3154
3107
|
style: styles23.androidHiddenPicker
|
|
3155
3108
|
},
|
|
3156
|
-
!value ? /* @__PURE__ */
|
|
3157
|
-
options.map((o) => /* @__PURE__ */
|
|
3109
|
+
!value ? /* @__PURE__ */ React54__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }) : null,
|
|
3110
|
+
options.map((o) => /* @__PURE__ */ React54__default.default.createElement(
|
|
3158
3111
|
picker.Picker.Item,
|
|
3159
3112
|
{
|
|
3160
3113
|
key: o.value,
|
|
@@ -3163,7 +3116,7 @@ function Select({
|
|
|
3163
3116
|
enabled: !o.disabled
|
|
3164
3117
|
}
|
|
3165
3118
|
))
|
|
3166
|
-
) : null, isWeb2 ? /* @__PURE__ */
|
|
3119
|
+
) : null, isWeb2 ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3167
3120
|
picker.Picker,
|
|
3168
3121
|
{
|
|
3169
3122
|
selectedValue: value ?? "",
|
|
@@ -3183,8 +3136,8 @@ function Select({
|
|
|
3183
3136
|
}
|
|
3184
3137
|
]
|
|
3185
3138
|
},
|
|
3186
|
-
/* @__PURE__ */
|
|
3187
|
-
options.map((o) => /* @__PURE__ */
|
|
3139
|
+
/* @__PURE__ */ React54__default.default.createElement(picker.Picker.Item, { label: placeholder, value: "", enabled: false }),
|
|
3140
|
+
options.map((o) => /* @__PURE__ */ React54__default.default.createElement(
|
|
3188
3141
|
picker.Picker.Item,
|
|
3189
3142
|
{
|
|
3190
3143
|
key: o.value,
|
|
@@ -3193,7 +3146,7 @@ function Select({
|
|
|
3193
3146
|
enabled: !o.disabled
|
|
3194
3147
|
}
|
|
3195
3148
|
))
|
|
3196
|
-
) : null, error ? /* @__PURE__ */
|
|
3149
|
+
) : null, error ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles23.helperText, { color: colors.destructive }], allowFontScaling: true }, error) : null);
|
|
3197
3150
|
}
|
|
3198
3151
|
var styles23 = reactNative.StyleSheet.create({
|
|
3199
3152
|
container: {
|
|
@@ -3274,7 +3227,7 @@ function useToast() {
|
|
|
3274
3227
|
function ToastProvider({ children }) {
|
|
3275
3228
|
const { colorScheme } = useTheme();
|
|
3276
3229
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
3277
|
-
return /* @__PURE__ */
|
|
3230
|
+
return /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, children, /* @__PURE__ */ React54__default.default.createElement(
|
|
3278
3231
|
sonnerNative.Toaster,
|
|
3279
3232
|
{
|
|
3280
3233
|
theme: colorScheme,
|
|
@@ -3324,7 +3277,8 @@ function CurrencyInput({
|
|
|
3324
3277
|
editable,
|
|
3325
3278
|
containerStyle,
|
|
3326
3279
|
style,
|
|
3327
|
-
sheetMode
|
|
3280
|
+
sheetMode,
|
|
3281
|
+
...props
|
|
3328
3282
|
}) {
|
|
3329
3283
|
const handleChange = (text) => {
|
|
3330
3284
|
const withoutPrefix = prefix && text.startsWith(prefix) ? text.slice(prefix.length) : text;
|
|
@@ -3342,9 +3296,10 @@ function CurrencyInput({
|
|
|
3342
3296
|
fontSize: isLarge ? ms(32) : ms(17)
|
|
3343
3297
|
};
|
|
3344
3298
|
const displayValue = value && prefix && value.startsWith(prefix) ? value.slice(prefix.length) : value;
|
|
3345
|
-
return /* @__PURE__ */
|
|
3299
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
3346
3300
|
Input,
|
|
3347
3301
|
{
|
|
3302
|
+
...props,
|
|
3348
3303
|
value: displayValue,
|
|
3349
3304
|
onChangeText: handleChange,
|
|
3350
3305
|
keyboardType: "numeric",
|
|
@@ -3392,7 +3347,7 @@ function CurrencyDisplayBase({ value, prefix = "$", showDecimals = false, textCo
|
|
|
3392
3347
|
const baseFontSize = variant ? variantFontSize[variant] : ms(56);
|
|
3393
3348
|
const fontSize = maxFontSize ?? baseFontSize;
|
|
3394
3349
|
const letterSpacing = variant ? variantLetterSpacing[variant] : -2;
|
|
3395
|
-
return /* @__PURE__ */
|
|
3350
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles24.container, style] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
3396
3351
|
reactNative.Text,
|
|
3397
3352
|
{
|
|
3398
3353
|
style: [styles24.amount, { color: textColor ?? colors.foreground, fontSize, letterSpacing }],
|
|
@@ -3404,7 +3359,7 @@ function CurrencyDisplayBase({ value, prefix = "$", showDecimals = false, textCo
|
|
|
3404
3359
|
formatted
|
|
3405
3360
|
));
|
|
3406
3361
|
}
|
|
3407
|
-
var CurrencyDisplay =
|
|
3362
|
+
var CurrencyDisplay = React54__default.default.memo(CurrencyDisplayBase);
|
|
3408
3363
|
var styles24 = reactNative.StyleSheet.create({
|
|
3409
3364
|
container: {
|
|
3410
3365
|
alignSelf: "flex-start"
|
|
@@ -3419,8 +3374,7 @@ function ListItemBase({
|
|
|
3419
3374
|
imageSource,
|
|
3420
3375
|
leftRender,
|
|
3421
3376
|
rightRender,
|
|
3422
|
-
|
|
3423
|
-
icon,
|
|
3377
|
+
rightActions,
|
|
3424
3378
|
leftIcon,
|
|
3425
3379
|
rightIcon,
|
|
3426
3380
|
leftIconColor,
|
|
@@ -3445,8 +3399,8 @@ function ListItemBase({
|
|
|
3445
3399
|
selectionAsync();
|
|
3446
3400
|
onPress?.();
|
|
3447
3401
|
};
|
|
3448
|
-
const effectiveLeft = imageSource ? /* @__PURE__ */
|
|
3449
|
-
const
|
|
3402
|
+
const effectiveLeft = imageSource ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Image, { source: imageSource, style: styles25.image }) : leftIcon ? renderIcon(leftIcon, 24, leftIconColor ?? colors.foreground) : leftRender;
|
|
3403
|
+
const hasRightContent = !!(rightIcon || rightActions && rightActions.length > 0 || rightRender !== void 0 || showChevron);
|
|
3450
3404
|
const cardStyle = variant === "card" ? {
|
|
3451
3405
|
backgroundColor: colors.card,
|
|
3452
3406
|
borderRadius: RADIUS.md,
|
|
@@ -3459,7 +3413,7 @@ function ListItemBase({
|
|
|
3459
3413
|
elevation: 2
|
|
3460
3414
|
} : {};
|
|
3461
3415
|
const a11yLabel = accessibilityLabel ?? [title, subtitle, caption].filter(Boolean).join(". ");
|
|
3462
|
-
const content = /* @__PURE__ */
|
|
3416
|
+
const content = /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, effectiveLeft ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles25.leftContainer }, effectiveLeft) : null, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles25.content }, /* @__PURE__ */ React54__default.default.createElement(
|
|
3463
3417
|
reactNative.Text,
|
|
3464
3418
|
{
|
|
3465
3419
|
style: [styles25.title, { color: colors.foreground }, titleStyle],
|
|
@@ -3467,7 +3421,7 @@ function ListItemBase({
|
|
|
3467
3421
|
allowFontScaling: true
|
|
3468
3422
|
},
|
|
3469
3423
|
title
|
|
3470
|
-
), subtitle ? /* @__PURE__ */
|
|
3424
|
+
), subtitle ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3471
3425
|
reactNative.Text,
|
|
3472
3426
|
{
|
|
3473
3427
|
style: [styles25.subtitle, { color: colors.foregroundMuted }, subtitleStyle],
|
|
@@ -3475,7 +3429,7 @@ function ListItemBase({
|
|
|
3475
3429
|
allowFontScaling: true
|
|
3476
3430
|
},
|
|
3477
3431
|
subtitle
|
|
3478
|
-
) : null, caption ? /* @__PURE__ */
|
|
3432
|
+
) : null, caption ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3479
3433
|
reactNative.Text,
|
|
3480
3434
|
{
|
|
3481
3435
|
style: [styles25.caption, { color: colors.foregroundMuted }, captionStyle],
|
|
@@ -3483,16 +3437,16 @@ function ListItemBase({
|
|
|
3483
3437
|
allowFontScaling: true
|
|
3484
3438
|
},
|
|
3485
3439
|
caption
|
|
3486
|
-
) : null),
|
|
3440
|
+
) : null), hasRightContent ? rightIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles25.rightContainer }, renderIcon(rightIcon, 24, rightIconColor ?? colors.foregroundMuted)) : rightActions && rightActions.length > 0 ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles25.rightActionsContainer }, rightActions.map((action, i) => /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, { key: i }, action))) : rightRender !== void 0 ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles25.rightContainer }, typeof rightRender === "string" ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3487
3441
|
reactNative.Text,
|
|
3488
3442
|
{
|
|
3489
3443
|
style: [styles25.rightText, { color: colors.foregroundMuted }],
|
|
3490
3444
|
allowFontScaling: true
|
|
3491
3445
|
},
|
|
3492
|
-
|
|
3493
|
-
) :
|
|
3446
|
+
rightRender
|
|
3447
|
+
) : rightRender) : showChevron ? /* @__PURE__ */ React54__default.default.createElement(vectorIcons.Entypo, { name: "chevron-with-circle-right", size: 20, color: colors.foregroundMuted }) : null : null);
|
|
3494
3448
|
if (onPress) {
|
|
3495
|
-
return /* @__PURE__ */
|
|
3449
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: disabled && styles25.disabled }, /* @__PURE__ */ React54__default.default.createElement(
|
|
3496
3450
|
PressableRow,
|
|
3497
3451
|
{
|
|
3498
3452
|
style: [styles25.container, cardStyle, style],
|
|
@@ -3506,11 +3460,11 @@ function ListItemBase({
|
|
|
3506
3460
|
accessibilityState: { disabled: !!disabled }
|
|
3507
3461
|
},
|
|
3508
3462
|
content
|
|
3509
|
-
), showSeparator ? /* @__PURE__ */
|
|
3463
|
+
), showSeparator ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles25.separator, { backgroundColor: colors.separator }] }) : null);
|
|
3510
3464
|
}
|
|
3511
|
-
return /* @__PURE__ */
|
|
3465
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [disabled && styles25.disabled] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles25.container, cardStyle, style] }, content), showSeparator ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles25.separator, { backgroundColor: colors.separator }] }) : null);
|
|
3512
3466
|
}
|
|
3513
|
-
var ListItem =
|
|
3467
|
+
var ListItem = React54__default.default.memo(ListItemBase);
|
|
3514
3468
|
var styles25 = reactNative.StyleSheet.create({
|
|
3515
3469
|
container: {
|
|
3516
3470
|
flexDirection: "row",
|
|
@@ -3557,6 +3511,12 @@ var styles25 = reactNative.StyleSheet.create({
|
|
|
3557
3511
|
flexShrink: 0,
|
|
3558
3512
|
maxWidth: s(160)
|
|
3559
3513
|
},
|
|
3514
|
+
rightActionsContainer: {
|
|
3515
|
+
flexDirection: "row",
|
|
3516
|
+
alignItems: "center",
|
|
3517
|
+
gap: s(8),
|
|
3518
|
+
flexShrink: 0
|
|
3519
|
+
},
|
|
3560
3520
|
rightText: {
|
|
3561
3521
|
fontFamily: "Sohne-Regular",
|
|
3562
3522
|
fontSize: ms(14)
|
|
@@ -3571,17 +3531,17 @@ var styles25 = reactNative.StyleSheet.create({
|
|
|
3571
3531
|
});
|
|
3572
3532
|
function ListGroup({ children, variant = "plain", style }) {
|
|
3573
3533
|
const { colors } = useTheme();
|
|
3574
|
-
const processedChildren =
|
|
3575
|
-
if (!
|
|
3534
|
+
const processedChildren = React54__default.default.Children.map(children, (child, index) => {
|
|
3535
|
+
if (!React54__default.default.isValidElement(child)) return child;
|
|
3576
3536
|
if (child.type === ListGroupHeader || child.type === ListGroupFooter) {
|
|
3577
3537
|
return child;
|
|
3578
3538
|
}
|
|
3579
3539
|
const childProps = child.props;
|
|
3580
3540
|
const isListItem = "title" in childProps;
|
|
3581
3541
|
if (!isListItem) return child;
|
|
3582
|
-
const isLast = index ===
|
|
3542
|
+
const isLast = index === React54__default.default.Children.count(children) - 1;
|
|
3583
3543
|
if (childProps["showSeparator"] === void 0 && !isLast) {
|
|
3584
|
-
return
|
|
3544
|
+
return React54__default.default.cloneElement(child, {
|
|
3585
3545
|
showSeparator: true
|
|
3586
3546
|
});
|
|
3587
3547
|
}
|
|
@@ -3599,21 +3559,21 @@ function ListGroup({ children, variant = "plain", style }) {
|
|
|
3599
3559
|
elevation: 2,
|
|
3600
3560
|
paddingVertical: vs(4)
|
|
3601
3561
|
} : {};
|
|
3602
|
-
return /* @__PURE__ */
|
|
3562
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles26.container, cardStyle, style] }, processedChildren);
|
|
3603
3563
|
}
|
|
3604
3564
|
function ListGroupHeader({ children, style }) {
|
|
3605
3565
|
const { colors } = useTheme();
|
|
3606
3566
|
if (typeof children === "string") {
|
|
3607
|
-
return /* @__PURE__ */
|
|
3567
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles26.header, { borderBottomColor: colors.separator }, style] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles26.headerText, { color: colors.foregroundMuted }], allowFontScaling: true }, children));
|
|
3608
3568
|
}
|
|
3609
|
-
return /* @__PURE__ */
|
|
3569
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles26.header, { borderBottomColor: colors.separator }, style] }, children);
|
|
3610
3570
|
}
|
|
3611
3571
|
function ListGroupFooter({ children, style }) {
|
|
3612
3572
|
const { colors } = useTheme();
|
|
3613
3573
|
if (typeof children === "string") {
|
|
3614
|
-
return /* @__PURE__ */
|
|
3574
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles26.footer, style] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles26.footerText, { color: colors.foregroundMuted }], allowFontScaling: true }, children));
|
|
3615
3575
|
}
|
|
3616
|
-
return /* @__PURE__ */
|
|
3576
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles26.footer, style] }, children);
|
|
3617
3577
|
}
|
|
3618
3578
|
ListGroup.Header = ListGroupHeader;
|
|
3619
3579
|
ListGroup.Footer = ListGroupFooter;
|
|
@@ -3677,7 +3637,7 @@ function MenuItemBase({
|
|
|
3677
3637
|
elevation: 2
|
|
3678
3638
|
} : {};
|
|
3679
3639
|
const a11yLabel = accessibilityLabel ?? (subtitle ? `${label}. ${subtitle}` : label);
|
|
3680
|
-
return /* @__PURE__ */
|
|
3640
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: disabled && styles27.disabled }, /* @__PURE__ */ React54__default.default.createElement(
|
|
3681
3641
|
PressableRow,
|
|
3682
3642
|
{
|
|
3683
3643
|
style: [styles27.container, cardStyle, style],
|
|
@@ -3690,8 +3650,8 @@ function MenuItemBase({
|
|
|
3690
3650
|
accessibilityLabel: a11yLabel,
|
|
3691
3651
|
accessibilityState: { disabled }
|
|
3692
3652
|
},
|
|
3693
|
-
resolvedIcon ? /* @__PURE__ */
|
|
3694
|
-
/* @__PURE__ */
|
|
3653
|
+
resolvedIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles27.iconContainer }, resolvedIcon) : null,
|
|
3654
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles27.labelContainer }, /* @__PURE__ */ React54__default.default.createElement(
|
|
3695
3655
|
reactNative.Text,
|
|
3696
3656
|
{
|
|
3697
3657
|
style: [styles27.label, { color: colors.foreground }, labelStyle],
|
|
@@ -3699,7 +3659,7 @@ function MenuItemBase({
|
|
|
3699
3659
|
allowFontScaling: true
|
|
3700
3660
|
},
|
|
3701
3661
|
label
|
|
3702
|
-
), subtitle ? /* @__PURE__ */
|
|
3662
|
+
), subtitle ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3703
3663
|
reactNative.Text,
|
|
3704
3664
|
{
|
|
3705
3665
|
style: [styles27.subtitle, { color: colors.foregroundMuted }],
|
|
@@ -3708,7 +3668,7 @@ function MenuItemBase({
|
|
|
3708
3668
|
},
|
|
3709
3669
|
subtitle
|
|
3710
3670
|
) : null),
|
|
3711
|
-
rightRender !== void 0 ? /* @__PURE__ */
|
|
3671
|
+
rightRender !== void 0 ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3712
3672
|
reactNative.View,
|
|
3713
3673
|
{
|
|
3714
3674
|
style: styles27.rightContainer,
|
|
@@ -3717,10 +3677,10 @@ function MenuItemBase({
|
|
|
3717
3677
|
}
|
|
3718
3678
|
},
|
|
3719
3679
|
rightRender
|
|
3720
|
-
) : showChevron ? /* @__PURE__ */
|
|
3721
|
-
), showSeparator ? /* @__PURE__ */
|
|
3680
|
+
) : showChevron ? /* @__PURE__ */ React54__default.default.createElement(vectorIcons.Entypo, { name: "chevron-right", size: 18, color: colors.foregroundMuted }) : null
|
|
3681
|
+
), showSeparator ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles27.separator, { backgroundColor: colors.separator }] }) : null);
|
|
3722
3682
|
}
|
|
3723
|
-
var MenuItem =
|
|
3683
|
+
var MenuItem = React54__default.default.memo(MenuItemBase);
|
|
3724
3684
|
var styles27 = reactNative.StyleSheet.create({
|
|
3725
3685
|
container: {
|
|
3726
3686
|
flexDirection: "row",
|
|
@@ -3764,17 +3724,17 @@ var styles27 = reactNative.StyleSheet.create({
|
|
|
3764
3724
|
});
|
|
3765
3725
|
function MenuGroup({ children, variant = "plain", style }) {
|
|
3766
3726
|
const { colors } = useTheme();
|
|
3767
|
-
const processedChildren =
|
|
3768
|
-
if (!
|
|
3727
|
+
const processedChildren = React54__default.default.Children.map(children, (child, index) => {
|
|
3728
|
+
if (!React54__default.default.isValidElement(child)) return child;
|
|
3769
3729
|
if (child.type === MenuGroupHeader || child.type === MenuGroupFooter) {
|
|
3770
3730
|
return child;
|
|
3771
3731
|
}
|
|
3772
3732
|
const childProps = child.props;
|
|
3773
3733
|
const isMenuItem = "onPress" in childProps;
|
|
3774
3734
|
if (!isMenuItem) return child;
|
|
3775
|
-
const isLast = index ===
|
|
3735
|
+
const isLast = index === React54__default.default.Children.count(children) - 1;
|
|
3776
3736
|
if (childProps["showSeparator"] === void 0 && !isLast) {
|
|
3777
|
-
return
|
|
3737
|
+
return React54__default.default.cloneElement(child, {
|
|
3778
3738
|
showSeparator: true
|
|
3779
3739
|
});
|
|
3780
3740
|
}
|
|
@@ -3792,21 +3752,21 @@ function MenuGroup({ children, variant = "plain", style }) {
|
|
|
3792
3752
|
elevation: 2,
|
|
3793
3753
|
paddingVertical: vs(4)
|
|
3794
3754
|
} : {};
|
|
3795
|
-
return /* @__PURE__ */
|
|
3755
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles28.container, cardStyle, style] }, processedChildren);
|
|
3796
3756
|
}
|
|
3797
3757
|
function MenuGroupHeader({ children, style }) {
|
|
3798
3758
|
const { colors } = useTheme();
|
|
3799
3759
|
if (typeof children === "string") {
|
|
3800
|
-
return /* @__PURE__ */
|
|
3760
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles28.header, { borderBottomColor: colors.separator }, style] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles28.headerText, { color: colors.foregroundMuted }], allowFontScaling: true }, children));
|
|
3801
3761
|
}
|
|
3802
|
-
return /* @__PURE__ */
|
|
3762
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles28.header, { borderBottomColor: colors.separator }, style] }, children);
|
|
3803
3763
|
}
|
|
3804
3764
|
function MenuGroupFooter({ children, style }) {
|
|
3805
3765
|
const { colors } = useTheme();
|
|
3806
3766
|
if (typeof children === "string") {
|
|
3807
|
-
return /* @__PURE__ */
|
|
3767
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles28.footer, style] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles28.footerText, { color: colors.foregroundMuted }], allowFontScaling: true }, children));
|
|
3808
3768
|
}
|
|
3809
|
-
return /* @__PURE__ */
|
|
3769
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles28.footer, style] }, children);
|
|
3810
3770
|
}
|
|
3811
3771
|
MenuGroup.Header = MenuGroupHeader;
|
|
3812
3772
|
MenuGroup.Footer = MenuGroupFooter;
|
|
@@ -3843,7 +3803,7 @@ function ChipBase({ label, selected = false, onPress, icon, iconName, style, acc
|
|
|
3843
3803
|
onPress?.();
|
|
3844
3804
|
};
|
|
3845
3805
|
const resolvedIcon = iconName ? renderIcon(iconName, ms(13), selected ? colors.primaryForeground : colors.foreground) : icon;
|
|
3846
|
-
return /* @__PURE__ */
|
|
3806
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles29.wrapper, style] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
3847
3807
|
PressableChip,
|
|
3848
3808
|
{
|
|
3849
3809
|
onPress: handlePress,
|
|
@@ -3853,7 +3813,7 @@ function ChipBase({ label, selected = false, onPress, icon, iconName, style, acc
|
|
|
3853
3813
|
accessibilityLabel: accessibilityLabel ?? label,
|
|
3854
3814
|
accessibilityState: { selected }
|
|
3855
3815
|
},
|
|
3856
|
-
/* @__PURE__ */
|
|
3816
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
3857
3817
|
reactNativeEase.EaseView,
|
|
3858
3818
|
{
|
|
3859
3819
|
style: styles29.chip,
|
|
@@ -3863,8 +3823,8 @@ function ChipBase({ label, selected = false, onPress, icon, iconName, style, acc
|
|
|
3863
3823
|
},
|
|
3864
3824
|
transition: COLOR_TRANSITION
|
|
3865
3825
|
},
|
|
3866
|
-
resolvedIcon ? /* @__PURE__ */
|
|
3867
|
-
/* @__PURE__ */
|
|
3826
|
+
resolvedIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles29.chipIcon }, resolvedIcon) : null,
|
|
3827
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
3868
3828
|
reactNative.Text,
|
|
3869
3829
|
{
|
|
3870
3830
|
style: [styles29.label, { color: selected ? colors.primaryForeground : colors.foreground }],
|
|
@@ -3875,7 +3835,7 @@ function ChipBase({ label, selected = false, onPress, icon, iconName, style, acc
|
|
|
3875
3835
|
)
|
|
3876
3836
|
));
|
|
3877
3837
|
}
|
|
3878
|
-
var Chip =
|
|
3838
|
+
var Chip = React54__default.default.memo(ChipBase);
|
|
3879
3839
|
function ChipGroup({ options, value, onValueChange, multiSelect = false, style }) {
|
|
3880
3840
|
const handlePress = (optionValue) => {
|
|
3881
3841
|
if (!multiSelect) {
|
|
@@ -3891,7 +3851,7 @@ function ChipGroup({ options, value, onValueChange, multiSelect = false, style }
|
|
|
3891
3851
|
if (Array.isArray(value)) return value.includes(optionValue);
|
|
3892
3852
|
return optionValue === value;
|
|
3893
3853
|
};
|
|
3894
|
-
return /* @__PURE__ */
|
|
3854
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles29.group, style] }, options.map((opt) => /* @__PURE__ */ React54__default.default.createElement(
|
|
3895
3855
|
Chip,
|
|
3896
3856
|
{
|
|
3897
3857
|
key: opt.value,
|
|
@@ -3941,7 +3901,6 @@ function ConfirmDialog({
|
|
|
3941
3901
|
visible,
|
|
3942
3902
|
title,
|
|
3943
3903
|
subtitle,
|
|
3944
|
-
description,
|
|
3945
3904
|
confirmLabel = "Confirm",
|
|
3946
3905
|
cancelLabel = "Cancel",
|
|
3947
3906
|
confirmVariant = "primary",
|
|
@@ -3951,38 +3910,45 @@ function ConfirmDialog({
|
|
|
3951
3910
|
onCancel
|
|
3952
3911
|
}) {
|
|
3953
3912
|
const { colors } = useTheme();
|
|
3954
|
-
const
|
|
3955
|
-
const
|
|
3956
|
-
|
|
3913
|
+
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
3914
|
+
const ref = React54.useRef(null);
|
|
3915
|
+
const wasOpened = React54.useRef(false);
|
|
3916
|
+
const name = React54.useId();
|
|
3917
|
+
React54.useEffect(() => {
|
|
3957
3918
|
if (visible) {
|
|
3958
3919
|
impactMedium();
|
|
3959
|
-
ref.current?.
|
|
3960
|
-
|
|
3961
|
-
|
|
3920
|
+
ref.current?.present();
|
|
3921
|
+
wasOpened.current = true;
|
|
3922
|
+
} else if (wasOpened.current) {
|
|
3923
|
+
ref.current?.dismiss();
|
|
3962
3924
|
}
|
|
3963
3925
|
}, [visible]);
|
|
3964
|
-
const renderBackdrop =
|
|
3965
|
-
|
|
3966
|
-
|
|
3967
|
-
|
|
3968
|
-
|
|
3969
|
-
|
|
3970
|
-
|
|
3971
|
-
|
|
3926
|
+
const renderBackdrop = React54.useCallback(
|
|
3927
|
+
(props) => /* @__PURE__ */ React54__default.default.createElement(
|
|
3928
|
+
bottomSheet.BottomSheetBackdrop,
|
|
3929
|
+
{
|
|
3930
|
+
...props,
|
|
3931
|
+
disappearsOnIndex: -1,
|
|
3932
|
+
appearsOnIndex: 0,
|
|
3933
|
+
pressBehavior: "close"
|
|
3934
|
+
}
|
|
3935
|
+
),
|
|
3936
|
+
[]
|
|
3972
3937
|
);
|
|
3973
|
-
return /* @__PURE__ */
|
|
3974
|
-
|
|
3938
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
3939
|
+
bottomSheet.BottomSheetModal,
|
|
3975
3940
|
{
|
|
3976
3941
|
ref,
|
|
3977
|
-
|
|
3978
|
-
|
|
3942
|
+
name,
|
|
3943
|
+
onDismiss: onCancel,
|
|
3979
3944
|
enableDynamicSizing: true,
|
|
3980
3945
|
backdropComponent: renderBackdrop,
|
|
3981
|
-
backgroundStyle:
|
|
3982
|
-
handleIndicatorStyle:
|
|
3983
|
-
enablePanDownToClose: true
|
|
3946
|
+
backgroundStyle: { ...styles30.background, backgroundColor: colors.card },
|
|
3947
|
+
handleIndicatorStyle: { ...styles30.handle, backgroundColor: colors.border },
|
|
3948
|
+
enablePanDownToClose: true,
|
|
3949
|
+
topInset: insets.top
|
|
3984
3950
|
},
|
|
3985
|
-
/* @__PURE__ */
|
|
3951
|
+
/* @__PURE__ */ React54__default.default.createElement(bottomSheet.BottomSheetView, { style: styles30.content }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles30.header, accessibilityRole: "header" }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles30.headerRow }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles30.title, { color: colors.foreground }], allowFontScaling: true }, title), showCloseButton ? /* @__PURE__ */ React54__default.default.createElement(
|
|
3986
3952
|
reactNative.TouchableOpacity,
|
|
3987
3953
|
{
|
|
3988
3954
|
onPress: onCancel,
|
|
@@ -3993,8 +3959,8 @@ function ConfirmDialog({
|
|
|
3993
3959
|
accessibilityLabel: "Close",
|
|
3994
3960
|
hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }
|
|
3995
3961
|
},
|
|
3996
|
-
/* @__PURE__ */
|
|
3997
|
-
) : null),
|
|
3962
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.Feather, { name: "x", size: ms(18), color: colors.foregroundMuted })
|
|
3963
|
+
) : null), subtitle ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles30.subtitle, { color: colors.foregroundMuted }], allowFontScaling: true }, subtitle) : null), /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles30.actions }, /* @__PURE__ */ React54__default.default.createElement(
|
|
3998
3964
|
Button,
|
|
3999
3965
|
{
|
|
4000
3966
|
label: confirmLabel,
|
|
@@ -4006,7 +3972,7 @@ function ConfirmDialog({
|
|
|
4006
3972
|
notificationSuccess();
|
|
4007
3973
|
onConfirm();
|
|
4008
3974
|
},
|
|
4009
|
-
icon: /* @__PURE__ */
|
|
3975
|
+
icon: /* @__PURE__ */ React54__default.default.createElement(
|
|
4010
3976
|
vectorIcons.Feather,
|
|
4011
3977
|
{
|
|
4012
3978
|
name: confirmVariant === "destructive" ? "trash-2" : "check",
|
|
@@ -4015,7 +3981,7 @@ function ConfirmDialog({
|
|
|
4015
3981
|
}
|
|
4016
3982
|
)
|
|
4017
3983
|
}
|
|
4018
|
-
), /* @__PURE__ */
|
|
3984
|
+
), /* @__PURE__ */ React54__default.default.createElement(
|
|
4019
3985
|
Button,
|
|
4020
3986
|
{
|
|
4021
3987
|
label: cancelLabel,
|
|
@@ -4025,7 +3991,7 @@ function ConfirmDialog({
|
|
|
4025
3991
|
selectionAsync();
|
|
4026
3992
|
onCancel();
|
|
4027
3993
|
},
|
|
4028
|
-
icon: /* @__PURE__ */
|
|
3994
|
+
icon: /* @__PURE__ */ React54__default.default.createElement(vectorIcons.Feather, { name: "x", size: 15, color: colors.foreground })
|
|
4029
3995
|
}
|
|
4030
3996
|
)))
|
|
4031
3997
|
);
|
|
@@ -4076,9 +4042,9 @@ var styles30 = reactNative.StyleSheet.create({
|
|
|
4076
4042
|
function LabelValueBase({ label, value, iconName, iconColor, style }) {
|
|
4077
4043
|
const { colors } = useTheme();
|
|
4078
4044
|
const resolvedIcon = iconName ? renderIcon(iconName, ms(14), iconColor ?? colors.foregroundMuted) : null;
|
|
4079
|
-
return /* @__PURE__ */
|
|
4045
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles31.container, style] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles31.labelSide }, resolvedIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles31.icon }, resolvedIcon) : null, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles31.label, { color: colors.foregroundMuted }], allowFontScaling: true }, label)), typeof value === "string" ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles31.value, { color: colors.foreground }], allowFontScaling: true }, value) : value);
|
|
4080
4046
|
}
|
|
4081
|
-
var LabelValue =
|
|
4047
|
+
var LabelValue = React54__default.default.memo(LabelValueBase);
|
|
4082
4048
|
var styles31 = reactNative.StyleSheet.create({
|
|
4083
4049
|
container: {
|
|
4084
4050
|
flexDirection: "row",
|
|
@@ -4143,7 +4109,7 @@ function MonthPicker({ value, onChange, minValue, maxValue, locale = "en", forma
|
|
|
4143
4109
|
selectionAsync();
|
|
4144
4110
|
onChange(fromIndex(index + 1));
|
|
4145
4111
|
};
|
|
4146
|
-
return /* @__PURE__ */
|
|
4112
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles32.container, style], accessibilityRole: "adjustable", accessibilityLabel: getLabel() }, /* @__PURE__ */ React54__default.default.createElement(
|
|
4147
4113
|
reactNative.TouchableOpacity,
|
|
4148
4114
|
{
|
|
4149
4115
|
style: [styles32.arrow, prevDisabled && styles32.arrowDisabled],
|
|
@@ -4156,8 +4122,8 @@ function MonthPicker({ value, onChange, minValue, maxValue, locale = "en", forma
|
|
|
4156
4122
|
accessibilityState: { disabled: prevDisabled },
|
|
4157
4123
|
hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }
|
|
4158
4124
|
},
|
|
4159
|
-
/* @__PURE__ */
|
|
4160
|
-
), /* @__PURE__ */
|
|
4125
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.Entypo, { name: "chevron-left", size: 22, color: colors.foreground })
|
|
4126
|
+
), /* @__PURE__ */ React54__default.default.createElement(
|
|
4161
4127
|
reactNative.Text,
|
|
4162
4128
|
{
|
|
4163
4129
|
style: [styles32.label, { color: colors.foreground }],
|
|
@@ -4165,7 +4131,7 @@ function MonthPicker({ value, onChange, minValue, maxValue, locale = "en", forma
|
|
|
4165
4131
|
accessibilityLiveRegion: "polite"
|
|
4166
4132
|
},
|
|
4167
4133
|
getLabel()
|
|
4168
|
-
), /* @__PURE__ */
|
|
4134
|
+
), /* @__PURE__ */ React54__default.default.createElement(
|
|
4169
4135
|
reactNative.TouchableOpacity,
|
|
4170
4136
|
{
|
|
4171
4137
|
style: [styles32.arrow, nextDisabled && styles32.arrowDisabled],
|
|
@@ -4178,7 +4144,7 @@ function MonthPicker({ value, onChange, minValue, maxValue, locale = "en", forma
|
|
|
4178
4144
|
accessibilityState: { disabled: nextDisabled },
|
|
4179
4145
|
hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }
|
|
4180
4146
|
},
|
|
4181
|
-
/* @__PURE__ */
|
|
4147
|
+
/* @__PURE__ */ React54__default.default.createElement(vectorIcons.Entypo, { name: "chevron-right", size: 22, color: colors.foreground })
|
|
4182
4148
|
));
|
|
4183
4149
|
}
|
|
4184
4150
|
var styles32 = reactNative.StyleSheet.create({
|
|
@@ -4244,7 +4210,7 @@ function MediaCardBase({
|
|
|
4244
4210
|
const ratio = aspectRatioMap2[aspectRatio];
|
|
4245
4211
|
const resolvedActionIcon = actionIconName ? renderIcon(actionIconName, 18, actionActive ? colors.primary : colors.background) : actionIcon ?? renderIcon("heart", 18, actionActive ? colors.primary : colors.background);
|
|
4246
4212
|
const a11yLabel = accessibilityLabel ?? [title, subtitle].filter(Boolean).join(". ");
|
|
4247
|
-
const cardContent = /* @__PURE__ */
|
|
4213
|
+
const cardContent = /* @__PURE__ */ React54__default.default.createElement(
|
|
4248
4214
|
reactNative.View,
|
|
4249
4215
|
{
|
|
4250
4216
|
style: [
|
|
@@ -4254,14 +4220,14 @@ function MediaCardBase({
|
|
|
4254
4220
|
],
|
|
4255
4221
|
...reactNative.Platform.OS === "web" ? hoverHandlers : {}
|
|
4256
4222
|
},
|
|
4257
|
-
/* @__PURE__ */
|
|
4223
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles33.imageContainer, imageStyle] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: { paddingTop: `${ratio * 100}%` } }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: reactNative.StyleSheet.absoluteFill }, imageSource ? /* @__PURE__ */ React54__default.default.createElement(
|
|
4258
4224
|
reactNative.Image,
|
|
4259
4225
|
{
|
|
4260
4226
|
source: imageSource,
|
|
4261
4227
|
style: styles33.image,
|
|
4262
4228
|
resizeMode: "cover"
|
|
4263
4229
|
}
|
|
4264
|
-
) : /* @__PURE__ */
|
|
4230
|
+
) : /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles33.imagePlaceholder, { backgroundColor: colors.surface }] }))), badge && /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles33.badgeContainer }, badge), (onActionPress || actionIcon || actionIconName) && /* @__PURE__ */ React54__default.default.createElement(
|
|
4265
4231
|
reactNative.TouchableOpacity,
|
|
4266
4232
|
{
|
|
4267
4233
|
style: [styles33.actionButton, { backgroundColor: "rgba(0,0,0,0.24)" }],
|
|
@@ -4278,10 +4244,10 @@ function MediaCardBase({
|
|
|
4278
4244
|
},
|
|
4279
4245
|
resolvedActionIcon
|
|
4280
4246
|
)),
|
|
4281
|
-
(title || subtitle || caption || footer) && /* @__PURE__ */
|
|
4247
|
+
(title || subtitle || caption || footer) && /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles33.meta }, title ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles33.title, { color: colors.foreground }], numberOfLines: 2, allowFontScaling: true }, title) : null, subtitle ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles33.subtitle, { color: colors.foregroundSubtle }], numberOfLines: 1, allowFontScaling: true }, subtitle) : null, caption ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles33.caption, { color: colors.foregroundMuted }], numberOfLines: 1, allowFontScaling: true }, caption) : null, footer)
|
|
4282
4248
|
);
|
|
4283
4249
|
if (onPress) {
|
|
4284
|
-
return /* @__PURE__ */
|
|
4250
|
+
return /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: animatedStyle }, /* @__PURE__ */ React54__default.default.createElement(
|
|
4285
4251
|
reactNative.TouchableOpacity,
|
|
4286
4252
|
{
|
|
4287
4253
|
onPress: handlePress,
|
|
@@ -4297,7 +4263,7 @@ function MediaCardBase({
|
|
|
4297
4263
|
}
|
|
4298
4264
|
return cardContent;
|
|
4299
4265
|
}
|
|
4300
|
-
var MediaCard =
|
|
4266
|
+
var MediaCard = React54__default.default.memo(MediaCardBase);
|
|
4301
4267
|
var styles33 = reactNative.StyleSheet.create({
|
|
4302
4268
|
card: {
|
|
4303
4269
|
borderRadius: RADIUS.md,
|
|
@@ -4355,7 +4321,7 @@ var styles33 = reactNative.StyleSheet.create({
|
|
|
4355
4321
|
lineHeight: mvs(16)
|
|
4356
4322
|
}
|
|
4357
4323
|
});
|
|
4358
|
-
var CategoryChip =
|
|
4324
|
+
var CategoryChip = React54__default.default.memo(function CategoryChip2({
|
|
4359
4325
|
item,
|
|
4360
4326
|
selected,
|
|
4361
4327
|
onSelect
|
|
@@ -4366,7 +4332,7 @@ var CategoryChip = React25__default.default.memo(function CategoryChip2({
|
|
|
4366
4332
|
});
|
|
4367
4333
|
const iconColor = selected ? colors.primaryForeground : colors.foregroundSubtle;
|
|
4368
4334
|
const resolvedIcon = typeof item.icon === "string" ? renderIcon(item.icon, 16, iconColor) : item.icon ?? null;
|
|
4369
|
-
return /* @__PURE__ */
|
|
4335
|
+
return /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: scaleStyle, ...hoverHandlers }, /* @__PURE__ */ React54__default.default.createElement(
|
|
4370
4336
|
reactNative.TouchableOpacity,
|
|
4371
4337
|
{
|
|
4372
4338
|
onPress: () => onSelect(item.value),
|
|
@@ -4378,7 +4344,7 @@ var CategoryChip = React25__default.default.memo(function CategoryChip2({
|
|
|
4378
4344
|
accessibilityLabel: item.label,
|
|
4379
4345
|
accessibilityState: { selected }
|
|
4380
4346
|
},
|
|
4381
|
-
/* @__PURE__ */
|
|
4347
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
4382
4348
|
reactNativeEase.EaseView,
|
|
4383
4349
|
{
|
|
4384
4350
|
style: styles34.chip,
|
|
@@ -4388,8 +4354,8 @@ var CategoryChip = React25__default.default.memo(function CategoryChip2({
|
|
|
4388
4354
|
},
|
|
4389
4355
|
transition: COLOR_TRANSITION
|
|
4390
4356
|
},
|
|
4391
|
-
resolvedIcon && /* @__PURE__ */
|
|
4392
|
-
/* @__PURE__ */
|
|
4357
|
+
resolvedIcon && /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles34.chipIcon }, resolvedIcon),
|
|
4358
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
4393
4359
|
reactNative.Text,
|
|
4394
4360
|
{
|
|
4395
4361
|
style: [styles34.chipLabel, { color: selected ? colors.primaryForeground : colors.foregroundSubtle }],
|
|
@@ -4397,7 +4363,7 @@ var CategoryChip = React25__default.default.memo(function CategoryChip2({
|
|
|
4397
4363
|
},
|
|
4398
4364
|
item.label
|
|
4399
4365
|
),
|
|
4400
|
-
item.badge !== void 0 && item.badge > 0 && /* @__PURE__ */
|
|
4366
|
+
item.badge !== void 0 && item.badge > 0 && /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles34.chipBadge, { backgroundColor: colors.primary }] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles34.chipBadgeText, { color: colors.primaryForeground }] }, Math.min(item.badge, 99)))
|
|
4401
4367
|
)
|
|
4402
4368
|
));
|
|
4403
4369
|
});
|
|
@@ -4411,7 +4377,7 @@ function CategoryStrip({
|
|
|
4411
4377
|
accessibilityLabel
|
|
4412
4378
|
}) {
|
|
4413
4379
|
const selected = Array.isArray(value) ? value : value ? [value] : [];
|
|
4414
|
-
const handlePress =
|
|
4380
|
+
const handlePress = React54.useCallback(
|
|
4415
4381
|
(v) => {
|
|
4416
4382
|
selectionAsync();
|
|
4417
4383
|
if (multiSelect) {
|
|
@@ -4424,7 +4390,7 @@ function CategoryStrip({
|
|
|
4424
4390
|
},
|
|
4425
4391
|
[multiSelect, value, onValueChange]
|
|
4426
4392
|
);
|
|
4427
|
-
return /* @__PURE__ */
|
|
4393
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
4428
4394
|
reactNative.ScrollView,
|
|
4429
4395
|
{
|
|
4430
4396
|
horizontal: true,
|
|
@@ -4434,7 +4400,7 @@ function CategoryStrip({
|
|
|
4434
4400
|
accessibilityRole: multiSelect ? void 0 : "radiogroup",
|
|
4435
4401
|
accessibilityLabel
|
|
4436
4402
|
},
|
|
4437
|
-
categories.map((cat) => /* @__PURE__ */
|
|
4403
|
+
categories.map((cat) => /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { key: cat.value, style: itemStyle }, /* @__PURE__ */ React54__default.default.createElement(
|
|
4438
4404
|
CategoryChip,
|
|
4439
4405
|
{
|
|
4440
4406
|
item: cat,
|
|
@@ -4485,21 +4451,24 @@ var styles34 = reactNative.StyleSheet.create({
|
|
|
4485
4451
|
lineHeight: 14
|
|
4486
4452
|
}
|
|
4487
4453
|
});
|
|
4488
|
-
function
|
|
4454
|
+
function Pressable2({
|
|
4489
4455
|
children,
|
|
4490
4456
|
onPress,
|
|
4491
4457
|
pressScale: _pressScale = PRESS_SCALE.card,
|
|
4492
4458
|
haptics = true,
|
|
4493
4459
|
style,
|
|
4494
4460
|
disabled,
|
|
4495
|
-
hoverScale: _hoverScale = 1.02
|
|
4461
|
+
hoverScale: _hoverScale = 1.02,
|
|
4462
|
+
accessibilityRole,
|
|
4463
|
+
accessibilityState,
|
|
4464
|
+
accessibilityLabel
|
|
4496
4465
|
}) {
|
|
4497
4466
|
const handlePress = () => {
|
|
4498
4467
|
if (disabled || !onPress) return;
|
|
4499
4468
|
if (haptics) impactLight();
|
|
4500
4469
|
onPress();
|
|
4501
4470
|
};
|
|
4502
|
-
return /* @__PURE__ */
|
|
4471
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
4503
4472
|
PressableCard,
|
|
4504
4473
|
{
|
|
4505
4474
|
style,
|
|
@@ -4508,8 +4477,9 @@ function Pressable3({
|
|
|
4508
4477
|
rippleColor: "transparent",
|
|
4509
4478
|
touchSoundDisabled: true,
|
|
4510
4479
|
activateOnHover: true,
|
|
4511
|
-
accessibilityRole: "button",
|
|
4512
|
-
accessibilityState: { disabled: !!disabled }
|
|
4480
|
+
accessibilityRole: accessibilityRole ?? "button",
|
|
4481
|
+
accessibilityState: accessibilityState ?? { disabled: !!disabled },
|
|
4482
|
+
accessibilityLabel
|
|
4513
4483
|
},
|
|
4514
4484
|
children
|
|
4515
4485
|
);
|
|
@@ -4546,23 +4516,23 @@ function DetailRowBase({
|
|
|
4546
4516
|
borderColor: "rgba(128,128,128,0.3)",
|
|
4547
4517
|
marginHorizontal: s(4)
|
|
4548
4518
|
};
|
|
4549
|
-
return /* @__PURE__ */
|
|
4519
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles35.row, style] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles35.labelSide }, resolvedLeftIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles35.icon }, resolvedLeftIcon) : null, typeof label === "string" ? /* @__PURE__ */ React54__default.default.createElement(
|
|
4550
4520
|
reactNative.Text,
|
|
4551
4521
|
{
|
|
4552
4522
|
style: [styles35.labelText, { color: colors.foregroundMuted, fontFamily: weightMap[labelWeight] }, labelStyle],
|
|
4553
4523
|
allowFontScaling: true
|
|
4554
4524
|
},
|
|
4555
4525
|
label
|
|
4556
|
-
) : label), separatorStyle ? /* @__PURE__ */
|
|
4526
|
+
) : label), separatorStyle ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: separatorStyle }) : /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles35.spacer }), /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles35.valueSide }, typeof value === "string" ? /* @__PURE__ */ React54__default.default.createElement(
|
|
4557
4527
|
reactNative.Text,
|
|
4558
4528
|
{
|
|
4559
4529
|
style: [styles35.valueText, { color: valueColor ?? colors.foreground }, valueStyle],
|
|
4560
4530
|
allowFontScaling: true
|
|
4561
4531
|
},
|
|
4562
4532
|
value
|
|
4563
|
-
) : value, resolvedRightIcon ? /* @__PURE__ */
|
|
4533
|
+
) : value, resolvedRightIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles35.icon }, resolvedRightIcon) : null));
|
|
4564
4534
|
}
|
|
4565
|
-
var DetailRow =
|
|
4535
|
+
var DetailRow = React54__default.default.memo(DetailRowBase);
|
|
4566
4536
|
var styles35 = reactNative.StyleSheet.create({
|
|
4567
4537
|
row: {
|
|
4568
4538
|
flexDirection: "row",
|
|
@@ -4599,7 +4569,7 @@ var styles35 = reactNative.StyleSheet.create({
|
|
|
4599
4569
|
}
|
|
4600
4570
|
});
|
|
4601
4571
|
function Form({ children, style }) {
|
|
4602
|
-
return /* @__PURE__ */
|
|
4572
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles36.form, style] }, children);
|
|
4603
4573
|
}
|
|
4604
4574
|
function FormField({
|
|
4605
4575
|
children,
|
|
@@ -4611,14 +4581,14 @@ function FormField({
|
|
|
4611
4581
|
errorStyle
|
|
4612
4582
|
}) {
|
|
4613
4583
|
const { colors } = useTheme();
|
|
4614
|
-
return /* @__PURE__ */
|
|
4584
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles36.field, style] }, label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles36.label, { color: colors.foreground }, labelStyle], allowFontScaling: true }, label, required ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: { color: colors.destructive } }, " *") : null) : null, children, error ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles36.error, { color: colors.destructive }, errorStyle], allowFontScaling: true }, error) : null);
|
|
4615
4585
|
}
|
|
4616
4586
|
function FormSection({ children, title, description, style }) {
|
|
4617
4587
|
const { colors } = useTheme();
|
|
4618
|
-
return /* @__PURE__ */
|
|
4588
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles36.section, style] }, title ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles36.sectionHeader }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles36.sectionTitle, { color: colors.foreground }], allowFontScaling: true }, title), description ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles36.sectionDescription, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null) : null, children);
|
|
4619
4589
|
}
|
|
4620
4590
|
function FormFooter({ children, style }) {
|
|
4621
|
-
return /* @__PURE__ */
|
|
4591
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles36.footer, style] }, children);
|
|
4622
4592
|
}
|
|
4623
4593
|
Form.Field = FormField;
|
|
4624
4594
|
Form.Section = FormSection;
|
|
@@ -4667,7 +4637,7 @@ var defaultKeyExtractor = (item, index) => {
|
|
|
4667
4637
|
return id !== void 0 ? String(id) : String(index);
|
|
4668
4638
|
};
|
|
4669
4639
|
function VirtualListInner({ itemHeight, keyExtractor, renderItem, ...props }, ref) {
|
|
4670
|
-
const getItemLayout =
|
|
4640
|
+
const getItemLayout = React54.useCallback(
|
|
4671
4641
|
(_data, index) => ({
|
|
4672
4642
|
length: itemHeight ?? 0,
|
|
4673
4643
|
offset: (itemHeight ?? 0) * index,
|
|
@@ -4675,7 +4645,7 @@ function VirtualListInner({ itemHeight, keyExtractor, renderItem, ...props }, re
|
|
|
4675
4645
|
}),
|
|
4676
4646
|
[itemHeight]
|
|
4677
4647
|
);
|
|
4678
|
-
return /* @__PURE__ */
|
|
4648
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
4679
4649
|
reactNative.FlatList,
|
|
4680
4650
|
{
|
|
4681
4651
|
ref,
|
|
@@ -4687,9 +4657,9 @@ function VirtualListInner({ itemHeight, keyExtractor, renderItem, ...props }, re
|
|
|
4687
4657
|
}
|
|
4688
4658
|
);
|
|
4689
4659
|
}
|
|
4690
|
-
var VirtualList =
|
|
4660
|
+
var VirtualList = React54__default.default.forwardRef(VirtualListInner);
|
|
4691
4661
|
function RetrayProvider({ children, theme, colorScheme = "system" }) {
|
|
4692
|
-
return /* @__PURE__ */
|
|
4662
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNativeSafeAreaContext.SafeAreaProvider, { initialMetrics: reactNativeSafeAreaContext.initialWindowMetrics }, /* @__PURE__ */ React54__default.default.createElement(reactNativeGestureHandler.GestureHandlerRootView, { style: styles37.root }, /* @__PURE__ */ React54__default.default.createElement(ThemeProvider, { theme, colorScheme }, /* @__PURE__ */ React54__default.default.createElement(bottomSheet.BottomSheetModalProvider, null, /* @__PURE__ */ React54__default.default.createElement(ToastProvider, null, children)))));
|
|
4693
4663
|
}
|
|
4694
4664
|
var styles37 = reactNative.StyleSheet.create({
|
|
4695
4665
|
root: { flex: 1 }
|
|
@@ -4701,7 +4671,7 @@ function DefaultErrorFallback({
|
|
|
4701
4671
|
message
|
|
4702
4672
|
}) {
|
|
4703
4673
|
const { colors } = useTheme();
|
|
4704
|
-
return /* @__PURE__ */
|
|
4674
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles38.container, { backgroundColor: colors.background }], accessibilityRole: "alert" }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles38.iconCircle, { backgroundColor: colors.destructiveTint }] }, renderIcon("alert-triangle", ms(28), colors.destructive)), /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles38.title, { color: colors.foreground }], allowFontScaling: true }, title), /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles38.message, { color: colors.foregroundMuted }], allowFontScaling: true }, message ?? error.message ?? "An unexpected error occurred."), /* @__PURE__ */ React54__default.default.createElement(
|
|
4705
4675
|
reactNative.TouchableOpacity,
|
|
4706
4676
|
{
|
|
4707
4677
|
style: [styles38.button, { backgroundColor: colors.primary }],
|
|
@@ -4714,10 +4684,10 @@ function DefaultErrorFallback({
|
|
|
4714
4684
|
accessibilityRole: "button",
|
|
4715
4685
|
accessibilityLabel: "Try again"
|
|
4716
4686
|
},
|
|
4717
|
-
/* @__PURE__ */
|
|
4687
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles38.buttonLabel, { color: colors.primaryForeground }], allowFontScaling: true }, "Try again")
|
|
4718
4688
|
));
|
|
4719
4689
|
}
|
|
4720
|
-
var ErrorBoundary = class extends
|
|
4690
|
+
var ErrorBoundary = class extends React54__default.default.Component {
|
|
4721
4691
|
constructor() {
|
|
4722
4692
|
super(...arguments);
|
|
4723
4693
|
this.state = { error: null };
|
|
@@ -4741,7 +4711,7 @@ var ErrorBoundary = class extends React25__default.default.Component {
|
|
|
4741
4711
|
if (fallback !== void 0) {
|
|
4742
4712
|
return fallback;
|
|
4743
4713
|
}
|
|
4744
|
-
return /* @__PURE__ */
|
|
4714
|
+
return /* @__PURE__ */ React54__default.default.createElement(DefaultErrorFallback, { error, reset: this.reset, title, message });
|
|
4745
4715
|
}
|
|
4746
4716
|
return this.props.children;
|
|
4747
4717
|
}
|
|
@@ -4790,20 +4760,20 @@ var styles38 = reactNative.StyleSheet.create({
|
|
|
4790
4760
|
});
|
|
4791
4761
|
function Dot({ active, size, activeColor, inactiveColor, onPress, index, total }) {
|
|
4792
4762
|
const progress = Animated12.useSharedValue(active ? 1 : 0);
|
|
4793
|
-
|
|
4763
|
+
React54.useEffect(() => {
|
|
4794
4764
|
progress.value = Animated12.withSpring(active ? 1 : 0, SPRINGS.glide);
|
|
4795
4765
|
}, [active, progress]);
|
|
4796
4766
|
const animatedStyle = Animated12.useAnimatedStyle(() => ({
|
|
4797
4767
|
width: size + progress.value * size * 1.5,
|
|
4798
4768
|
backgroundColor: Animated12.interpolateColor(progress.value, [0, 1], [inactiveColor, activeColor])
|
|
4799
4769
|
}));
|
|
4800
|
-
const dot = /* @__PURE__ */
|
|
4770
|
+
const dot = /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [{ height: size, borderRadius: size / 2 }, animatedStyle] });
|
|
4801
4771
|
if (!onPress) return dot;
|
|
4802
4772
|
const handlePress = () => {
|
|
4803
4773
|
selectionAsync();
|
|
4804
4774
|
onPress();
|
|
4805
4775
|
};
|
|
4806
|
-
return /* @__PURE__ */
|
|
4776
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
4807
4777
|
reactNative.TouchableOpacity,
|
|
4808
4778
|
{
|
|
4809
4779
|
onPress: handlePress,
|
|
@@ -4852,14 +4822,14 @@ function PagerDots({
|
|
|
4852
4822
|
onDotPress(activeIndex + 1);
|
|
4853
4823
|
}
|
|
4854
4824
|
};
|
|
4855
|
-
return /* @__PURE__ */
|
|
4825
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
4856
4826
|
reactNative.View,
|
|
4857
4827
|
{
|
|
4858
4828
|
style: [styles39.container, { gap: s(spacing) }, style],
|
|
4859
4829
|
accessibilityRole: "adjustable",
|
|
4860
4830
|
accessibilityLabel: `Page ${activeIndex + 1} of ${count}`
|
|
4861
4831
|
},
|
|
4862
|
-
hasControls && /* @__PURE__ */
|
|
4832
|
+
hasControls && /* @__PURE__ */ React54__default.default.createElement(
|
|
4863
4833
|
reactNative.TouchableOpacity,
|
|
4864
4834
|
{
|
|
4865
4835
|
onPress: handlePrevious,
|
|
@@ -4873,7 +4843,7 @@ function PagerDots({
|
|
|
4873
4843
|
},
|
|
4874
4844
|
renderIcon("chevron-left", s(18), canGoPrev ? colors.foreground : colors.foregroundMuted)
|
|
4875
4845
|
),
|
|
4876
|
-
/* @__PURE__ */
|
|
4846
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles39.dotsRow, { gap: s(spacing) }] }, Array.from({ length: count }).map((_, i) => /* @__PURE__ */ React54__default.default.createElement(
|
|
4877
4847
|
Dot,
|
|
4878
4848
|
{
|
|
4879
4849
|
key: i,
|
|
@@ -4886,7 +4856,7 @@ function PagerDots({
|
|
|
4886
4856
|
onPress: onDotPress ? () => onDotPress(i) : void 0
|
|
4887
4857
|
}
|
|
4888
4858
|
))),
|
|
4889
|
-
hasControls && /* @__PURE__ */
|
|
4859
|
+
hasControls && /* @__PURE__ */ React54__default.default.createElement(
|
|
4890
4860
|
reactNative.TouchableOpacity,
|
|
4891
4861
|
{
|
|
4892
4862
|
onPress: handleNext,
|
|
@@ -4937,7 +4907,7 @@ function AppHeader({
|
|
|
4937
4907
|
const { width } = reactNative.useWindowDimensions();
|
|
4938
4908
|
const isWide = width >= BREAKPOINTS.wide;
|
|
4939
4909
|
const centered = titleAlign === "center" || titleAlign === "auto" && isWide;
|
|
4940
|
-
const leftNode = left ?? (onBack ? /* @__PURE__ */
|
|
4910
|
+
const leftNode = left ?? (onBack ? /* @__PURE__ */ React54__default.default.createElement(
|
|
4941
4911
|
IconButton,
|
|
4942
4912
|
{
|
|
4943
4913
|
iconName: backIconName,
|
|
@@ -4947,7 +4917,7 @@ function AppHeader({
|
|
|
4947
4917
|
accessibilityLabel: "Go back"
|
|
4948
4918
|
}
|
|
4949
4919
|
) : null);
|
|
4950
|
-
const titleBlock = /* @__PURE__ */
|
|
4920
|
+
const titleBlock = /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles40.titleBlock, centered && styles40.titleBlockCentered], pointerEvents: "none" }, title ? /* @__PURE__ */ React54__default.default.createElement(
|
|
4951
4921
|
reactNative.Text,
|
|
4952
4922
|
{
|
|
4953
4923
|
style: [styles40.title, { color: colors.foreground }, centered && styles40.textCentered],
|
|
@@ -4956,7 +4926,7 @@ function AppHeader({
|
|
|
4956
4926
|
accessibilityRole: "header"
|
|
4957
4927
|
},
|
|
4958
4928
|
title
|
|
4959
|
-
) : null, subtitle ? /* @__PURE__ */
|
|
4929
|
+
) : null, subtitle ? /* @__PURE__ */ React54__default.default.createElement(
|
|
4960
4930
|
reactNative.Text,
|
|
4961
4931
|
{
|
|
4962
4932
|
style: [styles40.subtitle, { color: colors.foregroundMuted }, centered && styles40.textCentered],
|
|
@@ -4965,7 +4935,7 @@ function AppHeader({
|
|
|
4965
4935
|
},
|
|
4966
4936
|
subtitle
|
|
4967
4937
|
) : null);
|
|
4968
|
-
return /* @__PURE__ */
|
|
4938
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
4969
4939
|
reactNative.View,
|
|
4970
4940
|
{
|
|
4971
4941
|
style: [
|
|
@@ -4979,7 +4949,7 @@ function AppHeader({
|
|
|
4979
4949
|
style
|
|
4980
4950
|
]
|
|
4981
4951
|
},
|
|
4982
|
-
/* @__PURE__ */
|
|
4952
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles40.bar }, centered ? /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: reactNative.StyleSheet.absoluteFill }, titleBlock), /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles40.side }, leftNode), /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles40.side, styles40.sideRight] }, right)) : /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles40.side }, leftNode), titleBlock, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles40.side, styles40.sideRight] }, right)))
|
|
4983
4953
|
);
|
|
4984
4954
|
}
|
|
4985
4955
|
var styles40 = reactNative.StyleSheet.create({
|
|
@@ -5036,7 +5006,7 @@ function Cell({ item, selected, width, onPress }) {
|
|
|
5036
5006
|
});
|
|
5037
5007
|
const iconColor = selected ? colors.primary : colors.foregroundSubtle;
|
|
5038
5008
|
const iconNode = item.icon ?? (item.iconName ? renderIcon(item.iconName, ms(24), iconColor) : null);
|
|
5039
|
-
return /* @__PURE__ */
|
|
5009
|
+
return /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [{ width }, animatedStyle] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
5040
5010
|
reactNative.TouchableOpacity,
|
|
5041
5011
|
{
|
|
5042
5012
|
onPress,
|
|
@@ -5059,7 +5029,7 @@ function Cell({ item, selected, width, onPress }) {
|
|
|
5059
5029
|
]
|
|
5060
5030
|
},
|
|
5061
5031
|
iconNode,
|
|
5062
|
-
item.label ? /* @__PURE__ */
|
|
5032
|
+
item.label ? /* @__PURE__ */ React54__default.default.createElement(
|
|
5063
5033
|
reactNative.Text,
|
|
5064
5034
|
{
|
|
5065
5035
|
style: [styles41.label, { color: selected ? colors.primary : colors.foreground }],
|
|
@@ -5080,7 +5050,7 @@ function SelectableGrid({
|
|
|
5080
5050
|
orientation = "grid",
|
|
5081
5051
|
style
|
|
5082
5052
|
}) {
|
|
5083
|
-
const [containerWidth, setContainerWidth] =
|
|
5053
|
+
const [containerWidth, setContainerWidth] = React54.useState(0);
|
|
5084
5054
|
const gapPx = s(gap);
|
|
5085
5055
|
const cellWidth = containerWidth > 0 ? (containerWidth - gapPx * (numColumns - 1)) / numColumns - 0.5 : 0;
|
|
5086
5056
|
const horizCellWidth = s(72);
|
|
@@ -5090,7 +5060,7 @@ function SelectableGrid({
|
|
|
5090
5060
|
onChange(item.value);
|
|
5091
5061
|
};
|
|
5092
5062
|
if (orientation === "horizontal") {
|
|
5093
|
-
return /* @__PURE__ */
|
|
5063
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
5094
5064
|
reactNative.ScrollView,
|
|
5095
5065
|
{
|
|
5096
5066
|
horizontal: true,
|
|
@@ -5098,7 +5068,7 @@ function SelectableGrid({
|
|
|
5098
5068
|
contentContainerStyle: [styles41.horizontal, { gap: gapPx }, style],
|
|
5099
5069
|
accessibilityRole: multiple ? void 0 : "radiogroup"
|
|
5100
5070
|
},
|
|
5101
|
-
items.map((item) => /* @__PURE__ */
|
|
5071
|
+
items.map((item) => /* @__PURE__ */ React54__default.default.createElement(
|
|
5102
5072
|
Cell,
|
|
5103
5073
|
{
|
|
5104
5074
|
key: String(item.value),
|
|
@@ -5110,14 +5080,14 @@ function SelectableGrid({
|
|
|
5110
5080
|
))
|
|
5111
5081
|
);
|
|
5112
5082
|
}
|
|
5113
|
-
return /* @__PURE__ */
|
|
5083
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
5114
5084
|
reactNative.View,
|
|
5115
5085
|
{
|
|
5116
5086
|
style: [styles41.grid, { gap: gapPx }, style],
|
|
5117
5087
|
onLayout: (e) => setContainerWidth(e.nativeEvent.layout.width),
|
|
5118
5088
|
accessibilityRole: multiple ? void 0 : "radiogroup"
|
|
5119
5089
|
},
|
|
5120
|
-
cellWidth > 0 ? items.map((item) => /* @__PURE__ */
|
|
5090
|
+
cellWidth > 0 ? items.map((item) => /* @__PURE__ */ React54__default.default.createElement(
|
|
5121
5091
|
Cell,
|
|
5122
5092
|
{
|
|
5123
5093
|
key: String(item.value),
|
|
@@ -5173,7 +5143,7 @@ function PricingCard({
|
|
|
5173
5143
|
style
|
|
5174
5144
|
}) {
|
|
5175
5145
|
const { colors } = useTheme();
|
|
5176
|
-
return /* @__PURE__ */
|
|
5146
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
5177
5147
|
reactNative.View,
|
|
5178
5148
|
{
|
|
5179
5149
|
style: [
|
|
@@ -5188,14 +5158,14 @@ function PricingCard({
|
|
|
5188
5158
|
],
|
|
5189
5159
|
accessibilityRole: "summary"
|
|
5190
5160
|
},
|
|
5191
|
-
/* @__PURE__ */
|
|
5192
|
-
/* @__PURE__ */
|
|
5193
|
-
description ? /* @__PURE__ */
|
|
5194
|
-
features.length > 0 ? /* @__PURE__ */
|
|
5161
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles42.header }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles42.name, { color: colors.foreground }], allowFontScaling: true }, name), badge ? /* @__PURE__ */ React54__default.default.createElement(Badge, { label: badge, variant: highlighted ? "default" : "secondary", size: "sm" }) : null),
|
|
5162
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles42.priceRow }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles42.price, { color: colors.foreground }], allowFontScaling: true }, price), period ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles42.period, { color: colors.foregroundMuted }], allowFontScaling: true }, period) : null),
|
|
5163
|
+
description ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles42.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null,
|
|
5164
|
+
features.length > 0 ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles42.features }, features.map(normalize).map((f, i) => /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { key: i, style: styles42.featureRow }, renderIcon(
|
|
5195
5165
|
f.included ? "check" : "minus",
|
|
5196
5166
|
ms(16),
|
|
5197
5167
|
f.included ? colors.success : colors.foregroundMuted
|
|
5198
|
-
), /* @__PURE__ */
|
|
5168
|
+
), /* @__PURE__ */ React54__default.default.createElement(
|
|
5199
5169
|
reactNative.Text,
|
|
5200
5170
|
{
|
|
5201
5171
|
style: [
|
|
@@ -5207,7 +5177,7 @@ function PricingCard({
|
|
|
5207
5177
|
},
|
|
5208
5178
|
f.label
|
|
5209
5179
|
)))) : null,
|
|
5210
|
-
ctaLabel ? /* @__PURE__ */
|
|
5180
|
+
ctaLabel ? /* @__PURE__ */ React54__default.default.createElement(
|
|
5211
5181
|
Button,
|
|
5212
5182
|
{
|
|
5213
5183
|
label: ctaLabel,
|
|
@@ -5217,7 +5187,7 @@ function PricingCard({
|
|
|
5217
5187
|
style: styles42.cta
|
|
5218
5188
|
}
|
|
5219
5189
|
) : null,
|
|
5220
|
-
footnote ? /* @__PURE__ */
|
|
5190
|
+
footnote ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles42.footnote, { color: colors.foregroundMuted }], allowFontScaling: true }, footnote) : null
|
|
5221
5191
|
);
|
|
5222
5192
|
}
|
|
5223
5193
|
var styles42 = reactNative.StyleSheet.create({
|
|
@@ -5299,7 +5269,7 @@ function TabBar({
|
|
|
5299
5269
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
5300
5270
|
const resolvedActive = activeColor ?? colors.primary;
|
|
5301
5271
|
const resolvedInactive = inactiveColor ?? colors.foregroundMuted;
|
|
5302
|
-
return /* @__PURE__ */
|
|
5272
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
5303
5273
|
reactNative.View,
|
|
5304
5274
|
{
|
|
5305
5275
|
style: [
|
|
@@ -5319,7 +5289,7 @@ function TabBar({
|
|
|
5319
5289
|
const iconNode = item.icon ?? (item.iconName ? renderIcon(item.iconName, ms(24), tint) : null);
|
|
5320
5290
|
const showBadge = item.badge !== void 0 && item.badge !== false;
|
|
5321
5291
|
const badgeCount = typeof item.badge === "number" ? item.badge : void 0;
|
|
5322
|
-
return /* @__PURE__ */
|
|
5292
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
5323
5293
|
reactNative.TouchableOpacity,
|
|
5324
5294
|
{
|
|
5325
5295
|
key: item.key,
|
|
@@ -5334,7 +5304,7 @@ function TabBar({
|
|
|
5334
5304
|
accessibilityState: { selected: active },
|
|
5335
5305
|
accessibilityLabel: item.label ?? item.key
|
|
5336
5306
|
},
|
|
5337
|
-
/* @__PURE__ */
|
|
5307
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, null, iconNode, showBadge ? /* @__PURE__ */ React54__default.default.createElement(
|
|
5338
5308
|
reactNative.View,
|
|
5339
5309
|
{
|
|
5340
5310
|
style: [
|
|
@@ -5343,9 +5313,9 @@ function TabBar({
|
|
|
5343
5313
|
badgeCount === void 0 && styles43.badgeDot
|
|
5344
5314
|
]
|
|
5345
5315
|
},
|
|
5346
|
-
badgeCount !== void 0 ? /* @__PURE__ */
|
|
5316
|
+
badgeCount !== void 0 ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles43.badgeText, { color: colors.destructiveForeground }], allowFontScaling: false }, badgeCount > 99 ? "99+" : badgeCount) : null
|
|
5347
5317
|
) : null),
|
|
5348
|
-
item.label ? /* @__PURE__ */
|
|
5318
|
+
item.label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles43.label, { color: tint }], numberOfLines: 1, allowFontScaling: true }, item.label) : null
|
|
5349
5319
|
);
|
|
5350
5320
|
})
|
|
5351
5321
|
);
|
|
@@ -5404,7 +5374,7 @@ function ZoomableImage({ source, width, height, onZoomChange }) {
|
|
|
5404
5374
|
const translateY = Animated12.useSharedValue(0);
|
|
5405
5375
|
const savedX = Animated12.useSharedValue(0);
|
|
5406
5376
|
const savedY = Animated12.useSharedValue(0);
|
|
5407
|
-
const reportZoom =
|
|
5377
|
+
const reportZoom = React54.useCallback((zoomed) => onZoomChange(zoomed), [onZoomChange]);
|
|
5408
5378
|
const reset = () => {
|
|
5409
5379
|
"worklet";
|
|
5410
5380
|
scale2.value = Animated12.withTiming(1);
|
|
@@ -5450,17 +5420,17 @@ function ZoomableImage({ source, width, height, onZoomChange }) {
|
|
|
5450
5420
|
{ scale: scale2.value }
|
|
5451
5421
|
]
|
|
5452
5422
|
}));
|
|
5453
|
-
return /* @__PURE__ */
|
|
5423
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNativeGestureHandler.GestureDetector, { gesture: composed }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [{ width, height }, styles44.imageWrap], collapsable: false }, /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [{ width, height }, animatedStyle] }, /* @__PURE__ */ React54__default.default.createElement(reactNative.Image, { source, style: { width, height }, resizeMode: "contain" }))));
|
|
5454
5424
|
}
|
|
5455
5425
|
function ImageViewer({ images, visible, onClose, initialIndex = 0 }) {
|
|
5456
5426
|
const window = reactNative.useWindowDimensions();
|
|
5457
5427
|
const width = window.width > 0 ? window.width : reactNative.Dimensions.get("window").width;
|
|
5458
5428
|
const height = window.height > 0 ? window.height : reactNative.Dimensions.get("window").height;
|
|
5459
5429
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
5460
|
-
const [index, setIndex] =
|
|
5461
|
-
const [pagingEnabled, setPagingEnabled] =
|
|
5462
|
-
const scrollRef =
|
|
5463
|
-
|
|
5430
|
+
const [index, setIndex] = React54.useState(initialIndex);
|
|
5431
|
+
const [pagingEnabled, setPagingEnabled] = React54.useState(true);
|
|
5432
|
+
const scrollRef = React54__default.default.useRef(null);
|
|
5433
|
+
React54__default.default.useEffect(() => {
|
|
5464
5434
|
if (!visible) return;
|
|
5465
5435
|
const handle = requestAnimationFrame(() => {
|
|
5466
5436
|
setIndex(initialIndex);
|
|
@@ -5471,7 +5441,7 @@ function ImageViewer({ images, visible, onClose, initialIndex = 0 }) {
|
|
|
5471
5441
|
}, [visible, initialIndex, width]);
|
|
5472
5442
|
const dragY = Animated12.useSharedValue(0);
|
|
5473
5443
|
const DISMISS_THRESHOLD = height * 0.18;
|
|
5474
|
-
const closeViewer =
|
|
5444
|
+
const closeViewer = React54.useCallback(() => onClose(), [onClose]);
|
|
5475
5445
|
const swipeDown = reactNativeGestureHandler.Gesture.Pan().enabled(pagingEnabled).activeOffsetY(12).failOffsetX([-16, 16]).onUpdate((e) => {
|
|
5476
5446
|
dragY.value = Math.max(0, e.translationY);
|
|
5477
5447
|
}).onEnd((e) => {
|
|
@@ -5481,7 +5451,7 @@ function ImageViewer({ images, visible, onClose, initialIndex = 0 }) {
|
|
|
5481
5451
|
dragY.value = Animated12.withTiming(0);
|
|
5482
5452
|
}
|
|
5483
5453
|
});
|
|
5484
|
-
|
|
5454
|
+
React54__default.default.useEffect(() => {
|
|
5485
5455
|
if (visible) dragY.value = 0;
|
|
5486
5456
|
}, [visible, dragY]);
|
|
5487
5457
|
const dismissStyle = Animated12.useAnimatedStyle(() => ({
|
|
@@ -5498,7 +5468,7 @@ function ImageViewer({ images, visible, onClose, initialIndex = 0 }) {
|
|
|
5498
5468
|
scrollRef.current?.scrollTo({ x: page * width, animated: true });
|
|
5499
5469
|
setIndex(page);
|
|
5500
5470
|
};
|
|
5501
|
-
return /* @__PURE__ */
|
|
5471
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.Modal, { visible, transparent: false, animationType: "fade", onRequestClose: onClose, statusBarTranslucent: true }, /* @__PURE__ */ React54__default.default.createElement(reactNativeGestureHandler.GestureHandlerRootView, { style: styles44.root }, /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [styles44.backdrop, backdropStyle], pointerEvents: "none" }), /* @__PURE__ */ React54__default.default.createElement(Animated12__default.default.View, { style: [styles44.container, dismissStyle] }, /* @__PURE__ */ React54__default.default.createElement(reactNativeGestureHandler.GestureDetector, { gesture: swipeDown }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles44.root, collapsable: false }, /* @__PURE__ */ React54__default.default.createElement(
|
|
5502
5472
|
reactNative.ScrollView,
|
|
5503
5473
|
{
|
|
5504
5474
|
ref: scrollRef,
|
|
@@ -5509,7 +5479,7 @@ function ImageViewer({ images, visible, onClose, initialIndex = 0 }) {
|
|
|
5509
5479
|
onMomentumScrollEnd: onMomentumEnd,
|
|
5510
5480
|
bounces: false
|
|
5511
5481
|
},
|
|
5512
|
-
images.map((source, i) => /* @__PURE__ */
|
|
5482
|
+
images.map((source, i) => /* @__PURE__ */ React54__default.default.createElement(
|
|
5513
5483
|
ZoomableImage,
|
|
5514
5484
|
{
|
|
5515
5485
|
key: i,
|
|
@@ -5519,7 +5489,7 @@ function ImageViewer({ images, visible, onClose, initialIndex = 0 }) {
|
|
|
5519
5489
|
onZoomChange: (zoomed) => setPagingEnabled(!zoomed)
|
|
5520
5490
|
}
|
|
5521
5491
|
))
|
|
5522
|
-
))), /* @__PURE__ */
|
|
5492
|
+
))), /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles44.closeButtonWrapper, { top: insets.top + vs(8) }] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
5523
5493
|
IconButton,
|
|
5524
5494
|
{
|
|
5525
5495
|
iconName: "x",
|
|
@@ -5530,7 +5500,7 @@ function ImageViewer({ images, visible, onClose, initialIndex = 0 }) {
|
|
|
5530
5500
|
onPress: onClose,
|
|
5531
5501
|
accessibilityLabel: "Close"
|
|
5532
5502
|
}
|
|
5533
|
-
)), images.length > 1 ? /* @__PURE__ */
|
|
5503
|
+
)), images.length > 1 ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles44.dots, { bottom: insets.bottom + vs(16) }], pointerEvents: "box-none" }, /* @__PURE__ */ React54__default.default.createElement(
|
|
5534
5504
|
PagerDots,
|
|
5535
5505
|
{
|
|
5536
5506
|
count: images.length,
|
|
@@ -5580,7 +5550,7 @@ function SheetSelectChip({
|
|
|
5580
5550
|
};
|
|
5581
5551
|
const iconColor = selected ? colors.primaryForeground : colors.foreground;
|
|
5582
5552
|
const resolvedIcon = option.iconName ? renderIcon(option.iconName, ms(13), iconColor) : null;
|
|
5583
|
-
return /* @__PURE__ */
|
|
5553
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
5584
5554
|
PressableChip,
|
|
5585
5555
|
{
|
|
5586
5556
|
onPress: option.disabled ? void 0 : handlePress,
|
|
@@ -5590,7 +5560,7 @@ function SheetSelectChip({
|
|
|
5590
5560
|
accessibilityLabel: option.disabled ? `${option.label}, unavailable` : option.label,
|
|
5591
5561
|
accessibilityState: { selected, disabled: option.disabled }
|
|
5592
5562
|
},
|
|
5593
|
-
/* @__PURE__ */
|
|
5563
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
5594
5564
|
reactNativeEase.EaseView,
|
|
5595
5565
|
{
|
|
5596
5566
|
style: [styles45.chip, option.disabled && styles45.chipDisabled],
|
|
@@ -5600,8 +5570,8 @@ function SheetSelectChip({
|
|
|
5600
5570
|
},
|
|
5601
5571
|
transition: COLOR_TRANSITION
|
|
5602
5572
|
},
|
|
5603
|
-
resolvedIcon ? /* @__PURE__ */
|
|
5604
|
-
/* @__PURE__ */
|
|
5573
|
+
resolvedIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles45.chipIcon }, resolvedIcon) : null,
|
|
5574
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
5605
5575
|
reactNative.Text,
|
|
5606
5576
|
{
|
|
5607
5577
|
style: [styles45.chipLabel, { color: selected ? colors.primaryForeground : colors.foreground }],
|
|
@@ -5638,7 +5608,7 @@ function SheetSelect({
|
|
|
5638
5608
|
const newArray = alreadySelected ? currentArray.filter((v) => v !== optionValue) : [...currentArray, optionValue];
|
|
5639
5609
|
onValueChange?.(newArray);
|
|
5640
5610
|
};
|
|
5641
|
-
const chips = options.map((opt) => /* @__PURE__ */
|
|
5611
|
+
const chips = options.map((opt) => /* @__PURE__ */ React54__default.default.createElement(
|
|
5642
5612
|
SheetSelectChip,
|
|
5643
5613
|
{
|
|
5644
5614
|
key: opt.value,
|
|
@@ -5647,7 +5617,7 @@ function SheetSelect({
|
|
|
5647
5617
|
onPress: () => handlePress(opt.value)
|
|
5648
5618
|
}
|
|
5649
5619
|
));
|
|
5650
|
-
return /* @__PURE__ */
|
|
5620
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles45.container, style], accessibilityLabel }, label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles45.label, { color: colors.foreground }], allowFontScaling: true }, label) : null, wrap ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles45.wrapContainer }, chips) : /* @__PURE__ */ React54__default.default.createElement(
|
|
5651
5621
|
reactNative.ScrollView,
|
|
5652
5622
|
{
|
|
5653
5623
|
horizontal: true,
|
|
@@ -5655,7 +5625,7 @@ function SheetSelect({
|
|
|
5655
5625
|
contentContainerStyle: styles45.scrollContent
|
|
5656
5626
|
},
|
|
5657
5627
|
chips
|
|
5658
|
-
), error ? /* @__PURE__ */
|
|
5628
|
+
), error ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles45.error, { color: colors.destructive }], allowFontScaling: true, accessibilityLiveRegion: "polite" }, error) : null);
|
|
5659
5629
|
}
|
|
5660
5630
|
var styles45 = reactNative.StyleSheet.create({
|
|
5661
5631
|
container: {
|
|
@@ -5758,7 +5728,7 @@ function ImageUpload({
|
|
|
5758
5728
|
backgroundColor: value ? "transparent" : colors.surface,
|
|
5759
5729
|
overflow: "hidden"
|
|
5760
5730
|
};
|
|
5761
|
-
return /* @__PURE__ */
|
|
5731
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
5762
5732
|
PressableCard,
|
|
5763
5733
|
{
|
|
5764
5734
|
onPress: handlePress,
|
|
@@ -5770,14 +5740,14 @@ function ImageUpload({
|
|
|
5770
5740
|
accessibilityState: { disabled: disabled || loading },
|
|
5771
5741
|
style: [containerStyle, style]
|
|
5772
5742
|
},
|
|
5773
|
-
value ? /* @__PURE__ */
|
|
5743
|
+
value ? /* @__PURE__ */ React54__default.default.createElement(
|
|
5774
5744
|
reactNative.Image,
|
|
5775
5745
|
{
|
|
5776
5746
|
source: { uri: value },
|
|
5777
5747
|
style: [reactNative.StyleSheet.absoluteFillObject, { borderRadius }],
|
|
5778
5748
|
resizeMode
|
|
5779
5749
|
}
|
|
5780
|
-
) : /* @__PURE__ */
|
|
5750
|
+
) : /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles46.placeholder }, /* @__PURE__ */ React54__default.default.createElement(vectorIcons.Feather, { name: "image", size: ms(28), color: colors.foregroundMuted }), showPlaceholderText ? /* @__PURE__ */ React54__default.default.createElement(
|
|
5781
5751
|
reactNative.Text,
|
|
5782
5752
|
{
|
|
5783
5753
|
style: [styles46.placeholderText, { color: colors.foregroundMuted }],
|
|
@@ -5786,8 +5756,8 @@ function ImageUpload({
|
|
|
5786
5756
|
},
|
|
5787
5757
|
placeholder
|
|
5788
5758
|
) : null),
|
|
5789
|
-
loading ? /* @__PURE__ */
|
|
5790
|
-
value && !loading ? /* @__PURE__ */
|
|
5759
|
+
loading ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles46.loadingOverlay, { backgroundColor: colors.overlay }] }, /* @__PURE__ */ React54__default.default.createElement(Spinner, { size: "md" })) : null,
|
|
5760
|
+
value && !loading ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles46.editBadge, pointerEvents: "none" }, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles46.editBadgeInner, { backgroundColor: colors.overlay }] }, /* @__PURE__ */ React54__default.default.createElement(vectorIcons.Feather, { name: "edit-2", size: ms(12), color: "#fff" }))) : null
|
|
5791
5761
|
);
|
|
5792
5762
|
}
|
|
5793
5763
|
var styles46 = reactNative.StyleSheet.create({
|
|
@@ -5823,6 +5793,7 @@ var styles46 = reactNative.StyleSheet.create({
|
|
|
5823
5793
|
|
|
5824
5794
|
// src/utils/curatedIcons.ts
|
|
5825
5795
|
var CURATED_ICONS = [
|
|
5796
|
+
// ─── Food ────────────────────────────────────────────────────────────────────
|
|
5826
5797
|
{
|
|
5827
5798
|
name: "food",
|
|
5828
5799
|
label: "Food",
|
|
@@ -5830,97 +5801,178 @@ var CURATED_ICONS = [
|
|
|
5830
5801
|
categoryIcon: "coffee",
|
|
5831
5802
|
icons: [
|
|
5832
5803
|
// Bebidas
|
|
5804
|
+
"beer-outline",
|
|
5805
|
+
"wine-outline",
|
|
5806
|
+
"cafe-outline",
|
|
5807
|
+
"water-outline",
|
|
5833
5808
|
"coffee",
|
|
5834
|
-
|
|
5835
|
-
"
|
|
5836
|
-
"
|
|
5837
|
-
"
|
|
5838
|
-
"
|
|
5839
|
-
"
|
|
5840
|
-
|
|
5841
|
-
|
|
5842
|
-
"
|
|
5843
|
-
"
|
|
5844
|
-
"
|
|
5845
|
-
"
|
|
5846
|
-
"
|
|
5847
|
-
"
|
|
5848
|
-
"
|
|
5849
|
-
"
|
|
5850
|
-
"
|
|
5851
|
-
"
|
|
5852
|
-
"
|
|
5853
|
-
|
|
5854
|
-
"
|
|
5809
|
+
// Comida
|
|
5810
|
+
"pizza-outline",
|
|
5811
|
+
"fast-food-outline",
|
|
5812
|
+
"fish-outline",
|
|
5813
|
+
"ice-cream-outline",
|
|
5814
|
+
"egg-outline",
|
|
5815
|
+
"nutrition-outline",
|
|
5816
|
+
// Servicio y operación
|
|
5817
|
+
"restaurant-outline",
|
|
5818
|
+
"server-outline",
|
|
5819
|
+
"menu-outline",
|
|
5820
|
+
"basket-outline",
|
|
5821
|
+
"receipt-outline",
|
|
5822
|
+
"pricetag-outline",
|
|
5823
|
+
"pricetags-outline",
|
|
5824
|
+
"reorder-four-outline",
|
|
5825
|
+
"reorder-three-outline",
|
|
5826
|
+
"cart-outline",
|
|
5827
|
+
"cash-outline",
|
|
5828
|
+
"wallet-outline",
|
|
5829
|
+
"storefront-outline",
|
|
5855
5830
|
// Delivery / pedidos
|
|
5831
|
+
"truck",
|
|
5832
|
+
"package",
|
|
5856
5833
|
"shopping-bag",
|
|
5834
|
+
"shopping-cart",
|
|
5835
|
+
// Ubicación y reserva
|
|
5836
|
+
"map-pin",
|
|
5837
|
+
"home",
|
|
5838
|
+
"calendar",
|
|
5857
5839
|
"clock",
|
|
5840
|
+
// Experiencia
|
|
5858
5841
|
"star",
|
|
5859
5842
|
"heart",
|
|
5860
|
-
"
|
|
5861
|
-
"
|
|
5843
|
+
"bookmark",
|
|
5844
|
+
"thumbs-up",
|
|
5845
|
+
"check",
|
|
5846
|
+
"gift"
|
|
5862
5847
|
]
|
|
5863
5848
|
},
|
|
5849
|
+
// ─── Sports ──────────────────────────────────────────────────────────────────
|
|
5864
5850
|
{
|
|
5865
5851
|
name: "sports",
|
|
5866
5852
|
label: "Sports",
|
|
5867
5853
|
labelEs: "Deportes",
|
|
5868
|
-
categoryIcon: "
|
|
5854
|
+
categoryIcon: "trophy-outline",
|
|
5869
5855
|
icons: [
|
|
5870
|
-
// Deportes
|
|
5871
|
-
"
|
|
5872
|
-
"
|
|
5873
|
-
"
|
|
5874
|
-
"bicycle",
|
|
5875
|
-
"
|
|
5876
|
-
"
|
|
5877
|
-
|
|
5878
|
-
"
|
|
5856
|
+
// Deportes
|
|
5857
|
+
"american-football-outline",
|
|
5858
|
+
"baseball-outline",
|
|
5859
|
+
"basketball-outline",
|
|
5860
|
+
"bicycle-outline",
|
|
5861
|
+
"football-outline",
|
|
5862
|
+
"tennisball-outline",
|
|
5863
|
+
"golf-outline",
|
|
5864
|
+
"fitness-outline",
|
|
5865
|
+
"car-sport-outline",
|
|
5866
|
+
"game-controller-outline",
|
|
5867
|
+
// Competición y logros
|
|
5868
|
+
"trophy-outline",
|
|
5869
|
+
"medal-outline",
|
|
5879
5870
|
"award",
|
|
5871
|
+
"target",
|
|
5880
5872
|
"flag",
|
|
5881
|
-
"
|
|
5873
|
+
"crosshair",
|
|
5874
|
+
// Outdoor
|
|
5875
|
+
"compass-outline",
|
|
5876
|
+
"map-outline",
|
|
5877
|
+
"trail-sign-outline",
|
|
5878
|
+
"bonfire-outline",
|
|
5879
|
+
"snow-outline",
|
|
5880
|
+
"flame-outline",
|
|
5881
|
+
"sun",
|
|
5882
|
+
"droplet",
|
|
5883
|
+
"wind",
|
|
5884
|
+
"map",
|
|
5885
|
+
"map-pin",
|
|
5886
|
+
"navigation",
|
|
5887
|
+
"navigation-2",
|
|
5888
|
+
// Rendimiento y métricas
|
|
5889
|
+
"stats-chart-outline",
|
|
5890
|
+
"trending-up-outline",
|
|
5891
|
+
"trending-down-outline",
|
|
5892
|
+
"bar-chart-outline",
|
|
5893
|
+
"pie-chart-outline",
|
|
5894
|
+
"analytics-outline",
|
|
5895
|
+
"activity",
|
|
5882
5896
|
"zap",
|
|
5883
|
-
|
|
5884
|
-
"
|
|
5897
|
+
"watch",
|
|
5898
|
+
"trending-up",
|
|
5899
|
+
"trending-down",
|
|
5900
|
+
"bar-chart-2",
|
|
5885
5901
|
"clock",
|
|
5886
|
-
"
|
|
5887
|
-
"sun",
|
|
5888
|
-
"user",
|
|
5889
|
-
"users"
|
|
5902
|
+
"calendar"
|
|
5890
5903
|
]
|
|
5891
5904
|
},
|
|
5905
|
+
// ─── Business ────────────────────────────────────────────────────────────────
|
|
5892
5906
|
{
|
|
5893
5907
|
name: "business",
|
|
5894
5908
|
label: "Business",
|
|
5895
5909
|
labelEs: "Negocios",
|
|
5896
5910
|
categoryIcon: "briefcase",
|
|
5897
5911
|
icons: [
|
|
5912
|
+
// Empresa
|
|
5913
|
+
"briefcase",
|
|
5914
|
+
"users",
|
|
5915
|
+
"user",
|
|
5916
|
+
"user-plus",
|
|
5917
|
+
"user-check",
|
|
5918
|
+
"user-x",
|
|
5919
|
+
"briefcase-outline",
|
|
5920
|
+
"business-outline",
|
|
5921
|
+
"id-card-outline",
|
|
5922
|
+
// Comercio y operación
|
|
5898
5923
|
"shopping-cart",
|
|
5899
5924
|
"shopping-bag",
|
|
5900
5925
|
"credit-card",
|
|
5901
5926
|
"dollar-sign",
|
|
5902
5927
|
"percent",
|
|
5903
|
-
"
|
|
5928
|
+
"tag",
|
|
5929
|
+
"gift",
|
|
5930
|
+
"cart-outline",
|
|
5931
|
+
"cash-outline",
|
|
5932
|
+
"wallet-outline",
|
|
5933
|
+
"storefront-outline",
|
|
5934
|
+
"pricetag-outline",
|
|
5935
|
+
"pricetags-outline",
|
|
5936
|
+
"receipt-outline",
|
|
5937
|
+
"card-outline",
|
|
5938
|
+
// Logística
|
|
5904
5939
|
"truck",
|
|
5905
5940
|
"package",
|
|
5906
|
-
|
|
5941
|
+
// Documentos
|
|
5942
|
+
"file",
|
|
5943
|
+
"file-text",
|
|
5944
|
+
"file-plus",
|
|
5945
|
+
"folder",
|
|
5946
|
+
"paperclip",
|
|
5947
|
+
"document-outline",
|
|
5948
|
+
"document-text-outline",
|
|
5949
|
+
"documents-outline",
|
|
5950
|
+
"folder-outline",
|
|
5951
|
+
// Comunicación de negocio
|
|
5952
|
+
"mail",
|
|
5953
|
+
"phone",
|
|
5954
|
+
"phone-call",
|
|
5955
|
+
"send",
|
|
5956
|
+
"message-square",
|
|
5957
|
+
"mail-outline",
|
|
5958
|
+
// Análisis
|
|
5907
5959
|
"bar-chart",
|
|
5908
5960
|
"bar-chart-2",
|
|
5909
5961
|
"pie-chart",
|
|
5910
5962
|
"trending-up",
|
|
5911
5963
|
"trending-down",
|
|
5912
5964
|
"activity",
|
|
5913
|
-
"
|
|
5914
|
-
"bookmark",
|
|
5915
|
-
"pocket"
|
|
5965
|
+
"globe"
|
|
5916
5966
|
]
|
|
5917
5967
|
},
|
|
5968
|
+
// ─── Objects ─────────────────────────────────────────────────────────────────
|
|
5918
5969
|
{
|
|
5919
5970
|
name: "objects",
|
|
5920
5971
|
label: "Objects",
|
|
5921
5972
|
labelEs: "Objetos",
|
|
5922
|
-
categoryIcon: "
|
|
5973
|
+
categoryIcon: "package",
|
|
5923
5974
|
icons: [
|
|
5975
|
+
// Archivos y carpetas
|
|
5924
5976
|
"file",
|
|
5925
5977
|
"file-text",
|
|
5926
5978
|
"file-plus",
|
|
@@ -5928,108 +5980,193 @@ var CURATED_ICONS = [
|
|
|
5928
5980
|
"folder",
|
|
5929
5981
|
"folder-plus",
|
|
5930
5982
|
"folder-minus",
|
|
5983
|
+
"archive",
|
|
5984
|
+
"save",
|
|
5985
|
+
"paperclip",
|
|
5986
|
+
"document-outline",
|
|
5987
|
+
"document-text-outline",
|
|
5988
|
+
"documents-outline",
|
|
5989
|
+
"folder-outline",
|
|
5990
|
+
"folder-open-outline",
|
|
5991
|
+
"file-tray-outline",
|
|
5992
|
+
"file-tray-full-outline",
|
|
5993
|
+
"file-tray-stacked-outline",
|
|
5994
|
+
"archive-outline",
|
|
5995
|
+
"save-outline",
|
|
5996
|
+
// Seguridad
|
|
5931
5997
|
"lock",
|
|
5932
5998
|
"unlock",
|
|
5933
5999
|
"key",
|
|
5934
6000
|
"shield",
|
|
5935
6001
|
"shield-off",
|
|
5936
|
-
"
|
|
5937
|
-
"
|
|
5938
|
-
"
|
|
5939
|
-
"
|
|
5940
|
-
"
|
|
5941
|
-
|
|
5942
|
-
"
|
|
6002
|
+
"lock-closed-outline",
|
|
6003
|
+
"lock-open-outline",
|
|
6004
|
+
"key-outline",
|
|
6005
|
+
"shield-outline",
|
|
6006
|
+
"shield-checkmark-outline",
|
|
6007
|
+
// Dispositivos
|
|
6008
|
+
"monitor",
|
|
6009
|
+
"tablet",
|
|
6010
|
+
"smartphone",
|
|
6011
|
+
"tv",
|
|
5943
6012
|
"server",
|
|
6013
|
+
"database",
|
|
5944
6014
|
"hard-drive",
|
|
5945
6015
|
"cpu",
|
|
5946
|
-
"
|
|
5947
|
-
"
|
|
5948
|
-
"
|
|
5949
|
-
"
|
|
6016
|
+
"radio",
|
|
6017
|
+
"laptop-outline",
|
|
6018
|
+
"phone-portrait-outline",
|
|
6019
|
+
"phone-landscape-outline",
|
|
6020
|
+
"tablet-landscape-outline",
|
|
6021
|
+
"tablet-portrait-outline",
|
|
6022
|
+
"tv-outline",
|
|
6023
|
+
"server-outline",
|
|
6024
|
+
"hardware-chip-outline",
|
|
6025
|
+
"watch-outline"
|
|
5950
6026
|
]
|
|
5951
6027
|
},
|
|
6028
|
+
// ─── Status ──────────────────────────────────────────────────────────────────
|
|
5952
6029
|
{
|
|
5953
6030
|
name: "status",
|
|
5954
6031
|
label: "Status",
|
|
5955
6032
|
labelEs: "Estado",
|
|
5956
6033
|
categoryIcon: "alert-circle",
|
|
5957
6034
|
icons: [
|
|
6035
|
+
// Alertas
|
|
5958
6036
|
"alert-circle",
|
|
5959
6037
|
"alert-triangle",
|
|
5960
6038
|
"alert-octagon",
|
|
5961
6039
|
"info",
|
|
5962
6040
|
"help-circle",
|
|
6041
|
+
"alert-circle-outline",
|
|
6042
|
+
"alert-outline",
|
|
6043
|
+
"information-circle-outline",
|
|
6044
|
+
"help-circle-outline",
|
|
6045
|
+
// Notificaciones
|
|
5963
6046
|
"bell",
|
|
5964
6047
|
"bell-off",
|
|
6048
|
+
"notifications-outline",
|
|
6049
|
+
"notifications-off-outline",
|
|
6050
|
+
"notifications-circle-outline",
|
|
6051
|
+
// Visibilidad
|
|
5965
6052
|
"eye",
|
|
5966
6053
|
"eye-off",
|
|
6054
|
+
"eye-outline",
|
|
6055
|
+
"eye-off-outline",
|
|
6056
|
+
// Indicadores
|
|
5967
6057
|
"flag",
|
|
5968
6058
|
"zap",
|
|
5969
6059
|
"zap-off",
|
|
5970
6060
|
"loader",
|
|
5971
|
-
"
|
|
5972
|
-
"
|
|
6061
|
+
"activity",
|
|
6062
|
+
"flash-outline",
|
|
6063
|
+
"bulb-outline",
|
|
6064
|
+
// Éxito / error / advertencia
|
|
6065
|
+
"check",
|
|
6066
|
+
"check-circle",
|
|
6067
|
+
"x",
|
|
6068
|
+
"x-circle",
|
|
6069
|
+
"x-octagon",
|
|
6070
|
+
"slash",
|
|
6071
|
+
"plus-circle",
|
|
6072
|
+
"minus-circle",
|
|
6073
|
+
"checkmark-circle-outline",
|
|
6074
|
+
"checkmark-done-circle-outline",
|
|
6075
|
+
"close-circle-outline",
|
|
6076
|
+
"add-circle-outline",
|
|
6077
|
+
"remove-circle-outline",
|
|
6078
|
+
// Estados de proceso
|
|
6079
|
+
"play-circle",
|
|
6080
|
+
"pause-circle",
|
|
6081
|
+
"stop-circle",
|
|
6082
|
+
"play-circle-outline",
|
|
6083
|
+
"pause-circle-outline",
|
|
6084
|
+
"stop-circle-outline"
|
|
5973
6085
|
]
|
|
5974
6086
|
},
|
|
6087
|
+
// ─── Actions ─────────────────────────────────────────────────────────────────
|
|
5975
6088
|
{
|
|
5976
6089
|
name: "actions",
|
|
5977
6090
|
label: "Actions",
|
|
5978
6091
|
labelEs: "Acciones",
|
|
5979
6092
|
categoryIcon: "edit-3",
|
|
5980
6093
|
icons: [
|
|
6094
|
+
// Crear / añadir
|
|
5981
6095
|
"plus",
|
|
5982
6096
|
"plus-circle",
|
|
5983
6097
|
"plus-square",
|
|
6098
|
+
"add-outline",
|
|
6099
|
+
"add-circle-outline",
|
|
6100
|
+
// Eliminar / quitar
|
|
5984
6101
|
"minus",
|
|
5985
6102
|
"minus-circle",
|
|
5986
6103
|
"minus-square",
|
|
6104
|
+
"trash",
|
|
6105
|
+
"trash-2",
|
|
5987
6106
|
"x",
|
|
5988
6107
|
"x-circle",
|
|
5989
6108
|
"x-square",
|
|
5990
6109
|
"x-octagon",
|
|
6110
|
+
"slash",
|
|
6111
|
+
"trash-outline",
|
|
6112
|
+
"trash-bin-outline",
|
|
6113
|
+
"remove-outline",
|
|
6114
|
+
"remove-circle-outline",
|
|
6115
|
+
"close-circle-outline",
|
|
6116
|
+
"backspace-outline",
|
|
6117
|
+
"cut-outline",
|
|
6118
|
+
// Confirmar
|
|
5991
6119
|
"check",
|
|
5992
6120
|
"check-circle",
|
|
5993
6121
|
"check-square",
|
|
6122
|
+
"checkmark-circle-outline",
|
|
6123
|
+
// Editar
|
|
5994
6124
|
"edit",
|
|
5995
6125
|
"edit-2",
|
|
5996
6126
|
"edit-3",
|
|
5997
|
-
"trash",
|
|
5998
|
-
"trash-2",
|
|
5999
6127
|
"copy",
|
|
6000
6128
|
"clipboard",
|
|
6001
6129
|
"scissors",
|
|
6130
|
+
"create-outline",
|
|
6131
|
+
"pencil-outline",
|
|
6132
|
+
"duplicate-outline",
|
|
6133
|
+
"copy-outline",
|
|
6134
|
+
"clipboard-outline",
|
|
6135
|
+
// Mover datos
|
|
6002
6136
|
"download",
|
|
6003
6137
|
"download-cloud",
|
|
6004
6138
|
"upload",
|
|
6005
6139
|
"upload-cloud",
|
|
6006
|
-
"
|
|
6007
|
-
"
|
|
6008
|
-
"
|
|
6009
|
-
"link-2",
|
|
6010
|
-
"search",
|
|
6011
|
-
"zoom-in",
|
|
6012
|
-
"zoom-out",
|
|
6013
|
-
"save",
|
|
6014
|
-
"archive",
|
|
6015
|
-
"log-in",
|
|
6016
|
-
"log-out",
|
|
6017
|
-
"power",
|
|
6018
|
-
"refresh-cw",
|
|
6019
|
-
"rotate-cw",
|
|
6020
|
-
"slash"
|
|
6140
|
+
"download-outline",
|
|
6141
|
+
"cloud-download-outline",
|
|
6142
|
+
"cloud-upload-outline"
|
|
6021
6143
|
]
|
|
6022
6144
|
},
|
|
6145
|
+
// ─── Communication ───────────────────────────────────────────────────────────
|
|
6023
6146
|
{
|
|
6024
6147
|
name: "communication",
|
|
6025
6148
|
label: "Communication",
|
|
6026
6149
|
labelEs: "Comunicaci\xF3n",
|
|
6027
6150
|
categoryIcon: "message-circle",
|
|
6028
6151
|
icons: [
|
|
6029
|
-
|
|
6152
|
+
// Mensajería
|
|
6030
6153
|
"message-circle",
|
|
6031
6154
|
"message-square",
|
|
6032
6155
|
"send",
|
|
6156
|
+
"mail",
|
|
6157
|
+
"inbox",
|
|
6158
|
+
"at-sign",
|
|
6159
|
+
"mail-outline",
|
|
6160
|
+
"mail-open-outline",
|
|
6161
|
+
"mail-unread-outline",
|
|
6162
|
+
"chatbubble-outline",
|
|
6163
|
+
"chatbubble-ellipses-outline",
|
|
6164
|
+
"chatbubbles-outline",
|
|
6165
|
+
"send-outline",
|
|
6166
|
+
"attach-outline",
|
|
6167
|
+
"at-outline",
|
|
6168
|
+
"at-circle-outline",
|
|
6169
|
+
// Llamadas
|
|
6033
6170
|
"phone",
|
|
6034
6171
|
"phone-call",
|
|
6035
6172
|
"phone-incoming",
|
|
@@ -6037,30 +6174,45 @@ var CURATED_ICONS = [
|
|
|
6037
6174
|
"phone-missed",
|
|
6038
6175
|
"phone-off",
|
|
6039
6176
|
"phone-forwarded",
|
|
6040
|
-
"
|
|
6041
|
-
"
|
|
6177
|
+
"voicemail",
|
|
6178
|
+
"call-outline",
|
|
6179
|
+
"phone-portrait-outline",
|
|
6180
|
+
"phone-landscape-outline",
|
|
6181
|
+
// Personas
|
|
6042
6182
|
"user",
|
|
6043
6183
|
"user-plus",
|
|
6044
6184
|
"user-minus",
|
|
6045
6185
|
"user-check",
|
|
6046
6186
|
"user-x",
|
|
6047
6187
|
"users",
|
|
6188
|
+
"person-outline",
|
|
6189
|
+
"person-circle-outline",
|
|
6190
|
+
"person-add-outline",
|
|
6191
|
+
"person-remove-outline",
|
|
6192
|
+
"people-outline",
|
|
6193
|
+
"people-circle-outline",
|
|
6194
|
+
// Reacciones
|
|
6048
6195
|
"smile",
|
|
6049
6196
|
"frown",
|
|
6050
6197
|
"meh",
|
|
6051
6198
|
"heart",
|
|
6052
6199
|
"thumbs-up",
|
|
6053
6200
|
"thumbs-down",
|
|
6054
|
-
"
|
|
6055
|
-
"
|
|
6201
|
+
"happy-outline",
|
|
6202
|
+
"sad-outline",
|
|
6203
|
+
"heart-outline",
|
|
6204
|
+
"thumbs-up-outline",
|
|
6205
|
+
"thumbs-down-outline"
|
|
6056
6206
|
]
|
|
6057
6207
|
},
|
|
6208
|
+
// ─── Navigation ──────────────────────────────────────────────────────────────
|
|
6058
6209
|
{
|
|
6059
6210
|
name: "navigation",
|
|
6060
6211
|
label: "Navigation",
|
|
6061
6212
|
labelEs: "Navegaci\xF3n",
|
|
6062
6213
|
categoryIcon: "compass",
|
|
6063
6214
|
icons: [
|
|
6215
|
+
// Flechas cardinales
|
|
6064
6216
|
"arrow-up",
|
|
6065
6217
|
"arrow-down",
|
|
6066
6218
|
"arrow-left",
|
|
@@ -6069,6 +6221,13 @@ var CURATED_ICONS = [
|
|
|
6069
6221
|
"arrow-up-right",
|
|
6070
6222
|
"arrow-down-left",
|
|
6071
6223
|
"arrow-down-right",
|
|
6224
|
+
"arrow-up-outline",
|
|
6225
|
+
"arrow-down-outline",
|
|
6226
|
+
"arrow-back-outline",
|
|
6227
|
+
"arrow-forward-outline",
|
|
6228
|
+
"arrow-undo-outline",
|
|
6229
|
+
"arrow-redo-outline",
|
|
6230
|
+
// Chevrones
|
|
6072
6231
|
"chevron-up",
|
|
6073
6232
|
"chevron-down",
|
|
6074
6233
|
"chevron-left",
|
|
@@ -6077,6 +6236,13 @@ var CURATED_ICONS = [
|
|
|
6077
6236
|
"chevrons-down",
|
|
6078
6237
|
"chevrons-left",
|
|
6079
6238
|
"chevrons-right",
|
|
6239
|
+
"chevron-up-outline",
|
|
6240
|
+
"chevron-down-outline",
|
|
6241
|
+
"chevron-back-outline",
|
|
6242
|
+
"chevron-forward-outline",
|
|
6243
|
+
"chevron-collapse-outline",
|
|
6244
|
+
"chevron-expand-outline",
|
|
6245
|
+
// Esquinas
|
|
6080
6246
|
"corner-up-left",
|
|
6081
6247
|
"corner-up-right",
|
|
6082
6248
|
"corner-down-left",
|
|
@@ -6085,10 +6251,14 @@ var CURATED_ICONS = [
|
|
|
6085
6251
|
"corner-left-down",
|
|
6086
6252
|
"corner-right-up",
|
|
6087
6253
|
"corner-right-down",
|
|
6254
|
+
// Giro / refrescar
|
|
6088
6255
|
"refresh-cw",
|
|
6089
6256
|
"refresh-ccw",
|
|
6090
6257
|
"rotate-cw",
|
|
6091
6258
|
"rotate-ccw",
|
|
6259
|
+
"refresh-outline",
|
|
6260
|
+
"reload-outline",
|
|
6261
|
+
// Orientación y mapa
|
|
6092
6262
|
"navigation",
|
|
6093
6263
|
"navigation-2",
|
|
6094
6264
|
"compass",
|
|
@@ -6097,119 +6267,248 @@ var CURATED_ICONS = [
|
|
|
6097
6267
|
"target",
|
|
6098
6268
|
"crosshair",
|
|
6099
6269
|
"home",
|
|
6100
|
-
"
|
|
6101
|
-
"
|
|
6102
|
-
"
|
|
6103
|
-
"
|
|
6104
|
-
"
|
|
6105
|
-
"
|
|
6106
|
-
"
|
|
6270
|
+
"anchor",
|
|
6271
|
+
"compass-outline",
|
|
6272
|
+
"map-outline",
|
|
6273
|
+
"location-outline",
|
|
6274
|
+
"navigate-outline",
|
|
6275
|
+
"pin-outline",
|
|
6276
|
+
"home-outline"
|
|
6107
6277
|
]
|
|
6108
6278
|
},
|
|
6279
|
+
// ─── Media ───────────────────────────────────────────────────────────────────
|
|
6109
6280
|
{
|
|
6110
6281
|
name: "media",
|
|
6111
6282
|
label: "Media",
|
|
6112
6283
|
labelEs: "Medios",
|
|
6113
6284
|
categoryIcon: "image",
|
|
6114
6285
|
icons: [
|
|
6286
|
+
// Visual
|
|
6115
6287
|
"image",
|
|
6116
6288
|
"film",
|
|
6117
6289
|
"video",
|
|
6118
6290
|
"video-off",
|
|
6291
|
+
"camera",
|
|
6292
|
+
"camera-off",
|
|
6293
|
+
"image-outline",
|
|
6294
|
+
"images-outline",
|
|
6295
|
+
"film-outline",
|
|
6296
|
+
"videocam-outline",
|
|
6297
|
+
"videocam-off-outline",
|
|
6298
|
+
"camera-outline",
|
|
6299
|
+
"camera-reverse-outline",
|
|
6300
|
+
// Reproducción
|
|
6119
6301
|
"play",
|
|
6120
6302
|
"play-circle",
|
|
6121
6303
|
"pause",
|
|
6122
6304
|
"pause-circle",
|
|
6123
6305
|
"square",
|
|
6124
6306
|
"stop-circle",
|
|
6307
|
+
"fast-forward",
|
|
6308
|
+
"rewind",
|
|
6309
|
+
"skip-forward",
|
|
6310
|
+
"skip-back",
|
|
6311
|
+
"repeat",
|
|
6312
|
+
"shuffle",
|
|
6313
|
+
"play-outline",
|
|
6314
|
+
"pause-outline",
|
|
6315
|
+
"play-circle-outline",
|
|
6316
|
+
"pause-circle-outline",
|
|
6317
|
+
"stop-circle-outline",
|
|
6318
|
+
"play-back-outline",
|
|
6319
|
+
"play-forward-outline",
|
|
6320
|
+
"play-skip-back-outline",
|
|
6321
|
+
"play-skip-forward-outline",
|
|
6322
|
+
"repeat-outline",
|
|
6323
|
+
"shuffle-outline",
|
|
6324
|
+
// Audio
|
|
6125
6325
|
"music",
|
|
6126
6326
|
"headphones",
|
|
6127
6327
|
"speaker",
|
|
6128
|
-
"camera",
|
|
6129
|
-
"camera-off",
|
|
6130
|
-
"mic",
|
|
6131
|
-
"mic-off",
|
|
6132
6328
|
"volume",
|
|
6133
6329
|
"volume-1",
|
|
6134
6330
|
"volume-2",
|
|
6135
6331
|
"volume-x",
|
|
6136
|
-
"
|
|
6137
|
-
"
|
|
6138
|
-
"
|
|
6139
|
-
"
|
|
6140
|
-
"
|
|
6141
|
-
"
|
|
6142
|
-
"
|
|
6332
|
+
"mic",
|
|
6333
|
+
"mic-off",
|
|
6334
|
+
"mic-outline",
|
|
6335
|
+
"mic-off-outline",
|
|
6336
|
+
"mic-circle-outline",
|
|
6337
|
+
"musical-note-outline",
|
|
6338
|
+
"musical-notes-outline",
|
|
6339
|
+
"volume-high-outline",
|
|
6340
|
+
"volume-low-outline",
|
|
6341
|
+
"volume-medium-outline",
|
|
6342
|
+
"volume-mute-outline",
|
|
6343
|
+
"volume-off-outline"
|
|
6143
6344
|
]
|
|
6144
6345
|
},
|
|
6346
|
+
// ─── Layout ──────────────────────────────────────────────────────────────────
|
|
6145
6347
|
{
|
|
6146
6348
|
name: "layout",
|
|
6147
6349
|
label: "Layout",
|
|
6148
6350
|
labelEs: "Dise\xF1o",
|
|
6149
6351
|
categoryIcon: "grid",
|
|
6150
6352
|
icons: [
|
|
6151
|
-
|
|
6152
|
-
"more-horizontal",
|
|
6153
|
-
"more-vertical",
|
|
6353
|
+
// Estructura
|
|
6154
6354
|
"grid",
|
|
6155
6355
|
"columns",
|
|
6156
6356
|
"sidebar",
|
|
6157
6357
|
"layout",
|
|
6158
6358
|
"list",
|
|
6359
|
+
"menu",
|
|
6360
|
+
"table",
|
|
6361
|
+
"trello",
|
|
6362
|
+
"grid-outline",
|
|
6363
|
+
"list-outline",
|
|
6364
|
+
"menu-outline",
|
|
6365
|
+
"layers-outline",
|
|
6366
|
+
// Alineación
|
|
6159
6367
|
"align-left",
|
|
6160
6368
|
"align-center",
|
|
6161
6369
|
"align-right",
|
|
6162
6370
|
"align-justify",
|
|
6371
|
+
// Tipografía
|
|
6163
6372
|
"bold",
|
|
6164
6373
|
"italic",
|
|
6165
6374
|
"underline",
|
|
6166
6375
|
"type",
|
|
6167
|
-
"filter",
|
|
6168
|
-
"crop",
|
|
6169
|
-
"layers",
|
|
6170
6376
|
"hash",
|
|
6171
|
-
|
|
6172
|
-
"trello",
|
|
6377
|
+
// Formas
|
|
6173
6378
|
"circle",
|
|
6174
6379
|
"square",
|
|
6175
6380
|
"triangle",
|
|
6176
6381
|
"hexagon",
|
|
6177
6382
|
"octagon",
|
|
6178
|
-
"
|
|
6179
|
-
"
|
|
6383
|
+
"square-outline",
|
|
6384
|
+
"triangle-outline",
|
|
6385
|
+
"diamond-outline",
|
|
6386
|
+
"shapes-outline",
|
|
6387
|
+
// Herramientas de diseño
|
|
6388
|
+
"pen-tool",
|
|
6389
|
+
"crop",
|
|
6390
|
+
"layers",
|
|
6391
|
+
"filter",
|
|
6392
|
+
"sliders",
|
|
6393
|
+
"aperture",
|
|
6394
|
+
"crop-outline",
|
|
6395
|
+
"filter-outline",
|
|
6396
|
+
"color-fill-outline",
|
|
6397
|
+
"color-filter-outline",
|
|
6398
|
+
"color-palette-outline",
|
|
6399
|
+
"color-wand-outline",
|
|
6400
|
+
"brush-outline",
|
|
6401
|
+
// Edición
|
|
6402
|
+
"edit",
|
|
6403
|
+
"edit-2",
|
|
6404
|
+
"edit-3",
|
|
6405
|
+
"copy",
|
|
6406
|
+
"trash",
|
|
6407
|
+
"move",
|
|
6408
|
+
"create-outline",
|
|
6409
|
+
"pencil-outline",
|
|
6410
|
+
"move-outline",
|
|
6411
|
+
"resize-outline",
|
|
6412
|
+
"duplicate-outline",
|
|
6413
|
+
// Navegación UI
|
|
6414
|
+
"more-horizontal",
|
|
6415
|
+
"more-vertical",
|
|
6416
|
+
"maximize",
|
|
6417
|
+
"minimize",
|
|
6418
|
+
"zoom-in",
|
|
6419
|
+
"zoom-out",
|
|
6420
|
+
"eye",
|
|
6421
|
+
"eye-off",
|
|
6422
|
+
"eye-outline",
|
|
6423
|
+
"eye-off-outline",
|
|
6424
|
+
"ellipsis-horizontal-circle-outline",
|
|
6425
|
+
"ellipsis-vertical-circle-outline"
|
|
6180
6426
|
]
|
|
6181
6427
|
},
|
|
6428
|
+
// ─── Nature ──────────────────────────────────────────────────────────────────
|
|
6182
6429
|
{
|
|
6183
6430
|
name: "nature",
|
|
6184
6431
|
label: "Nature",
|
|
6185
6432
|
labelEs: "Naturaleza",
|
|
6186
|
-
categoryIcon: "
|
|
6433
|
+
categoryIcon: "sunny-outline",
|
|
6187
6434
|
icons: [
|
|
6435
|
+
// Sol, luna y estrellas
|
|
6436
|
+
"sunny-outline",
|
|
6437
|
+
"moon-outline",
|
|
6438
|
+
"star-outline",
|
|
6439
|
+
"star-half-outline",
|
|
6440
|
+
"partly-sunny-outline",
|
|
6188
6441
|
"sun",
|
|
6442
|
+
"moon",
|
|
6189
6443
|
"sunrise",
|
|
6190
6444
|
"sunset",
|
|
6191
|
-
|
|
6445
|
+
// Clima
|
|
6446
|
+
"rainy-outline",
|
|
6447
|
+
"thunderstorm-outline",
|
|
6448
|
+
"snow-outline",
|
|
6449
|
+
"cloudy-outline",
|
|
6450
|
+
"cloudy-night-outline",
|
|
6451
|
+
"cloud-outline",
|
|
6452
|
+
"cloud-done-outline",
|
|
6453
|
+
"cloud-download-outline",
|
|
6454
|
+
"cloud-upload-outline",
|
|
6455
|
+
"cloud-offline-outline",
|
|
6456
|
+
"cloud-circle-outline",
|
|
6192
6457
|
"cloud",
|
|
6193
6458
|
"cloud-drizzle",
|
|
6194
6459
|
"cloud-lightning",
|
|
6195
|
-
"cloud-off",
|
|
6196
6460
|
"cloud-rain",
|
|
6197
6461
|
"cloud-snow",
|
|
6198
|
-
"
|
|
6199
|
-
"umbrella",
|
|
6200
|
-
"thermometer",
|
|
6462
|
+
"cloud-off",
|
|
6463
|
+
"umbrella-outline",
|
|
6464
|
+
"thermometer-outline",
|
|
6201
6465
|
"droplet",
|
|
6466
|
+
"wind",
|
|
6467
|
+
// Agua y fuego
|
|
6468
|
+
"water-outline",
|
|
6469
|
+
"flame-outline",
|
|
6470
|
+
"bonfire-outline",
|
|
6471
|
+
"eyedrop-outline",
|
|
6472
|
+
// Flora y fauna
|
|
6473
|
+
"leaf-outline",
|
|
6474
|
+
"flower-outline",
|
|
6475
|
+
"bug-outline",
|
|
6476
|
+
"fish-outline",
|
|
6477
|
+
"paw-outline",
|
|
6478
|
+
// Outdoor
|
|
6479
|
+
"binoculars-outline",
|
|
6480
|
+
"telescope-outline",
|
|
6481
|
+
"compass-outline",
|
|
6482
|
+
"map-outline",
|
|
6483
|
+
"location-outline",
|
|
6484
|
+
"flag-outline",
|
|
6485
|
+
"trail-sign-outline",
|
|
6486
|
+
"earth-outline",
|
|
6487
|
+
"globe-outline",
|
|
6488
|
+
"planet-outline",
|
|
6489
|
+
"compass",
|
|
6490
|
+
"map",
|
|
6491
|
+
"map-pin",
|
|
6492
|
+
"flag",
|
|
6493
|
+
"navigation",
|
|
6494
|
+
"navigation-2",
|
|
6495
|
+
"target",
|
|
6496
|
+
"crosshair",
|
|
6202
6497
|
"life-buoy"
|
|
6203
6498
|
]
|
|
6204
6499
|
},
|
|
6500
|
+
// ─── Brands ──────────────────────────────────────────────────────────────────
|
|
6205
6501
|
{
|
|
6206
6502
|
name: "brands",
|
|
6207
6503
|
label: "Brands",
|
|
6208
6504
|
labelEs: "Marcas",
|
|
6209
6505
|
categoryIcon: "globe",
|
|
6210
6506
|
icons: [
|
|
6507
|
+
// Feather brand icons — outlined, consistent with the rest of the library
|
|
6211
6508
|
"github",
|
|
6212
6509
|
"gitlab",
|
|
6510
|
+
"codepen",
|
|
6511
|
+
"codesandbox",
|
|
6213
6512
|
"twitter",
|
|
6214
6513
|
"facebook",
|
|
6215
6514
|
"instagram",
|
|
@@ -6221,21 +6520,56 @@ var CURATED_ICONS = [
|
|
|
6221
6520
|
"figma",
|
|
6222
6521
|
"framer",
|
|
6223
6522
|
"chrome",
|
|
6224
|
-
"codepen",
|
|
6225
|
-
"codesandbox",
|
|
6226
|
-
"globe",
|
|
6227
6523
|
"rss",
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6232
|
-
|
|
6233
|
-
"
|
|
6234
|
-
"
|
|
6235
|
-
"
|
|
6236
|
-
"
|
|
6237
|
-
"
|
|
6238
|
-
"
|
|
6524
|
+
// Filled / flat brand logos (FA5 brands) — kept in a second
|
|
6525
|
+
// visual tier. Rendered as the brand's official silhouette.
|
|
6526
|
+
// Visually consistent (all flat single-color) but heavier than the
|
|
6527
|
+
// Feather outlined set above. Use these only when an outlined Feather
|
|
6528
|
+
// version of the brand doesn't exist.
|
|
6529
|
+
"reddit",
|
|
6530
|
+
"tiktok",
|
|
6531
|
+
"pinterest",
|
|
6532
|
+
"whatsapp",
|
|
6533
|
+
"discord",
|
|
6534
|
+
"snapchat",
|
|
6535
|
+
"telegram",
|
|
6536
|
+
"viber",
|
|
6537
|
+
"line",
|
|
6538
|
+
"vimeo",
|
|
6539
|
+
"tumblr",
|
|
6540
|
+
"behance",
|
|
6541
|
+
"medium",
|
|
6542
|
+
"soundcloud",
|
|
6543
|
+
"google",
|
|
6544
|
+
"apple",
|
|
6545
|
+
"android",
|
|
6546
|
+
"windows",
|
|
6547
|
+
"linux",
|
|
6548
|
+
"amazon",
|
|
6549
|
+
"paypal",
|
|
6550
|
+
"stripe",
|
|
6551
|
+
"shopify",
|
|
6552
|
+
"dropbox",
|
|
6553
|
+
"spotify",
|
|
6554
|
+
"steam",
|
|
6555
|
+
"atlassian",
|
|
6556
|
+
"jira",
|
|
6557
|
+
"confluence",
|
|
6558
|
+
"bitbucket",
|
|
6559
|
+
"jenkins",
|
|
6560
|
+
"docker",
|
|
6561
|
+
"aws",
|
|
6562
|
+
"node",
|
|
6563
|
+
"react",
|
|
6564
|
+
"angular",
|
|
6565
|
+
"wordpress",
|
|
6566
|
+
"drupal",
|
|
6567
|
+
"joomla",
|
|
6568
|
+
"squarespace",
|
|
6569
|
+
"wix",
|
|
6570
|
+
"magento",
|
|
6571
|
+
"terminal",
|
|
6572
|
+
"pen-tool"
|
|
6239
6573
|
]
|
|
6240
6574
|
}
|
|
6241
6575
|
];
|
|
@@ -6247,7 +6581,7 @@ var ALL_CURATED_ICONS = [
|
|
|
6247
6581
|
var NUM_COLUMNS = 6;
|
|
6248
6582
|
var GAP = 6;
|
|
6249
6583
|
var TRIGGER_SIZE = s(56);
|
|
6250
|
-
var
|
|
6584
|
+
var SCREEN_HEIGHT = reactNative.Dimensions.get("window").height;
|
|
6251
6585
|
function IconCell({ name, selected, size, onPress }) {
|
|
6252
6586
|
const { colors } = useTheme();
|
|
6253
6587
|
const handlePress = () => {
|
|
@@ -6256,7 +6590,7 @@ function IconCell({ name, selected, size, onPress }) {
|
|
|
6256
6590
|
};
|
|
6257
6591
|
const iconColor = selected ? colors.primaryForeground : colors.foreground;
|
|
6258
6592
|
const bg = selected ? colors.primary : "transparent";
|
|
6259
|
-
return /* @__PURE__ */
|
|
6593
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
6260
6594
|
reactNative.TouchableOpacity,
|
|
6261
6595
|
{
|
|
6262
6596
|
onPress: handlePress,
|
|
@@ -6270,7 +6604,7 @@ function IconCell({ name, selected, size, onPress }) {
|
|
|
6270
6604
|
renderIcon(name, ms(20), iconColor)
|
|
6271
6605
|
);
|
|
6272
6606
|
}
|
|
6273
|
-
var IconCellMemo =
|
|
6607
|
+
var IconCellMemo = React54__default.default.memo(IconCell);
|
|
6274
6608
|
function IconPicker({
|
|
6275
6609
|
value,
|
|
6276
6610
|
onChange,
|
|
@@ -6284,13 +6618,13 @@ function IconPicker({
|
|
|
6284
6618
|
}) {
|
|
6285
6619
|
const { colors } = useTheme();
|
|
6286
6620
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
6287
|
-
const sheetRef =
|
|
6288
|
-
const catScrollRef =
|
|
6289
|
-
const [
|
|
6290
|
-
const [
|
|
6291
|
-
const [
|
|
6292
|
-
const sheetName =
|
|
6293
|
-
const activeIcons =
|
|
6621
|
+
const sheetRef = React54.useRef(null);
|
|
6622
|
+
const catScrollRef = React54.useRef(null);
|
|
6623
|
+
const [activeCategory, setActiveCategory] = React54.useState(null);
|
|
6624
|
+
const [containerWidth, setContainerWidth] = React54.useState(() => reactNative.Dimensions.get("window").width - s(16) * 2);
|
|
6625
|
+
const [ready, setReady] = React54.useState(false);
|
|
6626
|
+
const sheetName = React54.useId();
|
|
6627
|
+
const activeIcons = React54.useMemo(() => {
|
|
6294
6628
|
if (activeCategory) {
|
|
6295
6629
|
return CURATED_ICONS.find((c) => c.name === activeCategory)?.icons ?? ALL_CURATED_ICONS;
|
|
6296
6630
|
}
|
|
@@ -6298,44 +6632,36 @@ function IconPicker({
|
|
|
6298
6632
|
}, [activeCategory]);
|
|
6299
6633
|
const gapPx = s(gap);
|
|
6300
6634
|
const cellSize = containerWidth > 0 ? Math.floor((containerWidth - gapPx * (numColumns - 1)) / numColumns) : 0;
|
|
6301
|
-
const rows =
|
|
6635
|
+
const rows = React54.useMemo(() => {
|
|
6302
6636
|
const result = [];
|
|
6303
6637
|
for (let i = 0; i < activeIcons.length; i += numColumns) {
|
|
6304
6638
|
result.push(activeIcons.slice(i, i + numColumns));
|
|
6305
6639
|
}
|
|
6306
6640
|
return result;
|
|
6307
6641
|
}, [activeIcons, numColumns]);
|
|
6308
|
-
|
|
6309
|
-
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
sheetRef.current?.dismiss();
|
|
6314
|
-
}
|
|
6315
|
-
}, [open]);
|
|
6316
|
-
const handleSelect = React25.useCallback(
|
|
6642
|
+
const handleDismiss = React54.useCallback(() => {
|
|
6643
|
+
setActiveCategory(null);
|
|
6644
|
+
setReady(false);
|
|
6645
|
+
}, []);
|
|
6646
|
+
const handleSelect = React54.useCallback(
|
|
6317
6647
|
(iconName) => {
|
|
6318
6648
|
onChange(iconName);
|
|
6319
|
-
setOpen(false);
|
|
6320
|
-
setActiveCategory(null);
|
|
6321
6649
|
},
|
|
6322
6650
|
[onChange]
|
|
6323
6651
|
);
|
|
6324
|
-
const handleOpen =
|
|
6652
|
+
const handleOpen = React54.useCallback(() => {
|
|
6325
6653
|
if (disabled) return;
|
|
6654
|
+
impactMedium();
|
|
6326
6655
|
setActiveCategory(null);
|
|
6327
|
-
|
|
6656
|
+
setReady(false);
|
|
6657
|
+
sheetRef.current?.present();
|
|
6328
6658
|
}, [disabled]);
|
|
6329
|
-
const
|
|
6330
|
-
|
|
6331
|
-
setActiveCategory(null);
|
|
6332
|
-
}, []);
|
|
6333
|
-
const renderBackdrop = React25.useCallback(
|
|
6334
|
-
(props) => /* @__PURE__ */ React25__default.default.createElement(BottomSheet.BottomSheetBackdrop, { ...props, disappearsOnIndex: -1, appearsOnIndex: 0, pressBehavior: "close" }),
|
|
6659
|
+
const renderBackdrop = React54.useCallback(
|
|
6660
|
+
(props) => /* @__PURE__ */ React54__default.default.createElement(bottomSheet.BottomSheetBackdrop, { ...props, disappearsOnIndex: -1, appearsOnIndex: 0, pressBehavior: "close" }),
|
|
6335
6661
|
[]
|
|
6336
6662
|
);
|
|
6337
6663
|
const selectedIcon = value ? renderIcon(value, ms(28), colors.foreground) : null;
|
|
6338
|
-
return /* @__PURE__ */
|
|
6664
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles47.triggerContainer, style] }, label ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles47.triggerLabel, { color: colors.foreground }], allowFontScaling: true }, label) : null, /* @__PURE__ */ React54__default.default.createElement(
|
|
6339
6665
|
reactNative.TouchableOpacity,
|
|
6340
6666
|
{
|
|
6341
6667
|
onPress: handleOpen,
|
|
@@ -6357,7 +6683,7 @@ function IconPicker({
|
|
|
6357
6683
|
]
|
|
6358
6684
|
},
|
|
6359
6685
|
selectedIcon ?? renderIcon("plus", ms(24), colors.foregroundMuted)
|
|
6360
|
-
), error ? /* @__PURE__ */
|
|
6686
|
+
), error ? /* @__PURE__ */ React54__default.default.createElement(
|
|
6361
6687
|
reactNative.Text,
|
|
6362
6688
|
{
|
|
6363
6689
|
style: [styles47.helperText, { color: colors.destructive }],
|
|
@@ -6365,110 +6691,120 @@ function IconPicker({
|
|
|
6365
6691
|
accessibilityLiveRegion: "polite"
|
|
6366
6692
|
},
|
|
6367
6693
|
error
|
|
6368
|
-
) : null, !error && hint ? /* @__PURE__ */
|
|
6369
|
-
|
|
6694
|
+
) : null, !error && hint ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles47.helperText, { color: colors.foregroundMuted }], allowFontScaling: true }, hint) : null, /* @__PURE__ */ React54__default.default.createElement(
|
|
6695
|
+
bottomSheet.BottomSheetModal,
|
|
6370
6696
|
{
|
|
6371
6697
|
ref: sheetRef,
|
|
6372
6698
|
name: sheetName,
|
|
6373
|
-
onDismiss:
|
|
6699
|
+
onDismiss: handleDismiss,
|
|
6374
6700
|
enableDynamicSizing: true,
|
|
6375
|
-
maxDynamicContentSize:
|
|
6701
|
+
maxDynamicContentSize: SCREEN_HEIGHT * 0.7,
|
|
6376
6702
|
backdropComponent: renderBackdrop,
|
|
6377
|
-
backgroundStyle:
|
|
6378
|
-
handleIndicatorStyle:
|
|
6703
|
+
backgroundStyle: { ...styles47.sheetBackground, backgroundColor: colors.card },
|
|
6704
|
+
handleIndicatorStyle: { ...styles47.handle, backgroundColor: colors.border },
|
|
6379
6705
|
enablePanDownToClose: true,
|
|
6380
6706
|
topInset: insets.top,
|
|
6381
6707
|
android_keyboardInputMode: "adjustPan"
|
|
6382
6708
|
},
|
|
6383
|
-
/* @__PURE__ */
|
|
6384
|
-
|
|
6709
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
6710
|
+
bottomSheet.BottomSheetScrollView,
|
|
6385
6711
|
{
|
|
6386
6712
|
contentContainerStyle: styles47.sheetContent,
|
|
6387
6713
|
showsVerticalScrollIndicator: true
|
|
6388
6714
|
},
|
|
6389
|
-
/* @__PURE__ */
|
|
6390
|
-
|
|
6391
|
-
reactNativeGestureHandler.ScrollView,
|
|
6715
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
6716
|
+
reactNative.View,
|
|
6392
6717
|
{
|
|
6393
|
-
|
|
6394
|
-
|
|
6395
|
-
|
|
6396
|
-
|
|
6397
|
-
|
|
6718
|
+
style: styles47.gridContainer,
|
|
6719
|
+
onLayout: (e) => {
|
|
6720
|
+
setContainerWidth(e.nativeEvent.layout.width);
|
|
6721
|
+
setReady(true);
|
|
6722
|
+
}
|
|
6398
6723
|
},
|
|
6399
|
-
/* @__PURE__ */
|
|
6400
|
-
|
|
6724
|
+
!ready ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles47.loader }, /* @__PURE__ */ React54__default.default.createElement(Spinner, { size: "md", color: colors.primary, label: "Cargando iconos..." })) : /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles47.sectionLabel, { color: colors.foregroundSubtle }], allowFontScaling: true }, "Categor\xEDas"), /* @__PURE__ */ React54__default.default.createElement(
|
|
6725
|
+
reactNativeGestureHandler.ScrollView,
|
|
6401
6726
|
{
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
accessibilityState: { selected: activeCategory === null },
|
|
6408
|
-
style: [
|
|
6409
|
-
styles47.categoryChip,
|
|
6410
|
-
{
|
|
6411
|
-
backgroundColor: activeCategory === null ? colors.primary : colors.surface,
|
|
6412
|
-
borderColor: activeCategory === null ? colors.primary : colors.border
|
|
6413
|
-
}
|
|
6414
|
-
]
|
|
6727
|
+
ref: catScrollRef,
|
|
6728
|
+
horizontal: true,
|
|
6729
|
+
showsHorizontalScrollIndicator: false,
|
|
6730
|
+
contentContainerStyle: styles47.categoryStrip,
|
|
6731
|
+
style: styles47.categoryScroll
|
|
6415
6732
|
},
|
|
6416
|
-
/* @__PURE__ */
|
|
6417
|
-
reactNative.
|
|
6733
|
+
/* @__PURE__ */ React54__default.default.createElement(
|
|
6734
|
+
reactNative.TouchableOpacity,
|
|
6418
6735
|
{
|
|
6736
|
+
onPress: () => setActiveCategory(null),
|
|
6737
|
+
activeOpacity: 0.7,
|
|
6738
|
+
touchSoundDisabled: true,
|
|
6739
|
+
accessibilityRole: "button",
|
|
6740
|
+
accessibilityLabel: "Todos",
|
|
6741
|
+
accessibilityState: { selected: activeCategory === null },
|
|
6419
6742
|
style: [
|
|
6420
|
-
styles47.
|
|
6421
|
-
{
|
|
6422
|
-
|
|
6423
|
-
|
|
6424
|
-
|
|
6743
|
+
styles47.categoryChip,
|
|
6744
|
+
{
|
|
6745
|
+
backgroundColor: activeCategory === null ? colors.primary : colors.surface,
|
|
6746
|
+
borderColor: activeCategory === null ? colors.primary : colors.border
|
|
6747
|
+
}
|
|
6748
|
+
]
|
|
6425
6749
|
},
|
|
6426
|
-
"
|
|
6427
|
-
|
|
6428
|
-
),
|
|
6429
|
-
CURATED_ICONS.map((cat) => /* @__PURE__ */ React25__default.default.createElement(
|
|
6430
|
-
reactNative.TouchableOpacity,
|
|
6431
|
-
{
|
|
6432
|
-
key: cat.name,
|
|
6433
|
-
onPress: () => setActiveCategory(cat.name),
|
|
6434
|
-
activeOpacity: 0.7,
|
|
6435
|
-
touchSoundDisabled: true,
|
|
6436
|
-
accessibilityRole: "button",
|
|
6437
|
-
accessibilityLabel: cat.labelEs,
|
|
6438
|
-
accessibilityState: { selected: activeCategory === cat.name },
|
|
6439
|
-
style: [
|
|
6440
|
-
styles47.categoryChip,
|
|
6750
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles47.categoryChipInner }, renderIcon("grid", ms(14), activeCategory === null ? colors.primaryForeground : colors.foregroundSubtle), /* @__PURE__ */ React54__default.default.createElement(
|
|
6751
|
+
reactNative.Text,
|
|
6441
6752
|
{
|
|
6442
|
-
|
|
6443
|
-
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6753
|
+
style: [
|
|
6754
|
+
styles47.categoryChipText,
|
|
6755
|
+
{ color: activeCategory === null ? colors.primaryForeground : colors.foreground }
|
|
6756
|
+
],
|
|
6757
|
+
allowFontScaling: true,
|
|
6758
|
+
numberOfLines: 1
|
|
6759
|
+
},
|
|
6760
|
+
"Todos"
|
|
6761
|
+
))
|
|
6762
|
+
),
|
|
6763
|
+
CURATED_ICONS.map((cat) => /* @__PURE__ */ React54__default.default.createElement(
|
|
6764
|
+
reactNative.TouchableOpacity,
|
|
6449
6765
|
{
|
|
6766
|
+
key: cat.name,
|
|
6767
|
+
onPress: () => setActiveCategory(cat.name),
|
|
6768
|
+
activeOpacity: 0.7,
|
|
6769
|
+
touchSoundDisabled: true,
|
|
6770
|
+
accessibilityRole: "button",
|
|
6771
|
+
accessibilityLabel: cat.labelEs,
|
|
6772
|
+
accessibilityState: { selected: activeCategory === cat.name },
|
|
6450
6773
|
style: [
|
|
6451
|
-
styles47.
|
|
6452
|
-
{
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6774
|
+
styles47.categoryChip,
|
|
6775
|
+
{
|
|
6776
|
+
backgroundColor: activeCategory === cat.name ? colors.primary : colors.surface,
|
|
6777
|
+
borderColor: activeCategory === cat.name ? colors.primary : colors.border
|
|
6778
|
+
}
|
|
6779
|
+
]
|
|
6456
6780
|
},
|
|
6457
|
-
cat.
|
|
6781
|
+
/* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles47.categoryChipInner }, renderIcon(cat.categoryIcon, ms(14), activeCategory === cat.name ? colors.primaryForeground : colors.foregroundSubtle), /* @__PURE__ */ React54__default.default.createElement(
|
|
6782
|
+
reactNative.Text,
|
|
6783
|
+
{
|
|
6784
|
+
style: [
|
|
6785
|
+
styles47.categoryChipText,
|
|
6786
|
+
{ color: activeCategory === cat.name ? colors.primaryForeground : colors.foreground }
|
|
6787
|
+
],
|
|
6788
|
+
allowFontScaling: true,
|
|
6789
|
+
numberOfLines: 1
|
|
6790
|
+
},
|
|
6791
|
+
cat.labelEs
|
|
6792
|
+
))
|
|
6458
6793
|
))
|
|
6459
|
-
))
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
|
|
6463
|
-
|
|
6464
|
-
|
|
6465
|
-
|
|
6466
|
-
|
|
6467
|
-
|
|
6468
|
-
|
|
6469
|
-
|
|
6470
|
-
|
|
6471
|
-
|
|
6794
|
+
), /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles47.separator, { backgroundColor: colors.border }] }), cellSize > 0 ? rows.map((row, i) => /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { key: row[0] ?? `row-${i}`, style: [styles47.row, { marginBottom: gapPx }] }, row.map((name) => /* @__PURE__ */ React54__default.default.createElement(
|
|
6795
|
+
IconCellMemo,
|
|
6796
|
+
{
|
|
6797
|
+
key: name,
|
|
6798
|
+
name,
|
|
6799
|
+
selected: value === name,
|
|
6800
|
+
size: cellSize,
|
|
6801
|
+
onPress: () => {
|
|
6802
|
+
handleSelect(name);
|
|
6803
|
+
sheetRef.current?.dismiss();
|
|
6804
|
+
}
|
|
6805
|
+
}
|
|
6806
|
+
)), Array.from({ length: numColumns - row.length }).map((_, j) => /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { key: `spacer-${j}`, style: { width: cellSize, height: cellSize } })))) : null)
|
|
6807
|
+
)
|
|
6472
6808
|
)
|
|
6473
6809
|
));
|
|
6474
6810
|
}
|
|
@@ -6548,6 +6884,11 @@ var styles47 = reactNative.StyleSheet.create({
|
|
|
6548
6884
|
borderRadius: RADIUS.md,
|
|
6549
6885
|
alignItems: "center",
|
|
6550
6886
|
justifyContent: "center"
|
|
6887
|
+
},
|
|
6888
|
+
loader: {
|
|
6889
|
+
minHeight: vs(200),
|
|
6890
|
+
alignItems: "center",
|
|
6891
|
+
justifyContent: "center"
|
|
6551
6892
|
}
|
|
6552
6893
|
});
|
|
6553
6894
|
var sizeConfig = {
|
|
@@ -6581,7 +6922,7 @@ function NumberStepperBase({
|
|
|
6581
6922
|
};
|
|
6582
6923
|
const { button: buttonSize, icon: iconSize, valueFontSize, valueLineHeight, valueMinWidth } = sizeConfig[size];
|
|
6583
6924
|
const displayValue = String(value);
|
|
6584
|
-
return /* @__PURE__ */
|
|
6925
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles48.container, style] }, /* @__PURE__ */ React54__default.default.createElement(
|
|
6585
6926
|
PressableButton,
|
|
6586
6927
|
{
|
|
6587
6928
|
style: [
|
|
@@ -6603,7 +6944,7 @@ function NumberStepperBase({
|
|
|
6603
6944
|
accessibilityState: { disabled: !canDecrement }
|
|
6604
6945
|
},
|
|
6605
6946
|
renderIcon("minus", iconSize, canDecrement ? colors.foreground : colors.foregroundMuted)
|
|
6606
|
-
), /* @__PURE__ */
|
|
6947
|
+
), /* @__PURE__ */ React54__default.default.createElement(
|
|
6607
6948
|
reactNative.Text,
|
|
6608
6949
|
{
|
|
6609
6950
|
style: [
|
|
@@ -6620,7 +6961,7 @@ function NumberStepperBase({
|
|
|
6620
6961
|
accessibilityRole: "text"
|
|
6621
6962
|
},
|
|
6622
6963
|
displayValue
|
|
6623
|
-
), /* @__PURE__ */
|
|
6964
|
+
), /* @__PURE__ */ React54__default.default.createElement(
|
|
6624
6965
|
PressableButton,
|
|
6625
6966
|
{
|
|
6626
6967
|
style: [
|
|
@@ -6644,7 +6985,7 @@ function NumberStepperBase({
|
|
|
6644
6985
|
renderIcon("plus", iconSize, canIncrement ? colors.foreground : colors.foregroundMuted)
|
|
6645
6986
|
));
|
|
6646
6987
|
}
|
|
6647
|
-
var NumberStepper =
|
|
6988
|
+
var NumberStepper = React54__default.default.memo(NumberStepperBase);
|
|
6648
6989
|
var styles48 = reactNative.StyleSheet.create({
|
|
6649
6990
|
container: {
|
|
6650
6991
|
flexDirection: "row",
|
|
@@ -6665,6 +7006,139 @@ var styles48 = reactNative.StyleSheet.create({
|
|
|
6665
7006
|
textAlign: "center"
|
|
6666
7007
|
}
|
|
6667
7008
|
});
|
|
7009
|
+
var COMPACT_THRESHOLD = s(150);
|
|
7010
|
+
function StatsComponent({
|
|
7011
|
+
value,
|
|
7012
|
+
label,
|
|
7013
|
+
description,
|
|
7014
|
+
icon,
|
|
7015
|
+
iconName,
|
|
7016
|
+
iconColor,
|
|
7017
|
+
variant = "elevated",
|
|
7018
|
+
onPress,
|
|
7019
|
+
style,
|
|
7020
|
+
accessibilityLabel
|
|
7021
|
+
}) {
|
|
7022
|
+
const { colors } = useTheme();
|
|
7023
|
+
const [containerWidth, setContainerWidth] = React54.useState(0);
|
|
7024
|
+
const handleLayout = React54.useCallback((e) => {
|
|
7025
|
+
const w = e.nativeEvent.layout.width;
|
|
7026
|
+
if (w > 0 && w !== containerWidth) {
|
|
7027
|
+
setContainerWidth(w);
|
|
7028
|
+
}
|
|
7029
|
+
}, [containerWidth]);
|
|
7030
|
+
const handlePress = () => {
|
|
7031
|
+
if (!onPress) return;
|
|
7032
|
+
impactLight();
|
|
7033
|
+
onPress();
|
|
7034
|
+
};
|
|
7035
|
+
const isCompact = containerWidth > 0 && containerWidth < COMPACT_THRESHOLD && !!(icon ?? iconName);
|
|
7036
|
+
const variantStyle = {
|
|
7037
|
+
elevated: {
|
|
7038
|
+
backgroundColor: colors.card,
|
|
7039
|
+
borderWidth: 0,
|
|
7040
|
+
shadowColor: "#000",
|
|
7041
|
+
shadowOffset: { width: 0, height: 4 },
|
|
7042
|
+
shadowOpacity: 0.09,
|
|
7043
|
+
shadowRadius: 14,
|
|
7044
|
+
elevation: 4
|
|
7045
|
+
},
|
|
7046
|
+
outlined: {
|
|
7047
|
+
backgroundColor: colors.card,
|
|
7048
|
+
borderColor: colors.border,
|
|
7049
|
+
shadowOpacity: 0,
|
|
7050
|
+
elevation: 0
|
|
7051
|
+
},
|
|
7052
|
+
filled: {
|
|
7053
|
+
backgroundColor: colors.surfaceStrong,
|
|
7054
|
+
borderColor: colors.border,
|
|
7055
|
+
shadowOpacity: 0,
|
|
7056
|
+
elevation: 0
|
|
7057
|
+
}
|
|
7058
|
+
}[variant];
|
|
7059
|
+
const iconColorResolved = iconColor ?? colors.primary;
|
|
7060
|
+
const resolvedIcon = iconName ? renderIcon(iconName, ms(22), iconColorResolved) : icon;
|
|
7061
|
+
const iconElement = resolvedIcon ? /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles49.iconWrapper }, resolvedIcon) : null;
|
|
7062
|
+
const valueElement = /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles49.value, { color: colors.foreground }], allowFontScaling: true }, value);
|
|
7063
|
+
const cardContent = /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles49.card, variantStyle, style], onLayout: handleLayout }, isCompact ? /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, iconElement, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles49.compactValue }, valueElement), /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles49.label, { color: colors.foregroundSubtle }], allowFontScaling: true }, label), description ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles49.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null) : /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles49.valueRow }, iconElement, valueElement), /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles49.label, { color: colors.foregroundSubtle }], allowFontScaling: true }, label), description ? /* @__PURE__ */ React54__default.default.createElement(reactNative.Text, { style: [styles49.description, { color: colors.foregroundMuted }], allowFontScaling: true }, description) : null));
|
|
7064
|
+
if (onPress) {
|
|
7065
|
+
return /* @__PURE__ */ React54__default.default.createElement(
|
|
7066
|
+
PressableCard,
|
|
7067
|
+
{
|
|
7068
|
+
onPress: handlePress,
|
|
7069
|
+
rippleColor: "transparent",
|
|
7070
|
+
touchSoundDisabled: true,
|
|
7071
|
+
activateOnHover: true,
|
|
7072
|
+
accessibilityRole: "button",
|
|
7073
|
+
accessibilityLabel
|
|
7074
|
+
},
|
|
7075
|
+
cardContent
|
|
7076
|
+
);
|
|
7077
|
+
}
|
|
7078
|
+
return cardContent;
|
|
7079
|
+
}
|
|
7080
|
+
function StatsGroup({ children, gap = s(12), style }) {
|
|
7081
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: [styles49.group, { gap }, style] }, React54__default.default.Children.map(children, (child) => {
|
|
7082
|
+
if (!React54__default.default.isValidElement(child)) return child;
|
|
7083
|
+
const childStyle = child.props.style;
|
|
7084
|
+
const mergedStyle = childStyle ? [childStyle, { alignSelf: "stretch" }] : [{ alignSelf: "stretch" }];
|
|
7085
|
+
return /* @__PURE__ */ React54__default.default.createElement(reactNative.View, { style: styles49.groupItem }, React54__default.default.cloneElement(
|
|
7086
|
+
child,
|
|
7087
|
+
{ style: mergedStyle }
|
|
7088
|
+
));
|
|
7089
|
+
}));
|
|
7090
|
+
}
|
|
7091
|
+
var Stats = Object.assign(React54__default.default.memo(StatsComponent), { Group: StatsGroup });
|
|
7092
|
+
var styles49 = reactNative.StyleSheet.create({
|
|
7093
|
+
card: {
|
|
7094
|
+
borderRadius: RADIUS.md,
|
|
7095
|
+
borderWidth: 1,
|
|
7096
|
+
padding: s(16),
|
|
7097
|
+
alignSelf: "flex-start",
|
|
7098
|
+
alignItems: "center",
|
|
7099
|
+
justifyContent: "center"
|
|
7100
|
+
},
|
|
7101
|
+
valueRow: {
|
|
7102
|
+
flexDirection: "row",
|
|
7103
|
+
alignItems: "center",
|
|
7104
|
+
justifyContent: "center",
|
|
7105
|
+
gap: s(8)
|
|
7106
|
+
},
|
|
7107
|
+
iconWrapper: {
|
|
7108
|
+
alignItems: "center",
|
|
7109
|
+
justifyContent: "center"
|
|
7110
|
+
},
|
|
7111
|
+
compactValue: {
|
|
7112
|
+
marginTop: vs(8)
|
|
7113
|
+
},
|
|
7114
|
+
value: {
|
|
7115
|
+
fontFamily: "Sohne-Bold",
|
|
7116
|
+
fontSize: ms(28),
|
|
7117
|
+
lineHeight: mvs(32),
|
|
7118
|
+
textAlign: "center"
|
|
7119
|
+
},
|
|
7120
|
+
label: {
|
|
7121
|
+
fontFamily: "Sohne-Regular",
|
|
7122
|
+
fontSize: ms(13),
|
|
7123
|
+
lineHeight: mvs(18),
|
|
7124
|
+
marginTop: vs(8),
|
|
7125
|
+
textAlign: "center"
|
|
7126
|
+
},
|
|
7127
|
+
description: {
|
|
7128
|
+
fontFamily: "Sohne-Regular",
|
|
7129
|
+
fontSize: ms(12),
|
|
7130
|
+
lineHeight: mvs(16),
|
|
7131
|
+
marginTop: vs(4),
|
|
7132
|
+
textAlign: "center"
|
|
7133
|
+
},
|
|
7134
|
+
group: {
|
|
7135
|
+
flexDirection: "row",
|
|
7136
|
+
width: "100%"
|
|
7137
|
+
},
|
|
7138
|
+
groupItem: {
|
|
7139
|
+
flex: 1
|
|
7140
|
+
}
|
|
7141
|
+
});
|
|
6668
7142
|
|
|
6669
7143
|
// src/utils/typography.ts
|
|
6670
7144
|
function getResponsiveFontSize(text, maxSize, steps = [
|
|
@@ -6680,14 +7154,14 @@ function getResponsiveFontSize(text, maxSize, steps = [
|
|
|
6680
7154
|
return maxSize - 8;
|
|
6681
7155
|
}
|
|
6682
7156
|
function useConfirmDialog(options) {
|
|
6683
|
-
const [visible, setVisible] =
|
|
6684
|
-
const [target, setTarget] =
|
|
6685
|
-
const [loading, setLoading] =
|
|
6686
|
-
const open =
|
|
7157
|
+
const [visible, setVisible] = React54.useState(false);
|
|
7158
|
+
const [target, setTarget] = React54.useState(null);
|
|
7159
|
+
const [loading, setLoading] = React54.useState(false);
|
|
7160
|
+
const open = React54.useCallback((t) => {
|
|
6687
7161
|
setTarget(t ?? null);
|
|
6688
7162
|
setVisible(true);
|
|
6689
7163
|
}, []);
|
|
6690
|
-
const handleConfirm =
|
|
7164
|
+
const handleConfirm = React54.useCallback(async () => {
|
|
6691
7165
|
setLoading(true);
|
|
6692
7166
|
try {
|
|
6693
7167
|
await options.onConfirm();
|
|
@@ -6697,7 +7171,7 @@ function useConfirmDialog(options) {
|
|
|
6697
7171
|
setTarget(null);
|
|
6698
7172
|
}
|
|
6699
7173
|
}, [options]);
|
|
6700
|
-
const handleCancel =
|
|
7174
|
+
const handleCancel = React54.useCallback(() => {
|
|
6701
7175
|
setVisible(false);
|
|
6702
7176
|
setTarget(null);
|
|
6703
7177
|
options.onCancel?.();
|
|
@@ -6718,11 +7192,11 @@ function useConfirmDialog(options) {
|
|
|
6718
7192
|
|
|
6719
7193
|
Object.defineProperty(exports, "BottomSheetModalProvider", {
|
|
6720
7194
|
enumerable: true,
|
|
6721
|
-
get: function () { return
|
|
7195
|
+
get: function () { return bottomSheet.BottomSheetModalProvider; }
|
|
6722
7196
|
});
|
|
6723
7197
|
Object.defineProperty(exports, "SheetTextInput", {
|
|
6724
7198
|
enumerable: true,
|
|
6725
|
-
get: function () { return
|
|
7199
|
+
get: function () { return bottomSheet.BottomSheetTextInput; }
|
|
6726
7200
|
});
|
|
6727
7201
|
Object.defineProperty(exports, "toast", {
|
|
6728
7202
|
enumerable: true,
|
|
@@ -6776,7 +7250,7 @@ exports.MenuItem = MenuItem;
|
|
|
6776
7250
|
exports.MonthPicker = MonthPicker;
|
|
6777
7251
|
exports.NumberStepper = NumberStepper;
|
|
6778
7252
|
exports.PagerDots = PagerDots;
|
|
6779
|
-
exports.Pressable =
|
|
7253
|
+
exports.Pressable = Pressable2;
|
|
6780
7254
|
exports.PricingCard = PricingCard;
|
|
6781
7255
|
exports.Progress = Progress;
|
|
6782
7256
|
exports.RADIUS = RADIUS;
|
|
@@ -6792,6 +7266,7 @@ exports.SheetSelect = SheetSelect;
|
|
|
6792
7266
|
exports.Skeleton = Skeleton;
|
|
6793
7267
|
exports.Slider = Slider;
|
|
6794
7268
|
exports.Spinner = Spinner;
|
|
7269
|
+
exports.Stats = Stats;
|
|
6795
7270
|
exports.Switch = Switch;
|
|
6796
7271
|
exports.TYPOGRAPHY = TYPOGRAPHY;
|
|
6797
7272
|
exports.TabBar = TabBar;
|
|
@@ -6823,3 +7298,4 @@ exports.selectionAsync = selectionAsync;
|
|
|
6823
7298
|
exports.useConfirmDialog = useConfirmDialog;
|
|
6824
7299
|
exports.useTheme = useTheme;
|
|
6825
7300
|
exports.useToast = useToast;
|
|
7301
|
+
exports.withAlpha = withAlpha;
|