diff --git a/assets/icons/eazy_passport.svg b/assets/icons/eazy_passport.svg new file mode 100644 index 0000000..84141b6 --- /dev/null +++ b/assets/icons/eazy_passport.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/express_passport.svg b/assets/icons/express_passport.svg new file mode 100644 index 0000000..cb8669c --- /dev/null +++ b/assets/icons/express_passport.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/guidebook.svg b/assets/icons/guidebook.svg new file mode 100644 index 0000000..f09943a --- /dev/null +++ b/assets/icons/guidebook.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/regular_passport.svg b/assets/icons/regular_passport.svg new file mode 100644 index 0000000..895cdc5 --- /dev/null +++ b/assets/icons/regular_passport.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/waiting_for_payment.svg b/assets/icons/waiting_for_payment.svg new file mode 100644 index 0000000..c7805af --- /dev/null +++ b/assets/icons/waiting_for_payment.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/placeholderImageSlider.jpg b/assets/images/placeholderImageSlider.jpg new file mode 100644 index 0000000..f8265fc Binary files /dev/null and b/assets/images/placeholderImageSlider.jpg differ diff --git a/assets/styles/Colors.tsx b/assets/styles/Colors.tsx index d3df5a3..9de4813 100644 --- a/assets/styles/Colors.tsx +++ b/assets/styles/Colors.tsx @@ -35,7 +35,7 @@ const Colors = StyleSheet.create({ color: '#4F97AB', }, secondary50: { - color: '#7BB1C0,', + color: '#7BB1C0', }, secondary60: { color: '#A7CBD5', diff --git a/declarations.d.ts b/declarations.d.ts new file mode 100644 index 0000000..e5bbc76 --- /dev/null +++ b/declarations.d.ts @@ -0,0 +1,6 @@ +declare module '*.svg' { + import React from 'react'; + import {SvgProps} from 'react-native-svg'; + const content: React.FC; + export default content; +} diff --git a/metro.config.js b/metro.config.js index ba95bf4..2be3cec 100644 --- a/metro.config.js +++ b/metro.config.js @@ -1,11 +1,24 @@ const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); +const defaultConfig = getDefaultConfig(__dirname); +const {assetExts, sourceExts} = defaultConfig.resolver; + /** * Metro configuration * https://reactnative.dev/docs/metro * - * @type {import('@react-native/metro-config').MetroConfig} + * @type {import('metro-config').MetroConfig} */ -const config = {}; +const config = { + transformer: { + babelTransformerPath: require.resolve( + 'react-native-svg-transformer/react-native', + ), + }, + resolver: { + assetExts: assetExts.filter(ext => ext !== 'svg'), + sourceExts: [...sourceExts, 'svg'], + }, +}; -module.exports = mergeConfig(getDefaultConfig(__dirname), config); +module.exports = mergeConfig(defaultConfig, config); diff --git a/package-lock.json b/package-lock.json index 0871936..409e370 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,12 +12,15 @@ "@react-navigation/elements": "^2.3.8", "@react-navigation/native": "^7.1.6", "@react-navigation/native-stack": "^7.3.10", + "dayjs": "^1.11.13", "react": "19.0.0", "react-native": "0.78.0", "react-native-element-dropdown": "^2.12.4", "react-native-paper": "^5.13.2", "react-native-safe-area-context": "^5.4.0", "react-native-screens": "^4.10.0", + "react-native-svg": "^15.11.2", + "react-native-svg-transformer": "^1.5.0", "react-native-vector-icons": "^10.2.0" }, "devDependencies": { @@ -2266,12 +2269,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/@jest/core/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3205,11 +3202,6 @@ "react": ">= 18.2.0" } }, - "node_modules/@react-navigation/core/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, "node_modules/@react-navigation/elements": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-2.3.8.tgz", @@ -3230,18 +3222,6 @@ } } }, - "node_modules/@react-navigation/elements/node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/@react-navigation/native": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.6.tgz", @@ -3324,6 +3304,296 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@svgr/core/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "dependencies": { + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3426,12 +3696,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -3871,8 +4135,7 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", @@ -4257,6 +4520,11 @@ "readable-stream": "^3.4.0" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -4435,7 +4703,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -4449,9 +4716,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001714", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001714.tgz", - "integrity": "sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==", + "version": "1.0.30001715", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", + "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==", "funding": [ { "type": "opencollective", @@ -4650,12 +4917,15 @@ "dev": true }, "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" } }, "node_modules/color-convert": { @@ -4683,19 +4953,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, "node_modules/colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -4877,6 +5134,74 @@ "node": ">= 8" } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -4937,8 +5262,7 @@ "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", - "dev": true + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" }, "node_modules/debug": { "version": "4.4.0", @@ -4997,7 +5321,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5107,6 +5430,66 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -5127,9 +5510,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.137.tgz", - "integrity": "sha512-/QSJaU2JyIuTbbABAo/crOs+SuAZLS+fVVS10PVrIT9hrRkmZl8Hb0xPSkKRUUWHQtYzXHpQUW3Dy5hwMzGZkA==" + "version": "1.5.139", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.139.tgz", + "integrity": "sha512-GGnRYOTdN5LYpwbIr0rwP/ZHOQSvAF6TG0LSzp28uCBb9JiXHJGmaaKw29qjNJc5bGnnp6kXJqRnGMQoELwi5w==" }, "node_modules/emittery": { "version": "0.13.1", @@ -5156,6 +5539,17 @@ "node": ">= 0.8" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -6324,9 +6718,9 @@ "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==" }, "node_modules/flow-parser": { - "version": "0.267.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.267.0.tgz", - "integrity": "sha512-eBgyFHiT/CHevT225CVQbwnAwRKLjqgtkkpDBMvNGV2C/Tz8x4Zr9FZeWed/cSWhRTiUhH7MXpIWSHkrzvaqdA==", + "version": "0.268.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.268.0.tgz", + "integrity": "sha512-URZmPy/jKDDIJUHUfC+5KNwaPcfONTL3R8xltQWVEoCKLWowVebEBg89nbAnYHNo6ev8KzKWFpOROfHZdaCoxA==", "engines": { "node": ">=0.4.0" } @@ -6828,7 +7222,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7574,12 +7967,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/jest-cli": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", @@ -7684,12 +8071,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -7731,12 +8112,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/jest-docblock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", @@ -7791,12 +8166,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/jest-environment-node": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", @@ -7884,12 +8253,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-leak-detector/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/jest-matcher-utils": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", @@ -7931,12 +8294,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/jest-message-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", @@ -7980,11 +8337,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, "node_modules/jest-mock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", @@ -8178,12 +8530,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -8263,11 +8609,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, "node_modules/jest-watcher": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", @@ -8337,7 +8678,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -8437,8 +8777,7 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -8559,8 +8898,7 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/locate-path": { "version": "6.0.0", @@ -8769,6 +9107,14 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -8826,6 +9172,11 @@ "node": ">= 0.4" } }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", @@ -9369,6 +9720,15 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/nocache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", @@ -9429,6 +9789,17 @@ "node": ">=8" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", @@ -9711,7 +10082,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -9723,7 +10093,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -9745,6 +10114,11 @@ "node": ">= 0.8" } }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9779,7 +10153,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -9953,6 +10326,12 @@ "@types/yargs-parser": "*" } }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "devOptional": true + }, "node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -10116,10 +10495,9 @@ } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "devOptional": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/react-native": { "version": "0.78.0", @@ -10195,9 +10573,9 @@ } }, "node_modules/react-native-paper": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-5.13.2.tgz", - "integrity": "sha512-qZbPZEfWWHmP7660K+xnYGhyDa2usr9aec7WEPBZQHrFe/dm9+yME2KZiDZq8ZbmSuj9ExV508brbdr1Ub/A/Q==", + "version": "5.13.3", + "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-5.13.3.tgz", + "integrity": "sha512-OyUonUq5JwVClSi21eh0WW4FYnjqEY/6VasOzFi1wit85FBYsL1nYSz1Gqoxsw5bA5yDDyms/gdSvrUcQMYjMw==", "dependencies": { "@callstack/react-theme-provider": "^3.0.9", "color": "^3.1.2", @@ -10210,6 +10588,28 @@ "react-native-vector-icons": "*" } }, + "node_modules/react-native-paper/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/react-native-paper/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/react-native-paper/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, "node_modules/react-native-safe-area-context": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.4.0.tgz", @@ -10232,6 +10632,35 @@ "react-native": "*" } }, + "node_modules/react-native-svg": { + "version": "15.11.2", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.11.2.tgz", + "integrity": "sha512-+YfF72IbWQUKzCIydlijV1fLuBsQNGMT6Da2kFlo1sh+LE3BIm/2Q7AR1zAAR6L0BFLi1WaQPLfFUC9bNZpOmw==", + "dependencies": { + "css-select": "^5.1.0", + "css-tree": "^1.1.3", + "warn-once": "0.1.1" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-svg-transformer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/react-native-svg-transformer/-/react-native-svg-transformer-1.5.0.tgz", + "integrity": "sha512-RG5fSWJT7mjCQYocgYFUo1KYPLOoypPVG5LQab+pZZO7m4ciGaQIe0mhok3W4R5jLQsEXKo0u+aQGkZV/bZG7w==", + "dependencies": { + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0", + "@svgr/plugin-svgo": "^8.1.0", + "path-dirname": "^1.0.2" + }, + "peerDependencies": { + "react-native": ">=0.59.0", + "react-native-svg": ">=12.0.0" + } + }, "node_modules/react-native-vector-icons": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.2.0.tgz", @@ -10325,11 +10754,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/react-native/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, "node_modules/react-native/node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -10579,7 +11003,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -11092,6 +11515,15 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -11100,6 +11532,14 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -11439,6 +11879,60 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo/node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/svgo/node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, "node_modules/terser": { "version": "5.39.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", @@ -11699,7 +12193,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index be07eb5..1bfc8fa 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,15 @@ "@react-navigation/elements": "^2.3.8", "@react-navigation/native": "^7.1.6", "@react-navigation/native-stack": "^7.3.10", + "dayjs": "^1.11.13", "react": "19.0.0", "react-native": "0.78.0", "react-native-element-dropdown": "^2.12.4", "react-native-paper": "^5.13.2", "react-native-safe-area-context": "^5.4.0", "react-native-screens": "^4.10.0", + "react-native-svg": "^15.11.2", + "react-native-svg-transformer": "^1.5.0", "react-native-vector-icons": "^10.2.0" }, "devDependencies": { diff --git a/src/components/PassportAppointmentCard.tsx b/src/components/PassportAppointmentCard.tsx new file mode 100644 index 0000000..5973f37 --- /dev/null +++ b/src/components/PassportAppointmentCard.tsx @@ -0,0 +1,196 @@ +import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; +import WaitingForPaymentIcon from '../../assets/icons/waiting_for_payment.svg'; +import {StyleSheet, Text, View} from 'react-native'; +import FontFamily from '../../assets/styles/FontFamily'; +import Colors from '../../assets/styles/Colors'; + +type PassportAppointmentCardProps = { + applicantName: string; + applicantCount: number; + appointmentDate: string; + appointmentTime: string; + serviceUnit: string; + status: string; +}; + +const renderStatusContent = (status: string) => { + let backgroundColor; + let IconComponent; + + switch (status) { + case 'Permohonan Kadaluarsa': + backgroundColor = Colors.indicatorRed.color; + IconComponent = () => ( + + ); + break; + case 'Sudah Terbayar': + backgroundColor = Colors.indicatorGreen.color; + IconComponent = () => ( + + ); + break; + default: + backgroundColor = Colors.indicatorOrange.color; + IconComponent = () => ; + break; + } + + return ( + <> + {status === 'Sudah Terbayar' && ( + + Lihat Persyaratan + + )} + + + {status} + + + ); +}; + +const PassportAppointmentCard: React.FC = ({ + applicantName, + applicantCount, + appointmentDate, + appointmentTime, + serviceUnit, + status, +}) => { + return ( + + + + {applicantName} + + {applicantCount} Pemohon + + + + + + + + {appointmentDate} + + + + {appointmentTime} + + + + {serviceUnit} + + + + {status === 'Menunggu Pembayaran' && ( + + + Selesaikan pembayaran sebelum + + 16 April 2025 23:30 + + )} + + {renderStatusContent(status)} + + + + ); +}; + +export default PassportAppointmentCard; + +const styles = StyleSheet.create({ + cardContainer: { + borderRadius: 20, + padding: 16, + backgroundColor: Colors.neutral100.color, + borderWidth: 1, + borderColor: Colors.secondary50.color, + }, + topCardContainer: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginVertical: 6, + }, + topCardContentTextWrapper: { + gap: 4, + flex: 1, + }, + applicantNameText: { + fontSize: 14, + ...FontFamily.notoSansBold, + textTransform: 'uppercase', + color: Colors.secondary30.color, + }, + applicantCountText: { + fontSize: 12, + ...FontFamily.notoSansRegular, + color: Colors.primary30.color, + }, + midCardContainer: { + gap: 8, + marginVertical: 8, + }, + midCardContentWrapper: { + flexDirection: 'row', + gap: 6, + }, + midCardContentTextStyle: { + fontSize: 12, + ...FontFamily.notoSansRegular, + color: Colors.primary30.color, + }, + appointmentAlertWrapper: { + marginTop: 5, + marginBottom: 13, + }, + appointmentAlertText: { + ...FontFamily.notoSansRegular, + fontSize: 10, + color: Colors.indicatorRed.color, + }, + appointmentStatusContainer: { + alignItems: 'flex-end', + justifyContent: 'flex-end', + flexDirection: 'row', + gap: 10, + }, + appointmentStatusWrapper: { + gap: 6, + alignItems: 'center', + backgroundColor: Colors.indicatorOrange.color, + padding: 8, + flexDirection: 'row', + borderRadius: 8, + }, + appointmentStatusText: { + fontSize: 12, + ...FontFamily.notoSansMedium, + color: Colors.neutral100.color, + includeFontPadding: false, + }, + seeRequirementsWrapper: { + backgroundColor: Colors.primary30.color, + borderRadius: 100, + paddingHorizontal: 16, + padding: 8, + flexDirection: 'row', + }, +}); diff --git a/src/model/DropdownData/CityData.tsx b/src/data/DropdownData/CityData.tsx similarity index 100% rename from src/model/DropdownData/CityData.tsx rename to src/data/DropdownData/CityData.tsx diff --git a/src/model/DropdownData/DistrictData.tsx b/src/data/DropdownData/DistrictData.tsx similarity index 100% rename from src/model/DropdownData/DistrictData.tsx rename to src/data/DropdownData/DistrictData.tsx diff --git a/src/model/DropdownData/GenderData.tsx b/src/data/DropdownData/GenderData.tsx similarity index 100% rename from src/model/DropdownData/GenderData.tsx rename to src/data/DropdownData/GenderData.tsx diff --git a/src/model/DropdownData/PostalCodeData.tsx b/src/data/DropdownData/PostalCodeData.tsx similarity index 100% rename from src/model/DropdownData/PostalCodeData.tsx rename to src/data/DropdownData/PostalCodeData.tsx diff --git a/src/model/DropdownData/ProvinceData.tsx b/src/data/DropdownData/ProvinceData.tsx similarity index 100% rename from src/model/DropdownData/ProvinceData.tsx rename to src/data/DropdownData/ProvinceData.tsx diff --git a/src/data/History/PassportAppointmentData.tsx b/src/data/History/PassportAppointmentData.tsx new file mode 100644 index 0000000..ffcb940 --- /dev/null +++ b/src/data/History/PassportAppointmentData.tsx @@ -0,0 +1,49 @@ +const passportAppointmentData = [ + { + id: '1', + applicantName: 'Irma Wahyudini', + applicantCount: 1, + appointmentDate: 'Kamis, 17 April 2025', + appointmentTime: '10.00 - 11.00 WIB', + serviceUnit: 'Unit Layanan Paspor I Jakarta Selatan (Pondok Pinang)', + status: 'Menunggu Pembayaran', + }, + { + id: '2', + applicantName: 'Salwa Aisyah Adhani', + applicantCount: 2, + appointmentDate: 'Senin, 14 April 2025', + appointmentTime: '08:00 - 09:00 WIB', + serviceUnit: 'Kantor Imigrasi Depok', + status: 'Sudah Terbayar', + }, + { + id: '3', + applicantName: 'Salwa Aisyah Adhani', + applicantCount: 2, + appointmentDate: 'Senin, 14 April 2025', + appointmentTime: '08:00 - 09:00 WIB', + serviceUnit: 'Kantor Imigrasi Depok', + status: 'Menunggu Pembayaran', + }, + { + id: '4', + applicantName: 'Salwa Aisyah Adhani', + applicantCount: 2, + appointmentDate: 'Senin, 23 September 2024', + appointmentTime: '10:00 - 11:00 WIB', + serviceUnit: 'Kantor Imigrasi Depok', + status: 'Permohonan Kadaluarsa', + }, + { + id: '5', + applicantName: 'Yulfarisa Hasnah', + applicantCount: 2, + appointmentDate: 'Senin, 14 April 2025', + appointmentTime: '08:00 - 09:00 WIB', + serviceUnit: 'Kantor Imigrasi Depok', + status: 'Sudah Terbayar', + }, +]; + +export default passportAppointmentData; diff --git a/src/data/Notification/NotificationData.tsx b/src/data/Notification/NotificationData.tsx new file mode 100644 index 0000000..f9b9515 --- /dev/null +++ b/src/data/Notification/NotificationData.tsx @@ -0,0 +1,91 @@ +const notificationData = [ + { + id: '1', + title: 'Pembayaran Permohonan', + message: + 'Anda belum melakukan pembayaran untuk IRMA WAHYUDINI. Silakan melakukan pembayaran sebelum Selasa, 8 April 2025, pukul 23:33:03 WIB.', + details: + 'Bila tidak melakukan pembayaran, maka permohonan Anda akan otomatis ditolak oleh sistem.', + timestamp: '2025-04-19T10:50:00+07:00', + }, + { + id: '2', + title: 'Pembayaran Permohonan', + message: + 'Anda belum melakukan pembayaran untuk MUHAMMAD AMMAR. Silakan melakukan pembayaran sebelum Minggu, 29 September 2024, pukul 23:33:03 WIB.', + details: + 'Bila tidak melakukan pembayaran, maka permohonan Anda akan otomatis ditolak oleh sistem.', + timestamp: '2024-09-27T00:00:00+07:00', + }, + { + id: '3', + title: 'Hari Penjadwalan', + message: + 'Halo SALWA AISYAH ADHANI, hari ini adalah jadwal kunjungan Anda ke KANTOR IMIGRASI DEPOK pada sesi Senin, 7 November 2022, pukul 12:30-15:00 WIB.', + details: + 'Kode Permohonan Anda adalah 2068000001633869. Pastikan Anda membawa dokumen yang dibutuhkan.', + timestamp: '2022-11-07T00:00:00+07:00', + }, + { + id: '4', + title: 'Dokumen Siap Diambil', + message: + 'Dokumen paspor atas nama NURUL HUDA telah selesai diproses dan siap untuk diambil di KANTOR IMIGRASI YOGYAKARTA.', + details: + 'Harap ambil dokumen dalam waktu 14 hari kerja sejak pemberitahuan ini.', + timestamp: '2025-04-18T14:20:00+07:00', + }, + { + id: '5', + title: 'Jadwal Ulang Permohonan', + message: + 'Permohonan atas nama LUTFI HAKIM perlu dijadwalkan ulang karena adanya gangguan sistem.', + details: + 'Silakan pilih jadwal baru melalui aplikasi sebelum Jumat, 21 April 2025.', + timestamp: '2025-04-17T09:10:00+07:00', + }, + { + id: '6', + title: 'Verifikasi Berhasil', + message: + 'Verifikasi identitas untuk ANISA FITRIANI telah berhasil dilakukan.', + details: + 'Anda dapat melanjutkan ke tahap selanjutnya yaitu pembayaran permohonan.', + timestamp: '2025-04-16T13:45:00+07:00', + }, + { + id: '7', + title: 'Permohonan Ditolak', + message: + 'Permohonan atas nama RAKA ARDIANSYAH ditolak karena dokumen tidak lengkap.', + details: 'Silakan ajukan ulang permohonan dengan dokumen yang sesuai.', + timestamp: '2025-04-14T11:30:00+07:00', + }, + { + id: '8', + title: 'Batas Waktu Pembayaran', + message: + 'Pembayaran untuk permohonan atas nama SITI AMINAH akan berakhir dalam 1 jam.', + details: + 'Pastikan pembayaran dilakukan sebelum batas waktu agar permohonan tidak dibatalkan.', + timestamp: '2025-04-19T21:00:00+07:00', + }, + { + id: '9', + title: 'Sesi Foto dan Biometrik', + message: + 'Jadwal sesi foto dan biometrik atas nama DANIL MAULANA adalah pada Rabu, 23 April 2025 pukul 09:00 WIB.', + details: 'Mohon hadir 15 menit lebih awal dengan membawa dokumen asli.', + timestamp: '2025-04-20T08:00:00+07:00', + }, + { + id: '10', + title: 'Pembayaran Berhasil', + message: + 'Pembayaran untuk permohonan atas nama TIA ROSMAWATI telah berhasil.', + details: 'Silakan menunggu informasi jadwal kedatangan.', + timestamp: '2025-04-15T10:00:00+07:00', + }, +]; + +export default notificationData; diff --git a/src/screens/editProfile/index.tsx b/src/screens/editProfile/index.tsx index d83b503..613f046 100644 --- a/src/screens/editProfile/index.tsx +++ b/src/screens/editProfile/index.tsx @@ -7,11 +7,11 @@ import {RootStackParamList} from '../../navigation/type'; import {NativeStackNavigationProp} from '@react-navigation/native-stack'; import {useNavigation} from '@react-navigation/native'; import TextInputComponent from '../../components/TextInput'; -import genderData from '../../model/DropdownData/GenderData'; -import provinceData from '../../model/DropdownData/ProvinceData'; -import cityData from '../../model/DropdownData/CityData'; -import districtData from '../../model/DropdownData/DistrictData'; -import postalCodeData from '../../model/DropdownData/PostalCodeData'; +import genderData from '../../data/DropdownData/GenderData'; +import provinceData from '../../data/DropdownData/ProvinceData'; +import cityData from '../../data/DropdownData/CityData'; +import districtData from '../../data/DropdownData/DistrictData'; +import postalCodeData from '../../data/DropdownData/PostalCodeData'; import {Button} from 'react-native-paper'; type EditProfileScreenNavigationProp = NativeStackNavigationProp< diff --git a/src/screens/history/index.tsx b/src/screens/history/index.tsx index 4bd9c34..d986832 100644 --- a/src/screens/history/index.tsx +++ b/src/screens/history/index.tsx @@ -1,21 +1,72 @@ import React from 'react'; -import {StyleSheet, Text, View} from 'react-native'; +import {FlatList, StatusBar, Text, View} from 'react-native'; +import styles from './styles'; +import Colors from '../../../assets/styles/Colors'; +import passportAppointmentData from '../../data/History/PassportAppointmentData'; +import PassportAppointmentCard from '../../components/PassportAppointmentCard'; +import {useNavigation, useNavigationState} from '@react-navigation/native'; +import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; +import {RootStackParamList} from '../../navigation/type'; +import {NativeStackNavigationProp} from '@react-navigation/native-stack'; + +type HistoryScreenNavigationProp = NativeStackNavigationProp< + RootStackParamList, + 'History' +>; + +const ItemSeparator = () => ; function HistoryScreen() { + const navigation = useNavigation(); + const previousRoute = useNavigationState(state => { + const index = state.index; + return index > 0 ? state.routes[index - 1].name : null; + }); + + const showNavBackAppBar = previousRoute === 'NavigationRoute'; + return ( - History Screen + + {showNavBackAppBar ? ( + + navigation.goBack()} + /> + Riwayat + + ) : ( + + Riwayat + + )} + + + ( + + )} + keyExtractor={item => item.id} + ItemSeparatorComponent={ItemSeparator} + /> + ); } -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - backgroundColor: 'white', - }, -}); - export default HistoryScreen; diff --git a/src/screens/history/styles.tsx b/src/screens/history/styles.tsx new file mode 100644 index 0000000..e132dd2 --- /dev/null +++ b/src/screens/history/styles.tsx @@ -0,0 +1,52 @@ +import {StyleSheet} from 'react-native'; +import FontFamily from '../../../assets/styles/FontFamily'; +import Colors from '../../../assets/styles/Colors'; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: 'white', + }, + appBarTitle: { + color: Colors.neutral100.color, + ...FontFamily.notoSansExtraBold, + fontSize: 28, + marginStart: 16, + includeFontPadding: false, + }, + appBarContainer: { + height: 64, + backgroundColor: Colors.secondary30.color, + justifyContent: 'center', + }, + appBarNavBackContainer: { + height: 64, + flexDirection: 'row', + alignItems: 'center', + backgroundColor: Colors.secondary30.color, + }, + appBarNavBackTitle: { + color: Colors.neutral100.color, + ...FontFamily.notoSansRegular, + fontSize: 22, + marginStart: 16, + }, + appBarNavBackIcon: { + marginLeft: 16, + }, + topBackground: { + backgroundColor: Colors.secondary30.color, + height: 85, + alignItems: 'center', + }, + cardWrapper: { + margin: 16, + marginBottom: 165, + marginTop: -69, + }, + flatllistGap: { + height: 8, + }, +}); + +export default styles; diff --git a/src/screens/home/index.tsx b/src/screens/home/index.tsx index 901ebcd..02005de 100644 --- a/src/screens/home/index.tsx +++ b/src/screens/home/index.tsx @@ -1,11 +1,109 @@ import * as React from 'react'; import styles from './styles'; -import {View, Text} from 'react-native'; +import {View, Text, StatusBar, FlatList} from 'react-native'; +import Colors from '../../../assets/styles/Colors'; +import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; +import {NativeStackNavigationProp} from '@react-navigation/native-stack'; +import {RootStackParamList} from '../../navigation/type'; +import {useNavigation} from '@react-navigation/native'; +import RegularPassportIcon from '../../../assets/icons/regular_passport.svg'; +import ExpressPassportIcon from '../../../assets/icons/express_passport.svg'; +import GuidebookIcon from '../../../assets/icons/guidebook.svg'; +import EazyPassportIcon from '../../../assets/icons/eazy_passport.svg'; +import passportAppointmentData from '../../data/History/PassportAppointmentData'; +import PassportAppointmentCard from '../../components/PassportAppointmentCard'; + +type HomeScreenNavigationProp = NativeStackNavigationProp< + RootStackParamList, + 'Home' +>; + +const ItemSeparator = () => ; + +const RenderContent = () => { + const navigation = useNavigation(); + + return ( + <> + + + Layanan + + + + + + Paspor Reguler + + + + + + Paspor Percepatan + + + + + + Buku Panduan + + + + + + EAZY Pasport + + + + + + Status Permohonan + navigation.navigate('History')}> + Lihat semua + + + + ( + + )} + keyExtractor={item => item.id} + ItemSeparatorComponent={ItemSeparator} + /> + + + + ); +}; function HomeScreen() { + const navigation = useNavigation(); return ( - Home Screen + + + Halo, Salwa! + navigation.navigate('Notification')} + /> + + } /> ); } diff --git a/src/screens/home/styles.tsx b/src/screens/home/styles.tsx index efc4e0a..0f47624 100644 --- a/src/screens/home/styles.tsx +++ b/src/screens/home/styles.tsx @@ -1,19 +1,87 @@ import {StyleSheet} from 'react-native'; import Colors from '../../../assets/styles/Colors'; +import FontFamily from '../../../assets/styles/FontFamily'; const styles = StyleSheet.create({ container: { flex: 1, - alignItems: 'center', - justifyContent: 'center', backgroundColor: 'white', }, - bottomNavLabel: { + appBarTitle: { color: Colors.neutral100.color, + ...FontFamily.notoSansExtraBold, + fontSize: 28, + marginVertical: 14, + }, + appBarContainer: { + height: 64, + backgroundColor: Colors.secondary30.color, + justifyContent: 'space-between', + alignItems: 'center', + paddingHorizontal: 16, + flexDirection: 'row', + }, + topContainer: { + backgroundColor: Colors.secondary30.color, + height: 245, + alignItems: 'center', + }, + serviceContainer: { + marginVertical: 12, + marginHorizontal: 16, + gap: 12, + }, + serviceText: { + color: Colors.primary30.color, + ...FontFamily.notoSansExtraBold, + fontSize: 18, + }, + serviceOptionWrapper: { + flexDirection: 'row', + gap: 10, + justifyContent: 'center', + }, + serviceOptionContainer: { + alignItems: 'center', + marginHorizontal: 12, + }, + serviceIcon: { + padding: 8, + backgroundColor: Colors.secondary70.color, + borderRadius: 4, + }, + serviceDesc: { + width: 60, textAlign: 'center', - alignSelf: 'center', + fontSize: 10, + marginTop: 8, + color: Colors.primary30.color, + ...FontFamily.notoSansRegular, + }, + applicationStatusContainer: { + marginHorizontal: 16, + }, + applicationStatusTextWrapper: { + flexDirection: 'row', + justifyContent: 'space-between', + marginVertical: 12, + alignItems: 'center', + }, + applicationStatusTitle: { + color: Colors.primary30.color, + ...FontFamily.notoSansExtraBold, + fontSize: 18, + }, + applicationStatusSeeAll: { + color: Colors.secondary30.color, fontSize: 12, - position: 'absolute', + ...FontFamily.notoSansSemiBold, + }, + cardWrapper: { + marginBottom: 16, + }, + flatllistGap: { + height: 8, }, }); diff --git a/src/screens/notification/index.tsx b/src/screens/notification/index.tsx index 83581b9..970fc9f 100644 --- a/src/screens/notification/index.tsx +++ b/src/screens/notification/index.tsx @@ -1,21 +1,86 @@ import React from 'react'; -import {StyleSheet, Text, View} from 'react-native'; +import {FlatList, StatusBar, Text, View} from 'react-native'; +import Colors from '../../../assets/styles/Colors'; +import styles from './styles'; +import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; +import {RootStackParamList} from '../../navigation/type'; +import {NativeStackNavigationProp} from '@react-navigation/native-stack'; +import {useNavigation} from '@react-navigation/native'; +import dayjs from 'dayjs'; +import 'dayjs/locale/id'; +import notificationData from '../../data/Notification/NotificationData'; + +type NotificationScreenNavigationProp = NativeStackNavigationProp< + RootStackParamList, + 'Notification' +>; + +type NotificationCardProps = { + title: string; + message: string; + details: string; + timestamp: string; +}; + +const NotificationCard: React.FC = ({ + title, + message, + details, + timestamp, +}) => { + dayjs.locale('id'); + const formattedTime = dayjs(timestamp).format('D MMMM YYYY'); + return ( + + + {title} + {formattedTime} + + {message} + {details} + + ); +}; + +const ItemSeparator = () => ; function NotificationScreen() { + const navigation = useNavigation(); + return ( - Notification Screen + + + navigation.goBack()} + /> + Notifikasi + + + + ( + + )} + keyExtractor={item => item.id} + ItemSeparatorComponent={ItemSeparator} + /> + ); } -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - backgroundColor: 'white', - }, -}); - export default NotificationScreen; diff --git a/src/screens/notification/styles.tsx b/src/screens/notification/styles.tsx new file mode 100644 index 0000000..e1a8f15 --- /dev/null +++ b/src/screens/notification/styles.tsx @@ -0,0 +1,70 @@ +import {StyleSheet} from 'react-native'; +import Colors from '../../../assets/styles/Colors'; +import FontFamily from '../../../assets/styles/FontFamily'; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: 'white', + }, + appBarTitle: { + color: Colors.neutral100.color, + ...FontFamily.notoSansRegular, + fontSize: 22, + marginStart: 16, + }, + appBarIcon: { + marginLeft: 16, + }, + appBarContainer: { + height: 64, + flexDirection: 'row', + alignItems: 'center', + backgroundColor: Colors.secondary30.color, + }, + topBackground: { + backgroundColor: Colors.secondary30.color, + height: 85, + alignItems: 'center', + }, + cardWrapper: { + margin: 16, + marginBottom: 165, + marginTop: -69, + }, + cardContainer: { + borderRadius: 8, + padding: 16, + backgroundColor: Colors.neutral100.color, + borderWidth: 1, + borderColor: Colors.secondary50.color, + }, + topCardContentWrapper: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, + flatllistGap: { + height: 8, + }, + notificationTitle: { + fontSize: 14, + ...FontFamily.notoSansBold, + }, + notificationMessage: { + fontSize: 12, + marginTop: 4, + ...FontFamily.notoSansRegular, + }, + notificationDetail: { + fontSize: 12, + marginTop: 4, + ...FontFamily.notoSansRegular, + }, + notificationTime: { + fontSize: 10, + ...FontFamily.notoSansRegular, + }, +}); + +export default styles; diff --git a/src/screens/register/index.tsx b/src/screens/register/index.tsx index 0758650..9cd8a0d 100644 --- a/src/screens/register/index.tsx +++ b/src/screens/register/index.tsx @@ -8,7 +8,7 @@ import styles from './styles'; import TextInputComponent from '../../components/TextInput'; import {Button, Checkbox} from 'react-native-paper'; import Colors from '../../../assets/styles/Colors'; -import genderData from '../../model/DropdownData/GenderData'; +import genderData from '../../data/DropdownData/GenderData'; type RegisterScreenNavigationProp = NativeStackNavigationProp< RootStackParamList,