Files
Eric FELIXINE e30ae8ed09 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
2026-06-01 18:00:35 -04:00

85 lines
2.5 KiB
TypeScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
export type LayoutAnimationType =
| 'spring'
| 'linear'
| 'easeInEaseOut'
| 'easeIn'
| 'easeOut'
| 'keyboard';
export type LayoutAnimationTypes = {
[type in LayoutAnimationType]: type;
};
export type LayoutAnimationProperty =
| 'opacity'
| 'scaleX'
| 'scaleY'
| 'scaleXY';
export type LayoutAnimationProperties = {
[prop in LayoutAnimationProperty]: prop;
};
export interface LayoutAnimationAnim {
duration?: number | undefined;
delay?: number | undefined;
springDamping?: number | undefined;
initialVelocity?: number | undefined;
type?: LayoutAnimationType | undefined;
property?: LayoutAnimationProperty | undefined;
}
export interface LayoutAnimationConfig {
duration: number;
create?: LayoutAnimationAnim | undefined;
update?: LayoutAnimationAnim | undefined;
delete?: LayoutAnimationAnim | undefined;
}
/** Automatically animates views to their new positions when the next layout happens.
* A common way to use this API is to call LayoutAnimation.configureNext before
* calling setState. */
export interface LayoutAnimationStatic {
/** Schedules an animation to happen on the next layout.
* @param config Specifies animation properties:
* `duration` in milliseconds
* `create`, config for animating in new views (see Anim type)
* `update`, config for animating views that have been updated (see Anim type)
* @param onAnimationDidEnd Called when the animation finished. Only supported on iOS.
*/
configureNext: (
config: LayoutAnimationConfig,
onAnimationDidEnd?: () => void,
onAnimationDidFail?: () => void,
) => void;
/** Helper for creating a config for configureNext. */
create: (
duration: number,
type?: LayoutAnimationType,
creationProp?: LayoutAnimationProperty,
) => LayoutAnimationConfig;
Types: LayoutAnimationTypes;
Properties: LayoutAnimationProperties;
configChecker: (shapeTypes: {[key: string]: any}) => any;
Presets: {
easeInEaseOut: LayoutAnimationConfig;
linear: LayoutAnimationConfig;
spring: LayoutAnimationConfig;
};
easeInEaseOut: (onAnimationDidEnd?: () => void) => void;
linear: (onAnimationDidEnd?: () => void) => void;
spring: (onAnimationDidEnd?: () => void) => void;
}
export const LayoutAnimation: LayoutAnimationStatic;
export type LayoutAnimation = LayoutAnimationStatic;