feat(smart-app): implement complete mobile app MVP

- App.tsx: full navigation (Auth stack + Main tabs with 5 screens)
- Auth: LoginScreen, RegisterScreen, ForgotPasswordScreen
- HomeScreen: dashboard with IoT metrics, weather widget, alerts, quick actions, sensors
- MapScreen: interactive map with layer toggles (6 layers)
- MarketplaceScreen: categories (6), products (5), search
- ChatScreen: AI chat with quick prompts (4), bot responses
- ProfileScreen: user info, stats, menu (9 items), logout
- AlertsScreen: alert list with severity, acknowledge
- SensorsScreen: sensor list with type filters (6 types), search
- ZonesScreen: zone cards with stats
- SettingsScreen: language picker (FR/EN/ES/DE), privacy, about
- Stores: iotStore (sensors, zones, alerts), notificationStore, uiStore + i18n
- Hooks: useSensors, useAlerts, useNotifications, useLocation
- Components: Card, Button, LoadingSpinner, ErrorBoundary, Header
- Services: iotService, notificationService (with axios API client)
- Utils: formatters (temp, AQI, noise, dates), validators (email, password, IBAN)
- Theme: colors.ts with full design system (Blue Ocean palette)
- Ditto: fixed MongoDB connection, new JWT secrets, official gateway image
This commit is contained in:
Eric FELIXINE
2026-06-01 18:00:35 -04:00
parent 08ca495bde
commit e30ae8ed09
35578 changed files with 3703534 additions and 43 deletions

View File

@@ -0,0 +1,60 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _RadioButtonAndroid = _interopRequireDefault(require("./RadioButtonAndroid"));
var _RadioButtonIOS = _interopRequireDefault(require("./RadioButtonIOS"));
var _theming = require("../../core/theming");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
/**
* Radio buttons allow the selection a single option from a set.
*
* ## Usage
* ```js
* import * as React from 'react';
* import { View } from 'react-native';
* import { RadioButton } from 'react-native-paper';
*
* const MyComponent = () => {
* const [checked, setChecked] = React.useState('first');
*
* return (
* <View>
* <RadioButton
* value="first"
* status={ checked === 'first' ? 'checked' : 'unchecked' }
* onPress={() => setChecked('first')}
* />
* <RadioButton
* value="second"
* status={ checked === 'second' ? 'checked' : 'unchecked' }
* onPress={() => setChecked('second')}
* />
* </View>
* );
* };
*
* export default MyComponent;
* ```
*/
const RadioButton = ({
theme: themeOverrides,
...props
}) => {
const theme = (0, _theming.useInternalTheme)(themeOverrides);
const Button = _reactNative.Platform.select({
default: _RadioButtonAndroid.default,
ios: _RadioButtonIOS.default
});
return /*#__PURE__*/React.createElement(Button, _extends({}, props, {
theme: theme
}));
};
var _default = exports.default = RadioButton;
//# sourceMappingURL=RadioButton.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_RadioButtonAndroid","_interopRequireDefault","_RadioButtonIOS","_theming","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","RadioButton","theme","themeOverrides","props","useInternalTheme","Button","Platform","select","RadioButtonAndroid","ios","RadioButtonIOS","createElement","_default","exports"],"sourceRoot":"../../../../src","sources":["components/RadioButton/RadioButton.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,mBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,eAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AAAsD,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAP,wBAAAO,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,CAAAO,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAAA,SAAAgB,SAAA,WAAAA,QAAA,GAAAH,MAAA,CAAAI,MAAA,GAAAJ,MAAA,CAAAI,MAAA,CAAAC,IAAA,eAAAf,CAAA,aAAAN,CAAA,MAAAA,CAAA,GAAAsB,SAAA,CAAAC,MAAA,EAAAvB,CAAA,UAAAG,CAAA,GAAAmB,SAAA,CAAAtB,CAAA,YAAAK,CAAA,IAAAF,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAZ,CAAA,EAAAE,CAAA,MAAAC,CAAA,CAAAD,CAAA,IAAAF,CAAA,CAAAE,CAAA,aAAAC,CAAA,KAAAa,QAAA,CAAAK,KAAA,OAAAF,SAAA;AAsCtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,WAAW,GAAGA,CAAC;EAAEC,KAAK,EAAEC,cAAc;EAAE,GAAGC;AAAa,CAAC,KAAK;EAClE,MAAMF,KAAK,GAAG,IAAAG,yBAAgB,EAACF,cAAc,CAAC;EAE9C,MAAMG,MAAM,GAAGC,qBAAQ,CAACC,MAAM,CAAC;IAC7B9B,OAAO,EAAE+B,2BAAkB;IAC3BC,GAAG,EAAEC;EACP,CAAC,CAAC;EAEF,oBAAO3C,KAAA,CAAA4C,aAAA,CAACN,MAAM,EAAAX,QAAA,KAAKS,KAAK;IAAEF,KAAK,EAAEA;EAAM,EAAE,CAAC;AAC5C,CAAC;AAAC,IAAAW,QAAA,GAAAC,OAAA,CAAApC,OAAA,GAEauB,WAAW","ignoreList":[]}

View File

@@ -0,0 +1,144 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.RadioButtonAndroid = void 0;
var React = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _RadioButtonGroup = require("./RadioButtonGroup");
var _utils = require("./utils");
var _theming = require("../../core/theming");
var _utils2 = require("../Checkbox/utils");
var _TouchableRipple = _interopRequireDefault(require("../TouchableRipple/TouchableRipple"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
const BORDER_WIDTH = 2;
/**
* Radio buttons allow the selection a single option from a set.
* This component follows platform guidelines for Android, but can be used
* on any platform.
*
* @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple
*/
const RadioButtonAndroid = ({
disabled,
onPress,
theme: themeOverrides,
value,
status,
testID,
...rest
}) => {
const theme = (0, _theming.useInternalTheme)(themeOverrides);
const {
current: borderAnim
} = React.useRef(new _reactNative.Animated.Value(BORDER_WIDTH));
const {
current: radioAnim
} = React.useRef(new _reactNative.Animated.Value(1));
const isFirstRendering = React.useRef(true);
const {
scale
} = theme.animation;
React.useEffect(() => {
// Do not run animation on very first rendering
if (isFirstRendering.current) {
isFirstRendering.current = false;
return;
}
if (status === 'checked') {
radioAnim.setValue(1.2);
_reactNative.Animated.timing(radioAnim, {
toValue: 1,
duration: 150 * scale,
useNativeDriver: true
}).start();
} else {
borderAnim.setValue(10);
_reactNative.Animated.timing(borderAnim, {
toValue: BORDER_WIDTH,
duration: 150 * scale,
useNativeDriver: false
}).start();
}
}, [status, borderAnim, radioAnim, scale]);
return /*#__PURE__*/React.createElement(_RadioButtonGroup.RadioButtonContext.Consumer, null, context => {
const checked = (0, _utils.isChecked)({
contextValue: context === null || context === void 0 ? void 0 : context.value,
status,
value
}) === 'checked';
const {
rippleColor,
selectionControlColor
} = (0, _utils2.getAndroidSelectionControlColor)({
theme,
disabled,
checked,
customColor: rest.color,
customUncheckedColor: rest.uncheckedColor
});
return /*#__PURE__*/React.createElement(_TouchableRipple.default, _extends({}, rest, {
borderless: true,
rippleColor: rippleColor,
onPress: disabled ? undefined : event => {
(0, _utils.handlePress)({
onPress,
onValueChange: context === null || context === void 0 ? void 0 : context.onValueChange,
value,
event
});
},
accessibilityRole: "radio",
accessibilityState: {
disabled,
checked
},
accessibilityLiveRegion: "polite",
style: styles.container,
testID: testID,
theme: theme
}), /*#__PURE__*/React.createElement(_reactNative.Animated.View, {
style: [styles.radio, {
borderColor: selectionControlColor,
borderWidth: borderAnim
}]
}, checked ? /*#__PURE__*/React.createElement(_reactNative.View, {
style: [_reactNative.StyleSheet.absoluteFill, styles.radioContainer]
}, /*#__PURE__*/React.createElement(_reactNative.Animated.View, {
style: [styles.dot, {
backgroundColor: selectionControlColor,
transform: [{
scale: radioAnim
}]
}]
})) : null));
});
};
exports.RadioButtonAndroid = RadioButtonAndroid;
RadioButtonAndroid.displayName = 'RadioButton.Android';
const styles = _reactNative.StyleSheet.create({
container: {
borderRadius: 18
},
radioContainer: {
alignItems: 'center',
justifyContent: 'center'
},
radio: {
height: 20,
width: 20,
borderRadius: 10,
margin: 8
},
dot: {
height: 10,
width: 10,
borderRadius: 5
}
});
var _default = exports.default = RadioButtonAndroid; // @component-docs ignore-next-line
//# sourceMappingURL=RadioButtonAndroid.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,56 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.RadioButtonGroup = exports.RadioButtonContext = void 0;
var React = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
const RadioButtonContext = exports.RadioButtonContext = /*#__PURE__*/React.createContext(null);
/**
* Radio button group allows to control a group of radio buttons.
*
* ## Usage
* ```js
* import * as React from 'react';
* import { View } from 'react-native';
* import { RadioButton, Text } from 'react-native-paper';
*
* const MyComponent = () => {
* const [value, setValue] = React.useState('first');
*
* return (
* <RadioButton.Group onValueChange={newValue => setValue(newValue)} value={value}>
* <View>
* <Text>First</Text>
* <RadioButton value="first" />
* </View>
* <View>
* <Text>Second</Text>
* <RadioButton value="second" />
* </View>
* </RadioButton.Group>
* );
* };
*
* export default MyComponent;
*```
*/
const RadioButtonGroup = ({
value,
onValueChange,
children
}) => /*#__PURE__*/React.createElement(RadioButtonContext.Provider, {
value: {
value,
onValueChange
}
}, /*#__PURE__*/React.createElement(_reactNative.View, {
accessibilityRole: "radiogroup"
}, children));
exports.RadioButtonGroup = RadioButtonGroup;
RadioButtonGroup.displayName = 'RadioButton.Group';
var _default = exports.default = RadioButtonGroup; // @component-docs ignore-next-line
//# sourceMappingURL=RadioButtonGroup.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RadioButtonContext","exports","createContext","RadioButtonGroup","value","onValueChange","children","createElement","Provider","View","accessibilityRole","displayName","_default"],"sourceRoot":"../../../../src","sources":["components/RadioButton/RadioButtonGroup.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAAoC,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAsB7B,MAAMkB,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,gBAAGvB,KAAK,CAACyB,aAAa,CACnD,IACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAGA,CAAC;EAAEC,KAAK;EAAEC,aAAa;EAAEC;AAAgB,CAAC,kBACjE7B,KAAA,CAAA8B,aAAA,CAACP,kBAAkB,CAACQ,QAAQ;EAACJ,KAAK,EAAE;IAAEA,KAAK;IAAEC;EAAc;AAAE,gBAC3D5B,KAAA,CAAA8B,aAAA,CAAC3B,YAAA,CAAA6B,IAAI;EAACC,iBAAiB,EAAC;AAAY,GAAEJ,QAAe,CAC1B,CAC9B;AAACL,OAAA,CAAAE,gBAAA,GAAAA,gBAAA;AAEFA,gBAAgB,CAACQ,WAAW,GAAG,mBAAmB;AAAC,IAAAC,QAAA,GAAAX,OAAA,CAAAV,OAAA,GACpCY,gBAAgB,EAE/B","ignoreList":[]}

View File

@@ -0,0 +1,92 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.RadioButtonIOS = void 0;
var React = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _RadioButtonGroup = require("./RadioButtonGroup");
var _utils = require("./utils");
var _theming = require("../../core/theming");
var _utils2 = require("../Checkbox/utils");
var _MaterialCommunityIcon = _interopRequireDefault(require("../MaterialCommunityIcon"));
var _TouchableRipple = _interopRequireDefault(require("../TouchableRipple/TouchableRipple"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
/**
* Radio buttons allow the selection a single option from a set.
* This component follows platform guidelines for iOS, but can be used
* on any platform.
*
* @extends TouchableRipple props https://callstack.github.io/react-native-paper/docs/components/TouchableRipple
*/
const RadioButtonIOS = ({
disabled,
onPress,
theme: themeOverrides,
status,
value,
testID,
...rest
}) => {
const theme = (0, _theming.useInternalTheme)(themeOverrides);
return /*#__PURE__*/React.createElement(_RadioButtonGroup.RadioButtonContext.Consumer, null, context => {
const checked = (0, _utils.isChecked)({
contextValue: context === null || context === void 0 ? void 0 : context.value,
status,
value
}) === 'checked';
const {
checkedColor,
rippleColor
} = (0, _utils2.getSelectionControlIOSColor)({
theme,
disabled,
customColor: rest.color
});
const opacity = checked ? 1 : 0;
return /*#__PURE__*/React.createElement(_TouchableRipple.default, _extends({}, rest, {
borderless: true,
rippleColor: rippleColor,
onPress: disabled ? undefined : event => {
(0, _utils.handlePress)({
onPress,
value,
onValueChange: context === null || context === void 0 ? void 0 : context.onValueChange,
event
});
},
accessibilityRole: "radio",
accessibilityState: {
disabled,
checked
},
accessibilityLiveRegion: "polite",
style: styles.container,
testID: testID,
theme: theme
}), /*#__PURE__*/React.createElement(_reactNative.View, {
style: {
opacity
}
}, /*#__PURE__*/React.createElement(_MaterialCommunityIcon.default, {
allowFontScaling: false,
name: "check",
size: 24,
color: checkedColor,
direction: "ltr"
})));
});
};
exports.RadioButtonIOS = RadioButtonIOS;
RadioButtonIOS.displayName = 'RadioButton.IOS';
const styles = _reactNative.StyleSheet.create({
container: {
borderRadius: 18,
padding: 6
}
});
var _default = exports.default = RadioButtonIOS; // @component-docs ignore-next-line
//# sourceMappingURL=RadioButtonIOS.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_RadioButtonGroup","_utils","_theming","_utils2","_MaterialCommunityIcon","_interopRequireDefault","_TouchableRipple","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","RadioButtonIOS","disabled","onPress","theme","themeOverrides","status","value","testID","rest","useInternalTheme","createElement","RadioButtonContext","Consumer","context","checked","isChecked","contextValue","checkedColor","rippleColor","getSelectionControlIOSColor","customColor","color","opacity","borderless","undefined","event","handlePress","onValueChange","accessibilityRole","accessibilityState","accessibilityLiveRegion","style","styles","container","View","allowFontScaling","name","size","direction","exports","displayName","StyleSheet","create","borderRadius","padding","_default"],"sourceRoot":"../../../../src","sources":["components/RadioButton/RadioButtonIOS.tsx"],"mappings":"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","ignoreList":[]}

View File

@@ -0,0 +1,143 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.RadioButtonItem = void 0;
var React = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _RadioButton = _interopRequireDefault(require("./RadioButton"));
var _RadioButtonAndroid = _interopRequireDefault(require("./RadioButtonAndroid"));
var _RadioButtonGroup = require("./RadioButtonGroup");
var _RadioButtonIOS = _interopRequireDefault(require("./RadioButtonIOS"));
var _utils = require("./utils");
var _theming = require("../../core/theming");
var _TouchableRipple = _interopRequireDefault(require("../TouchableRipple/TouchableRipple"));
var _Text = _interopRequireDefault(require("../Typography/Text"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
/**
* RadioButton.Item allows you to press the whole row (item) instead of only the RadioButton.
*
* ## Usage
* ```js
* import * as React from 'react';
* import { RadioButton } from 'react-native-paper';
*
* const MyComponent = () => {
* const [value, setValue] = React.useState('first');
*
* return (
* <RadioButton.Group onValueChange={value => setValue(value)} value={value}>
* <RadioButton.Item label="First item" value="first" />
* <RadioButton.Item label="Second item" value="second" />
* </RadioButton.Group>
* );
* };
*
* export default MyComponent;
*```
*/
const RadioButtonItem = ({
value,
label,
style,
labelStyle,
onPress,
onLongPress,
disabled,
color,
uncheckedColor,
rippleColor,
status,
theme: themeOverrides,
background,
accessibilityLabel = label,
testID,
mode,
position = 'trailing',
labelVariant = 'bodyLarge',
labelMaxFontSizeMultiplier,
hitSlop
}) => {
const theme = (0, _theming.useInternalTheme)(themeOverrides);
const radioButtonProps = {
value,
disabled,
status,
color,
theme,
uncheckedColor
};
const isLeading = position === 'leading';
let radioButton;
if (mode === 'android') {
radioButton = /*#__PURE__*/React.createElement(_RadioButtonAndroid.default, radioButtonProps);
} else if (mode === 'ios') {
radioButton = /*#__PURE__*/React.createElement(_RadioButtonIOS.default, radioButtonProps);
} else {
radioButton = /*#__PURE__*/React.createElement(_RadioButton.default, radioButtonProps);
}
const textColor = theme.isV3 ? theme.colors.onSurface : theme.colors.text;
const disabledTextColor = theme.isV3 ? theme.colors.onSurfaceDisabled : theme.colors.disabled;
const textAlign = isLeading ? 'right' : 'left';
const computedStyle = {
color: disabled ? disabledTextColor : textColor,
textAlign
};
return /*#__PURE__*/React.createElement(_RadioButtonGroup.RadioButtonContext.Consumer, null, context => {
const checked = (0, _utils.isChecked)({
contextValue: context === null || context === void 0 ? void 0 : context.value,
status,
value
}) === 'checked';
return /*#__PURE__*/React.createElement(_TouchableRipple.default, {
onPress: event => (0, _utils.handlePress)({
onPress: onPress,
onValueChange: context === null || context === void 0 ? void 0 : context.onValueChange,
value,
event
}),
onLongPress: onLongPress,
accessibilityLabel: accessibilityLabel,
accessibilityRole: "radio",
accessibilityState: {
checked,
disabled
},
testID: testID,
disabled: disabled,
background: background,
theme: theme,
rippleColor: rippleColor,
hitSlop: hitSlop
}, /*#__PURE__*/React.createElement(_reactNative.View, {
style: [styles.container, style],
pointerEvents: "none"
}, isLeading && radioButton, /*#__PURE__*/React.createElement(_Text.default, {
variant: labelVariant,
style: [styles.label, !theme.isV3 && styles.font, computedStyle, labelStyle],
maxFontSizeMultiplier: labelMaxFontSizeMultiplier
}, label), !isLeading && radioButton));
});
};
exports.RadioButtonItem = RadioButtonItem;
RadioButtonItem.displayName = 'RadioButton.Item';
var _default = exports.default = RadioButtonItem; // @component-docs ignore-next-line
const styles = _reactNative.StyleSheet.create({
container: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
paddingVertical: 8,
paddingHorizontal: 16
},
label: {
flexShrink: 1,
flexGrow: 1
},
font: {
fontSize: 16
}
});
//# sourceMappingURL=RadioButtonItem.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _RadioButton = _interopRequireDefault(require("./RadioButton"));
var _RadioButtonAndroid = _interopRequireDefault(require("./RadioButtonAndroid"));
var _RadioButtonGroup = _interopRequireDefault(require("./RadioButtonGroup"));
var _RadioButtonIOS = _interopRequireDefault(require("./RadioButtonIOS"));
var _RadioButtonItem = _interopRequireDefault(require("./RadioButtonItem"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const RadioButton = Object.assign(
// @component ./RadioButton.tsx
_RadioButton.default, {
// @component ./RadioButtonGroup.tsx
Group: _RadioButtonGroup.default,
// @component ./RadioButtonAndroid.tsx
Android: _RadioButtonAndroid.default,
// @component ./RadioButtonIOS.tsx
IOS: _RadioButtonIOS.default,
// @component ./RadioButtonItem.tsx
Item: _RadioButtonItem.default
});
var _default = exports.default = RadioButton;
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["_RadioButton","_interopRequireDefault","require","_RadioButtonAndroid","_RadioButtonGroup","_RadioButtonIOS","_RadioButtonItem","e","__esModule","default","RadioButton","Object","assign","RadioButtonComponent","Group","RadioButtonGroup","Android","RadioButtonAndroid","IOS","RadioButtonIOS","Item","RadioButtonItem","_default","exports"],"sourceRoot":"../../../../src","sources":["components/RadioButton/index.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,iBAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,eAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,gBAAA,GAAAL,sBAAA,CAAAC,OAAA;AAAgD,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhD,MAAMG,WAAW,GAAGC,MAAM,CAACC,MAAM;AAC/B;AACAC,oBAAoB,EACpB;EACE;EACAC,KAAK,EAAEC,yBAAgB;EACvB;EACAC,OAAO,EAAEC,2BAAkB;EAC3B;EACAC,GAAG,EAAEC,uBAAc;EACnB;EACAC,IAAI,EAAEC;AACR,CACF,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAd,OAAA,GAEaC,WAAW","ignoreList":[]}

View File

@@ -0,0 +1,31 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isChecked = exports.handlePress = void 0;
const handlePress = ({
onPress,
value,
onValueChange,
event
}) => {
if (onPress && onValueChange) {
console.warn(`onPress in the scope of RadioButtonGroup will not be executed, use onValueChange instead`);
}
onValueChange ? onValueChange(value) : onPress === null || onPress === void 0 ? void 0 : onPress(event);
};
exports.handlePress = handlePress;
const isChecked = ({
value,
status,
contextValue
}) => {
if (contextValue !== undefined && contextValue !== null) {
return contextValue === value ? 'checked' : 'unchecked';
} else {
return status;
}
};
exports.isChecked = isChecked;
//# sourceMappingURL=utils.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["handlePress","onPress","value","onValueChange","event","console","warn","exports","isChecked","status","contextValue","undefined"],"sourceRoot":"../../../../src","sources":["components/RadioButton/utils.ts"],"mappings":";;;;;;AAEO,MAAMA,WAAW,GAAGA,CAAC;EAC1BC,OAAO;EACPC,KAAK;EACLC,aAAa;EACbC;AAMF,CAAC,KAAK;EACJ,IAAIH,OAAO,IAAIE,aAAa,EAAE;IAC5BE,OAAO,CAACC,IAAI,CACV,0FACF,CAAC;EACH;EAEAH,aAAa,GAAGA,aAAa,CAACD,KAAK,CAAC,GAAGD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAGG,KAAK,CAAC;AACzD,CAAC;AAACG,OAAA,CAAAP,WAAA,GAAAA,WAAA;AAEK,MAAMQ,SAAS,GAAGA,CAAC;EACxBN,KAAK;EACLO,MAAM;EACNC;AAKF,CAAC,KAAK;EACJ,IAAIA,YAAY,KAAKC,SAAS,IAAID,YAAY,KAAK,IAAI,EAAE;IACvD,OAAOA,YAAY,KAAKR,KAAK,GAAG,SAAS,GAAG,WAAW;EACzD,CAAC,MAAM;IACL,OAAOO,MAAM;EACf;AACF,CAAC;AAACF,OAAA,CAAAC,SAAA,GAAAA,SAAA","ignoreList":[]}