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,41 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _helperPluginUtils = require("@babel/helper-plugin-utils");
var _pluginTransformFlowStripTypes = require("@babel/plugin-transform-flow-strip-types");
var _normalizeOptions = require("./normalize-options.js");
var _default = exports.default = (0, _helperPluginUtils.declarePreset)((api, opts) => {
api.assertVersion(7);
const {
all,
allowDeclareFields,
ignoreExtensions = true,
experimental_useHermesParser: useHermesParser = false
} = (0, _normalizeOptions.default)(opts);
const plugins = [[_pluginTransformFlowStripTypes.default, {
all,
allowDeclareFields
}]];
if (useHermesParser) {
if (Number.parseInt(process.versions.node, 10) < 12) {
throw new Error("The Hermes parser is only supported in Node 12 and later.");
}
plugins.unshift("babel-plugin-syntax-hermes-parser");
}
if (ignoreExtensions) {
return {
plugins
};
}
return {
overrides: [{
test: filename => filename == null || !/\.tsx?$/.test(filename),
plugins
}]
};
});
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["_helperPluginUtils","require","_pluginTransformFlowStripTypes","_normalizeOptions","_default","exports","default","declarePreset","api","opts","assertVersion","all","allowDeclareFields","ignoreExtensions","experimental_useHermesParser","useHermesParser","normalizeOptions","plugins","transformFlowStripTypes","Number","parseInt","process","versions","node","Error","unshift","overrides","test","filename"],"sources":["../src/index.ts"],"sourcesContent":["import { declarePreset } from \"@babel/helper-plugin-utils\";\nimport transformFlowStripTypes from \"@babel/plugin-transform-flow-strip-types\";\nimport normalizeOptions from \"./normalize-options.ts\";\n\nexport default declarePreset((api, opts) => {\n api.assertVersion(REQUIRED_VERSION(7));\n const {\n all,\n allowDeclareFields,\n ignoreExtensions = process.env.BABEL_8_BREAKING ? false : true,\n experimental_useHermesParser: useHermesParser = false,\n } = normalizeOptions(opts);\n\n const plugins: any[] = [\n [transformFlowStripTypes, { all, allowDeclareFields }],\n ];\n\n if (useHermesParser) {\n if (Number.parseInt(process.versions.node, 10) < 12) {\n throw new Error(\n \"The Hermes parser is only supported in Node 12 and later.\",\n );\n }\n if (IS_STANDALONE) {\n throw new Error(\n \"The Hermes parser is not supported in the @babel/standalone.\",\n );\n }\n plugins.unshift(\"babel-plugin-syntax-hermes-parser\");\n }\n\n if (ignoreExtensions) {\n return { plugins };\n }\n\n return {\n overrides: [\n {\n test: filename => filename == null || !/\\.tsx?$/.test(filename),\n plugins,\n },\n ],\n };\n});\n"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,8BAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AAAsD,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEvC,IAAAC,gCAAa,EAAC,CAACC,GAAG,EAAEC,IAAI,KAAK;EAC1CD,GAAG,CAACE,aAAa,CAAkB,CAAE,CAAC;EACtC,MAAM;IACJC,GAAG;IACHC,kBAAkB;IAClBC,gBAAgB,GAA0C,IAAI;IAC9DC,4BAA4B,EAAEC,eAAe,GAAG;EAClD,CAAC,GAAG,IAAAC,yBAAgB,EAACP,IAAI,CAAC;EAE1B,MAAMQ,OAAc,GAAG,CACrB,CAACC,sCAAuB,EAAE;IAAEP,GAAG;IAAEC;EAAmB,CAAC,CAAC,CACvD;EAED,IAAIG,eAAe,EAAE;IACnB,IAAII,MAAM,CAACC,QAAQ,CAACC,OAAO,CAACC,QAAQ,CAACC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;MACnD,MAAM,IAAIC,KAAK,CACb,2DACF,CAAC;IACH;IAMAP,OAAO,CAACQ,OAAO,CAAC,mCAAmC,CAAC;EACtD;EAEA,IAAIZ,gBAAgB,EAAE;IACpB,OAAO;MAAEI;IAAQ,CAAC;EACpB;EAEA,OAAO;IACLS,SAAS,EAAE,CACT;MACEC,IAAI,EAAEC,QAAQ,IAAIA,QAAQ,IAAI,IAAI,IAAI,CAAC,SAAS,CAACD,IAAI,CAACC,QAAQ,CAAC;MAC/DX;IACF,CAAC;EAEL,CAAC;AACH,CAAC,CAAC","ignoreList":[]}

View File

@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = normalizeOptions;
var _helperValidatorOption = require("@babel/helper-validator-option");
const v = new _helperValidatorOption.OptionValidator("@babel/preset-flow");
function normalizeOptions(options = {}) {
let {
all,
ignoreExtensions,
experimental_useHermesParser
} = options;
const {
allowDeclareFields
} = options;
return {
all,
allowDeclareFields,
ignoreExtensions,
experimental_useHermesParser
};
}
//# sourceMappingURL=normalize-options.js.map

View File

@@ -0,0 +1 @@
{"version":3,"names":["_helperValidatorOption","require","v","OptionValidator","normalizeOptions","options","all","ignoreExtensions","experimental_useHermesParser","allowDeclareFields"],"sources":["../src/normalize-options.ts"],"sourcesContent":["import { OptionValidator } from \"@babel/helper-validator-option\";\nconst v = new OptionValidator(\"@babel/preset-flow\");\n\nexport default function normalizeOptions(options: any = {}) {\n let { all, ignoreExtensions, experimental_useHermesParser } = options;\n const { allowDeclareFields } = options;\n\n if (process.env.BABEL_8_BREAKING) {\n v.invariant(\n !(\"allowDeclareFields\" in options),\n `Since Babel 8, \\`declare property: A\\` is always supported, and the \"allowDeclareFields\" option is no longer available. Please remove it from your config.`,\n );\n const TopLevelOptions = {\n all: \"all\",\n ignoreExtensions: \"ignoreExtensions\",\n experimental_useHermesParser: \"experimental_useHermesParser\",\n };\n v.validateTopLevelOptions(options, TopLevelOptions);\n all = v.validateBooleanOption(TopLevelOptions.all, all);\n ignoreExtensions = v.validateBooleanOption(\n TopLevelOptions.ignoreExtensions,\n ignoreExtensions,\n );\n experimental_useHermesParser = v.validateBooleanOption(\n TopLevelOptions.experimental_useHermesParser,\n experimental_useHermesParser,\n );\n return {\n all,\n ignoreExtensions,\n experimental_useHermesParser,\n };\n } else {\n return {\n all,\n allowDeclareFields,\n ignoreExtensions,\n experimental_useHermesParser,\n };\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA;AACA,MAAMC,CAAC,GAAG,IAAIC,sCAAe,CAAC,oBAAoB,CAAC;AAEpC,SAASC,gBAAgBA,CAACC,OAAY,GAAG,CAAC,CAAC,EAAE;EAC1D,IAAI;IAAEC,GAAG;IAAEC,gBAAgB;IAAEC;EAA6B,CAAC,GAAGH,OAAO;EACrE,MAAM;IAAEI;EAAmB,CAAC,GAAGJ,OAAO;EA4BpC,OAAO;IACLC,GAAG;IACHG,kBAAkB;IAClBF,gBAAgB;IAChBC;EACF,CAAC;AAEL","ignoreList":[]}