diff --git a/03_source/mobile.integrated.not_working.del/.editorconfig b/03_source/mobile.integrated.not_working.del/.editorconfig
deleted file mode 100644
index 82da0b1..0000000
--- a/03_source/mobile.integrated.not_working.del/.editorconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-# http://editorconfig.org
-
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[*.md]
-insert_final_newline = false
-trim_trailing_whitespace = false
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/.firebaserc b/03_source/mobile.integrated.not_working.del/.firebaserc
deleted file mode 100644
index 711741d..0000000
--- a/03_source/mobile.integrated.not_working.del/.firebaserc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "projects": {
- "default": "ionic-react-conference-app"
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/.github/CONTRIBUTING.md b/03_source/mobile.integrated.not_working.del/.github/CONTRIBUTING.md
deleted file mode 100644
index 20ff866..0000000
--- a/03_source/mobile.integrated.not_working.del/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Contributing to the Ionic React Conference Application
-
-Thank you for taking the time to contribute! :tada::+1:
-
-The following is a set of guidelines for contributing to the conference app. These are just guidelines, not rules, use your best judgment and feel free to propose changes to this document in a pull request.
-
-## Table of Contents
-- [Reporting Issues](#reporting-issues)
- - [Before Submitting an Issue](#before-submitting-an-issue)
- - [Determining the Repository](#determining-the-repository)
- - [Submitting the Issue](#submitting-the-issue)
-- [Submitting a Pull Request](#submitting-a-pull-request)
- - [Guidelines for Submitting](#guidelines-for-submitting)
- - [Code Style](#code-style)
-
-## Reporting Issues
-
-Before submitting an issue, please go through [the list below](#before-submitting-an-issue) as you might find a solution to your issue.
-
-### Before Submitting an Issue
-
-* Make sure you get the latest version of the code and run through the [Getting Started](https://github.com/ionic-team/ionic-react-conference-app#getting-started) steps to see if this resolves your issue.
-* Check the [forum](https://forum.ionicframework.com) for similar questions and answers.
-* Go through [all issues](https://github.com/ionic-team/ionic-react-conference-app/issues?utf8=%E2%9C%93&q=is%3Aissue) on this repository to see if the issue has already been created. It could have been closed with a resolution, so check closed issues, too.
-* Chat with us on [Discord](https://ionic.link/discord) to see if we can find a solution to the problem!
-* [Determine which repository](#determining-the-repository) the problem should be reported in.
-
-### Determining the Repository
-
-There are several repositories being used for Ionic, which makes it difficult to determine which one to report an issue to. Don't worry if you aren't sure, we can always move it!
-
-* The [Ionic Framework repository](https://github.com/ionic-team/ionic-framework) is a repository for all things related to the Ionic Framework. If you are able to reproduce the issue in any of the Ionic starters (or an existing project), you'll want to submit the issue [here](https://github.com/ionic-team/ionic-framework/issues).
-* The [Ionic CLI repository](https://github.com/ionic-team/ionic-cli) contains all of the code that allows you to run `ionic` commands from a terminal window. It is safe to put any issues [here](https://github.com/ionic-team/ionic-cli/issues) that relate to running an `ionic` command.
-* **This repository** is a demo of the Ionic Framework. If you find an issue with this app that does not occur on [a new app](https://ionicframework.com/docs/intro/cli#start-an-app), please submit the issue [here](https://github.com/ionic-team/ionic-react-conference-app/issues).
-
-### Submitting the Issue
-
-* **Use a clear and descriptive title** for the issue to identify the problem. This makes it easier for others to find.
-* **Describe the exact steps to reproduce the problem** with as many details as needed.
-* **Provide your configuration** by running `ionic info` in a terminal from *within* the project folder and pasting this information in the issue.
-
-## Submitting a Pull Request
-
-### Guidelines for Submitting
-
-When in doubt, keep your pull requests small. To give a PR the best chance of getting accepted, do not bundle more than one "feature" or bug fix per PR. Doing so makes it very hard to accept it if one of the fixes has issues.
-
-It's always best to create two smaller PRs than one big one.
-
-Talk to us before creating a PR that refactors the code or directory structure of the project. This project is constantly changing to reflect the latest version of Ionic Framework so sometimes it will be in the process of getting fixed.
-
-### Code Style
-
-Make sure to follow the existing code style as much as possible.
-
-* No underscores prefixing JS functions.
-* Use flat Sass:
- * **Don't** use [BEM conventions](https://css-tricks.com/bem-101/)
- * Avoid nesting selectors. This is done to make it easier for users without Sass experience to understand and read.
diff --git a/03_source/mobile.integrated.not_working.del/.gitignore b/03_source/mobile.integrated.not_working.del/.gitignore
deleted file mode 100644
index 0f63220..0000000
--- a/03_source/mobile.integrated.not_working.del/.gitignore
+++ /dev/null
@@ -1,93 +0,0 @@
-**/*log
-**/*log.*
-**/*del
-**/*del.*
-**/*copy*
-*copy*
-**/_backup/*
-**/*bak
-**/*bak.*
-
-# Logs
-.firebase
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (http://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-jspm_packages/
-
-# Typescript v1 declaration files
-typings/
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variables file
-.env
-
-# See https://help.github.com/ignore-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-
-# testing
-/coverage
-
-# production
-/dist
-
-# misc
-.DS_Store
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-.stencil/
diff --git a/03_source/mobile.integrated.not_working.del/.netlify/_redirects b/03_source/mobile.integrated.not_working.del/.netlify/_redirects
deleted file mode 100644
index 50a4633..0000000
--- a/03_source/mobile.integrated.not_working.del/.netlify/_redirects
+++ /dev/null
@@ -1 +0,0 @@
-/* /index.html 200
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/.netlify/state.json b/03_source/mobile.integrated.not_working.del/.netlify/state.json
deleted file mode 100644
index f97268e..0000000
--- a/03_source/mobile.integrated.not_working.del/.netlify/state.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "siteId": "86675615-6271-4145-8ffe-9c78dc4d34a3"
-}
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/.prettierrc b/03_source/mobile.integrated.not_working.del/.prettierrc
deleted file mode 100644
index 6cd9b52..0000000
--- a/03_source/mobile.integrated.not_working.del/.prettierrc
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "semi": true,
- "singleQuote": true,
- "trailingComma": "es5",
- "printWidth": 160
-}
diff --git a/03_source/mobile.integrated.not_working.del/.vscode/settings.json b/03_source/mobile.integrated.not_working.del/.vscode/settings.json
deleted file mode 100644
index 3662b37..0000000
--- a/03_source/mobile.integrated.not_working.del/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "typescript.tsdk": "node_modules/typescript/lib"
-}
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/LICENSE b/03_source/mobile.integrated.not_working.del/LICENSE
deleted file mode 100644
index 623c70a..0000000
--- a/03_source/mobile.integrated.not_working.del/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright 2015-present Drifty Co.
-http://drifty.com/
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/03_source/mobile.integrated.not_working.del/README.md b/03_source/mobile.integrated.not_working.del/README.md
deleted file mode 100644
index 7a24529..0000000
--- a/03_source/mobile.integrated.not_working.del/README.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# Ionic React Conference App
-
-[](https://ionicframework.com)
-[](https://reactjs.org)
-[](LICENSE)
-
-
-This is a **kitchen-sink demo application** built with **Ionic Framework** and **React**. It showcases a wide range of Ionic components and features in the context of a fictional tech conference app.
-
-**Note**: There is no actual Ionic Conference. This project is purely for demonstration purposes.
-
-👉 [Try the Live Demo](https://ionic-react-conference-app-git-main-ionic1.vercel.app/tutorial)
-
-## 🧱 Framework Variants
-
-This app is also available in other frameworks:
-
-- 🔗 [Ionic Angular Conference App](https://github.com/ionic-team/ionic-conference-app)
-- 🔗 [Ionic Vue Conference App](https://github.com/ionic-team/ionic-vue-conference-app)
-- ✅ **You're viewing the React version**
-
-## ✨ Features
-
-- Browse conference schedule with filtering
-- View speaker bios and session details
-- User authentication and profile management
-- Interactive maps for venue navigation
-- Push notifications support
-- Dark/Light mode toggling
-- Cross-platform support: iOS, Android, and Web
-
-## ⚙️ Getting Started
-
-### Prerequisites
-
-- Node.js (LTS version recommended) → [Download](https://nodejs.org/)
-- npm (included with Node.js)
-- Ionic CLI → Install globally:
- ```bash
- npm install -g ionic
- ```
-
-### Installation
-1. Clone the repository:
- ```bash
- git clone https://github.com/ionic-team/ionic-react-conference-app.git
- ```
-2. Navigate into the project:
- ```bash
- cd ionic-react-conference-app
- ```
-3. Install dependencies:
- ```bash
- npm install
- ```
-4. Start the dev server:
- ```bash
- ionic serve
- ```
-5. Open your browser to:
- ```
- http://localhost:3000
- ```
-
-## 🤝 Contributing
-
-We welcome contributions! Please see our [Contributing Guide](.github/CONTRIBUTING.md) for details on how to submit pull requests, report issues, and contribute to the project.
-
-## 📄 License
-
-This project is licensed under the MIT [License](./LICENSE).
diff --git a/03_source/mobile.integrated.not_working.del/android/.gitignore b/03_source/mobile.integrated.not_working.del/android/.gitignore
deleted file mode 100644
index 48354a3..0000000
--- a/03_source/mobile.integrated.not_working.del/android/.gitignore
+++ /dev/null
@@ -1,101 +0,0 @@
-# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
-
-# Built application files
-*.apk
-*.aar
-*.ap_
-*.aab
-
-# Files for the ART/Dalvik VM
-*.dex
-
-# Java class files
-*.class
-
-# Generated files
-bin/
-gen/
-out/
-# Uncomment the following line in case you need and you don't have the release build type files in your app
-# release/
-
-# Gradle files
-.gradle/
-build/
-
-# Local configuration file (sdk path, etc)
-local.properties
-
-# Proguard folder generated by Eclipse
-proguard/
-
-# Log Files
-*.log
-
-# Android Studio Navigation editor temp files
-.navigation/
-
-# Android Studio captures folder
-captures/
-
-# IntelliJ
-*.iml
-.idea/workspace.xml
-.idea/tasks.xml
-.idea/gradle.xml
-.idea/assetWizardSettings.xml
-.idea/dictionaries
-.idea/libraries
-# Android Studio 3 in .gitignore file.
-.idea/caches
-.idea/modules.xml
-# Comment next line if keeping position of elements in Navigation Editor is relevant for you
-.idea/navEditor.xml
-
-# Keystore files
-# Uncomment the following lines if you do not want to check your keystore files in.
-#*.jks
-#*.keystore
-
-# External native build folder generated in Android Studio 2.2 and later
-.externalNativeBuild
-.cxx/
-
-# Google Services (e.g. APIs or Firebase)
-# google-services.json
-
-# Freeline
-freeline.py
-freeline/
-freeline_project_description.json
-
-# fastlane
-fastlane/report.xml
-fastlane/Preview.html
-fastlane/screenshots
-fastlane/test_output
-fastlane/readme.md
-
-# Version control
-vcs.xml
-
-# lint
-lint/intermediates/
-lint/generated/
-lint/outputs/
-lint/tmp/
-# lint/reports/
-
-# Android Profiling
-*.hprof
-
-# Cordova plugins for Capacitor
-capacitor-cordova-android-plugins
-
-# Copied web assets
-app/src/main/assets/public
-
-# Generated Config files
-app/src/main/assets/capacitor.config.json
-app/src/main/assets/capacitor.plugins.json
-app/src/main/res/xml/config.xml
diff --git a/03_source/mobile.integrated.not_working.del/android/app/.gitignore b/03_source/mobile.integrated.not_working.del/android/app/.gitignore
deleted file mode 100644
index 043df80..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build/*
-!/build/.npmkeep
diff --git a/03_source/mobile.integrated.not_working.del/android/app/build.gradle b/03_source/mobile.integrated.not_working.del/android/app/build.gradle
deleted file mode 100644
index 6011e85..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/build.gradle
+++ /dev/null
@@ -1,54 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- namespace "io.ionic.starter"
- compileSdk rootProject.ext.compileSdkVersion
- defaultConfig {
- applicationId "io.ionic.starter"
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- aaptOptions {
- // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
- // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
- ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
- }
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-}
-
-repositories {
- flatDir{
- dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
- }
-}
-
-dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
- implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion"
- implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion"
- implementation project(':capacitor-android')
- testImplementation "junit:junit:$junitVersion"
- androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
- androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
- implementation project(':capacitor-cordova-android-plugins')
-}
-
-apply from: 'capacitor.build.gradle'
-
-try {
- def servicesJSON = file('google-services.json')
- if (servicesJSON.text) {
- apply plugin: 'com.google.gms.google-services'
- }
-} catch(Exception e) {
- logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
-}
diff --git a/03_source/mobile.integrated.not_working.del/android/app/capacitor.build.gradle b/03_source/mobile.integrated.not_working.del/android/app/capacitor.build.gradle
deleted file mode 100644
index adabd97..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/capacitor.build.gradle
+++ /dev/null
@@ -1,19 +0,0 @@
-// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
-
-android {
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_21
- targetCompatibility JavaVersion.VERSION_21
- }
-}
-
-apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
-dependencies {
- implementation project(':capacitor-preferences')
-
-}
-
-
-if (hasProperty('postBuildExtras')) {
- postBuildExtras()
-}
diff --git a/03_source/mobile.integrated.not_working.del/android/app/proguard-rules.pro b/03_source/mobile.integrated.not_working.del/android/app/proguard-rules.pro
deleted file mode 100644
index f1b4245..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/03_source/mobile.integrated.not_working.del/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java
deleted file mode 100644
index f2c2217..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.getcapacitor.myapp;
-
-import static org.junit.Assert.*;
-
-import android.content.Context;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.platform.app.InstrumentationRegistry;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-
- @Test
- public void useAppContext() throws Exception {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
-
- assertEquals("com.getcapacitor.app", appContext.getPackageName());
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/AndroidManifest.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 340e7df..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/java/io/ionic/starter/MainActivity.java b/03_source/mobile.integrated.not_working.del/android/app/src/main/java/io/ionic/starter/MainActivity.java
deleted file mode 100644
index 73e3a98..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/java/io/ionic/starter/MainActivity.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.ionic.starter;
-
-import com.getcapacitor.BridgeActivity;
-
-public class MainActivity extends BridgeActivity {}
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-hdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-hdpi/splash.png
deleted file mode 100644
index 90e8400..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-hdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-mdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-mdpi/splash.png
deleted file mode 100644
index 990610d..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-mdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xhdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xhdpi/splash.png
deleted file mode 100644
index 3c67e01..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xxhdpi/splash.png
deleted file mode 100644
index cff9eef..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xxhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xxxhdpi/splash.png
deleted file mode 100644
index cd4b88d..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-land-xxxhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-hdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-hdpi/splash.png
deleted file mode 100644
index fdd3184..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-hdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-mdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-mdpi/splash.png
deleted file mode 100644
index 7dcce56..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-mdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xhdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xhdpi/splash.png
deleted file mode 100644
index bcd0278..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xxhdpi/splash.png
deleted file mode 100644
index 9048412..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xxhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xxxhdpi/splash.png
deleted file mode 100644
index a15aaa1..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-port-xxxhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index c7bd21d..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable/ic_launcher_background.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index d5fccc5..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable/splash.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable/splash.png
deleted file mode 100644
index 990610d..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/drawable/splash.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/layout/activity_main.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index b5ad138..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index 036d09b..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index 036d09b..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index d8c727b..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index 2127973..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index d8c727b..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 3b955cd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index 8ed0605..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 3b955cd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index a080869..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index df0f158..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index a080869..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 3c46f09..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 2960cbb..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 3c46f09..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 2a94e06..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index d2ea9ab..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 2a94e06..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/ic_launcher_background.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/ic_launcher_background.xml
deleted file mode 100644
index c5d5899..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/ic_launcher_background.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- #FFFFFF
-
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/strings.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/strings.xml
deleted file mode 100644
index a15be2e..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ionic-react-conference-app
- ionic-react-conference-app
- io.ionic.starter
- io.ionic.starter
-
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/styles.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/styles.xml
deleted file mode 100644
index be874e5..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/xml/file_paths.xml b/03_source/mobile.integrated.not_working.del/android/app/src/main/res/xml/file_paths.xml
deleted file mode 100644
index bd0c4d8..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/main/res/xml/file_paths.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/03_source/mobile.integrated.not_working.del/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java
deleted file mode 100644
index 0297327..0000000
--- a/03_source/mobile.integrated.not_working.del/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.getcapacitor.myapp;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see Testing documentation
- */
-public class ExampleUnitTest {
-
- @Test
- public void addition_isCorrect() throws Exception {
- assertEquals(4, 2 + 2);
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/android/build.gradle b/03_source/mobile.integrated.not_working.del/android/build.gradle
deleted file mode 100644
index f1b3b0e..0000000
--- a/03_source/mobile.integrated.not_working.del/android/build.gradle
+++ /dev/null
@@ -1,29 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
-
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:8.7.2'
- classpath 'com.google.gms:google-services:4.4.2'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-apply from: "variables.gradle"
-
-allprojects {
- repositories {
- google()
- mavenCentral()
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/03_source/mobile.integrated.not_working.del/android/capacitor.settings.gradle b/03_source/mobile.integrated.not_working.del/android/capacitor.settings.gradle
deleted file mode 100644
index a1c665a..0000000
--- a/03_source/mobile.integrated.not_working.del/android/capacitor.settings.gradle
+++ /dev/null
@@ -1,6 +0,0 @@
-// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
-include ':capacitor-android'
-project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor')
-
-include ':capacitor-preferences'
-project(':capacitor-preferences').projectDir = new File('../node_modules/@capacitor/preferences/android')
diff --git a/03_source/mobile.integrated.not_working.del/android/gradle.properties b/03_source/mobile.integrated.not_working.del/android/gradle.properties
deleted file mode 100644
index 2e87c52..0000000
--- a/03_source/mobile.integrated.not_working.del/android/gradle.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
-android.useAndroidX=true
diff --git a/03_source/mobile.integrated.not_working.del/android/gradle/wrapper/gradle-wrapper.jar b/03_source/mobile.integrated.not_working.del/android/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index a4b76b9..0000000
Binary files a/03_source/mobile.integrated.not_working.del/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/android/gradle/wrapper/gradle-wrapper.properties b/03_source/mobile.integrated.not_working.del/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index c1d5e01..0000000
--- a/03_source/mobile.integrated.not_working.del/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
-networkTimeout=10000
-validateDistributionUrl=true
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/03_source/mobile.integrated.not_working.del/android/gradlew b/03_source/mobile.integrated.not_working.del/android/gradlew
deleted file mode 100755
index f5feea6..0000000
--- a/03_source/mobile.integrated.not_working.del/android/gradlew
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-##############################################################################
-#
-# Gradle start up script for POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-# This is normally unused
-# shellcheck disable=SC2034
-APP_BASE_NAME=${0##*/}
-# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
-' "$PWD" ) || exit
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
- echo "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD=java
- if ! command -v java >/dev/null 2>&1
- then
- die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC2039,SC3045
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC2039,SC3045
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Collect all arguments for the java command:
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
-# and any embedded shellness will be escaped.
-# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
-# treated as '${Hostname}' itself on the command line.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
- die "xargs is not available"
-fi
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/03_source/mobile.integrated.not_working.del/android/gradlew.bat b/03_source/mobile.integrated.not_working.del/android/gradlew.bat
deleted file mode 100644
index 9b42019..0000000
--- a/03_source/mobile.integrated.not_working.del/android/gradlew.bat
+++ /dev/null
@@ -1,94 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-@rem SPDX-License-Identifier: Apache-2.0
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/03_source/mobile.integrated.not_working.del/android/settings.gradle b/03_source/mobile.integrated.not_working.del/android/settings.gradle
deleted file mode 100644
index 3b4431d..0000000
--- a/03_source/mobile.integrated.not_working.del/android/settings.gradle
+++ /dev/null
@@ -1,5 +0,0 @@
-include ':app'
-include ':capacitor-cordova-android-plugins'
-project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/')
-
-apply from: 'capacitor.settings.gradle'
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/android/variables.gradle b/03_source/mobile.integrated.not_working.del/android/variables.gradle
deleted file mode 100644
index 2c8e408..0000000
--- a/03_source/mobile.integrated.not_working.del/android/variables.gradle
+++ /dev/null
@@ -1,16 +0,0 @@
-ext {
- minSdkVersion = 23
- compileSdkVersion = 35
- targetSdkVersion = 35
- androidxActivityVersion = '1.9.2'
- androidxAppCompatVersion = '1.7.0'
- androidxCoordinatorLayoutVersion = '1.2.0'
- androidxCoreVersion = '1.15.0'
- androidxFragmentVersion = '1.8.4'
- coreSplashScreenVersion = '1.0.1'
- androidxWebkitVersion = '1.12.1'
- junitVersion = '4.13.2'
- androidxJunitVersion = '1.2.1'
- androidxEspressoCoreVersion = '3.6.1'
- cordovaAndroidVersion = '10.1.1'
-}
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/capacitor.config.json b/03_source/mobile.integrated.not_working.del/capacitor.config.json
deleted file mode 100644
index 0f2dd5f..0000000
--- a/03_source/mobile.integrated.not_working.del/capacitor.config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "appId": "io.ionic.starter",
- "appName": "ionic-react-conference-app",
- "bundledWebRuntime": false,
- "npmClient": "npm",
- "webDir": "dist",
- "cordova": {}
-}
diff --git a/03_source/mobile.integrated.not_working.del/firebase.json b/03_source/mobile.integrated.not_working.del/firebase.json
deleted file mode 100644
index 49a74df..0000000
--- a/03_source/mobile.integrated.not_working.del/firebase.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "hosting": {
- "public": "build",
- "rewrites": [
- {
- "source": "**",
- "destination": "/index.html"
- }
- ],
- "headers": [
- {
- "source": "**/static/**",
- "headers": [
- {
- "key": "Cache-Control",
- "value": "max-age=31536000"
- }
- ]
- },
- {
- "source": "**/*.@(jpg|jpeg|gif|png|svg)",
- "headers": [
- {
- "key": "Cache-Control",
- "value": "max-age=31536000"
- }
- ]
- }
- ]
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/index.html b/03_source/mobile.integrated.not_working.del/index.html
deleted file mode 100644
index 805b105..0000000
--- a/03_source/mobile.integrated.not_working.del/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
- Ionic Conference App
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/ionic.config.json b/03_source/mobile.integrated.not_working.del/ionic.config.json
deleted file mode 100644
index f610198..0000000
--- a/03_source/mobile.integrated.not_working.del/ionic.config.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "ionic-react-conference-app",
- "integrations": {
- "capacitor": {}
- },
- "type": "react"
-}
diff --git a/03_source/mobile.integrated.not_working.del/ios/.gitignore b/03_source/mobile.integrated.not_working.del/ios/.gitignore
deleted file mode 100644
index f470299..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-App/build
-App/Pods
-App/output
-App/App/public
-DerivedData
-xcuserdata
-
-# Cordova plugins for Capacitor
-capacitor-cordova-ios-plugins
-
-# Generated Config files
-App/App/capacitor.config.json
-App/App/config.xml
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App.xcodeproj/project.pbxproj b/03_source/mobile.integrated.not_working.del/ios/App/App.xcodeproj/project.pbxproj
deleted file mode 100644
index d6d8154..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,408 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 48;
- objects = {
-
-/* Begin PBXBuildFile section */
- 2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; };
- 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; };
- 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; };
- 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; };
- 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; };
- 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; };
- 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; };
- A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = ""; };
- 50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = ""; };
- 504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- 504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
- 504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; };
- AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; };
- FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 504EC3011FED79650016851F /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 504EC2FB1FED79650016851F = {
- isa = PBXGroup;
- children = (
- 504EC3061FED79650016851F /* App */,
- 504EC3051FED79650016851F /* Products */,
- 7F8756D8B27F46E3366F6CEA /* Pods */,
- 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */,
- );
- sourceTree = "";
- };
- 504EC3051FED79650016851F /* Products */ = {
- isa = PBXGroup;
- children = (
- 504EC3041FED79650016851F /* App.app */,
- );
- name = Products;
- sourceTree = "";
- };
- 504EC3061FED79650016851F /* App */ = {
- isa = PBXGroup;
- children = (
- 50379B222058CBB4000EE86E /* capacitor.config.json */,
- 504EC3071FED79650016851F /* AppDelegate.swift */,
- 504EC30B1FED79650016851F /* Main.storyboard */,
- 504EC30E1FED79650016851F /* Assets.xcassets */,
- 504EC3101FED79650016851F /* LaunchScreen.storyboard */,
- 504EC3131FED79650016851F /* Info.plist */,
- 2FAD9762203C412B000D30F8 /* config.xml */,
- 50B271D01FEDC1A000F3C39B /* public */,
- );
- path = App;
- sourceTree = "";
- };
- 7F8756D8B27F46E3366F6CEA /* Pods */ = {
- isa = PBXGroup;
- children = (
- FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */,
- AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */,
- );
- name = Pods;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 504EC3031FED79650016851F /* App */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */;
- buildPhases = (
- 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */,
- 504EC3001FED79650016851F /* Sources */,
- 504EC3011FED79650016851F /* Frameworks */,
- 504EC3021FED79650016851F /* Resources */,
- 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = App;
- productName = App;
- productReference = 504EC3041FED79650016851F /* App.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 504EC2FC1FED79650016851F /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 0920;
- TargetAttributes = {
- 504EC3031FED79650016851F = {
- CreatedOnToolsVersion = 9.2;
- LastSwiftMigration = 1100;
- ProvisioningStyle = Automatic;
- };
- };
- };
- buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */;
- compatibilityVersion = "Xcode 8.0";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 504EC2FB1FED79650016851F;
- packageReferences = (
- );
- productRefGroup = 504EC3051FED79650016851F /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 504EC3031FED79650016851F /* App */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 504EC3021FED79650016851F /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */,
- 50B271D11FEDC1A000F3C39B /* public in Resources */,
- 504EC30F1FED79650016851F /* Assets.xcassets in Resources */,
- 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */,
- 504EC30D1FED79650016851F /* Main.storyboard in Resources */,
- 2FAD9763203C412B000D30F8 /* config.xml in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
- showEnvVarsInLog = 0;
- };
- 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "[CP] Embed Pods Frameworks";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 504EC3001FED79650016851F /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 504EC3081FED79650016851F /* AppDelegate.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
- 504EC30B1FED79650016851F /* Main.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 504EC30C1FED79650016851F /* Base */,
- );
- name = Main.storyboard;
- sourceTree = "";
- };
- 504EC3101FED79650016851F /* LaunchScreen.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 504EC3111FED79650016851F /* Base */,
- );
- name = LaunchScreen.storyboard;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 504EC3141FED79650016851F /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- 504EC3151FED79650016851F /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 504EC3171FED79650016851F /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = App/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 1.0;
- OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
- PRODUCT_BUNDLE_IDENTIFIER = io.ionic.starter;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- 504EC3181FED79650016851F /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = App/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = io.ionic.starter;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 504EC3141FED79650016851F /* Debug */,
- 504EC3151FED79650016851F /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 504EC3171FED79650016851F /* Debug */,
- 504EC3181FED79650016851F /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 504EC2FC1FED79650016851F /* Project object */;
-}
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App.xcworkspace/contents.xcworkspacedata b/03_source/mobile.integrated.not_working.del/ios/App/App.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index b301e82..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/03_source/mobile.integrated.not_working.del/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/AppDelegate.swift b/03_source/mobile.integrated.not_working.del/ios/App/App/AppDelegate.swift
deleted file mode 100644
index c3cd83b..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App/AppDelegate.swift
+++ /dev/null
@@ -1,49 +0,0 @@
-import UIKit
-import Capacitor
-
-@UIApplicationMain
-class AppDelegate: UIResponder, UIApplicationDelegate {
-
- var window: UIWindow?
-
- func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
- // Override point for customization after application launch.
- return true
- }
-
- func applicationWillResignActive(_ application: UIApplication) {
- // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
- // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
- }
-
- func applicationDidEnterBackground(_ application: UIApplication) {
- // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
- // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
- }
-
- func applicationWillEnterForeground(_ application: UIApplication) {
- // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
- }
-
- func applicationDidBecomeActive(_ application: UIApplication) {
- // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
- }
-
- func applicationWillTerminate(_ application: UIApplication) {
- // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
- }
-
- func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
- // Called when the app was launched with a url. Feel free to add additional processing here,
- // but if you want the App API to support tracking app url opens, make sure to keep this call
- return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
- }
-
- func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
- // Called when the app was launched with an activity, including Universal Links.
- // Feel free to add additional processing here, but if you want the App API to support
- // tracking app url opens, make sure to keep this call
- return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
- }
-
-}
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
deleted file mode 100644
index f6a7b1f..0000000
Binary files a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 9b7d382..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "images" : [
- {
- "filename" : "AppIcon-512@2x.png",
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Contents.json b/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Contents.json
deleted file mode 100644
index da4a164..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json b/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
deleted file mode 100644
index d7d96a6..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "splash-2732x2732-2.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "filename" : "splash-2732x2732-1.png",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "filename" : "splash-2732x2732.png",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png b/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png
deleted file mode 100644
index 009110e..0000000
Binary files a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png b/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png
deleted file mode 100644
index 009110e..0000000
Binary files a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png b/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png
deleted file mode 100644
index 009110e..0000000
Binary files a/03_source/mobile.integrated.not_working.del/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Base.lproj/LaunchScreen.storyboard b/03_source/mobile.integrated.not_working.del/ios/App/App/Base.lproj/LaunchScreen.storyboard
deleted file mode 100644
index e7ae5d7..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App/Base.lproj/LaunchScreen.storyboard
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Base.lproj/Main.storyboard b/03_source/mobile.integrated.not_working.del/ios/App/App/Base.lproj/Main.storyboard
deleted file mode 100644
index b44df7b..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App/Base.lproj/Main.storyboard
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/App/Info.plist b/03_source/mobile.integrated.not_working.del/ios/App/App/Info.plist
deleted file mode 100644
index 70a2849..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/App/Info.plist
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleDisplayName
- ionic-react-conference-app
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- $(MARKETING_VERSION)
- CFBundleVersion
- $(CURRENT_PROJECT_VERSION)
- LSRequiresIPhoneOS
-
- UILaunchStoryboardName
- LaunchScreen
- UIMainStoryboardFile
- Main
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIViewControllerBasedStatusBarAppearance
-
-
-
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/Podfile b/03_source/mobile.integrated.not_working.del/ios/App/Podfile
deleted file mode 100644
index 0451e2c..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/Podfile
+++ /dev/null
@@ -1,24 +0,0 @@
-require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers'
-
-platform :ios, '14.0'
-use_frameworks!
-
-# workaround to avoid Xcode caching of Pods that requires
-# Product -> Clean Build Folder after new Cordova plugins installed
-# Requires CocoaPods 1.6 or newer
-install! 'cocoapods', :disable_input_output_paths => true
-
-def capacitor_pods
- pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
- pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
- pod 'CapacitorPreferences', :path => '../../node_modules/@capacitor/preferences'
-end
-
-target 'App' do
- capacitor_pods
- # Add your Pods here
-end
-
-post_install do |installer|
- assertDeploymentTarget(installer)
-end
diff --git a/03_source/mobile.integrated.not_working.del/ios/App/Podfile.lock b/03_source/mobile.integrated.not_working.del/ios/App/Podfile.lock
deleted file mode 100644
index 29efe53..0000000
--- a/03_source/mobile.integrated.not_working.del/ios/App/Podfile.lock
+++ /dev/null
@@ -1,28 +0,0 @@
-PODS:
- - Capacitor (7.0.1):
- - CapacitorCordova
- - CapacitorCordova (7.0.1)
- - CapacitorPreferences (7.0.0):
- - Capacitor
-
-DEPENDENCIES:
- - "Capacitor (from `../../node_modules/@capacitor/ios`)"
- - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)"
- - "CapacitorPreferences (from `../../node_modules/@capacitor/preferences`)"
-
-EXTERNAL SOURCES:
- Capacitor:
- :path: "../../node_modules/@capacitor/ios"
- CapacitorCordova:
- :path: "../../node_modules/@capacitor/ios"
- CapacitorPreferences:
- :path: "../../node_modules/@capacitor/preferences"
-
-SPEC CHECKSUMS:
- Capacitor: de199cba6c8b20995428ad0b7cb0bc6ca625ffd4
- CapacitorCordova: 63d476958d5022d76f197031e8b7ea3519988c64
- CapacitorPreferences: 8e4bef1f937fc991a19d7ea99330c36a62edd24b
-
-PODFILE CHECKSUM: bc4412675d30bc194ab5961211929e1e7de79579
-
-COCOAPODS: 1.16.2
diff --git a/03_source/mobile.integrated.not_working.del/package.json b/03_source/mobile.integrated.not_working.del/package.json
deleted file mode 100644
index 1236564..0000000
--- a/03_source/mobile.integrated.not_working.del/package.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "browserslist": [
- ">0.2%",
- "not dead",
- "not ie <= 11",
- "not op_mini all"
- ],
- "dependencies": {
- "@capacitor/android": "7.0.1",
- "@capacitor/camera": "*",
- "@capacitor/core": "^7.0.0",
- "@capacitor/ios": "7.0.1",
- "@capacitor/preferences": "^7.0.0",
- "@ionic/pwa-elements": "^3.3.0",
- "@ionic/react": "^8.5.0",
- "@ionic/react-router": "^8.5.0",
- "@types/leaflet": "^1.9.17",
- "@types/react-redux": "^7.1.34",
- "date-fns": "^2.25.0",
- "dayjs": "^1.11.13",
- "i18next": "^22.4.14",
- "i18next-browser-languagedetector": "^7.0.1",
- "ionicons": "^7.1.2",
- "leaflet": "^1.9.4",
- "lodash": "^4.17.21",
- "pullstate": "^2.0.0-pre.0",
- "react": "19.0.0",
- "react-dom": "19.0.0",
- "react-leaflet": "^5.0.0",
- "react-markdown": "^10.1.0",
- "react-redux": "^9.2.0",
- "react-router": "^5.3.4",
- "react-router-dom": "^5.3.4",
- "react-use": "^17.2.4",
- "reselect": "^4.0.0",
- "sass": "^1.85.1",
- "swiper": "^9.1.1",
- "typescript": "5.3.3"
- },
- "description": "Hong Kong Single Party",
- "devDependencies": {
- "@capacitor/cli": "^7.0.0",
- "@testing-library/react": "^9.3.1",
- "@types/googlemaps": "^3.38.0",
- "@types/jest": "24.0.18",
- "@types/node": "20.11.5",
- "@types/react": "19.0.10",
- "@types/react-dom": "19.0.4",
- "@types/react-router": "^5.1.20",
- "@types/react-router-dom": "^5.3.3",
- "@vitejs/plugin-react": "^4.3.4",
- "lint-staged": "^13.2.0",
- "prettier": "^2.8.6",
- "prettier-plugin-organize-imports": "^4.0.0",
- "typescript": "^5.8.2",
- "vite": "^6.2.0"
- },
- "eslintConfig": {
- "extends": "react-app"
- },
- "license": "MIT",
- "lint-staged": {
- "src/**/*.{js,jsx,ts,tsx,json,md}": [
- "prettier --write",
- "git add"
- ]
- },
- "name": "hong-kong-single-party",
- "private": true,
- "scripts": {
- "build": "tsc && vite build",
- "dev": "vite --port 3001 --host 0.0.0.0 --cors --force --strictPort",
- "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
- "ionic:build": "tsc && vite build",
- "ionic:serve": "vite",
- "precommit": "npm run format && lint-staged",
- "preview": "vite preview",
- "start": "npm run dev"
- },
- "version": "0.0.0"
-}
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/data/data.json b/03_source/mobile.integrated.not_working.del/public/assets/data/data.json
deleted file mode 100644
index 44f6125..0000000
--- a/03_source/mobile.integrated.not_working.del/public/assets/data/data.json
+++ /dev/null
@@ -1,467 +0,0 @@
-{
- "schedule": [
- {
- "date": "2047-05-17",
- "groups": [
- {
- "time": "8:00 am",
- "sessions": [
- {
- "name": "Breakfast",
- "timeStart": "8:00 am",
- "timeEnd": "9:00 am",
- "location": "Dining Hall",
- "tracks": ["Food"],
- "id": "1"
- }
- ]
- },
- {
- "time": "9:15 am",
- "sessions": [
- {
- "name": "Getting Started with Ionic",
- "location": "Hall 2",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Ted Turtle"],
- "timeStart": "9:30 am",
- "timeEnd": "9:45 am",
- "tracks": ["Ionic"],
- "id": "2"
- },
- {
- "name": "Ionic Tooling",
- "location": "Executive Ballroom",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Rachel Rabbit"],
- "timeStart": "9:45 am",
- "timeEnd": "10:00 am",
- "tracks": ["Tooling"],
- "id": "3"
- },
- {
- "name": "University of Ionic",
- "location": "Hall 3",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Ellie Elephant"],
- "timeStart": "9:15 am",
- "timeEnd": "9:30 am",
- "tracks": ["Ionic"],
- "id": "4"
- }
- ]
- },
- {
- "time": "10:00 am",
- "sessions": [
- {
- "name": "Migrating to Ionic",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Eva Eagle", "Lionel Lion"],
- "timeStart": "10:00 am",
- "timeEnd": "10:15 am",
- "tracks": ["Ionic"],
- "id": "5"
- },
- {
- "name": "What's New in React",
- "location": "Hall 3",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Rachel Rabbit"],
- "timeStart": "10:15 am",
- "timeEnd": "10:30 am",
- "tracks": ["React"],
- "id": "6"
- },
- {
- "name": "The Evolution of Ionicons",
- "location": "Hall 2",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Isabella Iguana", "Eva Eagle"],
- "timeStart": "10:15 am",
- "timeEnd": "10:30 am",
- "tracks": ["Design"],
- "id": "7"
- },
- {
- "name": "Ionic Pro",
- "location": "Grand Ballroom A",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Charlie Cheetah"],
- "timeStart": "10:45 am",
- "timeEnd": "11:00 am",
- "tracks": ["Services"],
- "id": "8"
- }
- ]
- },
- {
- "time": "11:00 am",
- "sessions": [
- {
- "name": "Ionic Workshop",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Karl Kitten", "Lionel Lion"],
- "timeStart": "11:00 am",
- "timeEnd": "11:45 am",
- "tracks": ["Workshop"],
- "id": "9"
- },
- {
- "name": "Community Interaction",
- "location": "Hall 3",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Lionel Lion", "Gino Giraffe"],
- "timeStart": "11:30 am",
- "timeEnd": "11:50 am",
- "tracks": ["Communication"],
- "id": "10"
- },
- {
- "name": "Navigation in Ionic",
- "location": "Grand Ballroom A",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Rachel Rabbit", "Eva Eagle"],
- "timeStart": "11:30 am",
- "timeEnd": "12:00 pm",
- "tracks": ["Navigation"],
- "id": "11"
- }
- ]
- },
- {
- "time": "12:00 pm",
- "sessions": [
- {
- "name": "Lunch",
- "location": "Dining Hall",
- "description": "Come grab lunch with all the Ionic fanatics and talk all things Ionic",
- "timeStart": "12:00 pm",
- "timeEnd": "1:00 pm",
- "tracks": ["Food"],
- "id": "12"
- }
- ]
- },
- {
- "time": "1:00 pm",
- "sessions": [
- {
- "name": "Ionic in the Enterprise",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Paul Puppy"],
- "timeStart": "1:00 pm",
- "timeEnd": "1:15 pm",
- "tracks": ["Communication"],
- "id": "13"
- },
- {
- "name": "Ionic Worldwide",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Gino Giraffe"],
- "timeStart": "1:15 pm",
- "timeEnd": "1:30 pm",
- "tracks": ["Communication"],
- "id": "14"
- },
- {
- "name": "The Ionic Package",
- "location": "Grand Ballroom B",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Molly Mouse", "Burt Bear"],
- "timeStart": "1:30 pm",
- "timeEnd": "2:00 pm",
- "tracks": ["Services"],
- "id": "15"
- }
- ]
- },
- {
- "time": "2:00 pm",
- "sessions": [
- {
- "name": "Push Notifications in Ionic",
- "location": "Hall 2",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Burt Bear", "Charlie Cheetah"],
- "timeStart": "2:00 pm",
- "timeEnd": "2:30 pm",
- "tracks": ["Services"],
- "id": "16"
- },
- {
- "name": "Ionic Documentation",
- "location": "Grand Ballroom B",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Donald Duck"],
- "timeStart": "2:30 pm",
- "timeEnd": "2:45 pm",
- "tracks": ["Documentation"],
- "id": "17"
- },
- {
- "name": "UX in Ionic",
- "location": "Hall 3",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Isabella Iguana", "Ellie Elephant"],
- "timeStart": "2:45 pm",
- "timeEnd": "3:00 pm",
- "tracks": ["Design"],
- "id": "18"
- }
- ]
- },
- {
- "time": "3:00 pm",
- "sessions": [
- {
- "name": "Building with React and Ionic",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Ted Turtle"],
- "timeStart": "3:00 pm",
- "timeEnd": "3:30 pm",
- "tracks": ["React"],
- "id": "19"
- },
- {
- "name": "Mobile States",
- "location": "Hall 2",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Rachel Rabbit"],
- "timeStart": "3:30 pm",
- "timeEnd": "3:45 pm",
- "tracks": ["Navigation"],
- "id": "20"
- }
- ]
- }
- ]
- }
- ],
-
- "speakers": [
- {
- "name": "Burt Bear",
- "profilePic": "/assets/img/speakers/bear.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Burt is a Bear. Burt's interests include poetry, dashing space heroes, and lions.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "burt@example.com",
- "phone": "+1-541-754-3010",
- "id": "1"
- },
- {
- "name": "Charlie Cheetah",
- "profilePic": "/assets/img/speakers/cheetah.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Charlie is a Cheetah. Charlie's interests include country music, plush animals, pyrotechnics, and skeletons.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "charlie@example.com",
- "phone": "+1-541-754-3010",
- "id": "2"
- },
- {
- "name": "Donald Duck",
- "profilePic": "/assets/img/speakers/duck.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Donald is a Duck. Donald's interests include carpentry, superheroes, merpeople, and glam rock.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "donald@example.com",
- "phone": "+1-541-754-3010",
- "id": "3"
- },
- {
- "name": "Eva Eagle",
- "profilePic": "/assets/img/speakers/eagle.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Eva is an Eagle. Eva's interests include ants, seashells, and cupcakes.",
- "title": "Developer Advocate",
- "location": "Everywhere",
- "email": "eva@example.com",
- "phone": "+1-541-754-3010",
- "id": "4"
- },
- {
- "name": "Ellie Elephant",
- "profilePic": "/assets/img/speakers/elephant.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Ellie is an Elephant. Ellie's interests include pocket watches, pool, hand fans, and ninjas.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "ellie@example.com",
- "phone": "+1-541-754-3010",
- "id": "5"
- },
- {
- "name": "Gino Giraffe",
- "profilePic": "/assets/img/speakers/giraffe.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Gino is a Giraffe. Gino's interests include candy-making, unicorns, and birdhouses.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "gino@example.com",
- "phone": "+1-541-754-3010",
- "id": "6"
- },
- {
- "name": "Isabella Iguana",
- "profilePic": "/assets/img/speakers/iguana.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Isabella is an Iguana. Isabella's interests include crystals, architecture, and candle-making.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "isabella@example.com",
- "phone": "+1-541-754-3010",
- "id": "7"
- },
- {
- "name": "Karl Kitten",
- "profilePic": "/assets/img/speakers/kitten.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Karl is a Kitten. Karl's interests include skiing, jewelry, and needlepoint.",
- "title": "Developer Advocate",
- "location": "Everywhere",
- "email": "karl@example.com",
- "phone": "+1-541-754-3010",
- "id": "8"
- },
- {
- "name": "Lionel Lion",
- "profilePic": "/assets/img/speakers/lion.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Lionel is a Lion. Lionel's interests include lizards and mathematics.",
- "title": "Developer Advocate",
- "location": "Everywhere",
- "email": "lionel@example.com",
- "phone": "+1-541-754-3010",
- "id": "9"
- },
- {
- "name": "Molly Mouse",
- "profilePic": "/assets/img/speakers/mouse.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Molly is a Mouse. Molly's interests include werewolves and magic.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "molly@example.com",
- "phone": "+1-541-754-3010",
- "id": "10"
- },
- {
- "name": "Paul Puppy",
- "profilePic": "/assets/img/speakers/puppy.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Paul is a Puppy. Paul's interests include maps, whales, and dragons.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "paul@example.com",
- "phone": "+1-541-754-3010",
- "id": "11"
- },
- {
- "name": "Rachel Rabbit",
- "profilePic": "/assets/img/speakers/rabbit.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Rachel is a Rabbit. Rachel's interests include clowns, skeletons, and yo-yos.",
- "title": "Senior Software Engineer",
- "location": "Everywhere",
- "email": "rachel@example.com",
- "phone": "+1-541-754-3010",
- "id": "12"
- },
- {
- "name": "Ted Turtle",
- "profilePic": "/assets/img/speakers/turtle.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Ted is a Turtle. Ted's interests include butterflies, skiing, and cupcakes.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "ted@example.com",
- "phone": "+1-541-754-3010",
- "id": "13"
- }
- ],
-
- "map": [
- {
- "name": "Monona Terrace Convention Center",
- "lat": 43.071584,
- "lng": -89.38012,
- "center": true
- },
- {
- "name": "Ionic HQ",
- "lat": 43.074395,
- "lng": -89.381056
- },
- {
- "name": "Afterparty - Brocach Irish Pub",
- "lat": 43.07336,
- "lng": -89.38335
- }
- ],
-
- "tracks": [
- {
- "name": "React",
- "icon": "logo-react"
- },
- {
- "name": "Documentation",
- "icon": "document"
- },
- {
- "name": "Food",
- "icon": "restaurant"
- },
- {
- "name": "Ionic",
- "icon": "logo-ionic"
- },
- {
- "name": "Tooling",
- "icon": "hammer"
- },
- {
- "name": "Design",
- "icon": "color-palette"
- },
- {
- "name": "Services",
- "icon": "cog"
- },
- {
- "name": "Workshop",
- "icon": "construct"
- },
- {
- "name": "Communication",
- "icon": "call"
- },
- {
- "name": "Navigation",
- "icon": "compass"
- }
- ]
-}
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/data/locations.json b/03_source/mobile.integrated.not_working.del/public/assets/data/locations.json
deleted file mode 100644
index 7743cc9..0000000
--- a/03_source/mobile.integrated.not_working.del/public/assets/data/locations.json
+++ /dev/null
@@ -1,23 +0,0 @@
-[
- {
- "id": 1,
- "name": "Map Center",
- "lat": 43.071584,
- "lng": -89.380120
- }, {
- "id": 2,
- "name": "Monona Terrace Convention Center",
- "lat": 43.071584,
- "lng": -89.380120
- }, {
- "id": 3,
- "name": "Ionic HQ",
- "lat": 43.074395,
- "lng": -89.381056
- }, {
- "id": 4,
- "name": "Afterparty - Brocach Irish Pub",
- "lat": 43.07336,
- "lng": -89.38335
- }
-]
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/icon/favicon.png b/03_source/mobile.integrated.not_working.del/public/assets/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/about/austin.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/about/austin.jpg
deleted file mode 100644
index b4eb329..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/about/austin.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/about/chicago.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/about/chicago.jpg
deleted file mode 100644
index b982b65..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/about/chicago.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/about/madison.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/about/madison.jpg
deleted file mode 100644
index c46fbf0..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/about/madison.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/about/seattle.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/about/seattle.jpg
deleted file mode 100644
index 4c5946a..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/about/seattle.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/appicon.png b/03_source/mobile.integrated.not_working.del/public/assets/img/appicon.png
deleted file mode 100644
index 3aa6ee2..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/appicon.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/appicon.svg b/03_source/mobile.integrated.not_working.del/public/assets/img/appicon.svg
deleted file mode 100644
index 3d2a03b..0000000
--- a/03_source/mobile.integrated.not_working.del/public/assets/img/appicon.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-1.png b/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-1.png
deleted file mode 100644
index 9233602..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-1.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-2.png b/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-2.png
deleted file mode 100644
index 2fdce7d..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-2.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-3.png b/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-3.png
deleted file mode 100644
index a304e88..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-3.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-4.png b/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-4.png
deleted file mode 100644
index 2f263d6..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/ica-slidebox-img-4.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/ionic-logo-white.svg b/03_source/mobile.integrated.not_working.del/public/assets/img/ionic-logo-white.svg
deleted file mode 100644
index 7ebf0cd..0000000
--- a/03_source/mobile.integrated.not_working.del/public/assets/img/ionic-logo-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speaker-background.png b/03_source/mobile.integrated.not_working.del/public/assets/img/speaker-background.png
deleted file mode 100644
index 220634e..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speaker-background.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/bear.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/bear.jpg
deleted file mode 100755
index a968db7..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/bear.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/cheetah.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/cheetah.jpg
deleted file mode 100755
index f188a81..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/cheetah.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/duck.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/duck.jpg
deleted file mode 100755
index b8b7c52..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/duck.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/eagle.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/eagle.jpg
deleted file mode 100755
index ac839a5..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/eagle.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/elephant.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/elephant.jpg
deleted file mode 100755
index 0727847..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/elephant.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/giraffe.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/giraffe.jpg
deleted file mode 100755
index 30a854c..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/giraffe.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/iguana.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/iguana.jpg
deleted file mode 100755
index 75d528f..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/iguana.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/kitten.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/kitten.jpg
deleted file mode 100755
index 3cc1359..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/kitten.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/lion.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/lion.jpg
deleted file mode 100755
index f5eb632..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/lion.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/mouse.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/mouse.jpg
deleted file mode 100755
index ca30177..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/mouse.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/puppy.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/puppy.jpg
deleted file mode 100755
index d635a8a..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/puppy.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/rabbit.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/rabbit.jpg
deleted file mode 100755
index 475d62c..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/rabbit.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/turtle.jpg b/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/turtle.jpg
deleted file mode 100755
index 60c3496..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/assets/img/speakers/turtle.jpg and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/assets/shapes.svg b/03_source/mobile.integrated.not_working.del/public/assets/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.integrated.not_working.del/public/assets/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.integrated.not_working.del/public/favicon.ico b/03_source/mobile.integrated.not_working.del/public/favicon.ico
deleted file mode 100644
index a11777c..0000000
Binary files a/03_source/mobile.integrated.not_working.del/public/favicon.ico and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/public/manifest.json b/03_source/mobile.integrated.not_working.del/public/manifest.json
deleted file mode 100644
index ee4307c..0000000
--- a/03_source/mobile.integrated.not_working.del/public/manifest.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "short_name": "Ionic React Conf",
- "name": "Ionic React Conf",
- "icons": [
- {
- "src": "assets/icon/favicon.png",
- "sizes": "64x64 32x32 24x24 16x16",
- "type": "image/x-icon"
- },
- {
- "src": "assets/icon/icon.png",
- "type": "image/png",
- "sizes": "512x512",
- "purpose": "maskable"
- }
- ],
- "start_url": ".",
- "display": "standalone",
- "theme_color": "#ffffff",
- "background_color": "#ffffff"
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/App.scss b/03_source/mobile.integrated.not_working.del/src/App.scss
deleted file mode 100644
index 13076f3..0000000
--- a/03_source/mobile.integrated.not_working.del/src/App.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * App Global CSS
- * ----------------------------------------------------------------------------
- * Put style rules here that you want to apply globally. These styles are for
- * the entire app and not just one component.
- */
diff --git a/03_source/mobile.integrated.not_working.del/src/App.test.tsx b/03_source/mobile.integrated.not_working.del/src/App.test.tsx
deleted file mode 100644
index ea2e0c9..0000000
--- a/03_source/mobile.integrated.not_working.del/src/App.test.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import { render } from '@testing-library/react';
-import App from './App';
-
-it('renders without crashing', () => {
- const { asFragment, container } = render( );
- expect(asFragment()).toMatchSnapshot();
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/App.tsx b/03_source/mobile.integrated.not_working.del/src/App.tsx
deleted file mode 100644
index c006d76..0000000
--- a/03_source/mobile.integrated.not_working.del/src/App.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-import { IonApp, IonRouterOutlet, IonSplitPane, setupIonicReact } from '@ionic/react';
-import { IonReactRouter } from '@ionic/react-router';
-import React, { useEffect } from 'react';
-import { Route } from 'react-router-dom';
-
-import Menu from './components/Menu';
-
-/* Core CSS required for Ionic components to work properly */
-import '@ionic/react/css/core.css';
-
-/* Basic CSS for apps built with Ionic */
-import '@ionic/react/css/normalize.css';
-import '@ionic/react/css/structure.css';
-import '@ionic/react/css/typography.css';
-
-/* Optional CSS utils that can be commented out */
-import '@ionic/react/css/display.css';
-import '@ionic/react/css/flex-utils.css';
-import '@ionic/react/css/float-elements.css';
-import '@ionic/react/css/padding.css';
-import '@ionic/react/css/text-alignment.css';
-import '@ionic/react/css/text-transformation.css';
-
-/**
- * Ionic Dark Mode
- * -----------------------------------------------------
- * For more info, please see:
- * https://ionicframework.com/docs/theming/dark-mode
- */
-
-// import '@ionic/react/css/palettes/dark.always.css';
-// import '@ionic/react/css/palettes/dark.system.css';
-import '@ionic/react/css/palettes/dark.class.css';
-
-/* Theme variables */
-import './theme/variables.css';
-
-/* Leaflet CSS */
-import 'leaflet/dist/leaflet.css';
-
-/* Global styles */
-import './App.scss';
-import HomeOrTutorial from './components/HomeOrTutorial';
-import RedirectToLogin from './components/RedirectToLogin';
-import { AppContextProvider } from './data/AppContext';
-import { connect } from './data/connect';
-import { loadConfData } from './data/sessions/sessions.actions';
-import { loadUserData, setIsLoggedIn, setUsername } from './data/user/user.actions';
-import { Schedule } from './models/Schedule';
-import Account from './pages/Account';
-import Login from './pages/Login';
-import MainTabs from './pages/MainTabs';
-import Signup from './pages/Signup';
-import Support from './pages/Support';
-import Tutorial from './pages/Tutorial';
-
-setupIonicReact();
-
-const App: React.FC = () => {
- return (
-
-
-
- );
-};
-
-interface StateProps {
- darkMode: boolean;
- schedule: Schedule;
-}
-
-interface DispatchProps {
- loadConfData: typeof loadConfData;
- loadUserData: typeof loadUserData;
- setIsLoggedIn: typeof setIsLoggedIn;
- setUsername: typeof setUsername;
-}
-
-interface IonicAppProps extends StateProps, DispatchProps {}
-
-const IonicApp: React.FC = ({ darkMode, schedule, setIsLoggedIn, setUsername, loadConfData, loadUserData }) => {
- useEffect(() => {
- loadUserData();
- loadConfData();
- // eslint-disable-next-line
- }, []);
-
- return schedule.groups.length === 0 ? (
-
- ) : (
-
-
-
-
-
- {/*
- We use IonRoute here to keep the tabs state intact,
- which makes transitions between tabs and non tab pages smooth
- */}
- } />
-
-
-
-
-
- {
- return ;
- }}
- />
-
-
-
-
-
- );
-};
-
-export default App;
-
-const IonicAppConnected = connect<{}, StateProps, DispatchProps>({
- mapStateToProps: (state) => ({
- darkMode: state.user.darkMode,
- schedule: state.data.schedule,
- }),
- mapDispatchToProps: {
- loadConfData,
- loadUserData,
- setIsLoggedIn,
- setUsername,
- },
- component: IonicApp,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/__snapshots__/App.test.tsx.snap b/03_source/mobile.integrated.not_working.del/src/__snapshots__/App.test.tsx.snap
deleted file mode 100644
index 444f038..0000000
--- a/03_source/mobile.integrated.not_working.del/src/__snapshots__/App.test.tsx.snap
+++ /dev/null
@@ -1,280 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renders without crashing 1`] = `
-
-
-
-
-
-
-
- Menu
-
-
-
-
-
-
- Navigate
-
-
-
-
-
- Schedule
-
-
-
-
-
-
-
- Speakers
-
-
-
-
-
-
-
- Map
-
-
-
-
-
-
-
- About
-
-
-
-
-
-
- Account
-
-
-
-
-
- Account
-
-
-
-
-
-
-
- Support
-
-
-
-
-
-
-
- Logout
-
-
-
-
-
-
- Tutorial
-
-
-
- Show Tutorial
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- All
-
-
- Favorites
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- No Sessions Found
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Schedule
-
-
-
-
-
- Speakers
-
-
-
-
-
- Map
-
-
-
-
-
- About
-
-
-
-
-
-
-
-
-`;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/AboutPopover.tsx b/03_source/mobile.integrated.not_working.del/src/components/AboutPopover.tsx
deleted file mode 100644
index dabfa73..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/AboutPopover.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { IonItem, IonLabel, IonList } from '@ionic/react';
-import React from 'react';
-
-interface AboutPopoverProps {
- dismiss: () => void;
-}
-
-const AboutPopover: React.FC = ({ dismiss }) => {
- const close = (url: string) => {
- window.open(url, '_blank');
- dismiss();
- };
-
- return (
-
- close('https://ionicframework.com/docs')}>
- Learn Ionic
-
- close('https://ionicframework.com/docs/react')}>
- Documentation
-
- close('https://showcase.ionicframework.com')}>
- Showcase
-
- close('https://github.com/ionic-team/ionic-framework')}>
- GitHub Repo
-
-
- Support
-
-
- );
-};
-
-export default AboutPopover;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/ChatItem/index.jsx b/03_source/mobile.integrated.not_working.del/src/components/ChatItem/index.jsx
deleted file mode 100644
index 3531675..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/ChatItem/index.jsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import {
- IonIcon,
- IonItem,
- IonItemOption,
- IonItemOptions,
- IonItemSliding,
- IonNavLink,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { checkmarkDone } from 'ionicons/icons';
-import ChatHelloworld from '../../pages/chat';
-import { ContactStore } from '../../store';
-import { getContacts } from '../../store/Selectors';
-
-import HKPartyIonDeleteIcon from '../HKPartyIonDeleteIcon';
-import './style.scss';
-
-const ChatItem = ({ chat }) => {
- const contacts = ContactStore.useState(getContacts);
- const { chats, contact_id } = chat;
- const { read, date, preview, received } = chats[chats.length - 1];
- const contact = contacts.filter(c => c.id === contact_id)[0];
- const notificationCount = chats.filter(chat => chat.read === false).length;
-
- return (
- <>
-
- {/*
-
- Archive
-
- */}
-
- {/* */}
- }>
-
-
-
-
-
- {contact.name}
- {read && received && }
- {preview}
-
-
-
- {date}
-
- {notificationCount > 0 && {notificationCount} }
-
-
-
-
-
- {/* */}
-
-
-
-
-
-
- >
- );
-};
-
-export default ChatItem;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/ChatItem/style.scss b/03_source/mobile.integrated.not_working.del/src/components/ChatItem/style.scss
deleted file mode 100644
index 8e962a8..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/ChatItem/style.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-.chat-row {
- .chat-row-content {
- padding: 1rem;
- }
- .chat-content {
- background-color: pink;
- }
- // img {
- // border-radius: 500px;
- // height: 2.5rem;
- // width: 2.5rem;
- // margin-right: 1.5rem;
- // }
-
- // ion-label {
- // h1 {
- // font-size: 1rem;
- // }
- // }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonArchiveIcon/index.tsx b/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonArchiveIcon/index.tsx
deleted file mode 100644
index 8dc349e..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonArchiveIcon/index.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import { IonIcon } from '@ionic/react';
-import { trashOutline } from 'ionicons/icons';
-
-const HKPartyIonDeleteIcon = ({ ...props }) => {
- return ;
-};
-
-export default HKPartyIonDeleteIcon;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonDeleteIcon/index.tsx b/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonDeleteIcon/index.tsx
deleted file mode 100644
index 8dc349e..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonDeleteIcon/index.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import { IonIcon } from '@ionic/react';
-import { trashOutline } from 'ionicons/icons';
-
-const HKPartyIonDeleteIcon = ({ ...props }) => {
- return ;
-};
-
-export default HKPartyIonDeleteIcon;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonHeader/index.tsx b/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonHeader/index.tsx
deleted file mode 100644
index eb2d591..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonHeader/index.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { IonHeader } from '@ionic/react';
-
-const HKPartyIonHeader = ({ children, ...props }) => {
- return (
-
- {/* */}
- {children}
- {/* */}
-
- );
-};
-
-export default HKPartyIonHeader;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonPage/index.tsx b/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonPage/index.tsx
deleted file mode 100644
index dbe241d..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonPage/index.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { IonPage } from '@ionic/react';
-
-const HKPartyIonPage = ({ children, ...props }) => {
- return (
-
- {/* */}
- {children}
- {/* */}
-
- );
-};
-
-export default HKPartyIonPage;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonToolbar/index.tsx b/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonToolbar/index.tsx
deleted file mode 100644
index 77e6fc5..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/HKPartyIonToolbar/index.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import { IonToolbar } from '@ionic/react';
-
-const HKPartyIonToolbar = ({ children, ...props }) => {
- return (
-
- {/* */}
-
- {children}
-
- {/* */}
-
- );
-};
-
-export default HKPartyIonToolbar;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/HomeOrTutorial.tsx b/03_source/mobile.integrated.not_working.del/src/components/HomeOrTutorial.tsx
deleted file mode 100644
index c396a8f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/HomeOrTutorial.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from 'react';
-import { Redirect } from 'react-router';
-import { connect } from '../data/connect';
-
-interface StateProps {
- hasSeenTutorial: boolean;
-}
-
-const HomeOrTutorial: React.FC = ({ hasSeenTutorial }) => {
- return hasSeenTutorial ? : ;
-};
-
-export default connect<{}, StateProps, {}>({
- mapStateToProps: (state) => ({
- hasSeenTutorial: state.user.hasSeenTutorial,
- }),
- component: HomeOrTutorial,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/components/Loading/index.tsx b/03_source/mobile.integrated.not_working.del/src/components/Loading/index.tsx
deleted file mode 100644
index ada69b0..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/Loading/index.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { IonContent, IonPage, IonSpinner, IonText } from '@ionic/react';
-
-function Loading() {
- return (
-
-
-
-
- {'Loading'}
-
-
-
- );
-}
-
-export default Loading;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/Menu.css b/03_source/mobile.integrated.not_working.del/src/components/Menu.css
deleted file mode 100644
index cee89be..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/Menu.css
+++ /dev/null
@@ -1,89 +0,0 @@
-ion-menu ion-content {
- --padding-top: 20px;
- --padding-bottom: 20px;
-
- --background: var(--ion-item-background, var(--ion-background-color, #fff));
-}
-
-/* Remove background transitions for switching themes */
-ion-menu ion-item {
- --transition: none;
-}
-
-ion-item.selected {
- --color: var(--ion-color-primary);
-}
-
-/*
- * Material Design Menu
-*/
-ion-menu.md ion-list {
- padding: 20px 0;
-}
-
-ion-menu.md ion-list-header {
- padding-left: 18px;
- padding-right: 18px;
-
- text-transform: uppercase;
- letter-spacing: 0.1em;
- font-size: min(0.875rem, 32px);
- font-weight: 450;
-}
-
-ion-menu.md ion-item {
- --padding-start: 18px;
-
- margin-right: 10px;
-
- border-radius: 0 50px 50px 0;
-
- font-weight: 500;
-}
-
-ion-menu.md ion-item.selected {
- --background: rgba(var(--ion-color-primary-rgb), 0.14);
-}
-
-ion-menu.md ion-item.selected ion-icon {
- color: var(--ion-color-primary);
-}
-
-ion-menu.md ion-list-header,
-ion-menu.md ion-item ion-icon {
- color: var(--ion-color-step-650, #5f6368);
-}
-
-ion-menu.md ion-list:not(:last-of-type) {
- border-bottom: 1px solid var(--ion-color-step-150, #d7d8da);
-}
-
-
-/*
- * iOS Menu
-*/
-ion-menu.ios ion-list-header {
- padding-left: 16px;
- padding-right: 16px;
-
- margin-bottom: 8px;
- font-size: clamp(22px, 1.375rem, 40px);
-}
-
-ion-menu.ios ion-list {
- padding: 20px 0 0;
-}
-
-ion-menu.ios ion-item {
- --padding-start: 16px;
- --min-height: 50px;
-}
-
-ion-menu.ios ion-item ion-icon {
- font-size: 24px;
- color: #73849a;
-}
-
-ion-menu.ios ion-item.selected ion-icon {
- color: var(--ion-color-primary);
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/components/Menu.tsx b/03_source/mobile.integrated.not_working.del/src/components/Menu.tsx
deleted file mode 100644
index 59ec949..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/Menu.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import React from 'react';
-import { RouteComponentProps, useLocation, withRouter } from 'react-router';
-
-import { IonContent, IonIcon, IonItem, IonLabel, IonList, IonListHeader, IonMenu, IonMenuToggle, IonToggle } from '@ionic/react';
-import {
- calendarOutline,
- hammer,
- help,
- informationCircleOutline,
- logIn,
- logOut,
- mapOutline,
- moonOutline,
- peopleOutline,
- person,
- personAdd,
-} from 'ionicons/icons';
-
-import { connect } from '../data/connect';
-import { setDarkMode } from '../data/user/user.actions';
-
-import './Menu.css';
-
-const routes = {
- appPages: [
- { title: 'Schedule', path: '/tabs/schedule', icon: calendarOutline },
- { title: 'Speakers', path: '/tabs/speakers', icon: peopleOutline },
- { title: 'Map', path: '/tabs/map', icon: mapOutline },
- { title: 'About', path: '/tabs/about', icon: informationCircleOutline },
- ],
- loggedInPages: [
- { title: 'Account', path: '/account', icon: person },
- { title: 'Support', path: '/support', icon: help },
- { title: 'Logout', path: '/logout', icon: logOut },
- ],
- loggedOutPages: [
- { title: 'Login', path: '/login', icon: logIn },
- { title: 'Support', path: '/support', icon: help },
- { title: 'Signup', path: '/signup', icon: personAdd },
- ],
-};
-
-interface Pages {
- title: string;
- path: string;
- icon: string;
- routerDirection?: string;
-}
-interface StateProps {
- darkMode: boolean;
- isAuthenticated: boolean;
- menuEnabled: boolean;
-}
-
-interface DispatchProps {
- setDarkMode: typeof setDarkMode;
-}
-
-interface MenuProps extends RouteComponentProps, StateProps, DispatchProps {}
-
-const Menu: React.FC = ({ darkMode, history, isAuthenticated, setDarkMode, menuEnabled }) => {
- const location = useLocation();
-
- function renderlistItems(list: Pages[]) {
- return list
- .filter((route) => !!route.path)
- .map((p) => (
-
-
-
- {p.title}
-
-
- ));
- }
-
- return (
-
-
-
- Conference
- {renderlistItems(routes.appPages)}
-
-
- Account
- {isAuthenticated ? renderlistItems(routes.loggedInPages) : renderlistItems(routes.loggedOutPages)}
-
-
- setDarkMode(!darkMode)}>
- Dark Mode
-
-
-
-
- Tutorial
- {
- history.push('/tutorial');
- }}
- >
-
- Show Tutorial
-
-
-
-
- );
-};
-
-export default connect<{}, StateProps, {}>({
- mapStateToProps: (state) => ({
- darkMode: state.user.darkMode,
- isAuthenticated: state.user.isLoggedin,
- menuEnabled: state.data.menuEnabled,
- }),
- mapDispatchToProps: {
- setDarkMode,
- },
- component: withRouter(Menu),
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/components/RedirectToLogin.tsx b/03_source/mobile.integrated.not_working.del/src/components/RedirectToLogin.tsx
deleted file mode 100644
index 8d962ae..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/RedirectToLogin.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { IonRouterContext } from '@ionic/react';
-import React, { useContext, useEffect } from 'react';
-
-interface RedirectToLoginProps {
- setIsLoggedIn: Function;
- setUsername: Function;
-}
-
-const RedirectToLogin: React.FC = ({ setIsLoggedIn, setUsername }) => {
- const ionRouterContext = useContext(IonRouterContext);
- useEffect(() => {
- setIsLoggedIn(false);
- setUsername(undefined);
- ionRouterContext.push('/tabs/schedule');
- }, [setIsLoggedIn, setUsername]);
- return null;
-};
-
-export default RedirectToLogin;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/ReplyTo/index.jsx b/03_source/mobile.integrated.not_working.del/src/components/ReplyTo/index.jsx
deleted file mode 100644
index 7f7010a..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/ReplyTo/index.jsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import { CreateAnimation, IonButton, IonCol, IonIcon, IonLabel, IonRow } from '@ionic/react';
-import { closeCircleOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-// import './style.css';
-const ReplyTo = ({ contact, replyToMessage = false, replyToAnimationRef, setReplyToMessage, messageSent }) => {
- const [cancellingReplyTo, setCancellingReplyTo] = useState(false);
-
- useEffect(() => {
- messageSent && cancelReplyTo();
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [messageSent]);
-
- const slideAnimation = {
- property: 'transform',
- fromValue: 'translateY(100px)',
- toValue: 'translateY(0px)',
- };
-
- const replyToAnimation = {
- duration: 300,
- direction: !cancellingReplyTo ? 'normal' : 'reverse',
- iterations: '1',
- fromTo: [slideAnimation],
- easing: 'ease-in-out',
- };
-
- // Cancel the reply-to
- const cancelReplyTo = async () => {
- setCancellingReplyTo(true);
- await replyToAnimationRef.current.animation.play();
- setCancellingReplyTo(false);
- setReplyToMessage(false);
- };
-
- return (
-
-
-
- {contact}
- {replyToMessage.preview}
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default ReplyTo;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/ReplyTo/style.css b/03_source/mobile.integrated.not_working.del/src/components/ReplyTo/style.css
deleted file mode 100644
index 928443f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/ReplyTo/style.css
+++ /dev/null
@@ -1,290 +0,0 @@
-.chat-page ion-header,
-.chat-page ion-toolbar {
-
- --min-height: 3.5rem;
-}
-
-.chat-page ion-title {
-
- margin-left: -3.5rem;
-}
-
-.chat-page ion-title p {
-
- padding: 0;
- margin: 0;
-}
-
-.chat-contact {
-
- display: flex;
- flex-direction: row;
- align-content: center;
- justify-content: center;
- align-items: center;
-}
-
-.chat-contact img {
-
- height: 2rem;
- width: 2rem;
- border-radius: 500px;
-}
-
-.chat-contact-details {
-
- display: flex;
- flex-direction: column;
- margin-left: 0.5rem;
- text-align: left;
-}
-
-.chat-contact-details p {
-
- font-size: 0.9rem;
-}
-
-.chat-contact-details ion-text {
-
- font-size: 0.7rem;
- font-weight: 400;
-}
-
-.chat-bubble {
-
- border-radius: 5px;
- margin-left: 1rem;
- margin-right: 1rem;
- margin-top: 0.8rem;
-
- padding: 0.5rem;
- max-width: 80%;
- clear: both;
-
- display: flex;
- flex-direction: row;
- transition: 0.2s all linear;
-}
-
-.chat-bubble:last-child {
-
- margin-bottom: 0.8rem;
-}
-
-.bubble-sent {
-
- background-color: var(--chat-bubble-sent-color);
- float: right;
-}
-
-.bubble-received {
-
- background-color: var(--chat-bubble-received-color);
- float: left;
-}
-
-.chat-bubble p {
-
- padding: 0;
- margin: 0;
-}
-
-.chat-footer {
-
- /* background-color: rgb(22, 22, 22); */
- border-top: 1px solid rgb(47, 47, 47);
- padding-top: 0.2rem;
- padding-bottom: 1rem;
-}
-
-.chat-footer ion-textarea {
-
- /* background-color: rgb(31, 31, 31); */
- background-color: rgba(32, 32, 32, 0.1);
- /* border: 1px solid rgb(36, 36, 36); */
- color: white;
- border-radius: 25px;
- padding-left: 0.5rem;
- caret-color: var(--ion-color-primary);
-}
-
-.chat-footer ion-icon {
-
- font-size: 1.5rem;
- margin-top: 0.2rem;
-}
-
-.chat-input-container {
-
- width: 70%;
- margin-right: 0.75rem;
-}
-
-.chat-send-button {
-
- margin: 0 !important;
- padding: 0 !important;
- position: absolute;
- right: 17px;
- margin-top: -0.2rem !important;
-
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- justify-content: center;
-}
-
-.chat-send-button ion-icon {
-
- color: white;
- background-color: var(--ion-color-primary);
- font-size: 1.1rem;
- border-radius: 500px;
- padding: 0.5rem;
-}
-
-.chat-time {
-
- color: rgb(165, 165, 165);
- font-size: 0.75rem;
- right: 0;
- bottom: 0 !important;
- margin: 0;
- padding: 0;
- margin-top: 5px;
-}
-
-.bubble-arrow {
-
- position: absolute;
- float: left;
- left: 6px;
- margin-top: -8px;
- /* top: 0px; */
-}
-
-.bubble-arrow.alt {
-
- position: relative;
- bottom: 0px;
- left: auto;
- right: -3px;
- float: right;
-}
-
-.bubble-arrow:after {
-
- content: "";
- position: absolute;
- border-top: 15px solid var(--chat-bubble-received-color);
- border-left: 15px solid transparent;
- border-radius: 4px 0 0 0px;
- width: 0;
- height: 0;
-}
-
-.bubble-arrow.alt:after {
-
- border-top: 15px solid var(--chat-bubble-sent-color);
- transform: scaleX(-1);
-}
-
-.chat-reply-to-row {
-
- bottom: 70px !important;
- position: absolute;
-
- border-left: 4px solid rgb(224, 176, 18);
- width: 100%;
- background-color: rgb(22, 22, 22);
- border-top: 1px solid rgb(47, 47, 47);
- padding: 0.5rem;
- padding-bottom: 0.8rem;
-}
-
-.chat-reply-to-container {
-
- display: flex;
- flex-direction: column;
-}
-
-.chat-reply-to-name {
-
- color: rgb(224, 176, 18);
- font-weight: 500;
- margin-bottom: 0.5rem;
-}
-
-.chat-reply-to-message {
-
- font-size: 0.8rem;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.all-chats {
-
-
-}
-
-.chat-bottom-details {
-
- display: flex;
- flex-direction: row;
- width: 100%;
- align-content: center;
- align-items: center;
- justify-content: flex-end;
- margin-top: 0.4rem;
-}
-
-.chat-bottom-details ion-icon {
-
- font-size: 0.6rem;
- color: grey;
- margin-left: 0.5rem;
- margin-top: 0.05rem;
-}
-
-.chat-bottom-details span {
-
- margin: 0;
- padding: 0;
- font-size: 0.75rem;
- color: rgb(190, 190, 190);
-}
-
-.in-chat-reply-to-container {
-
- /* background-color: rgba(0, 0, 0, 0.2); */
- border-left: 3px solid rgb(224, 176, 18);
- height: fit-content;
- padding: 0.5rem;
- border-radius: 5px;
- margin-bottom: 0.5rem;
-}
-
-.in-chat-reply-to-container h1 {
-
- margin: 0;
- padding: 0;
- color: rgb(224, 176, 18);
- font-size: 0.8rem;
-}
-
-.in-chat-reply-to-container p {
-
- color: rgb(167, 167, 167);
- font-size: 0.8rem;
-}
-
-.bottom-container {
-
- position: absolute;
- bottom: 4.5rem;
- height: 5rem;
- background-color: red;
- width: 100%;
-}
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/src/components/SessionList.tsx b/03_source/mobile.integrated.not_working.del/src/components/SessionList.tsx
deleted file mode 100644
index 2976453..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/SessionList.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import { AlertButton, IonAlert, IonItemDivider, IonItemGroup, IonLabel, IonList, IonListHeader } from '@ionic/react';
-import React, { useCallback, useEffect, useRef, useState } from 'react';
-import { connect } from '../data/connect';
-import { addFavorite, removeFavorite } from '../data/sessions/sessions.actions';
-import { Schedule, Session } from '../models/Schedule';
-import SessionListItem from './SessionListItem';
-
-interface OwnProps {
- schedule: Schedule;
- listType: 'all' | 'favorites';
- hide: boolean;
-}
-
-interface StateProps {
- favoriteSessions: number[];
-}
-
-interface DispatchProps {
- addFavorite: typeof addFavorite;
- removeFavorite: typeof removeFavorite;
-}
-
-interface SessionListProps extends OwnProps, StateProps, DispatchProps {}
-
-const SessionList: React.FC = ({ addFavorite, removeFavorite, favoriteSessions, hide, schedule, listType }) => {
- const scheduleListRef = useRef(null);
- const [showAlert, setShowAlert] = useState(false);
- const [alertHeader, setAlertHeader] = useState('');
- const [alertMessage, setAlertMessage] = useState('');
- const [alertButtons, setAlertButtons] = useState<(AlertButton | string)[]>([]);
-
- const handleShowAlert = useCallback((header: string, message: string, buttons: AlertButton[]) => {
- setAlertHeader(header);
- setAlertMessage(message);
- setAlertButtons(buttons);
- setShowAlert(true);
- }, []);
-
- useEffect(() => {
- if (scheduleListRef.current) {
- scheduleListRef.current.closeSlidingItems();
- }
- }, [hide]);
-
- if (schedule.groups.length === 0 && !hide) {
- return (
-
- No Sessions Found
-
- );
- }
-
- return (
- <>
-
- {schedule.groups.map((group, index: number) => (
-
-
- {group.time}
-
- {group.sessions.map((session: Session, sessionIndex: number) => (
- -1}
- onAddFavorite={addFavorite}
- onRemoveFavorite={removeFavorite}
- key={`group-${index}-${sessionIndex}`}
- session={session}
- listType={listType}
- />
- ))}
-
- ))}
-
- setShowAlert(false)}>
- >
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- favoriteSessions: state.data.favorites,
- }),
- mapDispatchToProps: {
- addFavorite,
- removeFavorite,
- },
- component: SessionList,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/components/SessionListFilter.css b/03_source/mobile.integrated.not_working.del/src/components/SessionListFilter.css
deleted file mode 100644
index 4516c7a..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/SessionListFilter.css
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Material Design
- */
-
-.md .session-list-filter ion-toolbar ion-button {
- text-transform: capitalize;
- letter-spacing: 0;
-}
-
-.md .session-list-filter ion-checkbox {
- --checkbox-background-checked: transparent;
- --border-color: transparent;
- --border-color-checked: transparent;
- --checkmark-color: var(--ion-color-primary);
-}
-
-.md .session-list-filter ion-list {
- background: inherit;
-}
-
-/*
- * iOS
- */
-
-.ios .session-list-filter ion-list-header {
- margin-top: 10px;
-}
-
-.ios .session-list-filter ion-checkbox {
- color: var(--ion-color-primary);
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/components/SessionListFilter.tsx b/03_source/mobile.integrated.not_working.del/src/components/SessionListFilter.tsx
deleted file mode 100644
index 344121c..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/SessionListFilter.tsx
+++ /dev/null
@@ -1,131 +0,0 @@
-import React from 'react';
-
-import { getMode } from '@ionic/core';
-import {
- IonButton,
- IonButtons,
- IonCheckbox,
- IonContent,
- IonFooter,
- IonHeader,
- IonIcon,
- IonItem,
- IonList,
- IonListHeader,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { call, cog, colorPalette, compass, construct, document, hammer, logoIonic, logoReact, restaurant } from 'ionicons/icons';
-
-import './SessionListFilter.css';
-
-import { connect } from '../data/connect';
-import { updateFilteredTracks } from '../data/sessions/sessions.actions';
-
-interface OwnProps {
- onDismissModal: () => void;
-}
-
-interface StateProps {
- allTracks: string[];
- filteredTracks: string[];
-}
-
-interface DispatchProps {
- updateFilteredTracks: typeof updateFilteredTracks;
-}
-
-type SessionListFilterProps = OwnProps & StateProps & DispatchProps;
-
-const SessionListFilter: React.FC = ({ allTracks, filteredTracks, onDismissModal, updateFilteredTracks }) => {
- const ios = getMode() === 'ios';
-
- const toggleTrackFilter = (track: string) => {
- if (filteredTracks.indexOf(track) > -1) {
- updateFilteredTracks(filteredTracks.filter((x) => x !== track));
- } else {
- updateFilteredTracks([...filteredTracks, track]);
- }
- };
-
- const handleDeselectAll = () => {
- updateFilteredTracks([]);
- };
-
- const handleSelectAll = () => {
- updateFilteredTracks([...allTracks]);
- };
-
- const iconMap: { [key: string]: any } = {
- React: logoReact,
- Documentation: document,
- Food: restaurant,
- Ionic: logoIonic,
- Tooling: hammer,
- Design: colorPalette,
- Services: cog,
- Workshop: construct,
- Navigation: compass,
- Communication: call,
- };
-
- return (
- <>
-
-
-
- {ios && Cancel }
- {!ios && Reset }
-
-
- Filter Sessions
-
-
-
- Done
-
-
-
-
-
-
-
- Tracks
-
- {allTracks.map((track) => (
-
- {ios && }
- toggleTrackFilter(track)} checked={filteredTracks.indexOf(track) !== -1} color="primary" value={track}>
- {track}
-
-
- ))}
-
-
-
- {ios && (
-
-
-
- Deselect All
-
-
- Select All
-
-
-
- )}
- >
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- allTracks: state.data.allTracks,
- filteredTracks: state.data.filteredTracks,
- }),
- mapDispatchToProps: {
- updateFilteredTracks,
- },
- component: SessionListFilter,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/components/SessionListItem.tsx b/03_source/mobile.integrated.not_working.del/src/components/SessionListItem.tsx
deleted file mode 100644
index e51dbc8..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/SessionListItem.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { AlertButton, IonItem, IonItemOption, IonItemOptions, IonItemSliding, IonLabel, useIonToast } from '@ionic/react';
-import React, { useRef } from 'react';
-import { Session } from '../models/Schedule';
-
-interface SessionListItemProps {
- session: Session;
- listType: 'all' | 'favorites';
- onAddFavorite: (id: number) => void;
- onRemoveFavorite: (id: number) => void;
- onShowAlert: (header: string, message: string, buttons: AlertButton[]) => void;
- isFavorite: boolean;
-}
-
-const SessionListItem: React.FC = ({ isFavorite, onAddFavorite, onRemoveFavorite, onShowAlert, session, listType }) => {
- const [presentToast] = useIonToast();
- const ionItemSlidingRef = useRef(null);
-
- const dismissAlert = () => {
- ionItemSlidingRef.current && ionItemSlidingRef.current.close();
- };
-
- const removeFavoriteSession = (title: string) => {
- onAddFavorite(session.id);
- onShowAlert(title, 'Would you like to remove this session from your favorites?', [
- {
- text: 'Cancel',
- handler: dismissAlert,
- },
- {
- text: 'Remove',
- handler: () => {
- onRemoveFavorite(session.id);
- dismissAlert();
- },
- },
- ]);
- };
-
- const addFavoriteSession = async () => {
- if (isFavorite) {
- // Prompt to remove favorite
- removeFavoriteSession('Favorite already added');
- } else {
- // Add as a favorite
- onAddFavorite(session.id);
-
- // Close the open item
- ionItemSlidingRef.current && ionItemSlidingRef.current.close();
-
- // Create a toast
- presentToast({
- message: `${session.name} was successfully added as a favorite.`,
- duration: 3000,
- buttons: [
- {
- text: 'Close',
- role: 'cancel',
- },
- ],
- });
- }
- };
-
- return (
-
-
-
- {session.name}
-
- {session.timeStart} —
- {session.timeEnd}:
- {session.location}
-
-
-
-
- {listType === 'favorites' ? (
- removeFavoriteSession('Remove Favorite')}>
- Remove
-
- ) : (
-
- Favorite
-
- )}
-
-
- );
-};
-
-export default React.memo(SessionListItem);
diff --git a/03_source/mobile.integrated.not_working.del/src/components/ShareSocialFab.tsx b/03_source/mobile.integrated.not_working.del/src/components/ShareSocialFab.tsx
deleted file mode 100644
index e314327..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/ShareSocialFab.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { IonFab, IonFabButton, IonFabList, IonIcon, IonLoading } from '@ionic/react';
-import { logoFacebook, logoInstagram, logoTwitter, logoVimeo, shareSocial } from 'ionicons/icons';
-import React, { useState } from 'react';
-
-const ShareSocialFab: React.FC = () => {
- const [loadingMessage, setLoadingMessage] = useState('');
- const [showLoading, setShowLoading] = useState(false);
-
- const openSocial = (network: string) => {
- setLoadingMessage(`Posting to ${network}`);
- setShowLoading(true);
- };
-
- return (
- <>
- setShowLoading(false)} />
-
-
-
-
-
- openSocial('Vimeo')}>
-
-
- openSocial('Instagram')}>
-
-
- openSocial('Twitter')}>
-
-
- openSocial('Facebook')}>
-
-
-
-
- >
- );
-};
-
-export default ShareSocialFab;
diff --git a/03_source/mobile.integrated.not_working.del/src/components/SpeakerItem.tsx b/03_source/mobile.integrated.not_working.del/src/components/SpeakerItem.tsx
deleted file mode 100644
index 420052b..0000000
--- a/03_source/mobile.integrated.not_working.del/src/components/SpeakerItem.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonAvatar, IonCard, IonCardContent, IonCardHeader, IonItem, IonLabel, IonList } from '@ionic/react';
-import React from 'react';
-import { Session } from '../models/Schedule';
-import { Speaker } from '../models/Speaker';
-
-interface SpeakerItemProps {
- speaker: Speaker;
- sessions: Session[];
-}
-
-const SpeakerItem: React.FC = ({ speaker, sessions }) => {
- return (
- <>
-
-
-
-
-
-
-
- {speaker.name}
- {speaker.title}
-
-
-
-
-
-
- {sessions.map((session) => (
-
-
- {session.name}
-
-
- ))}
-
-
- About {speaker.name}
-
-
-
-
-
- >
- );
-};
-
-export default SpeakerItem;
diff --git a/03_source/mobile.integrated.not_working.del/src/data/AppContext.tsx b/03_source/mobile.integrated.not_working.del/src/data/AppContext.tsx
deleted file mode 100644
index ae24bf5..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/AppContext.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import React, { createContext, PropsWithChildren, useReducer } from 'react';
-import { AppState, initialState, reducers } from './state';
-
-export interface AppContextState {
- state: AppState;
- dispatch: React.Dispatch;
-}
-
-export const AppContext = createContext({
- state: initialState,
- dispatch: () => undefined,
-});
-
-export const AppContextProvider: React.FC = ({ children }) => {
- const [store, dispatch] = useReducer(reducers, initialState);
-
- return (
-
- {children}
-
- );
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/data/combineReducers.ts b/03_source/mobile.integrated.not_working.del/src/data/combineReducers.ts
deleted file mode 100644
index 44769b0..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/combineReducers.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-interface R {
- [key: string]: (...args: any) => any;
-}
-
-export function combineReducers(reducers: R) {
- type keys = keyof typeof reducers;
- type returnType = { [K in keys]: ReturnType<(typeof reducers)[K]> };
- const combinedReducer = (state: any, action: any) => {
- const newState: returnType = {} as any;
- const keys = Object.keys(reducers);
- keys.forEach((key) => {
- const result = reducers[key](state[key], action);
- newState[key as keys] = result || state[key];
- });
- return newState;
- };
- return combinedReducer;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/data/connect.tsx b/03_source/mobile.integrated.not_working.del/src/data/connect.tsx
deleted file mode 100644
index 1e96522..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/connect.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import React, { useContext, useMemo } from 'react';
-import { DispatchObject } from '../util/types';
-import { AppContext } from './AppContext';
-import { AppState } from './state';
-
-interface ConnectParams {
- mapStateToProps?: (state: AppState, props: TOwnProps) => TStateProps;
- mapDispatchToProps?: TDispatchProps;
- component: React.ComponentType;
-}
-
-export function connect({
- mapStateToProps = () => ({} as TStateProps),
- mapDispatchToProps = {} as TDispatchProps,
- component,
-}: ConnectParams): React.FunctionComponent {
- const Connect = (ownProps: TOwnProps) => {
- const context = useContext(AppContext);
-
- const dispatchFuncs = useMemo(() => {
- const dispatchFuncs: { [key: string]: any } = {};
- if (mapDispatchToProps) {
- Object.keys(mapDispatchToProps).forEach((key) => {
- const oldFunc = (mapDispatchToProps as any)[key];
- const newFunc = (...args: any) => {
- const dispatchFunc = oldFunc(...args);
- if (typeof dispatchFunc === 'object') {
- context.dispatch(dispatchFunc);
- } else {
- const result = dispatchFunc(context.dispatch);
- if (typeof result === 'object' && result.then) {
- result.then((dispatchObject?: DispatchObject) => {
- if (dispatchObject && dispatchObject.type) {
- context.dispatch(dispatchObject);
- }
- });
- }
- }
- };
- dispatchFuncs[key] = newFunc;
- });
- }
- return dispatchFuncs;
- // eslint-disable-next-line
- }, [mapDispatchToProps]);
-
- const props = useMemo(() => {
- return Object.assign({}, ownProps, mapStateToProps(context.state, ownProps), dispatchFuncs);
- // eslint-disable-next-line
- }, [ownProps, context.state]);
-
- return React.createElement(component, props);
- };
- return React.memo(Connect as any);
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/data/dataApi.ts b/03_source/mobile.integrated.not_working.del/src/data/dataApi.ts
deleted file mode 100644
index d5c8613..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/dataApi.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import { Preferences as Storage } from '@capacitor/preferences';
-import { Location } from '../models/Location';
-import { Schedule, Session } from '../models/Schedule';
-import { Speaker } from '../models/Speaker';
-
-const dataUrl = '/assets/data/data.json';
-const locationsUrl = '/assets/data/locations.json';
-
-const HAS_LOGGED_IN = 'hasLoggedIn';
-const HAS_SEEN_TUTORIAL = 'hasSeenTutorial';
-const USERNAME = 'username';
-
-export const getConfData = async () => {
- const response = await Promise.all([fetch(dataUrl), fetch(locationsUrl)]);
- const responseData = await response[0].json();
- const schedule = responseData.schedule[0] as Schedule;
- const sessions = parseSessions(schedule);
- const speakers = responseData.speakers as Speaker[];
- const locations = (await response[1].json()) as Location[];
- const allTracks = sessions
- .reduce((all, session) => all.concat(session.tracks), [] as string[])
- .filter((trackName, index, array) => array.indexOf(trackName) === index)
- .sort();
-
- const data = {
- schedule,
- sessions,
- locations,
- speakers,
- allTracks,
- filteredTracks: [...allTracks],
- };
- return data;
-};
-
-export const getUserData = async () => {
- const response = await Promise.all([Storage.get({ key: HAS_LOGGED_IN }), Storage.get({ key: HAS_SEEN_TUTORIAL }), Storage.get({ key: USERNAME })]);
- const isLoggedin = (await response[0].value) === 'true';
- const hasSeenTutorial = (await response[1].value) === 'true';
- const username = (await response[2].value) || undefined;
- const data = {
- isLoggedin,
- hasSeenTutorial,
- username,
- };
- return data;
-};
-
-export const setIsLoggedInData = async (isLoggedIn: boolean) => {
- await Storage.set({ key: HAS_LOGGED_IN, value: JSON.stringify(isLoggedIn) });
-};
-
-export const setHasSeenTutorialData = async (hasSeenTutorial: boolean) => {
- await Storage.set({
- key: HAS_SEEN_TUTORIAL,
- value: JSON.stringify(hasSeenTutorial),
- });
-};
-
-export const setUsernameData = async (username?: string) => {
- if (!username) {
- await Storage.remove({ key: USERNAME });
- } else {
- await Storage.set({ key: USERNAME, value: username });
- }
-};
-
-function parseSessions(schedule: Schedule) {
- const sessions: Session[] = [];
- schedule.groups.forEach((g) => {
- g.sessions.forEach((s) => sessions.push(s));
- });
- return sessions;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/data/locations/locations.actions.ts b/03_source/mobile.integrated.not_working.del/src/data/locations/locations.actions.ts
deleted file mode 100644
index 77ba447..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/locations/locations.actions.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { Location } from '../../models/Location';
-import { DispatchObject } from '../../util/types';
-
-export const SET_LOCATIONS = 'SET_LOCATIONS';
-
-export const setLocations = (locations: Location[]): DispatchObject => ({
- type: SET_LOCATIONS,
- payload: locations,
-});
-
-export const loadLocations = () => async (dispatch: (action: DispatchObject) => void) => {
- try {
- const response = await fetch('/assets/data/locations.json');
- const locations = await response.json();
- dispatch(setLocations(locations));
- } catch (error) {
- console.error('Error loading locations:', error);
- // Set default locations if data cannot be loaded
- dispatch(
- setLocations([
- {
- id: 1,
- name: 'Monona Terrace Convention Center',
- lat: 43.071584,
- lng: -89.38012,
- center: true,
- },
- ])
- );
- }
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/data/locations/locations.reducer.ts b/03_source/mobile.integrated.not_working.del/src/data/locations/locations.reducer.ts
deleted file mode 100644
index 0cf028f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/locations/locations.reducer.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { LocationState, initialState } from '../../models/Location';
-import { SET_LOCATIONS } from './locations.actions';
-
-export const locationsReducer = (state: LocationState = initialState, action: { type: string; payload: any }): LocationState => {
- switch (action.type) {
- case SET_LOCATIONS:
- return {
- ...state,
- locations: action.payload,
- };
- default:
- return state;
- }
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/data/selectors.ts b/03_source/mobile.integrated.not_working.del/src/data/selectors.ts
deleted file mode 100644
index 81d67ce..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/selectors.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import { createSelector } from 'reselect';
-import { Location } from '../models/Location';
-import { Schedule, ScheduleGroup, Session } from '../models/Schedule';
-import { Speaker } from '../models/Speaker';
-import { AppState } from './state';
-
-const getSchedule = (state: AppState) => {
- return state.data.schedule;
-};
-export const getSpeakers = (state: AppState) => state.data.speakers;
-const getSessions = (state: AppState) => state.data.sessions;
-const getFilteredTracks = (state: AppState) => state.data.filteredTracks;
-const getFavoriteIds = (state: AppState) => state.data.favorites;
-const getSearchText = (state: AppState) => state.data.searchText;
-
-export const getFilteredSchedule = createSelector(getSchedule, getFilteredTracks, (schedule, filteredTracks) => {
- const groups: ScheduleGroup[] = [];
-
- // Helper function to convert 12-hour time to 24-hour time for proper sorting
- const convertTo24Hour = (timeStr: string) => {
- const [time, period] = timeStr.toLowerCase().split(' ');
- let [hours, minutes] = time.split(':').map(Number);
-
- if (period === 'pm' && hours !== 12) {
- hours += 12;
- } else if (period === 'am' && hours === 12) {
- hours = 0;
- }
-
- return `${hours.toString().padStart(2, '0')}:${minutes || '00'}`;
- };
-
- // Sort the groups by time
- const sortedGroups = [...schedule.groups].sort((a, b) => {
- const timeA = convertTo24Hour(a.time);
- const timeB = convertTo24Hour(b.time);
- return timeA.localeCompare(timeB);
- });
-
- sortedGroups.forEach((group: ScheduleGroup) => {
- const sessions: Session[] = [];
- group.sessions.forEach((session) => {
- session.tracks.forEach((track) => {
- if (filteredTracks.indexOf(track) > -1) {
- sessions.push(session);
- }
- });
- });
-
- if (sessions.length) {
- // Sort sessions within each group by start time
- const sortedSessions = sessions.sort((a, b) => {
- const timeA = convertTo24Hour(a.timeStart);
- const timeB = convertTo24Hour(b.timeStart);
- return timeA.localeCompare(timeB);
- });
-
- const groupToAdd: ScheduleGroup = {
- time: group.time,
- sessions: sortedSessions,
- };
- groups.push(groupToAdd);
- }
- });
-
- return {
- date: schedule.date,
- groups,
- } as Schedule;
-});
-
-export const getSearchedSchedule = createSelector(getFilteredSchedule, getSearchText, (schedule, searchText) => {
- if (!searchText) {
- return schedule;
- }
- const groups: ScheduleGroup[] = [];
- schedule.groups.forEach((group) => {
- const sessions = group.sessions.filter((s) => s.name.toLowerCase().indexOf(searchText.toLowerCase()) > -1);
- if (sessions.length) {
- const groupToAdd: ScheduleGroup = {
- time: group.time,
- sessions,
- };
- groups.push(groupToAdd);
- }
- });
- return {
- date: schedule.date,
- groups,
- } as Schedule;
-});
-
-export const getScheduleList = createSelector(getSearchedSchedule, (schedule) => schedule);
-
-export const getGroupedFavorites = createSelector(getScheduleList, getFavoriteIds, (schedule, favoriteIds) => {
- const groups: ScheduleGroup[] = [];
- schedule.groups.forEach((group) => {
- const sessions = group.sessions.filter((s) => favoriteIds.indexOf(s.id) > -1);
- if (sessions.length) {
- const groupToAdd: ScheduleGroup = {
- time: group.time,
- sessions,
- };
- groups.push(groupToAdd);
- }
- });
- return {
- date: schedule.date,
- groups,
- } as Schedule;
-});
-
-const getIdParam = (_state: AppState, props: any) => {
- return props.match.params['id'];
-};
-
-export const getSession = createSelector(getSessions, getIdParam, (sessions, id) => {
- return sessions.find((s: Session) => s.id === id);
-});
-
-export const getSpeaker = createSelector(getSpeakers, getIdParam, (speakers, id) => speakers.find((x: Speaker) => x.id === id));
-
-export const getSpeakerSessions = createSelector(getSessions, (sessions) => {
- const speakerSessions: { [key: string]: Session[] } = {};
-
- sessions.forEach((session: Session) => {
- session.speakerNames &&
- session.speakerNames.forEach((name) => {
- if (speakerSessions[name]) {
- speakerSessions[name].push(session);
- } else {
- speakerSessions[name] = [session];
- }
- });
- });
- return speakerSessions;
-});
-
-export const mapCenter = (state: AppState) => {
- const item = state.data.locations.find((l: Location) => l.id === state.data.mapCenterId);
- if (item == null) {
- return {
- id: 1,
- name: 'Map Center',
- lat: 43.071584,
- lng: -89.38012,
- };
- }
- return item;
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/data/sessions/conf.state.ts b/03_source/mobile.integrated.not_working.del/src/data/sessions/conf.state.ts
deleted file mode 100644
index b5c7628..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/sessions/conf.state.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Location } from '../../models/Location';
-import { Schedule, Session } from '../../models/Schedule';
-import { Speaker } from '../../models/Speaker';
-export interface ConfState {
- schedule: Schedule;
- sessions: Session[];
- speakers: Speaker[];
- favorites: number[];
- locations: Location[];
- filteredTracks: string[];
- searchText?: string;
- mapCenterId?: number;
- loading?: boolean;
- allTracks: string[];
- menuEnabled: boolean;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/data/sessions/sessions.actions.ts b/03_source/mobile.integrated.not_working.del/src/data/sessions/sessions.actions.ts
deleted file mode 100644
index bab9a3b..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/sessions/sessions.actions.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { ActionType } from '../../util/types';
-import { getConfData } from '../dataApi';
-import { ConfState } from './conf.state';
-
-export const loadConfData = () => async (dispatch: React.Dispatch) => {
- dispatch(setLoading(true));
- const data = await getConfData();
- dispatch(setData(data));
- dispatch(setLoading(false));
-};
-
-export const setLoading = (isLoading: boolean) =>
- ({
- type: 'set-conf-loading',
- isLoading,
- } as const);
-
-export const setData = (data: Partial) =>
- ({
- type: 'set-conf-data',
- data,
- } as const);
-
-export const addFavorite = (sessionId: number) =>
- ({
- type: 'add-favorite',
- sessionId,
- } as const);
-
-export const removeFavorite = (sessionId: number) =>
- ({
- type: 'remove-favorite',
- sessionId,
- } as const);
-
-export const updateFilteredTracks = (filteredTracks: string[]) =>
- ({
- type: 'update-filtered-tracks',
- filteredTracks,
- } as const);
-
-export const setSearchText = (searchText?: string) =>
- ({
- type: 'set-search-text',
- searchText,
- } as const);
-
-export const setMenuEnabled = (menuEnabled: boolean) =>
- ({
- type: 'set-menu-enabled',
- menuEnabled,
- } as const);
-
-export type SessionsActions =
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType;
diff --git a/03_source/mobile.integrated.not_working.del/src/data/sessions/sessions.reducer.ts b/03_source/mobile.integrated.not_working.del/src/data/sessions/sessions.reducer.ts
deleted file mode 100644
index b3da02a..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/sessions/sessions.reducer.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { ConfState } from './conf.state';
-import { SessionsActions } from './sessions.actions';
-
-export const sessionsReducer = (state: ConfState, action: SessionsActions): ConfState => {
- switch (action.type) {
- case 'set-conf-loading': {
- return { ...state, loading: action.isLoading };
- }
- case 'set-conf-data': {
- return { ...state, ...action.data };
- }
- case 'add-favorite': {
- return { ...state, favorites: [...state.favorites, action.sessionId] };
- }
- case 'remove-favorite': {
- return {
- ...state,
- favorites: [...state.favorites.filter((x) => x !== action.sessionId)],
- };
- }
- case 'update-filtered-tracks': {
- return { ...state, filteredTracks: action.filteredTracks };
- }
- case 'set-search-text': {
- return { ...state, searchText: action.searchText };
- }
- case 'set-menu-enabled': {
- return { ...state, menuEnabled: action.menuEnabled };
- }
- }
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/data/state.ts b/03_source/mobile.integrated.not_working.del/src/data/state.ts
deleted file mode 100644
index 8615083..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/state.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { combineReducers } from './combineReducers';
-import { locationsReducer } from './locations/locations.reducer';
-import { sessionsReducer } from './sessions/sessions.reducer';
-import { userReducer } from './user/user.reducer';
-
-export const initialState: AppState = {
- data: {
- schedule: { groups: [] } as any,
- sessions: [],
- speakers: [],
- favorites: [],
- locations: [],
- allTracks: [],
- filteredTracks: [],
- mapCenterId: 0,
- loading: false,
- menuEnabled: true,
- },
- user: {
- hasSeenTutorial: false,
- darkMode: false,
- isLoggedin: false,
- loading: false,
- },
- locations: {
- locations: [],
- },
-};
-
-export const reducers = combineReducers({
- data: sessionsReducer,
- user: userReducer,
- locations: locationsReducer,
-});
-
-export type AppState = ReturnType;
diff --git a/03_source/mobile.integrated.not_working.del/src/data/user/user.actions.ts b/03_source/mobile.integrated.not_working.del/src/data/user/user.actions.ts
deleted file mode 100644
index 5a6154f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/user/user.actions.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { ActionType } from '../../util/types';
-import { getUserData, setHasSeenTutorialData, setIsLoggedInData, setUsernameData } from '../dataApi';
-import { UserState } from './user.state';
-
-export const loadUserData = () => async (dispatch: React.Dispatch) => {
- dispatch(setLoading(true));
- const data = await getUserData();
- dispatch(setData(data));
- dispatch(setLoading(false));
-};
-
-export const setLoading = (isLoading: boolean) =>
- ({
- type: 'set-user-loading',
- isLoading,
- } as const);
-
-export const setData = (data: Partial) =>
- ({
- type: 'set-user-data',
- data,
- } as const);
-
-export const logoutUser = () => async (dispatch: React.Dispatch) => {
- await setIsLoggedInData(false);
- dispatch(setUsername());
-};
-
-export const setIsLoggedIn = (loggedIn: boolean) => async (dispatch: React.Dispatch) => {
- await setIsLoggedInData(loggedIn);
- return {
- type: 'set-is-loggedin',
- loggedIn,
- } as const;
-};
-
-export const setUsername = (username?: string) => async (dispatch: React.Dispatch) => {
- await setUsernameData(username);
- return {
- type: 'set-username',
- username,
- } as const;
-};
-
-export const setHasSeenTutorial = (hasSeenTutorial: boolean) => async (dispatch: React.Dispatch) => {
- await setHasSeenTutorialData(hasSeenTutorial);
- return {
- type: 'set-has-seen-tutorial',
- hasSeenTutorial,
- } as const;
-};
-
-export const setDarkMode = (darkMode: boolean) =>
- ({
- type: 'set-dark-mode',
- darkMode,
- } as const);
-
-export type UserActions =
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType;
diff --git a/03_source/mobile.integrated.not_working.del/src/data/user/user.reducer.ts b/03_source/mobile.integrated.not_working.del/src/data/user/user.reducer.ts
deleted file mode 100644
index 9f0247d..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/user/user.reducer.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { UserActions } from './user.actions';
-import { UserState } from './user.state';
-
-export function userReducer(state: UserState, action: UserActions): UserState {
- switch (action.type) {
- case 'set-user-loading':
- return { ...state, loading: action.isLoading };
- case 'set-user-data':
- return { ...state, ...action.data };
- case 'set-username':
- return { ...state, username: action.username };
- case 'set-has-seen-tutorial':
- return { ...state, hasSeenTutorial: action.hasSeenTutorial };
- case 'set-dark-mode':
- return { ...state, darkMode: action.darkMode };
- case 'set-is-loggedin':
- return { ...state, isLoggedin: action.loggedIn };
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/data/user/user.state.ts b/03_source/mobile.integrated.not_working.del/src/data/user/user.state.ts
deleted file mode 100644
index e8a1f8e..0000000
--- a/03_source/mobile.integrated.not_working.del/src/data/user/user.state.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export interface UserState {
- isLoggedin: boolean;
- username?: string;
- darkMode: boolean;
- hasSeenTutorial: boolean;
- loading: boolean;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/declarations.ts b/03_source/mobile.integrated.not_working.del/src/declarations.ts
deleted file mode 100644
index dbe667a..0000000
--- a/03_source/mobile.integrated.not_working.del/src/declarations.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface AppPage {
- url: string;
- icon: object;
- title: string;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useCamera.js b/03_source/mobile.integrated.not_working.del/src/hooks/useCamera.js
deleted file mode 100644
index de50d9a..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useCamera.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Camera, CameraResultType, CameraSource } from '@capacitor/camera';
-import { Capacitor } from '@capacitor/core';
-
-export const useCamera = () => {
- const takePhoto = async () => {
- const options = {
- resultType: CameraResultType.Uri,
- source: CameraSource.Camera,
- quality: 100,
- };
- const cameraPhoto = await Camera.getPhoto(options);
- return Capacitor.convertFileSrc(cameraPhoto.webPath);
- };
-
- return {
- takePhoto,
- };
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useFriendStatus.template b/03_source/mobile.integrated.not_working.del/src/hooks/useFriendStatus.template
deleted file mode 100644
index c1f9e30..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useFriendStatus.template
+++ /dev/null
@@ -1,20 +0,0 @@
-import { useState, useEffect } from 'react';
-
-function useFriendStatus(friendID) {
- const [isOnline, setIsOnline] = useState(null);
-
- useEffect(() => {
- function handleStatusChange(status) {
- setIsOnline(status.isOnline);
- }
-
- ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
- return () => {
- ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
- };
- });
-
- return isOnline;
-}
-
-export default useFriendStatus;
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useGallery.js b/03_source/mobile.integrated.not_working.del/src/hooks/useGallery.js
deleted file mode 100644
index 7ff93ef..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useGallery.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Camera, CameraResultType, CameraSource } from '@capacitor/camera';
-import { Capacitor } from '@capacitor/core';
-
-export const useGallery = () => {
- const prompt = async () => {
- const options = {
- resultType: CameraResultType.Uri,
- source: CameraSource.Prompt,
- quality: 100,
- };
- const cameraPhoto = await Camera.getPhoto(options);
- return Capacitor.convertFileSrc(cameraPhoto.webPath);
- };
-
- return {
- prompt,
- };
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useGetPartyEventDetail.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useGetPartyEventDetail.ts
deleted file mode 100644
index 8a9330d..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useGetPartyEventDetail.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-// REQ0041/home_discover_event_tab
-
-import { useEffect, useState } from 'react';
-
-import { supabase } from '../supabaseClient';
-
-export const useGetPartyEventDetail = ({ party_event_id }) => {
- const [party_event_detail, setPartyEventDetail] = useState(null);
-
- async function getPartyEvents() {
- let { data } = await supabase.from('view_party_event_summaries').select('*').filter('id', '=', party_event_id);
- setPartyEventDetail(data);
- }
-
- useEffect(() => {
- getPartyEvents();
- }, [party_event_id]);
-
- return [party_event_detail];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useGetPartyEventOrder.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useGetPartyEventOrder.ts
deleted file mode 100644
index 7740e30..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useGetPartyEventOrder.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { useEffect, useState } from 'react';
-
-import { supabase } from '../supabaseClient';
-
-export const useGetPartyEventOrder = ({ event_id }) => {
- const [party_event_order, setPartyEventOrder] = useState(null);
-
- async function getPartyEventOrder() {
- let { data } = await supabase.from('party_event_orders').select(`
- id, profiles(id, full_name, gender, remarks)
- `);
- // status == 2 , paid
-
- // tidy up
-
- // .filter('party_event_id', 'in', `("${event_id}")`);
- // setPartyEventOrder(data);
- // console.log({data})
- }
-
- useEffect(() => {
- getPartyEventOrder();
- }, []);
-
- return [party_event_order];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useGetProfileById.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useGetProfileById.ts
deleted file mode 100644
index 373193e..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useGetProfileById.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { useEffect, useState } from 'react';
-
-import { supabase } from '../supabaseClient';
-
-export const useGetProfileById = ({ id }) => {
- const [party_event_order, setPartyEventOrder] = useState(null);
-
- async function getPartyEventOrder() {
- let { data } = await supabase
- .from('profiles')
- .select('*')
- .filter('id', 'in', `("33a1f462-7085-4655-b42e-a0f1e8395f6c")`);
- }
-
- useEffect(() => {
- getPartyEventOrder();
- }, []);
-
- return [party_event_order];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useGetUserProfileById.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useGetUserProfileById.ts
deleted file mode 100644
index 158240f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useGetUserProfileById.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-// REQ0044/near_by_page
-// what to do:
-// list users near by except current user
-
-import { useContext, useEffect, useState } from 'react';
-
-import { AppContext } from '../data/AppContext';
-import { supabase } from '../supabaseClient';
-
-export const useGetUserProfileById = ({ user_id }) => {
- const { profile } = useContext(AppContext);
- const [other_user_profiles, setOtherUserProfiles] = useState([]);
-
- async function getPartyEvents() {
- let { data } = await supabase.from('profiles').select('*').filter('user_id', 'in', `(${user_id})`).limit(1);
-
- setOtherUserProfiles(data[0]);
- }
-
- useEffect(() => {
- getPartyEvents();
- }, []);
-
- return [other_user_profiles];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useJoinTest.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useJoinTest.ts
deleted file mode 100644
index ea2c7bf..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useJoinTest.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { useEffect, useState } from 'react';
-
-import { supabase } from '../supabaseClient';
-
-export const useJoinTest = () => {
- const [test_data, setTestData] = useState(null);
-
- async function getPartyEvents() {
- const { data, error } = await supabase.from('countries').select(`
- id,
- name,
- cities ( id, name )
- `);
-
- console.log({ data });
-
- setTestData(data);
- }
-
- useEffect(() => {
- getPartyEvents();
- }, []);
-
- return [test_data];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useListOtherUserProfiles.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useListOtherUserProfiles.ts
deleted file mode 100644
index 35b3611..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useListOtherUserProfiles.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-// REQ0044/near_by_page
-// what to do:
-// list users near by except current user
-
-import { useContext, useEffect, useState } from 'react';
-
-import { AppContext } from '../data/AppContext';
-import { supabase } from '../supabaseClient';
-
-export const useListOtherUserProfiles = () => {
- const { profile } = useContext(AppContext);
- const [other_user_profiles, setOtherUserProfiles] = useState([]);
- const user_id = '1';
-
- async function getPartyEvents() {
- console.log({ profile });
- let { data } = await supabase.from('profiles').select('*').not('user_id', 'in', `(${user_id})`).limit(10);
- setOtherUserProfiles(data);
- }
-
- useEffect(() => {
- getPartyEvents();
- }, []);
-
- return [other_user_profiles];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventOrderSummary.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventOrderSummary.ts
deleted file mode 100644
index 96d196b..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventOrderSummary.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-// REQ0041/home_discover_event_tab
-
-import { useEffect, useState } from 'react';
-import { supabase } from '../supabaseClient';
-
-export const useListPartyEventOrderSummary = ({ user_id }) => {
- const [party_event_summaries, setPartyEventSummaries] = useState(null);
-
- async function getPartyEvents() {
- let { data } = await supabase.from('view_party_event_orders_summary').select('*').filter('user_id', 'eq', '1');
- setPartyEventSummaries(data);
- }
-
- useEffect(() => {
- getPartyEvents();
- }, []);
-
- return [party_event_summaries];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventOrders.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventOrders.ts
deleted file mode 100644
index e5f0a9f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventOrders.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-// REQ0041/home_discover_event_tab
-
-import { useEffect, useState } from 'react';
-import { supabase } from '../supabaseClient';
-
-export const useListPartyEventOrders = ({ user_id }) => {
- const [party_event_summaries, setPartyEventSummaries] = useState(null);
-
- async function getPartyEvents() {
- let { data } = await supabase.from('view_party_event_orders').select('*').filter('user_id', 'eq', '1');
- setPartyEventSummaries(data);
- }
-
- useEffect(() => {
- getPartyEvents();
- }, []);
-
- return [party_event_summaries];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventSummaries.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventSummaries.ts
deleted file mode 100644
index aa04952..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEventSummaries.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-// REQ0041/home_discover_event_tab
-
-import { useEffect, useState } from 'react';
-
-import { supabase } from '../supabaseClient';
-
-export const useListPartyEventSummaries = () => {
- const [party_event_summaries, setPartyEventSummaries] = useState(null);
-
- async function getPartyEvents() {
- let { data } = await supabase.from('view_party_event_summaries').select('*');
- setPartyEventSummaries(data);
- console.log({ party_event_summaries });
- }
-
- useEffect(() => {
- getPartyEvents();
- }, []);
-
- return [party_event_summaries];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEvents.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEvents.ts
deleted file mode 100644
index ff5566b..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useListPartyEvents.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-// REQ0041/home_discover_event_tab
-
-import { useEffect, useState } from 'react';
-
-import { supabase } from '../supabaseClient';
-
-export const useListPartyEvents = () => {
- const [party_event_summaries, setPartyEventSummaries] = useState(null);
-
- async function getPartyEvents() {
- let { data } = await supabase.from('view_party_event_summaries').select('*');
- setPartyEventSummaries(data);
- console.log({ data });
- }
-
- useEffect(() => {
- getPartyEvents();
- }, []);
-
- return [party_event_summaries];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/hooks/useViewPartyEventParticipants.ts b/03_source/mobile.integrated.not_working.del/src/hooks/useViewPartyEventParticipants.ts
deleted file mode 100644
index 5197a33..0000000
--- a/03_source/mobile.integrated.not_working.del/src/hooks/useViewPartyEventParticipants.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-// REQ0041/home_discover_event_tab
-import { useEffect, useState } from 'react';
-
-import { supabase } from '../supabaseClient';
-
-export const useViewPartyEventParticipants = ({ party_event_id, limit }) => {
- const [participants, setParticipants] = useState(null);
-
- async function getPartyEvents() {
- let { data } = await supabase
- .from('view_party_event_participants')
- .select('*')
- .filter('id', '=', party_event_id)
- .limit(limit);
-
- setParticipants(data);
- }
-
- useEffect(() => {
- getPartyEvents();
- }, [party_event_id]);
-
- return [participants];
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/main.tsx b/03_source/mobile.integrated.not_working.del/src/main.tsx
deleted file mode 100644
index 5202c72..0000000
--- a/03_source/mobile.integrated.not_working.del/src/main.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import App from './App';
-import * as serviceWorker from './serviceWorker';
-
-ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
-
-
-
-);
-
-// If you want your app to work offline and load faster, you can change
-// unregister() to register() below. Note this comes with some pitfalls.
-// Learn more about service workers: https://bit.ly/CRA-PWA
-serviceWorker.register();
diff --git a/03_source/mobile.integrated.not_working.del/src/models/Location.ts b/03_source/mobile.integrated.not_working.del/src/models/Location.ts
deleted file mode 100644
index 9bc6d77..0000000
--- a/03_source/mobile.integrated.not_working.del/src/models/Location.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export interface Location {
- id: number;
- name: string;
- lat: number;
- lng: number;
- center?: boolean;
-}
-
-export interface LocationState {
- locations: Location[];
-}
-
-export const initialState: LocationState = {
- locations: [],
-};
diff --git a/03_source/mobile.integrated.not_working.del/src/models/Schedule.ts b/03_source/mobile.integrated.not_working.del/src/models/Schedule.ts
deleted file mode 100644
index f210ff8..0000000
--- a/03_source/mobile.integrated.not_working.del/src/models/Schedule.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-export interface Schedule {
- date: string;
- groups: ScheduleGroup[];
-}
-
-export interface ScheduleGroup {
- time: string;
- sessions: Session[];
-}
-
-export interface Session {
- id: number;
- timeStart: string;
- timeEnd: string;
- name: string;
- location: string;
- description: string;
- speakerNames: string[];
- tracks: string[];
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/models/SessionGroup.ts b/03_source/mobile.integrated.not_working.del/src/models/SessionGroup.ts
deleted file mode 100644
index 93d46ad..0000000
--- a/03_source/mobile.integrated.not_working.del/src/models/SessionGroup.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Session } from './Schedule';
-export interface SessionGroup {
- startTime: string;
- sessions: Session[];
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/models/Speaker.ts b/03_source/mobile.integrated.not_working.del/src/models/Speaker.ts
deleted file mode 100644
index 35d8c78..0000000
--- a/03_source/mobile.integrated.not_working.del/src/models/Speaker.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export interface Speaker {
- id: number;
- name: string;
- profilePic: string;
- twitter: string;
- instagram: string;
- about: string;
- title: string;
- location: string;
- email: string;
- phone: string;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/About.scss b/03_source/mobile.integrated.not_working.del/src/pages/About.scss
deleted file mode 100644
index f7d1ac0..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/About.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url("/assets/img/about/madison.jpg");
- }
-
- .about-header .austin {
- background-image: url("/assets/img/about/austin.jpg");
- }
-
- .about-header .chicago {
- background-image: url("/assets/img/about/chicago.jpg");
- }
-
- .about-header .seattle {
- background-image: url("/assets/img/about/seattle.jpg");
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/About.tsx b/03_source/mobile.integrated.not_working.del/src/pages/About.tsx
deleted file mode 100644
index 785f784..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/About.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonDatetime,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonMenuButton,
- IonPage,
- IonPopover,
- IonSelect,
- IonSelectOption,
- IonText,
- IonToolbar,
-} from '@ionic/react';
-import { format, parseISO } from 'date-fns';
-import { ellipsisHorizontal, ellipsisVertical } from 'ionicons/icons';
-import React, { useState } from 'react';
-import AboutPopover from '../components/AboutPopover';
-import './About.scss';
-
-interface AboutProps {}
-
-const About: React.FC = () => {
- const [showPopover, setShowPopover] = useState(false);
- const [popoverEvent, setPopoverEvent] = useState();
- const [location, setLocation] = useState<'madison' | 'austin' | 'chicago' | 'seattle'>('madison');
- const [conferenceDate, setConferenceDate] = useState('2047-05-17T00:00:00-05:00');
-
- const selectOptions = {
- header: 'Select a Location',
- };
-
- const presentPopover = (e: React.MouseEvent) => {
- setPopoverEvent(e.nativeEvent);
- setShowPopover(true);
- };
-
- function displayDate(date: string, dateFormat: string) {
- return format(parseISO(date), dateFormat);
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* Instead of loading an image each time the select changes, use opacity to transition them */}
-
-
-
-
-
-
-
About
-
-
- The Ionic Conference is a one-day event happening on {displayDate(conferenceDate, 'MMM dd, yyyy')}, featuring talks from the Ionic team. The
- conference focuses on building applications with Ionic Framework, including topics such as app migration to the latest version, React best
- practices, Webpack, Sass, and other technologies commonly used in the Ionic ecosystem. Tickets are completely sold out, and we're expecting over
- 1,000 developers — making this the largest Ionic conference to date!
-
-
-
Details
-
-
-
- setLocation(e.detail.value as any)}>
- Madison, WI
- Austin, TX
- Chicago, IL
- Seattle, WA
-
-
-
- Date
- {displayDate(conferenceDate, 'MMM dd, yyyy')}
-
- setConferenceDate(e.detail.value! as string)}
- presentation="date"
- >
-
-
-
-
-
Internet
-
-
-
- Wifi network
- ica{displayDate(conferenceDate, 'y')}
-
-
- Password
- makegoodthings
-
-
-
-
-
- setShowPopover(false)}>
- setShowPopover(false)} />
-
-
- );
-};
-
-export default React.memo(About);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Account.scss b/03_source/mobile.integrated.not_working.del/src/pages/Account.scss
deleted file mode 100644
index e3c2761..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Account.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-#account-page {
- img {
- max-width: 140px;
- border-radius: 50%;
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Account.tsx b/03_source/mobile.integrated.not_working.del/src/pages/Account.tsx
deleted file mode 100644
index e8d649a..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Account.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-import { IonAlert, IonButtons, IonContent, IonHeader, IonItem, IonList, IonMenuButton, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import React, { useState } from 'react';
-import { RouteComponentProps } from 'react-router';
-import { connect } from '../data/connect';
-import { setUsername } from '../data/user/user.actions';
-import './Account.scss';
-
-interface OwnProps extends RouteComponentProps {}
-
-interface StateProps {
- username?: string;
-}
-
-interface DispatchProps {
- setUsername: typeof setUsername;
-}
-
-interface AccountProps extends OwnProps, StateProps, DispatchProps {}
-
-const Account: React.FC = ({ setUsername, username }) => {
- const [showAlert, setShowAlert] = useState(false);
-
- const clicked = (text: string) => {
- console.log(`Clicked ${text}`);
- };
-
- return (
-
-
-
-
-
-
- Account
-
-
-
- {username && (
-
-
-
{username}
-
- clicked('Update Picture')}>Update Picture
- setShowAlert(true)}>Change Username
- clicked('Change Password')}>Change Password
-
- Support
-
-
- Logout
-
-
-
- )}
-
- {
- setUsername(data.username);
- },
- },
- ]}
- inputs={[
- {
- type: 'text',
- name: 'username',
- value: username,
- placeholder: 'username',
- },
- ]}
- onDidDismiss={() => setShowAlert(false)}
- />
-
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- username: state.user.username,
- }),
- mapDispatchToProps: {
- setUsername,
- },
- component: Account,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Login.scss b/03_source/mobile.integrated.not_working.del/src/pages/Login.scss
deleted file mode 100644
index 9a56dc7..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Login.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-#login-page, #signup-page, #support-page {
- .login-logo {
- min-height: 200px;
- padding: 20px 0;
- text-align: center;
- }
-
- .login-logo img {
- max-width: 150px;
- }
-
- .list {
- margin-bottom: 0;
- }
-
- .login-form {
- padding: 16px;
- }
-
- ion-input {
- margin-bottom: 10px;
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Login.tsx b/03_source/mobile.integrated.not_working.del/src/pages/Login.tsx
deleted file mode 100644
index 1d2ede2..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Login.tsx
+++ /dev/null
@@ -1,137 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonInput,
- IonItem,
- IonList,
- IonMenuButton,
- IonPage,
- IonRow,
- IonText,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import React, { useState } from 'react';
-import { RouteComponentProps } from 'react-router';
-import { connect } from '../data/connect';
-import { setIsLoggedIn, setUsername } from '../data/user/user.actions';
-import './Login.scss';
-
-interface OwnProps extends RouteComponentProps {}
-
-interface DispatchProps {
- setIsLoggedIn: typeof setIsLoggedIn;
- setUsername: typeof setUsername;
-}
-
-interface LoginProps extends OwnProps, DispatchProps {}
-
-const Login: React.FC = ({ setIsLoggedIn, history, setUsername: setUsernameAction }) => {
- const [username, setUsername] = useState('');
- const [password, setPassword] = useState('');
- const [formSubmitted, setFormSubmitted] = useState(false);
- const [usernameError, setUsernameError] = useState(false);
- const [passwordError, setPasswordError] = useState(false);
-
- const login = async (e: React.FormEvent) => {
- e.preventDefault();
- setFormSubmitted(true);
- if (!username) {
- setUsernameError(true);
- }
- if (!password) {
- setPasswordError(true);
- }
-
- if (username && password) {
- await setIsLoggedIn(true);
- await setUsernameAction(username);
- history.push('/tabs/schedule', { direction: 'none' });
- }
- };
-
- return (
-
-
-
-
-
-
- Login
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default connect({
- mapDispatchToProps: {
- setIsLoggedIn,
- setUsername,
- },
- component: Login,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/MainTabs/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/MainTabs/index.tsx
deleted file mode 100644
index 474833f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/MainTabs/index.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-// REQ102-navigation-bar
-
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { calendar, informationCircle, location, people } from 'ionicons/icons';
-import React, { useContext } from 'react';
-import { Redirect, Route } from 'react-router';
-import About from '../About';
-import MapView from '../MapView';
-import SchedulePage from '../SchedulePage';
-import SessionDetail from '../SessionDetail';
-import SpeakerDetail from '../SpeakerDetail';
-import SpeakerList from '../SpeakerList';
-
-//
-import { AppContext } from '../../data/AppContext';
-import Events from '../events';
-import Favourite_events from '../favourite_events';
-import Messages from '../messages';
-import Near_by from '../near_by';
-import Orders from '../orders';
-import Profile from '../profile';
-import user_profile from '../user_profile';
-
-interface MainTabsProps {}
-
-const MainTabs: React.FC = () => {
- const { showBottomTabBar } = useContext(AppContext);
-
- return (
-
-
-
- {/*
- Using the render method prop cuts down the number of renders your components will have due to route changes.
- Use the component prop when your component depends on the RouterComponentProps passed in automatically.
- */}
-
- } exact={true} />
- } exact={true} />
- } exact={true} />
- } exact={true} />
- } exact={true} />
-
- } exact={true} />
-
- {/* FIXME: chat room missing */}
- {/* */}
-
- } exact={true} />
-
- } exact={true} />
-
- } exact={true} />
-
-
- } exact={true} />
-
-
-
-
- } exact={true} />
- } exact={true} />
-
-
-
-
-
- {'Events'}
-
-
-
-
- {'NearBy'}
-
-
- {/* TODO:
-
-
- Schedule
-
- */}
-
-
-
- {'Orders'}
-
-
- {/* TODO:
-
-
- Speakers
-
- */}
-
-
-
- {'Message'}
-
-
- {/* TODO:
-
-
- Map
-
- */}
-
-
-
- {'Profile'}
-
-
- {/* TODO:
-
-
- About
-
- */}
-
-
- );
-};
-
-export default MainTabs;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/MainTabs1.tsx b/03_source/mobile.integrated.not_working.del/src/pages/MainTabs1.tsx
deleted file mode 100644
index 436b421..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/MainTabs1.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-import { calendar, informationCircle, location, people } from 'ionicons/icons';
-import React from 'react';
-import { Redirect, Route } from 'react-router';
-import About from './About';
-import MapView from './MapView';
-import SchedulePage from './SchedulePage';
-import SessionDetail from './SessionDetail';
-import SpeakerDetail from './SpeakerDetail';
-import SpeakerList from './SpeakerList';
-
-interface MainTabsProps {}
-
-const MainTabs: React.FC = () => {
- return (
-
-
-
- {/*
- Using the render method prop cuts down the number of renders your components will have due to route changes.
- Use the component prop when your component depends on the RouterComponentProps passed in automatically.
- */}
- } exact={true} />
- } exact={true} />
-
-
-
- } exact={true} />
- } exact={true} />
-
-
-
-
- Schedule
-
-
-
- Speakers
-
-
-
- Map
-
-
-
- About
-
-
-
- );
-};
-
-export default MainTabs;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/MapView.scss b/03_source/mobile.integrated.not_working.del/src/pages/MapView.scss
deleted file mode 100644
index 33d0ebc..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/MapView.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-.map-canvas {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-
- background-color: transparent;
-
- opacity: 0;
-
- transition: opacity 150ms ease-in;
-}
-
-.show-map {
- opacity: 1;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/MapView.tsx b/03_source/mobile.integrated.not_working.del/src/pages/MapView.tsx
deleted file mode 100644
index 17c31bf..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/MapView.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar, useIonViewDidEnter } from '@ionic/react';
-import L from 'leaflet';
-import markerIconRetinaUrl from 'leaflet/dist/images/marker-icon-2x.png';
-import markerIconUrl from 'leaflet/dist/images/marker-icon.png';
-import markerShadowUrl from 'leaflet/dist/images/marker-shadow.png';
-import 'leaflet/dist/leaflet.css';
-import React, { useEffect, useRef } from 'react';
-import { connect } from '../data/connect';
-import { loadLocations } from '../data/locations/locations.actions';
-import { Location } from '../models/Location';
-import './MapView.scss';
-
-// Fix for marker icons in Vite
-L.Icon.Default.prototype.options.iconUrl = markerIconUrl;
-L.Icon.Default.prototype.options.iconRetinaUrl = markerIconRetinaUrl;
-L.Icon.Default.prototype.options.shadowUrl = markerShadowUrl;
-L.Icon.Default.imagePath = '';
-
-interface StateProps {
- locations: Location[];
-}
-
-interface DispatchProps {
- loadLocations: typeof loadLocations;
-}
-
-const MapView: React.FC = ({ locations, loadLocations }) => {
- const mapCanvas = useRef(null);
- const map = useRef(null);
- const markers = useRef([]);
-
- // Add useEffect to load locations when component mounts
- useEffect(() => {
- loadLocations();
- }, []);
-
- const initMap = () => {
- if (!locations?.length || !mapCanvas.current || map.current) return;
-
- map.current = L.map(mapCanvas.current, {
- zoomControl: true,
- attributionControl: true,
- });
-
- // Get the center location (first item marked as center, or first item if none marked)
- const centerLocation = locations.find((loc) => loc.center) || locations[0];
- map.current.setView([centerLocation.lat, centerLocation.lng], 16);
-
- // Add tile layer
- L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
- attribution: '© OpenStreetMap contributors',
- }).addTo(map.current);
-
- // Add markers for all locations
- locations.forEach((location: Location) => {
- const marker = L.marker([location.lat, location.lng]).addTo(map.current!).bindPopup(`${location.name}`);
- markers.current.push(marker);
- });
-
- // Show map
- mapCanvas.current.classList.add('show-map');
- };
-
- const resizeMap = () => {
- if (map.current) {
- map.current.invalidateSize();
- }
- };
-
- // Initialize map
- useEffect(() => {
- initMap();
- return () => {
- if (map.current) {
- markers.current.forEach((marker) => marker.remove());
- map.current.remove();
- map.current = null;
- }
- };
- }, [locations]);
-
- // Handle resize after content is visible
- useEffect(() => {
- const timer = setTimeout(() => {
- resizeMap();
- }, 300);
-
- return () => clearTimeout(timer);
- }, []);
-
- useIonViewDidEnter(() => {
- resizeMap();
- });
-
- return (
-
-
-
- Map
-
-
-
-
-
-
- );
-};
-
-export default connect<{}, StateProps, DispatchProps>({
- mapStateToProps: (state) => ({
- locations: state.locations.locations,
- }),
- mapDispatchToProps: {
- loadLocations,
- },
- component: MapView,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/SchedulePage.scss b/03_source/mobile.integrated.not_working.del/src/pages/SchedulePage.scss
deleted file mode 100644
index aa89750..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/SchedulePage.scss
+++ /dev/null
@@ -1,58 +0,0 @@
-#schedule-page {
- ion-fab-button {
- --background: var(--ion-color-step-150, #fff);
- --background-hover: var(--ion-color-step-200, #f2f2f2);
- --background-focused: var(--ion-color-step-250, #d9d9d9);
-
- --color: var(--ion-color-primary, #3880ff);
- }
-
- /*
- * Material Design uses the ripple for activated
- * so only style the iOS activated background
- */
- .ios ion-fab-button {
- --background-activated: var(--ion-color-step-250, #d9d9d9);
- }
-
- ion-item-sliding.track-ionic ion-label {
- border-left: 2px solid var(--ion-color-primary);
- padding-left: 10px;
- }
- ion-item-sliding.track-react ion-label {
- border-left: 2px solid var(--ion-color-react);
- padding-left: 10px;
- }
- ion-item-sliding.track-communication ion-label {
- border-left: 2px solid var(--ion-color-communication);
- padding-left: 10px;
- }
- ion-item-sliding.track-tooling ion-label {
- border-left: 2px solid var(--ion-color-tooling);
- padding-left: 10px;
- }
- ion-item-sliding.track-services ion-label {
- border-left: 2px solid var(--ion-color-services);
- padding-left: 10px;
- }
- ion-item-sliding.track-design ion-label {
- border-left: 2px solid var(--ion-color-design);
- padding-left: 10px;
- }
- ion-item-sliding.track-workshop ion-label {
- border-left: 2px solid var(--ion-color-workshop);
- padding-left: 10px;
- }
- ion-item-sliding.track-food ion-label {
- border-left: 2px solid var(--ion-color-food);
- padding-left: 10px;
- }
- ion-item-sliding.track-documentation ion-label {
- border-left: 2px solid var(--ion-color-documentation);
- padding-left: 10px;
- }
- ion-item-sliding.track-navigation ion-label {
- border-left: 2px solid var(--ion-color-navigation);
- padding-left: 10px;
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/SchedulePage.tsx b/03_source/mobile.integrated.not_working.del/src/pages/SchedulePage.tsx
deleted file mode 100644
index 4e23b2e..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/SchedulePage.tsx
+++ /dev/null
@@ -1,153 +0,0 @@
-import React, { useRef, useState } from 'react';
-
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonMenuButton,
- IonModal,
- IonPage,
- IonRefresher,
- IonRefresherContent,
- IonSearchbar,
- IonSegment,
- IonSegmentButton,
- IonTitle,
- IonToast,
- IonToolbar,
- getConfig,
-} from '@ionic/react';
-import { options, search } from 'ionicons/icons';
-
-import SessionList from '../components/SessionList';
-import SessionListFilter from '../components/SessionListFilter';
-import './SchedulePage.scss';
-
-import ShareSocialFab from '../components/ShareSocialFab';
-
-import { connect } from '../data/connect';
-import * as selectors from '../data/selectors';
-import { setSearchText } from '../data/sessions/sessions.actions';
-import { Schedule } from '../models/Schedule';
-
-interface OwnProps {}
-
-interface StateProps {
- schedule: Schedule;
- favoritesSchedule: Schedule;
- mode: 'ios' | 'md';
-}
-
-interface DispatchProps {
- setSearchText: typeof setSearchText;
-}
-
-type SchedulePageProps = OwnProps & StateProps & DispatchProps;
-
-const SchedulePage: React.FC = ({ favoritesSchedule, schedule, setSearchText, mode }) => {
- const [segment, setSegment] = useState<'all' | 'favorites'>('all');
- const [showSearchbar, setShowSearchbar] = useState(false);
- const [showFilterModal, setShowFilterModal] = useState(false);
- const ionRefresherRef = useRef(null);
- const [showCompleteToast, setShowCompleteToast] = useState(false);
-
- const pageRef = useRef(null);
-
- const ios = mode === 'ios';
-
- const doRefresh = () => {
- setTimeout(() => {
- ionRefresherRef.current!.complete();
- setShowCompleteToast(true);
- }, 2500);
- };
-
- return (
-
-
-
- {!showSearchbar && (
-
-
-
- )}
- {ios && (
- setSegment(e.detail.value as any)}>
- All
- Favorites
-
- )}
- {!ios && !showSearchbar && Schedule }
- {showSearchbar && (
- setSearchText(e.detail.value)}
- onIonCancel={() => setShowSearchbar(false)}
- >
- )}
-
-
- {!ios && !showSearchbar && (
- setShowSearchbar(true)}>
-
-
- )}
- {!showSearchbar && (
- setShowFilterModal(true)}>{mode === 'ios' ? 'Filter' : }
- )}
-
-
-
- {!ios && (
-
- setSegment(e.detail.value as any)}>
- All
- Favorites
-
-
- )}
-
-
-
-
-
- Schedule
-
-
- setSearchText(e.detail.value)}>
-
-
-
-
-
-
-
- setShowCompleteToast(false)} />
-
-
-
-
-
- setShowFilterModal(false)} presentingElement={pageRef.current!}>
- setShowFilterModal(false)} />
-
-
-
-
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- schedule: selectors.getSearchedSchedule(state),
- favoritesSchedule: selectors.getGroupedFavorites(state),
- mode: getConfig()!.get('mode'),
- }),
- mapDispatchToProps: {
- setSearchText,
- },
- component: React.memo(SchedulePage),
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/SessionDetail.scss b/03_source/mobile.integrated.not_working.del/src/pages/SessionDetail.scss
deleted file mode 100644
index 9b09f82..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/SessionDetail.scss
+++ /dev/null
@@ -1,73 +0,0 @@
-#session-detail-page {
- .session-track-ionic {
- color: var(--ion-color-primary);
- }
-
- .session-track-react {
- color: var(--ion-color-react);
- }
-
- .session-track-communication {
- color: var(--ion-color-communication);
- }
-
- .session-track-tooling {
- color: var(--ion-color-tooling);
- }
-
- .session-track-services {
- color: var(--ion-color-services);
- }
-
- .session-track-design {
- color: var(--ion-color-design);
- }
-
- .session-track-workshop {
- color: var(--ion-color-workshop);
- }
-
- .session-track-food {
- color: var(--ion-color-food);
- }
-
- .session-track-documentation {
- color: var(--ion-color-documentation);
- }
-
- .session-track-navigation {
- color: var(--ion-color-navigation);
- }
-
- .show-favorite {
- position: relative;
- }
-
- .icon-heart-empty {
- position: absolute;
- top: 5px;
- right: 5px;
- transform: scale(1);
- transition: transform 0.3s ease;
- }
-
- .icon-heart {
- position: absolute;
- top: 5px;
- right: 5px;
- transform: scale(0);
- transition: transform 0.3s ease;
- }
-
- .show-favorite .icon-heart {
- transform: scale(1);
- }
-
- .show-favorite .icon-heart-empty {
- transform: scale(0);
- }
-
- h1 {
- margin: 0;
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/SessionDetail.tsx b/03_source/mobile.integrated.not_working.del/src/pages/SessionDetail.tsx
deleted file mode 100644
index cacb8ce..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/SessionDetail.tsx
+++ /dev/null
@@ -1,105 +0,0 @@
-import { IonBackButton, IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonItem, IonLabel, IonList, IonPage, IonText, IonToolbar } from '@ionic/react';
-import { cloudDownload, share, star, starOutline } from 'ionicons/icons';
-import React from 'react';
-import { RouteComponentProps, withRouter } from 'react-router';
-import { connect } from '../data/connect';
-import * as selectors from '../data/selectors';
-import { addFavorite, removeFavorite } from '../data/sessions/sessions.actions';
-import { Session } from '../models/Schedule';
-import './SessionDetail.scss';
-
-interface OwnProps extends RouteComponentProps {}
-
-interface StateProps {
- session?: Session;
- favoriteSessions: number[];
-}
-
-interface DispatchProps {
- addFavorite: typeof addFavorite;
- removeFavorite: typeof removeFavorite;
-}
-
-type SessionDetailProps = OwnProps & StateProps & DispatchProps;
-
-const SessionDetail: React.FC = ({ session, addFavorite, removeFavorite, favoriteSessions }) => {
- if (!session) {
- return Session not found
;
- }
-
- const isFavorite = favoriteSessions.indexOf(session.id) > -1;
-
- const toggleFavorite = () => {
- isFavorite ? removeFavorite(session.id) : addFavorite(session.id);
- };
- const shareSession = () => {};
- const sessionClick = (text: string) => {
- console.log(`Clicked ${text}`);
- };
-
- return (
-
-
-
-
-
-
-
- toggleFavorite()}>
- {isFavorite ? : }
-
- shareSession}>
-
-
-
-
-
-
-
-
{session.name}
- {session.tracks.map((track) => (
-
- {track}
-
- ))}
-
{session.description}
-
- {session.timeStart} – {session.timeEnd}
-
- {session.location}
-
-
-
- sessionClick('watch')} button>
- Watch
-
- sessionClick('add to calendar')} button>
- Add to Calendar
-
- sessionClick('mark as unwatched')} button>
- Mark as Unwatched
-
- sessionClick('download video')} button>
- Download Video
-
-
- sessionClick('leave feedback')} button>
- Leave Feedback
-
-
-
-
- );
-};
-
-export default connect({
- mapStateToProps: (state, ownProps) => ({
- session: selectors.getSession(state, ownProps),
- favoriteSessions: state.data.favorites,
- }),
- mapDispatchToProps: {
- addFavorite,
- removeFavorite,
- },
- component: withRouter(SessionDetail),
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Signup.scss b/03_source/mobile.integrated.not_working.del/src/pages/Signup.scss
deleted file mode 100644
index be8bb75..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Signup.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.signup-logo {
- min-height: 200px;
- padding: 20px 0;
- text-align: center;
-}
-
-.signup-logo img {
- max-width: 150px;
-}
-
-.signup-form {
- padding: 16px;
-}
-
-ion-input {
- margin-bottom: 10px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Signup.tsx b/03_source/mobile.integrated.not_working.del/src/pages/Signup.tsx
deleted file mode 100644
index 06358c3..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Signup.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-import { IonButton, IonButtons, IonCol, IonContent, IonHeader, IonInput, IonMenuButton, IonPage, IonRow, IonTitle, IonToolbar } from '@ionic/react';
-import React, { useState } from 'react';
-import { useHistory } from 'react-router';
-import { connect } from '../data/connect';
-import { setIsLoggedIn, setUsername } from '../data/user/user.actions';
-import './Signup.scss';
-
-interface SignupProps {
- setIsLoggedIn: typeof setIsLoggedIn;
- setUsername: typeof setUsername;
-}
-
-const Signup: React.FC = ({ setIsLoggedIn, setUsername: setUsernameAction }) => {
- const history = useHistory();
- const [signup, setSignup] = useState({ username: '', password: '' });
- const [submitted, setSubmitted] = useState(false);
-
- const onSignup = async (e: React.FormEvent) => {
- e.preventDefault();
- setSubmitted(true);
-
- if (signup.username && signup.password) {
- await setIsLoggedIn(true);
- await setUsernameAction(signup.username);
- history.push('/tabs/schedule');
- }
- };
-
- return (
-
-
-
-
-
-
- Signup
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default connect<{}, {}, SignupProps>({
- mapDispatchToProps: {
- setIsLoggedIn,
- setUsername,
- },
- component: Signup,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/SpeakerDetail.scss b/03_source/mobile.integrated.not_working.del/src/pages/SpeakerDetail.scss
deleted file mode 100644
index c077e0b..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/SpeakerDetail.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-#speaker-detail {
- /*
- * Speaker Background
- */
-
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .speaker-background {
- position: relative;
-
- display: flex;
-
- padding-top: var(--ion-safe-area-top);
-
- align-items: center;
- justify-content: center;
-
- flex-direction: column;
-
- height: calc(250px + var(--ion-safe-area-top));
-
- background: center / cover url("/assets/img/speaker-background.png")
- no-repeat;
- }
-
- .speaker-background img {
- width: 70px;
- border-radius: 50%;
- margin-top: calc(-1 * var(--ion-safe-area-top));
- }
-
- .speaker-background h2 {
- position: absolute;
-
- bottom: 10px;
-
- color: white;
- }
-
- .md .speaker-background {
- box-shadow: rgba(0, 0, 0, 0.2) 0 3px 1px -2px,
- rgba(0, 0, 0, 0.14) 0 2px 2px 0px, rgba(0, 0, 0, 0.12) 0 1px 5px 0;
- }
-
- .ios .speaker-background {
- box-shadow: rgba(0, 0, 0, 0.12) 0 4px 16px;
- }
-
- /*
- * Speaker Details
- */
-
- .speaker-detail p {
- margin-left: 6px;
- margin-right: 6px;
- }
-
- .speaker-detail hr {
- margin-top: 20px;
- margin-bottom: 20px;
-
- background: var(--ion-color-step-150, #d7d8da);
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/SpeakerDetail.tsx b/03_source/mobile.integrated.not_working.del/src/pages/SpeakerDetail.tsx
deleted file mode 100644
index bc86bf8..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/SpeakerDetail.tsx
+++ /dev/null
@@ -1,138 +0,0 @@
-import React, { useState } from 'react';
-import { RouteComponentProps } from 'react-router';
-
-import './SpeakerDetail.scss';
-
-import { ActionSheetButton } from '@ionic/core';
-import { IonActionSheet, IonBackButton, IonButton, IonButtons, IonChip, IonContent, IonHeader, IonIcon, IonLabel, IonPage, IonToolbar } from '@ionic/react';
-import { callOutline, callSharp, logoGithub, logoInstagram, logoTwitter, shareOutline, shareSharp } from 'ionicons/icons';
-
-import { connect } from '../data/connect';
-import * as selectors from '../data/selectors';
-
-import { Speaker } from '../models/Speaker';
-
-interface OwnProps extends RouteComponentProps {
- speaker?: Speaker;
-}
-
-interface StateProps {}
-
-interface DispatchProps {}
-
-interface SpeakerDetailProps extends OwnProps, StateProps, DispatchProps {}
-
-const SpeakerDetail: React.FC = ({ speaker }) => {
- const [showActionSheet, setShowActionSheet] = useState(false);
- const [actionSheetButtons, setActionSheetButtons] = useState([]);
- const [actionSheetHeader, setActionSheetHeader] = useState('');
-
- function openSpeakerShare(speaker: Speaker) {
- setActionSheetButtons([
- {
- text: 'Copy Link',
- handler: () => {
- console.log('Copy Link clicked');
- },
- },
- {
- text: 'Share via ...',
- handler: () => {
- console.log('Share via clicked');
- },
- },
- {
- text: 'Cancel',
- role: 'cancel',
- handler: () => {
- console.log('Cancel clicked');
- },
- },
- ]);
- setActionSheetHeader(`Share ${speaker.name}`);
- setShowActionSheet(true);
- }
-
- function openContact(speaker: Speaker) {
- setActionSheetButtons([
- {
- text: `Email ( ${speaker.email} )`,
- handler: () => {
- window.open('mailto:' + speaker.email);
- },
- },
- {
- text: `Call ( ${speaker.phone} )`,
- handler: () => {
- window.open('tel:' + speaker.phone);
- },
- },
- ]);
- setActionSheetHeader(`Share ${speaker.name}`);
- setShowActionSheet(true);
- }
-
- function openExternalUrl(url: string) {
- window.open(url, '_blank');
- }
-
- if (!speaker) {
- return Speaker not found
;
- }
-
- return (
-
-
-
-
-
-
-
-
- openContact(speaker)}>
-
-
- openSpeakerShare(speaker)}>
-
-
-
-
-
-
-
-
-
{speaker.name}
-
-
-
-
{speaker.about} Say hello on social media!
-
-
-
-
openExternalUrl(`https://twitter.com/${speaker.twitter}`)}>
-
- Twitter
-
-
-
openExternalUrl('https://github.com/ionic-team/ionic-framework')}>
-
- GitHub
-
-
-
openExternalUrl('https://instagram.com/ionicframework')}>
-
- Instagram
-
-
-
- setShowActionSheet(false)} buttons={actionSheetButtons} />
-
- );
-};
-
-export default connect({
- mapStateToProps: (state, ownProps) => ({
- speaker: selectors.getSpeaker(state, ownProps),
- }),
- component: SpeakerDetail,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/SpeakerList.scss b/03_source/mobile.integrated.not_working.del/src/pages/SpeakerList.scss
deleted file mode 100644
index 64b9fa3..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/SpeakerList.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-#speaker-list {
- .speaker-card {
- display: flex;
- flex-direction: column;
- }
-
- /* Due to the fact the cards are inside of columns the margins don't overlap
- * properly so we want to remove the extra margin between cards
- */
- ion-col:not(:last-of-type) .speaker-card {
- margin-bottom: 0;
- }
-
- .speaker-card .speaker-item {
- --min-height: 85px;
- }
-
- .speaker-card .speaker-item h2 {
- font-size: 18px;
- font-weight: 500;
- letter-spacing: 0.02em;
- }
-
- .speaker-card .speaker-item p {
- font-size: 13px;
- letter-spacing: 0.02em;
- }
-
- .speaker-card ion-card-header {
- padding: 0;
- }
-
- .speaker-card ion-card-content {
- flex: 1 1 auto;
-
- padding: 0;
- }
-
- .ios ion-list {
- margin-bottom: 10px;
- }
-
- .md ion-list {
- border-top: 1px solid var(--ion-color-step-150, #d7d8da);
-
- padding: 0;
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/SpeakerList.tsx b/03_source/mobile.integrated.not_working.del/src/pages/SpeakerList.tsx
deleted file mode 100644
index db72513..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/SpeakerList.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonMenuButton, IonPage, IonRow, IonTitle, IonToolbar } from '@ionic/react';
-import React from 'react';
-import SpeakerItem from '../components/SpeakerItem';
-import { connect } from '../data/connect';
-import * as selectors from '../data/selectors';
-import { Session } from '../models/Schedule';
-import { Speaker } from '../models/Speaker';
-import './SpeakerList.scss';
-
-interface OwnProps {}
-
-interface StateProps {
- speakers: Speaker[];
- speakerSessions: { [key: string]: Session[] };
-}
-
-interface DispatchProps {}
-
-interface SpeakerListProps extends OwnProps, StateProps, DispatchProps {}
-
-const SpeakerList: React.FC = ({ speakers, speakerSessions }) => {
- return (
-
-
-
-
-
-
- Speakers
-
-
-
-
-
-
- Speakers
-
-
-
-
-
- {speakers.map((speaker) => (
-
-
-
- ))}
-
-
-
-
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- speakers: selectors.getSpeakers(state),
- speakerSessions: selectors.getSpeakerSessions(state),
- }),
- component: React.memo(SpeakerList),
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Support.scss b/03_source/mobile.integrated.not_working.del/src/pages/Support.scss
deleted file mode 100644
index db1f9db..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Support.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.support-logo {
- min-height: 200px;
- padding: 20px 0;
- text-align: center;
-}
-
-.support-logo img {
- max-width: 150px;
-}
-
-.list {
- margin-bottom: 0;
-}
-
-.support-form {
- padding: 16px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Support.tsx b/03_source/mobile.integrated.not_working.del/src/pages/Support.tsx
deleted file mode 100644
index 092235b..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Support.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonMenuButton,
- IonPage,
- IonRow,
- IonTextarea,
- IonTitle,
- IonToolbar,
- useIonToast,
- useIonViewWillEnter,
-} from '@ionic/react';
-import React, { useState } from 'react';
-import './Support.scss';
-
-const Support: React.FC = () => {
- const [present] = useIonToast();
- const [supportMessage, setSupportMessage] = useState('');
- const [submitted, setSubmitted] = useState(false);
-
- useIonViewWillEnter(() => {
- present({
- message: 'This does not actually send a support request.',
- duration: 3000,
- });
- });
-
- const submit = async (e: React.FormEvent) => {
- e.preventDefault();
- setSubmitted(true);
-
- if (supportMessage) {
- setSupportMessage('');
- setSubmitted(false);
-
- present({
- message: 'Your support request has been sent.',
- duration: 3000,
- });
- }
- };
-
- return (
-
-
-
-
-
-
- Support
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Support;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Tutorial.scss b/03_source/mobile.integrated.not_working.del/src/pages/Tutorial.scss
deleted file mode 100644
index 5b9f8a7..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Tutorial.scss
+++ /dev/null
@@ -1,56 +0,0 @@
-#tutorial-page {
- ion-toolbar {
- --background: transparent;
- --border-color: transparent;
- }
-
- .slide-title {
- margin-top: 2.8rem;
- }
-
- .slider {
- display: grid;
- grid-template-columns: repeat(4, 100%);
- grid-template-rows: 1fr;
-
- height: 100%;
-
- overflow: scroll;
- scroll-snap-type: x mandatory;
- }
-
- section {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- text-align: center;
-
- width: 100%;
-
- scroll-snap-align: center;
- scroll-snap-stop: always;
- }
-
- .slide-image {
- max-height: 50%;
- max-width: 60%;
- margin: -5vh 0 0;
- pointer-events: none;
- }
-
- b {
- font-weight: 500;
- }
-
- p {
- padding: 0 40px;
- font-size: 14px;
- line-height: 1.5;
- color: var(--ion-color-step-600, #60646b);
-
- b {
- color: var(--ion-text-color, #000000);
- }
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/Tutorial.tsx b/03_source/mobile.integrated.not_working.del/src/pages/Tutorial.tsx
deleted file mode 100644
index 59aa460..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/Tutorial.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-import { IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonPage, IonToolbar, useIonViewWillEnter } from '@ionic/react';
-import { arrowForward } from 'ionicons/icons';
-import React, { useRef } from 'react';
-import { RouteComponentProps } from 'react-router';
-import { connect } from '../data/connect';
-import { setMenuEnabled } from '../data/sessions/sessions.actions';
-import { setHasSeenTutorial } from '../data/user/user.actions';
-import './Tutorial.scss';
-
-interface OwnProps extends RouteComponentProps {}
-interface DispatchProps {
- setHasSeenTutorial: typeof setHasSeenTutorial;
- setMenuEnabled: typeof setMenuEnabled;
-}
-
-interface TutorialProps extends OwnProps, DispatchProps {}
-
-const Tutorial: React.FC = ({ history, setHasSeenTutorial, setMenuEnabled }) => {
- const sliderRef = useRef(null);
-
- useIonViewWillEnter(() => {
- setMenuEnabled(false);
- // Scroll to first slide when entering the tutorial
- if (sliderRef.current) {
- sliderRef.current.scrollTo({
- left: 0,
- behavior: 'smooth',
- });
- }
- });
-
- const startApp = async () => {
- await setHasSeenTutorial(true);
- await setMenuEnabled(true);
- history.push('/tabs/schedule', { direction: 'none' });
- };
-
- return (
-
-
-
-
-
- Skip
-
-
-
-
-
-
-
-
-
-
- Welcome to ICA
-
-
- The ionic conference app is a practical preview of the ionic framework in action, and a demonstration of proper code use.
-
-
-
-
-
-
-
What is Ionic?
-
- Ionic Framework is an open source SDK that enables developers to build high quality mobile apps with web technologies like HTML, CSS, and
- JavaScript.
-
-
-
-
-
-
-
What is Ionic Appflow?
-
- Ionic Appflow is a powerful set of services and features built on top of Ionic Framework that brings a totally new level of app
- development agility to mobile dev teams.
-
-
-
-
-
-
-
Ready to Play?
-
- Continue
-
-
-
-
-
-
-
- );
-};
-
-export default connect({
- mapDispatchToProps: {
- setHasSeenTutorial,
- setMenuEnabled,
- },
- component: Tutorial,
-});
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/EventDetailAvatar/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/event_detail/EventDetailAvatar/index.tsx
deleted file mode 100644
index e8e37c5..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/EventDetailAvatar/index.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-// REQ0041-home_discover_event_tab
-
-import { IonAvatar } from '@ionic/react';
-import React from 'react';
-
-import './style.scss';
-
-interface AboutProps {}
-
-const EventDetailAvatar: React.FC = ({ profile }) => {
- console.log({ profile });
-
- return (
- <>
-
-
-
- >
- );
-};
-
-export default React.memo(EventDetailAvatar);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/EventDetailAvatar/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/event_detail/EventDetailAvatar/style.scss
deleted file mode 100644
index f25817f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/EventDetailAvatar/style.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-.event-detail-avatar {
- margin-left: 0.2rem;
-}
-.user-going-text {
- margin-left: 0.2rem;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/getEventSummary.ts b/03_source/mobile.integrated.not_working.del/src/pages/event_detail/getEventSummary.ts
deleted file mode 100644
index 61c60de..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/getEventSummary.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { supabase } from '../../supabaseClient';
-
-function getEventSummary(party_event_id: string) {
- return supabase.from('view_party_event_summaries').select('*').filter('id', 'eq', party_event_id);
-}
-
-export default getEventSummary;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/event_detail/index.tsx
deleted file mode 100644
index d411cf3..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/index.tsx
+++ /dev/null
@@ -1,224 +0,0 @@
-// REQ0042/event-detail
-
-import { IonBackButton, IonButton, IonButtons, IonCard, IonContent, IonFooter, IonIcon, IonText, IonTitle } from '@ionic/react';
-import { format, parseISO } from 'date-fns';
-import { bookmarkOutline, chevronBackOutline, logoIonic } from 'ionicons/icons';
-import React, { useContext, useEffect, useState } from 'react';
-import './style.scss';
-
-import EventDetailAvatar from './EventDetailAvatar';
-
-// import { useGetPartyEventDetail } from '../../hooks/useGetPartyEventDetail';
-// import { supabase } from '../../supabaseClient';
-// import { useGetPartyEventDetail } from '../../hooks/useGetPartyEventDetail';
-// import { useViewPartyEventParticipants } from '../../hooks/useViewPartyEventParticipants';
-
-import dayjs from 'dayjs';
-import duration from 'dayjs/plugin/duration';
-import relativeTime from 'dayjs/plugin/relativeTime';
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-import Loading from '../../components/Loading';
-import { AppContext } from '../../data/AppContext';
-dayjs.extend(duration);
-dayjs.extend(relativeTime);
-
-interface AboutProps {
- party_event: any;
-}
-
-const EventDetail: React.FC = ({ party_event }) => {
- return <>fix AboutProps>;
- const [showPopover, setShowPopover] = useState(false);
- const [popoverEvent, setPopoverEvent] = useState();
- const { profile } = useContext(AppContext);
-
- const [page_content, setPageContent] = useState({});
- const [party_event_detail] = useGetPartyEventDetail({ party_event_id: party_event.id });
- // view_party_event_participants
- const [participants] = useViewPartyEventParticipants({ party_event_id: party_event.id, limit: 10 });
-
- const [is_loading, setIsLoading] = useState(false);
-
- const selectOptions = {
- header: 'Select a Location',
- };
-
- const presentPopover = (e: React.MouseEvent) => {
- setPopoverEvent(e.nativeEvent);
- setShowPopover(true);
- };
-
- function displayDate(date: string, dateFormat: string) {
- return format(parseISO(date), dateFormat);
- }
-
- function getEventSummary(party_event_id) {
- return supabase.from('view_party_event_summaries').select('*').filter('id', 'eq', party_event_id);
- }
-
- function viewEventParticipants(party_event_id, limit) {
- return supabase.from('view_party_event_participants').select('*').filter('pe_id', 'eq', party_event_id).limit(limit);
- }
-
- useEffect(() => {
- Promise.all([
- //
- getEventSummary(party_event.id),
- viewEventParticipants(party_event.id, 3),
- ]).then(([{ data: event_summaries }, { data: party_participants }]) => {
- let event_summary = event_summaries[0];
- setPageContent({
- title: event_summary.title,
- num_m: event_summary.male_count,
- num_f: event_summary.female_count,
- age_min: 18,
- age_max: 48,
- event_date: '2019-01-25',
- event_duration_min: 90,
- // event_summary.event_duration_min,
- address: 'hello address',
- price_per_person: event_summary.price,
- currency: event_summary.currency,
- party_participants,
-
- // TODO: test below to replace when i review this two lines
- // show_party_participants: party_participants ? party_participants.length > 0 : false,
- // party_participants_going: party_participants ? party_participants.length - 3 : 0,
- show_party_participants: party_participants.length > 0,
- party_participants_going: party_participants.length - 3,
- });
-
- setIsLoading(false);
- });
- }, []);
-
- function handleJoinClick() {
- console.log({ profile });
-
- supabase
- .from('party_event_orders')
- .insert({
- user_id: profile.user_id,
- party_event_id: party_event.id,
- status: 2,
- remarks: 'test from ionic',
- })
- .then(() => {
- console.log('insert done');
- });
- console.log('Join clicked');
- }
-
- if (is_loading) return ;
-
- return (
- <>
-
-
-
-
-
- {'Event Detail'}
-
-
-
-
-
-
-
-
- {/* */}
-
- {/* page content */}
-
-
-
-
-
{dayjs(page_content.event_date).format('DD/MM/YYYY')}
-
{party_event.title}
-
-
-
- {page_content.show_party_participants ? (
- <>
- {page_content.party_participants.map(({ profile }, i) => (
-
- ))}
- {page_content.party_participants_going > 0 ? (
-
+{page_content.party_participants_going} Going
- ) : (
- <>>
- )}
- >
- ) : (
- <>>
- )}
-
-
- {'More'}
-
-
-
-
-
-
-
- {page_content.currency}
- {page_content.price_per_person} {'per person'}
-
-
-
-
-
-
- {page_content.event_duration_min / 60} {'hours'}
-
-
-
-
-
-
- {page_content.age_min}-{page_content.age_max} {'years old'}
-
-
-
-
-
-
{page_content.address}
-
-
-
-
-
{page_content.num_m + page_content.num_f}
-
-
{page_content.num_m}
-
-
{page_content.num_f}
-
-
-
-
-
-
- {/* REQ0077/flow-join-event */}
-
-
- {'Join'}
-
-
- >
- );
-};
-
-export default React.memo(EventDetail);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/profile_eng.png b/03_source/mobile.integrated.not_working.del/src/pages/event_detail/profile_eng.png
deleted file mode 100644
index 14aedfd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/profile_eng.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/sample_party_image.avif b/03_source/mobile.integrated.not_working.del/src/pages/event_detail/sample_party_image.avif
deleted file mode 100644
index 661c2c1..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/sample_party_image.avif and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/event_detail/style.scss
deleted file mode 100644
index 7a1f760..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/event_detail/style.scss
+++ /dev/null
@@ -1,65 +0,0 @@
-#event-detail-page {
- .row {
- display: flex;
- flex-direction: row;
- justify-content: flex-start;
- align-items: center;
- gap: 0.5rem;
- }
-
- .avatar-row {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- }
-
- .user-avatar-list {
- display: flex;
- flex-direction: row;
- justify-content: flex-start;
- align-items: center;
- }
-
- .event-properties-list {
- display: flex;
- flex-direction: column;
-
- .item {
- margin-top: 0.5rem;
-
- display: flex;
- flex-direction: row;
-
- div {
- margin-left: 0.5rem;
- }
- }
-
- .item-user-count {
- margin-top: 0.5rem;
-
- display: flex;
- flex-direction: row;
-
- ion-icon:nth-child(3) {
- margin-left: 1rem;
- }
-
- ion-icon:nth-child(5) {
- margin-left: 1rem;
- }
-
- div {
- margin-left: 0.5rem;
- }
- }
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/events/EventIonCard.tsx b/03_source/mobile.integrated.not_working.del/src/pages/events/EventIonCard.tsx
deleted file mode 100644
index 25670e0..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/events/EventIonCard.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-// REQ0041-home_discover_event_tab
-
-import { IonButton, IonCard, IonCardContent, IonIcon, IonImg, IonNavLink } from '@ionic/react';
-import { bookmarkOutline, logoApple, logoIonic } from 'ionicons/icons';
-import React, { useEffect, useState } from 'react';
-import './style.scss';
-
-import Loading from '../../components/Loading';
-import EventDetail from '../event_detail';
-// url('/assets/img/about/austin.jpg');
-
-interface AboutProps {
- event_summary: any;
-}
-
-const EventIonCard: React.FC = ({ event_summary }) => {
- const [page_content, setPageContent] = useState(null);
-
- useEffect(() => {
- setPageContent({
- title: event_summary.title,
- price: event_summary.price,
- currency: 'HKD',
- NUM_M: event_summary.male_count,
- NUM_F: event_summary.female_count,
- image: '/assets/img/samples/party_image.png',
- });
-
- console.log({ party_event: event_summary });
- }, [event_summary]);
-
- if (!page_content) return ;
-
- return (
- <>
-
-
- {
- e.stopPropagation();
- }}
- >
-
-
-
-
}>
-
-
-
-
-
{page_content.title}
-
- {page_content.currency}
- {page_content.price}
-
-
-
-
-
-
-
{page_content.NUM_M + page_content.NUM_F}
-
-
-
-
{page_content.NUM_M}
-
-
-
-
{page_content.NUM_F}
-
-
-
-
-
-
- >
- );
-};
-
-export default React.memo(EventIonCard);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/events/PageOne.tsx b/03_source/mobile.integrated.not_working.del/src/pages/events/PageOne.tsx
deleted file mode 100644
index fb1d4eb..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/events/PageOne.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-// REQ0041/home_discover_event_tab
-
-import { IonBackButton, IonButton, IonButtons, IonContent, IonIcon, IonItem, IonList, IonTitle } from '@ionic/react';
-import { chevronBackOutline, settingsSharp } from 'ionicons/icons';
-import React from 'react';
-import './style.scss';
-
-import EventIonCard from './EventIonCard';
-
-// import { useListPartyEventSummaries } from '../../hooks/useListPartyEventSummaries';
-
-import dayjs from 'dayjs';
-import duration from 'dayjs/plugin/duration';
-import relativeTime from 'dayjs/plugin/relativeTime';
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-import Loading from '../../components/Loading';
-dayjs.extend(duration);
-dayjs.extend(relativeTime);
-
-interface AboutProps {}
-
-const Events: React.FC = () => {
- return <>fix AboutProps>;
- // const { party_event_summaries } = useContext(AppContext);
- const [party_event_summaries] = useListPartyEventSummaries();
-
- // TODO: loading screen
- if (!party_event_summaries) return ;
- if (party_event_summaries && party_event_summaries.length === 0) return ;
-
- return (
- <>
-
-
-
-
-
- {'Discover events'}
-
-
-
-
-
-
-
-
-
-
- {party_event_summaries.map((event_summary, i) => (
-
-
-
- ))}
-
-
- >
- );
-};
-
-export default React.memo(Events);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/events/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/events/index.tsx
deleted file mode 100644
index 7302a46..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/events/index.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-// REQ0041/home_discover_event_tab
-
-import { IonContent, IonPage } from '@ionic/react';
-import React from 'react';
-import './style.scss';
-
-import PageOne from './PageOne';
-
-interface AboutProps {}
-
-const Events: React.FC = () => {
- return (
- <>
-
-
-
-
-
- >
- );
-};
-
-export default React.memo(Events);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/events/page-two.tsx b/03_source/mobile.integrated.not_working.del/src/pages/events/page-two.tsx
deleted file mode 100644
index ee73a38..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/events/page-two.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonBackButton, IonButtons, IonContent, IonHeader, IonToolbar } from '@ionic/react';
-import { chevronBackOutline } from 'ionicons/icons';
-
-function ShowEventDetail() {
- return (
- <>
- {/* */}
-
-
-
-
-
-
-
- {/* */}
-
- Page Two
- Use the back button to navigate to the previous page.
-
- {/* */}
- >
- );
-}
-
-export default ShowEventDetail;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/events/profile_eng.png b/03_source/mobile.integrated.not_working.del/src/pages/events/profile_eng.png
deleted file mode 100644
index 14aedfd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/events/profile_eng.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/events/sample_party_image.avif b/03_source/mobile.integrated.not_working.del/src/pages/events/sample_party_image.avif
deleted file mode 100644
index 661c2c1..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/events/sample_party_image.avif and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/events/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/events/style.scss
deleted file mode 100644
index 5fae6e3..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/events/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/index.tsx
deleted file mode 100644
index ea10649..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/index.tsx
+++ /dev/null
@@ -1,138 +0,0 @@
-// REQ0089-favorite-event-list
-
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonDatetime,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonMenuButton,
- IonPage,
- IonPopover,
- IonSelect,
- IonSelectOption,
- IonText,
- IonToolbar,
-} from '@ionic/react';
-import { format, parseISO } from 'date-fns';
-import { ellipsisHorizontal, ellipsisVertical } from 'ionicons/icons';
-import React, { useState } from 'react';
-import AboutPopover from '../../components/AboutPopover';
-import './style.scss';
-
-interface AboutProps {}
-
-const FavouriteEvents: React.FC = () => {
- const [showPopover, setShowPopover] = useState(false);
- const [popoverEvent, setPopoverEvent] = useState();
- const [location, setLocation] = useState<'madison' | 'austin' | 'chicago' | 'seattle'>('madison');
- const [conferenceDate, setConferenceDate] = useState('2047-05-17T00:00:00-05:00');
-
- const selectOptions = {
- header: 'Select a Location',
- };
-
- const presentPopover = (e: React.MouseEvent) => {
- setPopoverEvent(e.nativeEvent);
- setShowPopover(true);
- };
-
- function displayDate(date: string, dateFormat: string) {
- return format(parseISO(date), dateFormat);
- }
-
- return (
- <>
-
-
- hello favourite
-
-
- >
- );
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* Instead of loading an image each time the select changes, use opacity to transition them */}
-
-
-
-
-
-
-
About
-
-
- The Ionic Conference is a one-day conference on {displayDate(conferenceDate, 'MMM dd, yyyy')} featuring talks from the Ionic team. It is focused on
- Ionic applications being built with Ionic Framework. This includes migrating apps to the latest version of the framework, Angular concepts, Webpack,
- Sass, and many other technologies used in Ionic 2. Tickets are completely sold out, and we’re expecting more than 1000 developers – making this the
- largest Ionic conference ever!
-
-
-
Details
-
-
-
- setLocation(e.detail.value as any)}>
- Madison, WI
- Austin, TX
- Chicago, IL
- Seattle, WA
-
-
-
- Date
- {displayDate(conferenceDate, 'MMM dd, yyyy')}
-
- setConferenceDate(e.detail.value! as string)}
- presentation="date"
- >
-
-
-
-
-
Internet
-
-
-
- Wifi network
- ica{displayDate(conferenceDate, 'y')}
-
-
- Password
- makegoodthings
-
-
-
-
-
- setShowPopover(false)}>
- setShowPopover(false)} />
-
-
- );
-};
-
-export default React.memo(FavouriteEvents);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/profile_eng.png b/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/profile_eng.png
deleted file mode 100644
index 14aedfd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/profile_eng.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/style.scss
deleted file mode 100644
index 5fae6e3..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/favourite_events/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/messages/Chat.css b/03_source/mobile.integrated.not_working.del/src/pages/messages/Chat.css
deleted file mode 100644
index 4dc7e8b..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/messages/Chat.css
+++ /dev/null
@@ -1,252 +0,0 @@
-.chat-page ion-header,
-.chat-page ion-toolbar {
- --min-height: 3.5rem;
-}
-
-.chat-page ion-title {
- margin-left: -3.5rem;
-}
-
-.chat-page ion-title p {
- padding: 0;
- margin: 0;
-}
-
-.chat-contact {
- display: flex;
- flex-direction: row;
- align-content: center;
- justify-content: center;
- align-items: center;
-}
-
-.chat-contact img {
- height: 2rem;
- width: 2rem;
- border-radius: 500px;
-}
-
-.chat-contact-details {
- display: flex;
- flex-direction: column;
- margin-left: 0.5rem;
- text-align: left;
-}
-
-.chat-contact-details p {
- font-size: 0.9rem;
-}
-
-.chat-contact-details ion-text {
- font-size: 0.7rem;
- font-weight: 400;
-}
-
-.chat-bubble {
- border-radius: 5px;
- margin-left: 1rem;
- margin-right: 1rem;
- margin-top: 0.8rem;
-
- padding: 0.5rem;
- max-width: 80%;
- clear: both;
-
- display: flex;
- flex-direction: row;
- transition: 0.2s all linear;
-}
-
-.chat-bubble:last-child {
- margin-bottom: 0.8rem;
-}
-
-.bubble-sent {
- background-color: var(--chat-bubble-sent-color);
- float: right;
-}
-
-.bubble-received {
- background-color: var(--chat-bubble-received-color);
- float: left;
-}
-
-.chat-bubble p {
- padding: 0;
- margin: 0;
-}
-
-.chat-footer {
- background-color: rgb(22, 22, 22);
- border-top: 1px solid rgb(47, 47, 47);
- padding-top: 0.2rem;
- padding-bottom: 1rem;
-}
-
-.chat-footer ion-textarea {
- background-color: rgb(31, 31, 31);
- border: 1px solid rgb(36, 36, 36);
- color: white;
- border-radius: 25px;
- padding-left: 0.5rem;
- caret-color: var(--ion-color-primary);
-}
-
-.chat-footer ion-icon {
- font-size: 1.5rem;
- margin-top: 0.2rem;
-}
-
-.chat-input-container {
- width: 70%;
- margin-right: 0.75rem;
-}
-
-.chat-send-button {
- margin: 0 !important;
- padding: 0 !important;
- position: absolute;
- right: 17px;
- margin-top: -0.2rem !important;
-
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- justify-content: center;
-}
-
-.chat-send-button ion-icon {
- color: white;
- background-color: var(--ion-color-primary);
- font-size: 1.1rem;
- border-radius: 500px;
- padding: 0.5rem;
-}
-
-.chat-time {
- color: rgb(165, 165, 165);
- font-size: 0.75rem;
- right: 0;
- bottom: 0 !important;
- margin: 0;
- padding: 0;
- margin-top: 5px;
-}
-
-.bubble-arrow {
- position: absolute;
- float: left;
- left: 6px;
- margin-top: -8px;
- /* top: 0px; */
-}
-
-.bubble-arrow.alt {
- position: relative;
- bottom: 0px;
- left: auto;
- right: -3px;
- float: right;
-}
-
-.bubble-arrow:after {
- content: '';
- position: absolute;
- border-top: 15px solid var(--chat-bubble-received-color);
- border-left: 15px solid transparent;
- border-radius: 4px 0 0 0px;
- width: 0;
- height: 0;
-}
-
-.bubble-arrow.alt:after {
- border-top: 15px solid var(--chat-bubble-sent-color);
- transform: scaleX(-1);
-}
-
-.chat-reply-to-row {
- bottom: 70px !important;
- position: absolute;
-
- border-left: 4px solid rgb(224, 176, 18);
- width: 100%;
- background-color: rgb(22, 22, 22);
- border-top: 1px solid rgb(47, 47, 47);
- padding: 0.5rem;
- padding-bottom: 0.8rem;
-}
-
-.chat-reply-to-container {
- display: flex;
- flex-direction: column;
-}
-
-.chat-reply-to-name {
- color: rgb(224, 176, 18);
- font-weight: 500;
- margin-bottom: 0.5rem;
-}
-
-.chat-reply-to-message {
- font-size: 0.8rem;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.all-chats {
-}
-
-.chat-bottom-details {
- display: flex;
- flex-direction: row;
- width: 100%;
- align-content: center;
- align-items: center;
- justify-content: flex-end;
- margin-top: 0.4rem;
-}
-
-.chat-bottom-details ion-icon {
- font-size: 0.6rem;
- color: grey;
- margin-left: 0.5rem;
- margin-top: 0.05rem;
-}
-
-.chat-bottom-details span {
- margin: 0;
- padding: 0;
- font-size: 0.75rem;
- color: rgb(190, 190, 190);
-}
-
-.in-chat-reply-to-container {
- background-color: rgba(0, 0, 0, 0.2);
- border-left: 3px solid rgb(224, 176, 18);
- height: fit-content;
- padding: 0.5rem;
- border-radius: 5px;
- margin-bottom: 0.5rem;
-}
-
-.in-chat-reply-to-container h1 {
- margin: 0;
- padding: 0;
- color: rgb(224, 176, 18);
- font-size: 0.8rem;
-}
-
-.in-chat-reply-to-container p {
- color: rgb(167, 167, 167);
- font-size: 0.8rem;
-}
-
-.bottom-container {
- position: absolute;
- bottom: 4.5rem;
- height: 5rem;
- background-color: red;
- width: 100%;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/messages/VisitorAvatar/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/messages/VisitorAvatar/index.tsx
deleted file mode 100644
index 37b8755..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/messages/VisitorAvatar/index.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { useEffect, useRef, useState } from 'react';
-
-import { IonThumbnail } from '@ionic/react';
-
-//
-import './style.scss';
-
-import { ChatStore, ContactStore } from '../../../store';
-import { getChats, getContacts } from '../../../store/Selectors';
-
-const VisitorAvatar = () => {
- const pageRef = useRef();
- const contacts = ContactStore.useState(getContacts);
- const latestChats = ChatStore.useState(getChats);
-
- const [results, setResults] = useState(latestChats);
- const [showContactModal, setShowContactModal] = useState(false);
-
- useEffect(() => {
- setResults(latestChats);
- }, [latestChats]);
-
- const search = (e) => {
- const searchTerm = e.target.value;
-
- if (searchTerm !== '') {
- const searchTermLower = searchTerm.toLowerCase();
-
- const newResults = latestChats.filter((chat) =>
- contacts
- .filter((c) => c.id === chat.contact_id)[0]
- .name.toLowerCase()
- .includes(searchTermLower)
- );
- setResults(newResults);
- } else {
- setResults(latestChats);
- }
- };
-
- return (
- <>
-
-
-
-
-
12:30
-
- >
- );
-};
-
-export default VisitorAvatar;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/messages/VisitorAvatar/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/messages/VisitorAvatar/style.scss
deleted file mode 100644
index 33a4cfe..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/messages/VisitorAvatar/style.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.visitor-avatar {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
-
- .time {
- padding-top: 1rem;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/messages/chat.tsx b/03_source/mobile.integrated.not_working.del/src/pages/messages/chat.tsx
deleted file mode 100644
index 6d50a2e..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/messages/chat.tsx
+++ /dev/null
@@ -1,392 +0,0 @@
-import {
- CreateAnimation,
- IonActionSheet,
- IonBackButton,
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonFooter,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonText,
- IonTextarea,
- IonTitle,
- IonToast,
- IonToolbar,
- createGesture,
- useIonViewWillEnter,
-} from '@ionic/react';
-import {
- addOutline,
- alertOutline,
- callOutline,
- cameraOutline,
- micOutline,
- send,
- shareOutline,
- starOutline,
- trashOutline,
- videocamOutline,
-} from 'ionicons/icons';
-import { useEffect, useRef, useState } from 'react';
-//
-import { ChatStore, ContactStore } from '../../store';
-import { getNotificationCount, markAllAsRead, sendChatMessage, starChatMessage } from '../../store/ChatStore';
-import { getChat, getChats, getContact } from '../../store/Selectors';
-
-//
-import { useLongPress } from 'react-use';
-//
-import { ChatBottomDetails } from '../../components/ChatBottomDetails';
-import { ChatRepliedQuote } from '../../components/ChatRepliedQuote';
-import ReplyTo from '../../components/ReplyTo';
-import { useCamera } from '../../hooks/useCamera';
-import { useGallery } from '../../hooks/useGallery';
-import './Chat.css';
-
-const Chat = () => {
- // const params = useParams();
-
- // TODO: Fix this
- const params = { contact_id: 1 };
- // Global State
- const chat = ChatStore.useState(getChat(params.contact_id));
-
- const chats = ChatStore.useState(getChats);
- const contact = ContactStore.useState(getContact(params.contact_id));
- const notificationCount = getNotificationCount(chats);
-
- const { takePhoto } = useCamera();
- const { prompt } = useGallery();
-
- // Local state
- const [message, setMessage] = useState('');
- const [showSendButton, setShowSendButton] = useState(false);
- const [replyToMessage, setReplyToMessage] = useState(false);
- const [messageSent, setMessageSent] = useState(false);
-
- const [showActionSheet, setShowActionSheet] = useState(false);
- const [actionMessage, setActionMessage] = useState(false);
-
- const [showToast, setShowToast] = useState(false);
- const [toastMessage, setToastMessage] = useState('');
-
- // Refs
- const contentRef = useRef();
- const swiperRefs = useRef([]);
- const textareaRef = useRef();
- const sideRef = useRef();
- const sendRef = useRef();
- const replyToAnimationRef = useRef();
-
- const actionSheetButtons = [
- {
- text: actionMessage && actionMessage.starred ? 'Unstar Message' : 'Star Message',
- icon: starOutline,
- handler: () => starChatMessage(params.contact_id, actionMessage.id),
- },
- actionMessage && actionMessage.received
- ? {
- text: 'Reply To Message',
- icon: shareOutline,
- handler: () => showReplyToMessage(actionMessage),
- }
- : {
- text: 'Unsend Message',
- icon: alertOutline,
- handler: () => toaster("I haven't implemented unsend :) Simple store update though"),
- },
- {
- text: 'Delete Message',
- icon: trashOutline,
- handler: () => toaster("I haven't implemented delete :) Simple store update though"),
- role: 'destructive',
- },
- ];
-
- useEffect(() => {
- !showActionSheet && setActionMessage(false);
- }, [showActionSheet]);
-
- // Scroll to end of content
- // Mark all chats as read if we come into a chat
- // Set up our swipe events for animations and gestures
- useIonViewWillEnter(() => {
- scrollToBottom();
- setupObserver();
- markAllAsRead(params.contact_id);
- setSwipeEvents();
- });
-
- // For displaying toast messages
- const toaster = (message) => {
- setToastMessage(message);
- setShowToast(true);
- };
-
- // Scroll to end of content
- const scrollToBottom = async () => {
- contentRef.current.scrollToBottom();
- };
-
- // Watch for DOM changes
- // Then scroll to bottom
- // This ensures that the new chat message has *actually* been rendered
- // Check this:
- // https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
- const setupObserver = () => {
- // Mutation Observers watch for DOM changes
- // This will ensure that we scroll to bottom AFTER the new chat has rendered
- const observer = new MutationObserver(() => {
- scrollToBottom();
- });
-
- // We observe the ion-content (or containing element of chats)
- observer.observe(contentRef.current, {
- childList: true,
- });
- };
-
- // Long press callback
- const onLongPress = (e) => {
- const elementID = e.target.id;
- const chatMessageID = elementID.includes('chatText')
- ? parseInt(elementID.replace('chatText_', ''))
- : elementID.includes('chatTime')
- ? parseInt(elementID.replace('chatTime_', ''))
- : parseInt(elementID.replace('chatBubble_', ''));
-
- const chatMessage = chat.filter((message) => parseInt(message.id) === parseInt(chatMessageID))[0];
-
- setActionMessage(chatMessage);
- setShowActionSheet(true);
- };
-
- const longPressEvent = useLongPress(onLongPress, {
- isPreventDefault: true,
- delay: 2000,
- });
-
- const showReplyToMessage = async (message) => {
- // Activate reply-to functionality
- setReplyToMessage(message);
- await replyToAnimationRef.current.animation.play();
- contentRef.current.scrollToBottom(300);
- };
-
- const checkBubble = async (bubble, message, event) => {
- if (event.deltaX >= 120) {
- // Activate reply-to functionality
- bubble.style.transform = 'none';
- showReplyToMessage(message);
- } else {
- // Put chat bubble back to original position
- bubble.style.transform = 'none';
- }
- };
-
- // Function to move a bubble with the deltaX swipe
- const moveBubble = (bubble, event) => {
- if (event.velocityX > 0) {
- bubble.style.transform = `translateX(${event.deltaX}px)`;
- }
- };
-
- const setSwipeEvents = () => {
- chat.forEach((message, index) => {
- if (!message.sent) {
- const chatBubble = swiperRefs.current[index];
-
- const swipeGesture = createGesture({
- el: chatBubble,
- onEnd: (e) => checkBubble(chatBubble, message, e),
- onMove: (e) => moveBubble(chatBubble, e),
- });
-
- swipeGesture.enable();
- }
- });
- };
-
- const widthAnimation = {
- property: 'width',
- fromValue: '110%',
- toValue: '100%',
- };
-
- const fadeAnimation = {
- property: 'opacity',
- fromValue: '100%',
- toValue: '0%',
- };
-
- const sideButtonsAnimation = {
- duration: 200,
- direction: showSendButton ? 'normal' : 'reverse',
- iterations: '1',
- fromTo: [fadeAnimation],
- easing: 'ease-in-out',
- };
-
- const sendButtonAnimation = {
- duration: showSendButton ? 300 : 100,
- direction: !showSendButton ? 'normal' : 'reverse',
- iterations: '1',
- fromTo: [fadeAnimation],
- easing: 'ease-in-out',
- };
-
- const textareaAnimation = {
- duration: 200,
- direction: !showSendButton ? 'normal' : 'reverse',
- iterations: '1',
- fromTo: [widthAnimation],
- easing: 'ease-in-out',
- };
-
- // Set the state value when message val changes
- useEffect(() => {
- setShowSendButton(message !== '');
- }, [message]);
-
- // Play the animations when the state value changes
- useEffect(() => {
- textareaRef.current.animation.play();
- sideRef.current.animation.play();
- sendRef.current.animation.play();
- }, [showSendButton]);
-
- const sendMessage = (image = false, imagePath = false) => {
- if (message !== '' || image === true) {
- sendChatMessage(params.contact_id, message, replyToMessage, replyToMessage ? replyToMessage.id : false, image, imagePath);
- setMessage('');
-
- setMessageSent(true);
- setTimeout(() => setMessageSent(false), 10);
- image && setTimeout(() => scrollToBottom(), 100);
- }
- };
-
- const handlePhoto = async () => {
- const returnedFilePath = await takePhoto();
- sendMessage(true, returnedFilePath);
- };
-
- const handlePrompt = async () => {
- const returnedFilePath = await prompt();
- sendMessage(true, returnedFilePath);
- };
-
- const replyToProps = {
- replyToAnimationRef,
- replyToMessage,
- setReplyToMessage,
- contact: contact.name,
- messageSent,
- };
-
- return (
-
-
-
- 0 ? notificationCount : ''} />
-
-
-
-
-
{contact.name}
-
last seen today at 22:10
-
-
-
-
-
- toaster("As this is a UI only, video calling wouldn't work here.")}>
-
-
-
- toaster("As this is a UI only, calling wouldn't work here.")}>
-
-
-
-
-
-
-
- {chat.map((message, index) => {
- const repliedMessage = chat.filter((subMessage) => parseInt(subMessage.id) === parseInt(message.replyID))[0];
-
- return (
- (swiperRefs.current[index] = ref)}
- id={`chatBubble_${message.id}`}
- key={index}
- className={`chat-bubble ${message.sent ? 'bubble-sent' : 'bubble-received'}`}
- {...longPressEvent}
- >
-
-
-
- {message.preview}
- {message.image && message.imagePath &&
}
-
-
-
-
-
- );
- })}
-
- setShowActionSheet(false)}
- buttons={actionSheetButtons}
- />
-
- setShowToast(false)} message={toastMessage} position="bottom" duration="3000" />
-
-
- {replyToMessage && }
-
-
-
- );
-};
-
-export default Chat;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/messages/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/messages/index.tsx
deleted file mode 100644
index 4e4f3d0..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/messages/index.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { useEffect, useState } from 'react';
-
-import { IonButton, IonContent, IonIcon, IonNavLink, IonPage, IonTitle } from '@ionic/react';
-import { logoApple, settingsOutline } from 'ionicons/icons';
-
-//
-import './style.scss';
-
-// import ChatItem from '../../components/ChatItem';
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-import { ChatStore, ContactStore } from '../../store';
-import { getChats, getContacts } from '../../store/Selectors';
-import PageHelloworld from '../page-helloworld';
-import VisitorAvatar from './VisitorAvatar';
-
-const Messages = () => {
- // const pageRef = useRef();
- const contacts = ContactStore.useState(getContacts);
- const latestChats = ChatStore.useState(getChats);
-
- const [results, setResults] = useState(latestChats);
- const [showContactModal, setShowContactModal] = useState(false);
-
- useEffect(() => {
- setResults(latestChats);
- }, [latestChats]);
-
- const search = (e) => {
- const searchTerm = e.target.value;
-
- if (searchTerm !== '') {
- const searchTermLower = searchTerm.toLowerCase();
-
- const newResults = latestChats.filter((chat) =>
- contacts
- .filter((c) => c.id === chat.contact_id)[0]
- .name.toLowerCase()
- .includes(searchTermLower)
- );
- setResults(newResults);
- } else {
- setResults(latestChats);
- }
- };
-
- // return (
- //
- // {/* */}
- // helloworld message page
- //
- // );
-
- return (
-
-
-
- Chatting Room 1
- }>
-
-
-
-
-
-
- {/* */}
-
-
-
Visitor
-
- {[...Array(3)].map((_, i) => (
-
- ))}
-
-
-
- {results.map((chat, index) => {
- return ;
- })}
-
-
- );
-};
-
-export default Messages;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/messages/page-root.tsx b/03_source/mobile.integrated.not_working.del/src/pages/messages/page-root.tsx
deleted file mode 100644
index bdc5fd2..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/messages/page-root.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import { useEffect, useState } from 'react';
-
-import { IonButton, IonContent, IonIcon, IonTitle } from '@ionic/react';
-import { logoApple, notificationsOutline } from 'ionicons/icons';
-
-//
-import './style.scss';
-
-import ChatItem from '../../components/ChatItem';
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonPage from '../../components/HKPartyIonPage';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-import { ChatStore, ContactStore } from '../../store';
-import { getChats, getContacts } from '../../store/Selectors';
-import VisitorAvatar from './VisitorAvatar';
-
-const ChatsPageRoot = () => {
- // const pageRef = useRef();
- const contacts = ContactStore.useState(getContacts);
- const latestChats = ChatStore.useState(getChats);
-
- const [results, setResults] = useState(latestChats);
- const [showContactModal, setShowContactModal] = useState(false);
-
- useEffect(() => {
- setResults(latestChats);
- }, [latestChats]);
-
- const search = (e) => {
- const searchTerm = e.target.value;
-
- if (searchTerm !== '') {
- const searchTermLower = searchTerm.toLowerCase();
-
- const newResults = latestChats.filter((chat) =>
- contacts
- .filter((c) => c.id === chat.contact_id)[0]
- .name.toLowerCase()
- .includes(searchTermLower)
- );
- setResults(newResults);
- } else {
- setResults(latestChats);
- }
- };
-
- return (
-
-
-
- Chatting Room 2
-
-
-
-
-
- {/* */}
-
-
-
Visitor
-
- {[...Array(3)].map((_, i) => (
-
- ))}
-
-
-
- {results.map((chat, index) => {
- return ;
- })}
-
-
- );
-};
-
-export default ChatsPageRoot;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/messages/profile_eng.png b/03_source/mobile.integrated.not_working.del/src/pages/messages/profile_eng.png
deleted file mode 100644
index 14aedfd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/messages/profile_eng.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/messages/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/messages/style.scss
deleted file mode 100644
index 6934b9d..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/messages/style.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-#chats-page {
- .visitor-list {
- display: flex;
- flex-direction: row;
-
- overflow-x: scroll;
-
- .visitor-avatar:nth-child(n + 2) {
- margin-left: 1rem;
- }
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/near_by/NearByIonItem.tsx b/03_source/mobile.integrated.not_working.del/src/pages/near_by/NearByIonItem.tsx
deleted file mode 100644
index 92cc9ba..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/near_by/NearByIonItem.tsx
+++ /dev/null
@@ -1,119 +0,0 @@
-// REQ0047-order-page
-// REQ0044/near_by_page
-
-import { IonItem, IonThumbnail } from '@ionic/react';
-import { caretForwardOutline } from 'ionicons/icons';
-import React, { useEffect, useState } from 'react';
-import Loading from '../../components/Loading';
-import './style.scss';
-
-interface AboutProps {
- user_profile: any;
-}
-const getAge = (year: number): string => {
- const now = new Date();
- const then = new Date(year, 0, 1);
- const age = now.getFullYear() - then.getFullYear();
- const m = now.getMonth() - then.getMonth();
-
- if (m < 0 || (m === 0 && now.getDate() < then.getDate())) {
- return String(age - 1);
- }
-
- return String(age);
-};
-
-const deg2rad = (deg: number) => {
- return deg * (Math.PI / 180);
-};
-
-const getDistanceFromLatLonInKm = (lat1: number, lon1: number, lat2: number, lon2: number) => {
- const R = 6371; // Radius of the earth in km
- const dLat = deg2rad(lat2 - lat1); // deg2rad below
- const dLon = deg2rad(lon2 - lon1);
- const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
-
- const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
- const d = R * c; // Distance in km
-
- return d;
-};
-
-const NearByIonItem: React.FC = ({ user_profile }) => {
- const [page_content, setPageContent] = useState({
- full_name: user_profile.full_name || '',
- year_of_birth: getAge(user_profile.year_of_birth) || '',
- distance_between: '',
- avatar_url: user_profile.avatar_urls[0] || 'https://ionicframework.com/docs/img/demos/thumbnail.svg',
- });
-
- useEffect(() => {
- console.log({ user_profile });
- // get lang log from string "(59.628687602265,-37.0533834722112)"
- const regex = /\((.*?),(.*?)\)/;
- const match = user_profile.current_pos.match(regex);
- if (match) {
- const lat = parseFloat(match[1]);
- const lon = parseFloat(match[2]);
-
- let temp = getDistanceFromLatLonInKm(lat, lon, 22.3961, 114.1092).toFixed(1);
- setPageContent({ ...page_content, distance_between: temp });
- } else {
- console.log('no lang/log found in db');
- }
- }, []);
-
- // check if user_profile is null
- if (!user_profile) return ;
-
- console.log({ user_profile });
-
- return (
- <>
-
-
-
-
-
-
-
-
-
- {page_content.full_name || ''} {page_content.year_of_birth}
-
-
- {user_profile.other_tags.map((o, i) => (
- <>
- {i > 0 && ', '}
- {o}
- >
- ))}
-
-
- {page_content.distance_between}
- km. {'Sai Kung'}
-
-
-
-
- >
- );
-};
-
-export default React.memo(NearByIonItem);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/near_by/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/near_by/index.tsx
deleted file mode 100644
index fa052a6..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/near_by/index.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-// REQ0044/near_by_page
-
-import { IonBackButton, IonButton, IonButtons, IonContent, IonIcon, IonList, IonPage, IonTitle } from '@ionic/react';
-import { chevronBackOutline, settingsSharp } from 'ionicons/icons';
-import React, { useContext } from 'react';
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-import Loading from '../../components/Loading';
-import { AppContext } from '../../data/AppContext';
-// import { useListOtherUserProfiles } from '../../hooks/useListOtherUserProfiles';
-import IsLoggedIn from '../../util/IsLoggedIn';
-import NearByIonItem from './NearByIonItem';
-import './style.scss';
-
-// import ProfileEng from './profile_eng.png';
-
-interface AboutProps {}
-
-const NearBy: React.FC = () => {
- //
- return <>fix me NearBy>;
- //
- const { profile } = useContext(AppContext);
- //
- const [other_user_profiles] = useListOtherUserProfiles();
-
- // redirect if not logged in
- if (!IsLoggedIn(profile)) {
- window.history.replaceState({}, '', '/sblogin');
- }
-
- if (!other_user_profiles || other_user_profiles.length === 0) return ;
-
- return (
- <>
-
-
-
-
-
-
- {'My Nearby'}
-
-
-
-
-
-
-
-
-
-
- {other_user_profiles.map((up, i) => (
-
- ))}
-
-
-
- >
- );
-};
-
-export default React.memo(NearBy);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/near_by/profile_eng.png b/03_source/mobile.integrated.not_working.del/src/pages/near_by/profile_eng.png
deleted file mode 100644
index 14aedfd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/near_by/profile_eng.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/near_by/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/near_by/style.scss
deleted file mode 100644
index 5fae6e3..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/near_by/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/orders/OrderIonItem.tsx b/03_source/mobile.integrated.not_working.del/src/pages/orders/OrderIonItem.tsx
deleted file mode 100644
index 2be7315..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/orders/OrderIonItem.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-// REQ0047/order-page
-
-import { IonButton, IonItem, IonText, IonThumbnail } from '@ionic/react';
-import { caretForwardOutline } from 'ionicons/icons';
-import React, { useEffect, useState } from 'react';
-import Loading from '../../components/Loading';
-import './style.scss';
-
-interface AboutProps {}
-
-const OrderIonItem: React.FC = ({ event_detail }) => {
- let [is_loading, setIsLoading] = useState(true);
- let [contents, setContents] = useState(null);
-
- useEffect(() => {
- setContents({
- ...event_detail,
- order_time: event_detail.create_at.split('T')[0],
- last_payment_date: event_detail.last_payment_time.split('T')[0],
- renmaining_date: 50,
- });
- setIsLoading(false);
- }, []);
-
- if (is_loading) return ;
-
- if (!contents) return ;
-
- return (
- <>
-
-
- {/* */}
-
-
-
-
-
-
-
{contents.title}
-
-
-
- {'Number of participants:'}
- {contents.participant_count}
-
-
-
- {'Order time:'}
- {contents.order_time}
-
-
-
- {'Last payment date:'}
- {contents.last_payment_date}
-
-
-
- {'Remaining dates:'}
- {contents.renmaining_date}
-
-
-
-
- {contents.status ? 'Pending' : 'Paid'}
-
-
-
-
- {/* */}
-
-
- >
- );
-};
-
-export default React.memo(OrderIonItem);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/orders/UserOrdersListPage.tsx b/03_source/mobile.integrated.not_working.del/src/pages/orders/UserOrdersListPage.tsx
deleted file mode 100644
index 1660610..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/orders/UserOrdersListPage.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-// REQ0047/order-page
-
-import { IonNavLink } from '@ionic/react';
-import { useContext, useEffect, useState } from 'react';
-
-import Loading from '../../components/Loading';
-import { AppContext } from '../../data/AppContext';
-import { useListPartyEventOrderSummary } from '../../hooks/useListPartyEventOrderSummary';
-import IsLoggedIn from '../../util/IsLoggedIn';
-import OrderEventDetail from '../order_event_detail';
-import OrderIonItem from './OrderIonItem';
-
-function UserOrdersListPage() {
- const [is_loading, setIsLoading] = useState(true);
- const { profile } = useContext(AppContext);
-
- const [party_event_orders] = useListPartyEventOrderSummary({ user_id: '1' });
-
- useEffect(() => {
- console.log({ party_event_orders });
- setIsLoading(false);
- }, []);
-
- // redirect if not logged in
- if (!IsLoggedIn(profile)) {
- window.history.replaceState({}, '', '/sblogin');
- }
-
- if (is_loading) return ;
-
- // consider if party_event_orders is null during loading
- if (!party_event_orders) return ;
-
- return (
- <>
- {party_event_orders.map((event_detail, i) => (
- }>
-
-
- ))}
- >
- );
-}
-
-export default UserOrdersListPage;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/orders/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/orders/index.tsx
deleted file mode 100644
index a6388ac..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/orders/index.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-// REQ0047/order-page
-
-import { IonBackButton, IonButton, IonButtons, IonContent, IonIcon, IonPage, IonTitle } from '@ionic/react';
-import { chevronBackOutline, ellipsisHorizontal, ellipsisVertical } from 'ionicons/icons';
-import React from 'react';
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-import './style.scss';
-
-interface AboutProps {}
-
-const Orders: React.FC = () => {
- return (
- <>
-
-
-
-
-
-
- {'My Orders'}
-
-
-
-
-
-
-
-
-
- {/* */}
- helloworld orders ?
-
-
- >
- );
-};
-
-export default React.memo(Orders);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/orders/page-two.tsx b/03_source/mobile.integrated.not_working.del/src/pages/orders/page-two.tsx
deleted file mode 100644
index f0fe8ff..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/orders/page-two.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonBackButton, IonButtons, IonContent, IonHeader, IonToolbar } from '@ionic/react';
-import { chevronBackOutline } from 'ionicons/icons';
-
-function PageTwo() {
- return (
- <>
- {/* */}
-
-
-
-
-
-
-
- {/* */}
-
- Page Two
- Use the back button to navigate to the previous page.
-
- {/* */}
- >
- );
-}
-
-export default PageTwo;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/orders/profile_eng.png b/03_source/mobile.integrated.not_working.del/src/pages/orders/profile_eng.png
deleted file mode 100644
index 14aedfd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/orders/profile_eng.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/orders/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/orders/style.scss
deleted file mode 100644
index 0c30c4f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/orders/style.scss
+++ /dev/null
@@ -1,2 +0,0 @@
-#orders-page {
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/page-helloworld/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/page-helloworld/index.tsx
deleted file mode 100644
index 14a3853..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/page-helloworld/index.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { IonBackButton, IonButtons, IonContent, IonText, IonTitle } from '@ionic/react';
-import { chevronBackOutline } from 'ionicons/icons';
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-
-const PageHelloworld = () => {
- return (
- <>
-
-
-
-
-
- Helloworld
-
-
-
- PageHelloworld
-
- >
- );
-};
-
-export default PageHelloworld;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/Contactus/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/Contactus/index.tsx
deleted file mode 100644
index cdfc50f..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/Contactus/index.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import { IonBackButton, IonButton, IonButtons, IonContent, IonTextarea, IonTitle } from '@ionic/react';
-import { chevronBackOutline } from 'ionicons/icons';
-import React from 'react';
-import HKPartyIonHeader from '../../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../../components/HKPartyIonToolbar';
-
-import './style.scss';
-
-interface AboutProps {}
-
-const ContactUsPage: React.FC = () => {
- return (
- <>
-
-
-
-
-
- {'Contact us'}
-
-
- {/* */}
-
-
-
{'What assistance do you need?'}
-
-
-
-
{'Add attachments'}
-
-
-
-
-
- {'Send'}
-
-
-
- {/* */}
-
- >
- );
-};
-
-export default ContactUsPage;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/Contactus/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/profile/Contactus/style.scss
deleted file mode 100644
index 75a111d..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/Contactus/style.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-.contact-us-page {
- .image-place-holder {
- width: calc(100vw / 3);
- height: calc(100vw / 3);
- background-color: gold;
- border-radius: 1rem;
- }
-
- .row {
- background-color: gold;
-
- display: flex;
- flex-direction: row;
- gap: 1rem;
- justify-content: center;
- margin: 1rem;
- background-color: unset;
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/DeleteAccount/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/DeleteAccount/index.tsx
deleted file mode 100644
index ff69bc5..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/DeleteAccount/index.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import { IonBackButton, IonButton, IonButtons, IonContent, IonHeader, IonTextarea, IonTitle, IonToolbar } from '@ionic/react';
-
-function ContactUsPage() {
- return (
- <>
-
-
-
-
-
- Contact us
-
-
-
-
-
What assistance do you need?
-
-
-
-
Add attachments
-
-
-
- {/* */}
-
-
- Send
-
-
-
- >
- );
-}
-
-export default ContactUsPage;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/Language/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/Language/index.tsx
deleted file mode 100644
index ff69bc5..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/Language/index.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import { IonBackButton, IonButton, IonButtons, IonContent, IonHeader, IonTextarea, IonTitle, IonToolbar } from '@ionic/react';
-
-function ContactUsPage() {
- return (
- <>
-
-
-
-
-
- Contact us
-
-
-
-
-
What assistance do you need?
-
-
-
-
Add attachments
-
-
-
- {/* */}
-
-
- Send
-
-
-
- >
- );
-}
-
-export default ContactUsPage;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/PageRoot.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/PageRoot.tsx
deleted file mode 100644
index a1a19de..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/PageRoot.tsx
+++ /dev/null
@@ -1,183 +0,0 @@
-// REQ0053/Profile-page
-
-import { IonButton, IonCardSubtitle, IonCardTitle, IonContent, IonIcon, IonNavLink, IonPopover, IonThumbnail, IonTitle } from '@ionic/react';
-import { checkmarkCircleOutline, logoApple, settingsOutline } from 'ionicons/icons';
-import React, { useContext, useEffect, useState } from 'react';
-import AboutPopover from '../../components/AboutPopover';
-import './style.scss';
-
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-import Loading from '../../components/Loading';
-import { AppContext } from '../../data/AppContext';
-import IsLoggedIn from '../../util/IsLoggedIn';
-import PageSetting from './page-setting';
-
-interface AboutProps {}
-
-const PageRoot: React.FC = () => {
- const [is_loading, setIsLoading] = useState(true);
- const { profile } = useContext(AppContext);
-
- const [showPopover, setShowPopover] = useState(false);
- const [popoverEvent, setPopoverEvent] = useState();
-
- const [page_content, setPageContent] = useState({});
-
- useEffect(() => {
- setPageContent({
- full_name: profile?.full_name || '',
- user_verified: false,
- user_vip: false,
- });
-
- setIsLoading(false);
- }, []);
-
- // consider content is loading
- if (is_loading) return ;
-
- // consider if profile is null, then redirect to login
- if (!IsLoggedIn(profile)) {
- window.history.replaceState({}, '', '/sblogin');
- console.log('login info not found');
- return <>>;
- }
-
- return (
- <>
-
-
- {'My Profile'}
- }>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {page_content.full_name}
- {page_content.user_verified ? <>verified> : <>>}
- {page_content.user_vip ? <>VIP> : <>>}
-
-
-
- {'Edit'}
-
-
- {/* */}
-
-
-
-
-
-
-
- {'MemberShip'}
- 7 {'of the exclusive privileges'}
-
-
-
{
- window.location.href = '/unlock-membership';
- }}
- >
- {'Unlock'}
-
-
-
-
-
Privileges Unlocked
-
-
-
-
Unlock participant list
-
-
-
-
-
-
Exclusive vip logo
-
-
-
-
-
-
-
Tips of message read
-
-
-
-
-
-
Voice and images transmission
-
-
-
-
-
-
Pinned to the top of nearby list
-
-
-
-
-
-
-
-
- setShowPopover(false)}>
- setShowPopover(false)} />
-
- >
- );
-};
-
-export default React.memo(PageRoot);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/Privacy/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/Privacy/index.tsx
deleted file mode 100644
index 7d3a32d..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/Privacy/index.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import { useEffect, useState } from 'react';
-
-import Markdown from 'react-markdown';
-
-import { IonBackButton, IonButtons, IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/react';
-import Loading from '../../../components/Loading';
-
-function Privacy() {
- let [terms_temp, setTermsTemp] = useState({ terms: '' });
- const markdown = '# Hi, *Pluto*!';
-
- useEffect(() => {
- fetch('/assets/data/Terms.en.md')
- .then((res) => res.text())
- .then((text) => {
- setTermsTemp({ terms: text });
- });
- }, []);
-
- if (!terms_temp.terms || terms_temp.terms === '') {
- return ;
- }
-
- return (
- <>
- {/* */}
-
-
-
-
-
- Privacy
-
-
- {/* */}
-
- {terms_temp.terms}
-
- {/* */}
- >
- );
-}
-
-export default Privacy;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/ServiceAgreement/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/ServiceAgreement/index.tsx
deleted file mode 100644
index 81bd0ad..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/ServiceAgreement/index.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import { IonBackButton, IonButtons, IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/react';
-import { useEffect, useState } from 'react';
-import Markdown from 'react-markdown';
-import Loading from '../../../components/Loading';
-
-function ServiceAgreement() {
- let [terms_temp, setTermsTemp] = useState({ terms: '' });
- const markdown = '# Hi, *Pluto*!';
-
- useEffect(() => {
- fetch('/assets/data/S_A.en.md')
- .then((res) => res.text())
- .then((text) => {
- setTermsTemp({ terms: text });
- });
- }, []);
-
- if (!terms_temp.terms || terms_temp.terms === '') {
- return ;
- }
-
- return (
- <>
- {/* */}
-
-
-
-
-
- 服務協議及社區規範
-
-
- {/* */}
-
- {terms_temp.terms}
-
- {/* */}
- >
- );
-}
-
-export default ServiceAgreement;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/Share/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/Share/index.tsx
deleted file mode 100644
index ff69bc5..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/Share/index.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import { IonBackButton, IonButton, IonButtons, IonContent, IonHeader, IonTextarea, IonTitle, IonToolbar } from '@ionic/react';
-
-function ContactUsPage() {
- return (
- <>
-
-
-
-
-
- Contact us
-
-
-
-
-
What assistance do you need?
-
-
-
-
Add attachments
-
-
-
- {/* */}
-
-
- Send
-
-
-
- >
- );
-}
-
-export default ContactUsPage;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/index.tsx
deleted file mode 100644
index 602c3f9..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/index.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-// REQ0053/Profile-page
-
-import { IonContent, IonPage } from '@ionic/react';
-import React from 'react';
-import './style.scss';
-
-import PageRoot from './PageRoot';
-
-interface AboutProps {}
-
-const Profile: React.FC = () => {
- return (
- <>
-
-
-
-
-
- >
- );
-};
-
-export default React.memo(Profile);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/ChangeLanguageModal/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/ChangeLanguageModal/index.tsx
deleted file mode 100644
index 6f90f08..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/ChangeLanguageModal/index.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { IonButton } from '@ionic/react';
-import { useRef } from 'react';
-
-import './style.scss';
-
-const ChangeLanguageModal = ({ dismiss }: { dismiss: (data?: string | null | undefined | number, role?: string) => void }) => {
- const inputRef = useRef(null);
- return (
- <>
-
-
Language
-
-
- dismiss(inputRef.current?.value, 'confirm')} fill="outline" shape="round" size="large">
- English
-
- dismiss(inputRef.current?.value, 'confirm')} fill="outline" shape="round" size="large">
- 中文
-
-
-
-
-
- Change
-
-
-
- >
- );
-};
-
-export default ChangeLanguageModal;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/ChangeLanguageModal/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/ChangeLanguageModal/style.scss
deleted file mode 100644
index cc447c0..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/ChangeLanguageModal/style.scss
+++ /dev/null
@@ -1,69 +0,0 @@
-.change-language-modal-block {
- width: 100%;
- height: 400px;
-
- position: relative;
-
- //
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- //
-
- .title {
- font-weight: bold;
- font-size: 1.2rem;
- padding-top: 1rem;
- }
-
- .subtitle {
- font-size: 0.9rem;
- font-weight: 300;
- padding-top: 1rem;
- }
-
- .button-row {
- display: flex;
- flex-direction: row;
- width: 100%;
- justify-content: center;
- align-items: center;
-
- ion-button {
- width: 45%;
- }
- }
-
- .button-column {
- display: flex;
- flex-direction: column;
-
- width: 100%;
-
- padding: 1rem 2rem;
-
- ion-button {
- padding-top: 1rem;
- }
- }
-}
-
-ion-modal {
- --height: auto;
-}
-
-.modal-wrapper {
- position: fixed;
- bottom: 0px;
-}
-
-.apple {
- position: fixed;
- bottom: 0px;
-}
-
-ion-modal::part(content) {
- position: fixed;
- bottom: 0;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/index.tsx
deleted file mode 100644
index e7f717e..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/index.tsx
+++ /dev/null
@@ -1,131 +0,0 @@
-import { IonBackButton, IonButton, IonButtons, IonContent, IonIcon, IonItem, IonLabel, IonList, IonNavLink, IonTitle, useIonModal } from '@ionic/react';
-import { alertCircle, chatbubbles, chevronBackOutline, earth, idCard, newspaper, shareSocial, trash } from 'ionicons/icons';
-import { useRef, useState } from 'react';
-
-import ContactUsPage from '../Contactus';
-import Privacy from '../Privacy';
-
-import { OverlayEventDetail } from '@ionic/react/dist/types/components/react-component-lib/interfaces';
-import HKPartyIonHeader from '../../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../../components/HKPartyIonToolbar';
-import ServiceAgreement from '../ServiceAgreement';
-import ChangeLanguageModal from './ChangeLanguageModal';
-import './style.scss';
-
-const DeleteTheAccountModal = ({ dismiss }: { dismiss: (data?: string | null | undefined | number, role?: string) => void }) => {
- const inputRef = useRef(null);
- return (
- <>
-
-
-
-
-
Delete the Account
-
You cannot re-register after deleting your account
-
-
- Confirm
-
- dismiss(inputRef.current?.value, 'confirm')} fill="outline" shape="round" size="large">
- Cancel
-
-
-
- >
- );
-};
-
-function PageSetting() {
- const [delete_the_account_modal_present, delete_the_account_modal_dismiss] = useIonModal(DeleteTheAccountModal, {
- dismiss: (data: string, role: string) => delete_the_account_modal_dismiss(data, role),
- });
- const [message, setMessage] = useState('This modal example uses the modalController to present and dismiss modals.');
-
- function openDeleteTheAccountModal() {
- delete_the_account_modal_present({
- onWillDismiss: (ev: CustomEvent) => {
- if (ev.detail.role === 'confirm') {
- setMessage(`Hello, ${ev.detail.data}!`);
- }
- },
- });
- }
-
- const [change_language_modal_present, change_language_modal_dismiss] = useIonModal(ChangeLanguageModal, {
- dismiss: (data: string, role: string) => change_language_modal_dismiss(data, role),
- });
-
- function openChangeLanguageModal() {
- change_language_modal_present({
- onWillDismiss: (ev: CustomEvent) => {
- if (ev.detail.role === 'confirm') {
- setMessage(`Hello, ${ev.detail.data}!`);
- }
- },
- });
- }
-
- return (
- <>
-
-
-
-
-
- {'Settings'}
-
-
- {/* */}
-
-
- }>
-
-
- {'Contact us'}
-
-
-
- openChangeLanguageModal()}>
-
- {'Language'}
-
-
- }>
-
-
- {'Privacy'}
-
-
-
- }>
-
-
- {'Service agreement'}
-
-
-
-
-
- {'Share'}
-
-
- openDeleteTheAccountModal()}>
-
- {'Delete Account'}
-
-
-
- {/* */}
-
- {/* */}
-
- {/* */}
- >
- );
-}
-
-export default PageSetting;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/style.scss
deleted file mode 100644
index 1a337fe..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-setting/style.scss
+++ /dev/null
@@ -1,57 +0,0 @@
-.block {
- width: 100%;
- height: 400px;
-
- position: relative;
-
- //
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- //
-
- .title {
- font-weight: bold;
- font-size: 1.2rem;
- padding-top: 1rem;
- }
-
- .subtitle {
- font-size: 0.9rem;
- font-weight: 300;
- padding-top: 1rem;
- }
-
- .button-column {
- display: flex;
- flex-direction: column;
-
- width: 100%;
-
- padding: 1rem 2rem;
-
- ion-button {
- padding-top: 1rem;
- }
- }
-}
-
-ion-modal {
- --height: auto;
-}
-
-.modal-wrapper {
- position: fixed;
- bottom: 0px;
-}
-
-.apple {
- position: fixed;
- bottom: 0px;
-}
-
-ion-modal::part(content) {
- position: fixed;
- bottom: 0;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-three.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/page-three.tsx
deleted file mode 100644
index 5cbb9e4..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-three.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { IonBackButton, IonButtons, IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/react';
-
-function PageThree() {
- return (
- <>
-
-
-
-
-
- Page Three
-
-
-
- Page Three
-
- >
- );
-}
-
-export default PageThree;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-two.tsx b/03_source/mobile.integrated.not_working.del/src/pages/profile/page-two.tsx
deleted file mode 100644
index f0fe8ff..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/page-two.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonBackButton, IonButtons, IonContent, IonHeader, IonToolbar } from '@ionic/react';
-import { chevronBackOutline } from 'ionicons/icons';
-
-function PageTwo() {
- return (
- <>
- {/* */}
-
-
-
-
-
-
-
- {/* */}
-
- Page Two
- Use the back button to navigate to the previous page.
-
- {/* */}
- >
- );
-}
-
-export default PageTwo;
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/profile_eng.png b/03_source/mobile.integrated.not_working.del/src/pages/profile/profile_eng.png
deleted file mode 100644
index 14aedfd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/profile/profile_eng.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/profile/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/profile/style.scss
deleted file mode 100644
index 64af671..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/profile/style.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-#my-profile-page {
- background-color: white;
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
-
-.row {
- margin: 1rem 0rem;
- display: flex;
- flex-direction: row;
- justify-content: space-between;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/NearByIonItem.tsx b/03_source/mobile.integrated.not_working.del/src/pages/user_profile/NearByIonItem.tsx
deleted file mode 100644
index 01be562..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/NearByIonItem.tsx
+++ /dev/null
@@ -1,165 +0,0 @@
-// REQ0047-order-page
-
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonDatetime,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonMenuButton,
- IonPage,
- IonPopover,
- IonSelect,
- IonSelectOption,
- IonText,
- IonThumbnail,
- IonToolbar,
-} from '@ionic/react';
-import { format, parseISO } from 'date-fns';
-import { caretForwardOutline, ellipsisHorizontal, ellipsisVertical } from 'ionicons/icons';
-import React, { useState } from 'react';
-import AboutPopover from '../../components/AboutPopover';
-import './style.scss';
-
-interface AboutProps {}
-
-const NearByIonItem: React.FC = () => {
- const [showPopover, setShowPopover] = useState(false);
- const [popoverEvent, setPopoverEvent] = useState();
- const [location, setLocation] = useState<'madison' | 'austin' | 'chicago' | 'seattle'>('madison');
- const [conferenceDate, setConferenceDate] = useState('2047-05-17T00:00:00-05:00');
-
- const selectOptions = {
- header: 'Select a Location',
- };
-
- const presentPopover = (e: React.MouseEvent) => {
- setPopoverEvent(e.nativeEvent);
- setShowPopover(true);
- };
-
- function displayDate(date: string, dateFormat: string) {
- return format(parseISO(date), dateFormat);
- }
-
- return (
- <>
-
-
-
-
-
-
-
-
-
John 20
-
Fishing, basketball, piano
-
40 km. Sai Kung
-
-
-
- >
- );
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* Instead of loading an image each time the select changes, use opacity to transition them */}
-
-
-
-
-
-
-
About
-
-
- The Ionic Conference is a one-day conference on {displayDate(conferenceDate, 'MMM dd, yyyy')} featuring talks from the Ionic team. It is focused on
- Ionic applications being built with Ionic Framework. This includes migrating apps to the latest version of the framework, Angular concepts, Webpack,
- Sass, and many other technologies used in Ionic 2. Tickets are completely sold out, and we’re expecting more than 1000 developers – making this the
- largest Ionic conference ever!
-
-
-
Details
-
-
-
- setLocation(e.detail.value as any)}>
- Madison, WI
- Austin, TX
- Chicago, IL
- Seattle, WA
-
-
-
- Date
- {displayDate(conferenceDate, 'MMM dd, yyyy')}
-
- setConferenceDate(e.detail.value! as string)}
- presentation="date"
- >
-
-
-
-
-
Internet
-
-
-
- Wifi network
- ica{displayDate(conferenceDate, 'y')}
-
-
- Password
- makegoodthings
-
-
-
-
-
- setShowPopover(false)}>
- setShowPopover(false)} />
-
-
- );
-};
-
-export default React.memo(NearByIonItem);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/index.tsx b/03_source/mobile.integrated.not_working.del/src/pages/user_profile/index.tsx
deleted file mode 100644
index 9691f99..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/index.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-// REQ0043/profile_detail
-
-import { IonButton, IonButtons, IonContent, IonFooter, IonIcon, IonPage, IonPopover, IonText, IonTitle } from '@ionic/react';
-import { chevronBackOutline, ellipsisHorizontal, ellipsisVertical } from 'ionicons/icons';
-import React, { useEffect, useState } from 'react';
-import AboutPopover from '../../components/AboutPopover';
-import './style.scss';
-
-// import ProfileEng from './profile_eng.png';
-// import { useGetUserProfileById } from '../../hooks/useGetUserProfileById';
-
-import _ from 'lodash';
-import HKPartyIonHeader from '../../components/HKPartyIonHeader';
-import HKPartyIonToolbar from '../../components/HKPartyIonToolbar';
-import Loading from '../../components/Loading';
-
-interface AboutProps {
- match: { params: { user_id: any } };
-}
-
-const UserProfile: React.FC = (props) => {
- let {
- match: {
- params: { user_id },
- },
- } = props;
-
- return <>fix me UserProfile>;
- const [user_profile] = useGetUserProfileById({ user_id });
- const [page_content, setPageContent] = useState({});
-
- const [showPopover, setShowPopover] = useState(false);
- const [popoverEvent, setPopoverEvent] = useState();
- const [location, setLocation] = useState<'madison' | 'austin' | 'chicago' | 'seattle'>('madison');
- const [conferenceDate, setConferenceDate] = useState('2047-05-17T00:00:00-05:00');
-
- const presentPopover = (e: React.MouseEvent) => {
- setPopoverEvent(e.nativeEvent);
- setShowPopover(true);
- };
-
- useEffect(() => {
- if (!_.isEmpty(user_profile)) {
- console.log(user_profile);
- setPageContent({ ...user_profile, avatar_url: user_profile.avatar_urls[0] });
- }
- }, [user_profile]);
-
- if (_.isEmpty(page_content)) return ;
-
- return (
- <>
-
-
-
-
-
- history.back()} icon={chevronBackOutline}>
-
-
- {'Near by Profiles'}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {page_content.about_user}
-
-
{page_content.gender == 1 ? 'Male' : 'Female'}
-
{page_content.height_cm} cm
-
{page_content.weight_kg} kg
-
{page_content.career}
-
{page_content.spoken_language}
-
{page_content.education}
-
-
-
-
-
-
- {'Chat'}
-
-
-
- setShowPopover(false)}>
- setShowPopover(false)} />
-
-
- >
- );
-};
-
-export default React.memo(UserProfile);
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/profile_eng.png b/03_source/mobile.integrated.not_working.del/src/pages/user_profile/profile_eng.png
deleted file mode 100644
index 14aedfd..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/profile_eng.png and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/sample_user_profile_pic.avif b/03_source/mobile.integrated.not_working.del/src/pages/user_profile/sample_user_profile_pic.avif
deleted file mode 100644
index 1ee563e..0000000
Binary files a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/sample_user_profile_pic.avif and /dev/null differ
diff --git a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/style.scss b/03_source/mobile.integrated.not_working.del/src/pages/user_profile/style.scss
deleted file mode 100644
index 5fae6e3..0000000
--- a/03_source/mobile.integrated.not_working.del/src/pages/user_profile/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/react-app-env.d.ts b/03_source/mobile.integrated.not_working.del/src/react-app-env.d.ts
deleted file mode 100644
index 6431bc5..0000000
--- a/03_source/mobile.integrated.not_working.del/src/react-app-env.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/03_source/mobile.integrated.not_working.del/src/serviceWorker.ts b/03_source/mobile.integrated.not_working.del/src/serviceWorker.ts
deleted file mode 100644
index cd09347..0000000
--- a/03_source/mobile.integrated.not_working.del/src/serviceWorker.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-// This optional code is used to register a service worker.
-// register() is not called by default.
-
-// This lets the app load faster on subsequent visits in production, and gives
-// it offline capabilities. However, it also means that developers (and users)
-// will only see deployed updates on subsequent visits to a page, after all the
-// existing tabs open on the page have been closed, since previously cached
-// resources are updated in the background.
-
-// To learn more about the benefits of this model and instructions on how to
-// opt-in, read https://bit.ly/CRA-PWA
-
-const isLocalhost = Boolean(
- window.location.hostname === 'localhost' ||
- // [::1] is the IPv6 localhost address.
- window.location.hostname === '[::1]' ||
- // 127.0.0.1/8 is considered localhost for IPv4.
- window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)
-);
-
-type Config = {
- onSuccess?: (registration: ServiceWorkerRegistration) => void;
- onUpdate?: (registration: ServiceWorkerRegistration) => void;
-};
-
-export function register(config?: Config) {
- if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
- // The URL constructor is available in all browsers that support SW.
- const publicUrl = new URL((process as { env: { [key: string]: string } }).env.PUBLIC_URL, window.location.href);
- if (publicUrl.origin !== window.location.origin) {
- // Our service worker won't work if PUBLIC_URL is on a different origin
- // from what our page is served on. This might happen if a CDN is used to
- // serve assets; see https://github.com/facebook/create-react-app/issues/2374
- return;
- }
-
- window.addEventListener('load', () => {
- const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
-
- if (isLocalhost) {
- // This is running on localhost. Let's check if a service worker still exists or not.
- checkValidServiceWorker(swUrl, config);
-
- // Add some additional logging to localhost, pointing developers to the
- // service worker/PWA documentation.
- navigator.serviceWorker.ready.then(() => {
- console.log('This web app is being served cache-first by a service ' + 'worker. To learn more, visit https://bit.ly/CRA-PWA');
- });
- } else {
- // Is not localhost. Just register service worker
- registerValidSW(swUrl, config);
- }
- });
- }
-}
-
-function registerValidSW(swUrl: string, config?: Config) {
- navigator.serviceWorker
- .register(swUrl)
- .then((registration) => {
- registration.onupdatefound = () => {
- const installingWorker = registration.installing;
- if (installingWorker == null) {
- return;
- }
- installingWorker.onstatechange = () => {
- if (installingWorker.state === 'installed') {
- if (navigator.serviceWorker.controller) {
- // At this point, the updated precached content has been fetched,
- // but the previous service worker will still serve the older
- // content until all client tabs are closed.
- console.log('New content is available and will be used when all ' + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.');
-
- // Execute callback
- if (config && config.onUpdate) {
- config.onUpdate(registration);
- }
- } else {
- // At this point, everything has been precached.
- // It's the perfect time to display a
- // "Content is cached for offline use." message.
- console.log('Content is cached for offline use.');
-
- // Execute callback
- if (config && config.onSuccess) {
- config.onSuccess(registration);
- }
- }
- }
- };
- };
- })
- .catch((error) => {
- console.error('Error during service worker registration:', error);
- });
-}
-
-function checkValidServiceWorker(swUrl: string, config?: Config) {
- // Check if the service worker can be found. If it can't reload the page.
- fetch(swUrl)
- .then((response) => {
- // Ensure service worker exists, and that we really are getting a JS file.
- const contentType = response.headers.get('content-type');
- if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {
- // No service worker found. Probably a different app. Reload the page.
- navigator.serviceWorker.ready.then((registration) => {
- registration.unregister().then(() => {
- window.location.reload();
- });
- });
- } else {
- // Service worker found. Proceed as normal.
- registerValidSW(swUrl, config);
- }
- })
- .catch(() => {
- console.log('No internet connection found. App is running in offline mode.');
- });
-}
-
-export function unregister() {
- if ('serviceWorker' in navigator) {
- navigator.serviceWorker.ready.then((registration) => {
- registration.unregister();
- });
- }
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/store/ChatStore.js b/03_source/mobile.integrated.not_working.del/src/store/ChatStore.js
deleted file mode 100644
index feaf22b..0000000
--- a/03_source/mobile.integrated.not_working.del/src/store/ChatStore.js
+++ /dev/null
@@ -1,373 +0,0 @@
-import { Store } from 'pullstate';
-
-const ChatStore = new Store({
- chats: [
- {
- id: 1,
- contact_id: 1,
- chats: [
- {
- id: 1,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: true,
- sent: false,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 2,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: false,
- sent: true,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 3,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: true,
- sent: false,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 4,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: false,
- sent: true,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 5,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: true,
- sent: false,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 6,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: false,
- sent: true,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 7,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: true,
- sent: false,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 8,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: false,
- sent: true,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 9,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: true,
- sent: false,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 10,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: false,
- sent: true,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 11,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: true,
- sent: false,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 12,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: false,
- sent: true,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 13,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: true,
- sent: false,
- date: '20:05',
- read: false,
- starred: false,
- },
- {
- id: 14,
- preview: 'This is a test whatsapp message inside the whatsapp clone app',
- received: false,
- sent: true,
- date: '20:10',
- read: false,
- starred: false,
- },
- ],
- },
- {
- id: 2,
- contact_id: 2,
- chats: [
- {
- id: 1,
- preview: "Excited for the Ioniconf 2021! The 23rd can't come quick enough",
- received: false,
- sent: true,
- date: 'Yesterday',
- read: true,
- starred: false,
- },
- ],
- },
- {
- id: 3,
- contact_id: 3,
- chats: [
- {
- id: 1,
- preview: "Excited for the Ioniconf 2021! The 23rd can't come quick enough",
- received: false,
- sent: true,
- date: 'Saturday',
- read: true,
- starred: false,
- },
- ],
- },
- {
- id: 4,
- contact_id: 4,
- chats: [
- {
- id: 1,
- preview: 'Hey Alan, this is a test whatsapp message',
- received: true,
- sent: false,
- date: 'Friday',
- read: false,
- starred: false,
- },
- ],
- },
- {
- id: 5,
- contact_id: 5,
- chats: [
- {
- id: 1,
- preview: 'Hey Alan, this is a test whatsapp message',
- received: true,
- sent: false,
- date: 'Thursday',
- read: false,
- starred: false,
- },
- ],
- },
- {
- id: 6,
- contact_id: 6,
- chats: [
- {
- id: 1,
- preview: 'Hey Alan, this is a test received whatsapp message',
- received: true,
- sent: false,
- date: 'Wednesday',
- read: false,
- starred: false,
- },
- {
- id: 2,
- preview: 'Hey Josh, this is a test sent whatsapp message',
- received: true,
- sent: true,
- date: 'Wednesday',
- read: true,
- starred: false,
- },
- {
- id: 3,
- preview: 'Awesome man! This seems to be coming together OK!',
- received: true,
- sent: false,
- date: 'Wednesday',
- read: true,
- starred: false,
- },
- ],
- },
- {
- id: 7,
- contact_id: 7,
- chats: [
- {
- id: 1,
- preview: 'Goodluck on the quest to space, the moon and mars!',
- received: true,
- sent: false,
- date: '08/06/2021',
- read: true,
- starred: false,
- },
- ],
- },
- {
- id: 8,
- contact_id: 8,
- chats: [
- {
- id: 1,
- preview: 'Hey Bill, This is a test sent message to your whatsapp',
- received: true,
- sent: false,
- date: '05/06/2021',
- read: true,
- starred: false,
- },
- ],
- },
- {
- id: 9,
- contact_id: 10,
- chats: [
- {
- id: 1,
- preview:
- 'This is Alans WhatsApp clone using the Ionic Framework and CapacitorJS for some native functionality.',
- received: true,
- sent: false,
- date: 'Wednesday',
- read: false,
- starred: false,
- },
- {
- id: 2,
- preview:
- "Yep, and don't forget the Ionic Animations for the slick UI transitions you see, and some Ionic Gestures for sliding etc, as well as some other things!",
- received: true,
- sent: true,
- date: 'Wednesday',
- read: true,
- starred: false,
- },
- {
- id: 3,
- preview: 'Cool! It looks good, can we get another teaser?',
- received: true,
- sent: false,
- date: 'Wednesday',
- read: true,
- starred: false,
- },
- {
- id: 4,
- preview: "Sure... I'll post one on Twitter now!",
- received: false,
- sent: true,
- date: 'Wednesday',
- read: true,
- starred: false,
- },
- ],
- },
- ],
-});
-
-export const getNotificationCount = allChats => {
- let notificationCount = 0;
-
- allChats.forEach(chats => {
- chats.chats.forEach(chat => {
- if (!chat.read) {
- notificationCount++;
- }
- });
- });
-
- return notificationCount;
-};
-
-export const markAllAsRead = contactId => {
- ChatStore.update(s => {
- const chatIndex = s.chats.findIndex(chat => chat.contact_id === parseInt(contactId));
-
- s.chats[chatIndex].chats.forEach(chat => {
- chat.read = true;
- });
- });
-};
-
-export const sendChatMessage = (
- contactId,
- message,
- reply = false,
- replyID = false,
- image = false,
- imagePath = false,
-) => {
- const today = new Date();
- const currentTime = `${today.getHours() < 10 ? `0${today.getHours()}` : today.getHours()}:${
- today.getMinutes() < 10 ? `0${today.getMinutes()}` : today.getMinutes()
- }`;
-
- ChatStore.update(s => {
- const chatIndex = s.chats.findIndex(chat => chat.contact_id === parseInt(contactId));
- const newChat = {
- id: s.chats[chatIndex].length + 1,
- preview: message,
- received: false,
- sent: true,
- date: currentTime,
- read: true,
- starred: false,
- reply,
- replyID,
- image: image,
- imagePath: imagePath,
- };
-
- s.chats[chatIndex].chats.push(newChat);
- });
-};
-
-export const starChatMessage = (contactId, messageId) => {
- ChatStore.update(s => {
- const chatIndex = s.chats.findIndex(chat => chat.contact_id === parseInt(contactId));
- const messageIndex = s.chats[chatIndex].chats.findIndex(message => message.id === parseInt(messageId));
-
- s.chats[chatIndex].chats[messageIndex].starred = !s.chats[chatIndex].chats[messageIndex].starred;
- });
-};
-
-export default ChatStore;
diff --git a/03_source/mobile.integrated.not_working.del/src/store/ContactStore.js b/03_source/mobile.integrated.not_working.del/src/store/ContactStore.js
deleted file mode 100644
index 363e4be..0000000
--- a/03_source/mobile.integrated.not_working.del/src/store/ContactStore.js
+++ /dev/null
@@ -1,113 +0,0 @@
-import { Store } from 'pullstate';
-
-const ContactStore_long = new Store({
- contacts: [
- {
- id: 1,
- name: 'Amy Sister',
- avatar: '/assets/amy.jpeg',
- },
- {
- id: 2,
- name: 'Max Lynch',
- avatar: '/assets/max.jpeg',
- },
- {
- id: 3,
- name: 'Mike Hartington',
- avatar: '/assets/mike.jpeg',
- },
- {
- id: 4,
- name: 'Henk Jurriens',
- avatar: '/assets/henk.jpeg',
- },
- {
- id: 5,
- name: 'Simon Grimm',
- avatar: '/assets/simon.jpeg',
- },
- {
- id: 6,
- name: 'Josh Morony',
- avatar: '/assets/josh.jpeg',
- },
- {
- id: 7,
- name: 'Elon Musk',
- avatar: '/assets/elon.jpeg',
- },
- {
- id: 8,
- name: 'Bill Gates',
- avatar: '/assets/bill.jpeg',
- },
- {
- id: 9,
- name: 'Mark Zuckerberg',
- avatar: '/assets/mark.jpeg',
- },
- {
- id: 10,
- name: 'Ionic Framework (not)',
- avatar: '/assets/ionic.png',
- },
- ],
-});
-
-const ContactStore = new Store({
- contacts: [
- {
- id: 1,
- name: 'Amy Sister',
- avatar: '/assets/amy.jpeg',
- },
- {
- id: 2,
- name: 'Max Lynch',
- avatar: '/assets/max.jpeg',
- },
- {
- id: 3,
- name: 'Mike Hartington',
- avatar: '/assets/mike.jpeg',
- },
- {
- id: 4,
- name: 'Henk Jurriens',
- avatar: '/assets/henk.jpeg',
- },
- {
- id: 5,
- name: 'Simon Grimm',
- avatar: '/assets/simon.jpeg',
- },
- {
- id: 6,
- name: 'Josh Morony',
- avatar: '/assets/josh.jpeg',
- },
- {
- id: 7,
- name: 'Elon Musk',
- avatar: '/assets/elon.jpeg',
- },
- {
- id: 8,
- name: 'Bill Gates',
- avatar: '/assets/bill.jpeg',
- },
- {
- id: 9,
- name: 'Mark Zuckerberg',
- avatar: '/assets/mark.jpeg',
- },
- {
- id: 10,
- name: 'Ionic Framework (not)',
- avatar: '/assets/ionic.png',
- },
- ],
-});
-
-export default ContactStore;
diff --git a/03_source/mobile.integrated.not_working.del/src/store/Selectors.js b/03_source/mobile.integrated.not_working.del/src/store/Selectors.js
deleted file mode 100644
index c48e53d..0000000
--- a/03_source/mobile.integrated.not_working.del/src/store/Selectors.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { createSelector } from 'reselect';
-
-const getState = state => state;
-
-// General getters
-export const getContacts = createSelector(getState, state => state.contacts);
-export const getChats = createSelector(getState, state => state.chats);
-
-// More specific getters
-export const getChat = contactId =>
- createSelector(getState, state => state.chats.filter(c => parseInt(c.contact_id) === parseInt(contactId))[0].chats);
-export const getContact = contactId =>
- createSelector(getState, state => state.contacts.filter(c => parseInt(c.id) === parseInt(contactId))[0]);
-
-export const getChatNotificationCount = contactId =>
- createSelector(getState, state =>
- state.chats
- .filter(c => parseInt(c.contact_id) === parseInt(contactId))[0]
- .chats.filter(chat => chat.read === false),
- );
diff --git a/03_source/mobile.integrated.not_working.del/src/store/index.js b/03_source/mobile.integrated.not_working.del/src/store/index.js
deleted file mode 100644
index 19d02b6..0000000
--- a/03_source/mobile.integrated.not_working.del/src/store/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as ChatStore } from './ChatStore';
-export { default as ContactStore } from './ContactStore';
diff --git a/03_source/mobile.integrated.not_working.del/src/theme/variables.css b/03_source/mobile.integrated.not_working.del/src/theme/variables.css
deleted file mode 100644
index 48d1f13..0000000
--- a/03_source/mobile.integrated.not_working.del/src/theme/variables.css
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Ionic Variables and Theming
- * ----------------------------------------------------------------------------
- * For more information, please see
- * https://www.ionicframework.com/docs/theming/
- */
-
-/*
- * Additional Ionic Colors
- * ----------------------------------------------------------------------------
- * In order to add colors to be used within Ionic components,
- * the color should be added as a class with the convention `.ion-color-{COLOR}`
- * where `{COLOR}` is the color to be used on the Ionic component.
- * For more information on adding new colors, please see
- * https://ionicframework.com/docs/theming/colors#adding-colors
- *
- * To generate the code for a new color, check out our new color creator:
- * https://ionicframework.com/docs/theming/colors#new-color-creator
- */
-
- :root {
- --ion-color-favorite: #69bb7b;
- --ion-color-favorite-rgb: 105,187,123;
- --ion-color-favorite-contrast: #ffffff;
- --ion-color-favorite-contrast-rgb: 255,255,255;
- --ion-color-favorite-shade: #5ca56c;
- --ion-color-favorite-tint: #78c288;
-
- --ion-color-twitter: #1da1f4;
- --ion-color-twitter-rgb: 29,161,244;
- --ion-color-twitter-contrast: #ffffff;
- --ion-color-twitter-contrast-rgb: 255,255,255;
- --ion-color-twitter-shade: #1a8ed7;
- --ion-color-twitter-tint: #34aaf5;
-
- --ion-color-instagram: #5956d8;
- --ion-color-instagram-rgb: 89,86,216;
- --ion-color-instagram-contrast: #ffffff;
- --ion-color-instagram-contrast-rgb: 255,255,255;
- --ion-color-instagram-shade: #4e4cbe;
- --ion-color-instagram-tint: #6a67dc;
-
- --ion-color-vimeo: #23b6ea;
- --ion-color-vimeo-rgb: 35,182,234;
- --ion-color-vimeo-contrast: #ffffff;
- --ion-color-vimeo-contrast-rgb: 255,255,255;
- --ion-color-vimeo-shade: #1fa0ce;
- --ion-color-vimeo-tint: #39bdec;
-
- --ion-color-facebook: #3b5998;
- --ion-color-facebook-rgb: 59,89,152;
- --ion-color-facebook-contrast: #ffffff;
- --ion-color-facebook-contrast-rgb: 255,255,255;
- --ion-color-facebook-shade: #344e86;
- --ion-color-facebook-tint: #4f6aa2;
-}
-
-.ion-color-favorite {
- --ion-color-base: var(--ion-color-favorite);
- --ion-color-base-rgb: var(--ion-color-favorite-rgb);
- --ion-color-contrast: var(--ion-color-favorite-contrast);
- --ion-color-contrast-rgb: var(--ion-color-favorite-contrast-rgb);
- --ion-color-shade: var(--ion-color-favorite-shade);
- --ion-color-tint: var(--ion-color-favorite-tint);
-}
-
-.ion-color-twitter {
- --ion-color-base: var(--ion-color-twitter);
- --ion-color-base-rgb: var(--ion-color-twitter-rgb);
- --ion-color-contrast: var(--ion-color-twitter-contrast);
- --ion-color-contrast-rgb: var(--ion-color-twitter-contrast-rgb);
- --ion-color-shade: var(--ion-color-twitter-shade);
- --ion-color-tint: var(--ion-color-twitter-tint);
-}
-
-.ion-color-google {
- --ion-color-base: var(--ion-color-google);
- --ion-color-base-rgb: var(--ion-color-google-rgb);
- --ion-color-contrast: var(--ion-color-google-contrast);
- --ion-color-contrast-rgb: var(--ion-color-google-contrast-rgb);
- --ion-color-shade: var(--ion-color-google-shade);
- --ion-color-tint: var(--ion-color-google-tint);
-}
-
-.ion-color-instagram {
- --ion-color-base: var(--ion-color-instagram);
- --ion-color-base-rgb: var(--ion-color-instagram-rgb);
- --ion-color-contrast: var(--ion-color-instagram-contrast);
- --ion-color-contrast-rgb: var(--ion-color-instagram-contrast-rgb);
- --ion-color-shade: var(--ion-color-instagram-shade);
- --ion-color-tint: var(--ion-color-instagram-tint);
-}
-
-.ion-color-vimeo {
- --ion-color-base: var(--ion-color-vimeo);
- --ion-color-base-rgb: var(--ion-color-vimeo-rgb);
- --ion-color-contrast: var(--ion-color-vimeo-contrast);
- --ion-color-contrast-rgb: var(--ion-color-vimeo-contrast-rgb);
- --ion-color-shade: var(--ion-color-vimeo-shade);
- --ion-color-tint: var(--ion-color-vimeo-tint);
-}
-
-.ion-color-facebook {
- --ion-color-base: var(--ion-color-facebook);
- --ion-color-base-rgb: var(--ion-color-facebook-rgb);
- --ion-color-contrast: var(--ion-color-facebook-contrast);
- --ion-color-contrast-rgb: var(--ion-color-facebook-contrast-rgb);
- --ion-color-shade: var(--ion-color-facebook-shade);
- --ion-color-tint: var(--ion-color-facebook-tint);
-}
-
-.ion-color-github {
- --ion-color-base: #211F1F;
- --ion-color-base-rgb: 33,31,31;
- --ion-color-contrast: #ffffff;
- --ion-color-contrast-rgb: 255,255,255;
- --ion-color-shade: #1d1b1b;
- --ion-color-tint: #373535;
-}
-
-.ion-color-instagram {
- --ion-color-base: #9537BC;
- --ion-color-base-rgb: 149,55,188;
- --ion-color-contrast: #ffffff;
- --ion-color-contrast-rgb: 255,255,255;
- --ion-color-shade: #8330a5;
- --ion-color-tint: #a04bc3;
-}
-
-/*
- * Shared Variables
- * ----------------------------------------------------------------------------
- * To customize the look and feel of this app, you can override
- * the CSS variables found in Ionic's source files.
- * To view all of the possible Ionic variables, see:
- * https://ionicframework.com/docs/theming/css-variables#ionic-variables
- */
-
-:root {
- --ion-headings-font-weight: 300;
-
- --ion-color-react: #61dbfb;
- --ion-color-communication: #8e8d93;
- --ion-color-tooling: #fe4c52;
- --ion-color-services: #fd8b2d;
- --ion-color-design: #fed035;
- --ion-color-workshop: #69bb7b;
- --ion-color-food: #3bc7c4;
- --ion-color-documentation: #b16be3;
- --ion-color-navigation: #6600cc;
-}
-
-/*
- * App iOS Variables
- * ----------------------------------------------------------------------------
- * iOS only CSS variables can go here
- */
-
-.ios {
-
-}
-
-/*
- * App Material Design Variables
- * ----------------------------------------------------------------------------
- * Material Design only CSS variables can go here
- */
-
-.md {
-
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/types/images.d.ts b/03_source/mobile.integrated.not_working.del/src/types/images.d.ts
deleted file mode 100644
index 403b544..0000000
--- a/03_source/mobile.integrated.not_working.del/src/types/images.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module '*.png' {
- const content: string;
- export default content;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/util/IsLoggedIn.tsx b/03_source/mobile.integrated.not_working.del/src/util/IsLoggedIn.tsx
deleted file mode 100644
index 5d5bc91..0000000
--- a/03_source/mobile.integrated.not_working.del/src/util/IsLoggedIn.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-// if not logged in, checked by profile is null or undefined
-
-export default function IsLoggedIn(profile) {
- if (!profile) return false;
- return true;
-}
diff --git a/03_source/mobile.integrated.not_working.del/src/util/types.ts b/03_source/mobile.integrated.not_working.del/src/util/types.ts
deleted file mode 100644
index d492e83..0000000
--- a/03_source/mobile.integrated.not_working.del/src/util/types.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export interface DispatchObject {
- [key: string]: any;
- type: string;
-}
-
-type PromiseResolveValue = T extends Promise ? R : T;
-type EffectType any> = ReturnType>;
-type EffectReturnValue any> = PromiseResolveValue>;
-export type ActionType any> = ReturnType extends DispatchObject ? ReturnType : EffectReturnValue;
diff --git a/03_source/mobile.integrated.not_working.del/tsconfig.json b/03_source/mobile.integrated.not_working.del/tsconfig.json
deleted file mode 100644
index 823e83d..0000000
--- a/03_source/mobile.integrated.not_working.del/tsconfig.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "useDefineForClassFields": true,
- "lib": [
- "DOM",
- "DOM.Iterable",
- "ESNext"
- ],
- "allowJs": false,
- "skipLibCheck": true,
- "esModuleInterop": false,
- "allowSyntheticDefaultImports": true,
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "module": "ESNext",
- "moduleResolution": "Node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "noEmit": true,
- "jsx": "react-jsx"
- },
- "include": [
- "src"
- ],
- "references": [
- {
- "path": "./tsconfig.node.json"
- }
- ]
-}
diff --git a/03_source/mobile.integrated.not_working.del/tsconfig.node.json b/03_source/mobile.integrated.not_working.del/tsconfig.node.json
deleted file mode 100644
index 9d31e2a..0000000
--- a/03_source/mobile.integrated.not_working.del/tsconfig.node.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "compilerOptions": {
- "composite": true,
- "module": "ESNext",
- "moduleResolution": "Node",
- "allowSyntheticDefaultImports": true
- },
- "include": ["vite.config.ts"]
-}
diff --git a/03_source/mobile.integrated.not_working.del/vercel.json b/03_source/mobile.integrated.not_working.del/vercel.json
deleted file mode 100644
index 6a92648..0000000
--- a/03_source/mobile.integrated.not_working.del/vercel.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "rewrites": [
- { "source": "/(.*)", "destination": "/" }
- ]
-}
diff --git a/03_source/mobile.integrated.not_working.del/vite.config.ts b/03_source/mobile.integrated.not_working.del/vite.config.ts
deleted file mode 100644
index 68a8911..0000000
--- a/03_source/mobile.integrated.not_working.del/vite.config.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import react from '@vitejs/plugin-react'
-import { defineConfig } from 'vite'
-
-// https://vitejs.dev/config/
-export default defineConfig({
- plugins: [react()],
- server: {
- port: 3000
- },
- define: {
- 'process.env': process.env,
- __HMR_CONFIG_NAME__: JSON.stringify('vite')
- },
- css: {
- preprocessorOptions: {
- scss: {
- api: 'modern',
- },
- },
- }
-})
diff --git a/03_source/mobile.integrated.not_working.del/yarn.lock b/03_source/mobile.integrated.not_working.del/yarn.lock
deleted file mode 100644
index f4e3ca6..0000000
--- a/03_source/mobile.integrated.not_working.del/yarn.lock
+++ /dev/null
@@ -1,3483 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@ampproject/remapping@^2.2.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
- integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
- dependencies:
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.24"
-
-"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
- integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
- dependencies:
- "@babel/helper-validator-identifier" "^7.27.1"
- js-tokens "^4.0.0"
- picocolors "^1.1.1"
-
-"@babel/compat-data@^7.27.2":
- version "7.27.2"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9"
- integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==
-
-"@babel/core@^7.26.10":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6"
- integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.27.1"
- "@babel/generator" "^7.27.1"
- "@babel/helper-compilation-targets" "^7.27.1"
- "@babel/helper-module-transforms" "^7.27.1"
- "@babel/helpers" "^7.27.1"
- "@babel/parser" "^7.27.1"
- "@babel/template" "^7.27.1"
- "@babel/traverse" "^7.27.1"
- "@babel/types" "^7.27.1"
- convert-source-map "^2.0.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.3"
- semver "^6.3.1"
-
-"@babel/generator@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230"
- integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==
- dependencies:
- "@babel/parser" "^7.27.1"
- "@babel/types" "^7.27.1"
- "@jridgewell/gen-mapping" "^0.3.5"
- "@jridgewell/trace-mapping" "^0.3.25"
- jsesc "^3.0.2"
-
-"@babel/helper-compilation-targets@^7.27.1":
- version "7.27.2"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d"
- integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
- dependencies:
- "@babel/compat-data" "^7.27.2"
- "@babel/helper-validator-option" "^7.27.1"
- browserslist "^4.24.0"
- lru-cache "^5.1.1"
- semver "^6.3.1"
-
-"@babel/helper-module-imports@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
- integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
- dependencies:
- "@babel/traverse" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/helper-module-transforms@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f"
- integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==
- dependencies:
- "@babel/helper-module-imports" "^7.27.1"
- "@babel/helper-validator-identifier" "^7.27.1"
- "@babel/traverse" "^7.27.1"
-
-"@babel/helper-plugin-utils@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
- integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
-
-"@babel/helper-string-parser@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
- integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
-
-"@babel/helper-validator-identifier@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
- integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
-
-"@babel/helper-validator-option@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
- integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
-
-"@babel/helpers@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4"
- integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==
- dependencies:
- "@babel/template" "^7.27.1"
- "@babel/types" "^7.27.1"
-
-"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.27.1", "@babel/parser@^7.27.2":
- version "7.27.2"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127"
- integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==
- dependencies:
- "@babel/types" "^7.27.1"
-
-"@babel/plugin-transform-react-jsx-self@^7.25.9":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz#af678d8506acf52c577cac73ff7fe6615c85fc92"
- integrity sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/plugin-transform-react-jsx-source@^7.25.9":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz#dcfe2c24094bb757bf73960374e7c55e434f19f0"
- integrity sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.27.1"
-
-"@babel/runtime-corejs3@^7.10.2":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.27.1.tgz#386c7a737dd893da056f6c7972526e827020b47d"
- integrity sha512-909rVuj3phpjW6y0MCXAZ5iNeORePa6ldJvp2baWGcTjwqbBDDz6xoS5JHJ7lS88NlwLYj07ImL/8IUMtDZzTA==
- dependencies:
- core-js-pure "^3.30.2"
-
-"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541"
- integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==
-
-"@babel/template@^7.27.1":
- version "7.27.2"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
- integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
- dependencies:
- "@babel/code-frame" "^7.27.1"
- "@babel/parser" "^7.27.2"
- "@babel/types" "^7.27.1"
-
-"@babel/traverse@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291"
- integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==
- dependencies:
- "@babel/code-frame" "^7.27.1"
- "@babel/generator" "^7.27.1"
- "@babel/parser" "^7.27.1"
- "@babel/template" "^7.27.1"
- "@babel/types" "^7.27.1"
- debug "^4.3.1"
- globals "^11.1.0"
-
-"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1":
- version "7.27.1"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560"
- integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==
- dependencies:
- "@babel/helper-string-parser" "^7.27.1"
- "@babel/helper-validator-identifier" "^7.27.1"
-
-"@capacitor/android@7.0.1":
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/@capacitor/android/-/android-7.0.1.tgz#16c45a305edeb8bcf0b083ea52abcc62ca4e5e70"
- integrity sha512-jukJJHfkcyEBOkFBJRD3EwXMIIQo7lSv0ExPWgsIliPdGXLAj6ElvK2JaYEzec3vKyLc4RTNFVv0PMEU0vnImg==
-
-"@capacitor/camera@*":
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/@capacitor/camera/-/camera-7.0.1.tgz#bcbd1c05cce648fa54b844bf7a6745854cae6ba4"
- integrity sha512-gDUFsYlhMra5VVOa4iJV6+MQRhp3VXpTLQY4JDATj7UvoZ8Hv4DG8qplPL9ufUFNoR3QbDDnf8+gbQOsKdkDjg==
-
-"@capacitor/cli@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@capacitor/cli/-/cli-7.2.0.tgz#ea279f14e575b059edb7fe8dc64a8e3379088616"
- integrity sha512-RNW9vtYYYSDmOdguYBSW0VpRnG/d6lGydlc9DLrJ7qbSPxFrotTz9IjkM48O+SruUma61DyuSqJttdbay2xSxg==
- dependencies:
- "@ionic/cli-framework-output" "^2.2.8"
- "@ionic/utils-subprocess" "^3.0.1"
- "@ionic/utils-terminal" "^2.3.5"
- commander "^12.1.0"
- debug "^4.4.0"
- env-paths "^2.2.0"
- fs-extra "^11.2.0"
- kleur "^4.1.5"
- native-run "^2.0.1"
- open "^8.4.0"
- plist "^3.1.0"
- prompts "^2.4.2"
- rimraf "^6.0.1"
- semver "^7.6.3"
- tar "^6.1.11"
- tslib "^2.8.1"
- xml2js "^0.6.2"
-
-"@capacitor/core@^7.0.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@capacitor/core/-/core-7.2.0.tgz#fdd1c5d2fbfa257887ce6065f66151a51f0e6d1b"
- integrity sha512-2zCnA6RJeZ9ec4470o8QMZEQTWpekw9FNoqm5TLc10jeCrhvHVI8MPgxdZVc3mOdFlyieYu4AS1fNxSqbS57Pw==
- dependencies:
- tslib "^2.1.0"
-
-"@capacitor/ios@7.0.1":
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/@capacitor/ios/-/ios-7.0.1.tgz#f175f74543edc5faa13de927ababfffff450776f"
- integrity sha512-RN6S1C1k7ue57DFmJM4EizzsYBrahTTiMhcnlHspFLaojgHbFWZbYq1VriuRKysPU1ka/P+klsdtRFsB5K9jyw==
-
-"@capacitor/preferences@^7.0.0":
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/@capacitor/preferences/-/preferences-7.0.1.tgz#d1791a94fba8018497839fb7bd0bfa8b636dad6d"
- integrity sha512-XF9jOHzvoIBZLwZr/EX6aVaUO1d8Mx7TwBLQS33pYHOliCW5knT5KUkFOXNNYxh9qqODYesee9xuQIKNJpQBag==
-
-"@esbuild/aix-ppc64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz#830d6476cbbca0c005136af07303646b419f1162"
- integrity sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==
-
-"@esbuild/android-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz#d11d4fc299224e729e2190cacadbcc00e7a9fd67"
- integrity sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==
-
-"@esbuild/android-arm@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.4.tgz#5660bd25080553dd2a28438f2a401a29959bd9b1"
- integrity sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==
-
-"@esbuild/android-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.4.tgz#18ddde705bf984e8cd9efec54e199ac18bc7bee1"
- integrity sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==
-
-"@esbuild/darwin-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz#b0b7fb55db8fc6f5de5a0207ae986eb9c4766e67"
- integrity sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==
-
-"@esbuild/darwin-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz#e6813fdeba0bba356cb350a4b80543fbe66bf26f"
- integrity sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==
-
-"@esbuild/freebsd-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz#dc11a73d3ccdc308567b908b43c6698e850759be"
- integrity sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==
-
-"@esbuild/freebsd-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz#91da08db8bd1bff5f31924c57a81dab26e93a143"
- integrity sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==
-
-"@esbuild/linux-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz#efc15e45c945a082708f9a9f73bfa8d4db49728a"
- integrity sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==
-
-"@esbuild/linux-arm@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz#9b93c3e54ac49a2ede6f906e705d5d906f6db9e8"
- integrity sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==
-
-"@esbuild/linux-ia32@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz#be8ef2c3e1d99fca2d25c416b297d00360623596"
- integrity sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==
-
-"@esbuild/linux-loong64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz#b0840a2707c3fc02eec288d3f9defa3827cd7a87"
- integrity sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==
-
-"@esbuild/linux-mips64el@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz#2a198e5a458c9f0e75881a4e63d26ba0cf9df39f"
- integrity sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==
-
-"@esbuild/linux-ppc64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz#64f4ae0b923d7dd72fb860b9b22edb42007cf8f5"
- integrity sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==
-
-"@esbuild/linux-riscv64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz#fb2844b11fdddd39e29d291c7cf80f99b0d5158d"
- integrity sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==
-
-"@esbuild/linux-s390x@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz#1466876e0aa3560c7673e63fdebc8278707bc750"
- integrity sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==
-
-"@esbuild/linux-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz#c10fde899455db7cba5f11b3bccfa0e41bf4d0cd"
- integrity sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==
-
-"@esbuild/netbsd-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz#02e483fbcbe3f18f0b02612a941b77be76c111a4"
- integrity sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==
-
-"@esbuild/netbsd-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz#ec401fb0b1ed0ac01d978564c5fc8634ed1dc2ed"
- integrity sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==
-
-"@esbuild/openbsd-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz#f272c2f41cfea1d91b93d487a51b5c5ca7a8c8c4"
- integrity sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==
-
-"@esbuild/openbsd-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz#2e25950bc10fa9db1e5c868e3d50c44f7c150fd7"
- integrity sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==
-
-"@esbuild/sunos-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz#cd596fa65a67b3b7adc5ecd52d9f5733832e1abd"
- integrity sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==
-
-"@esbuild/win32-arm64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz#b4dbcb57b21eeaf8331e424c3999b89d8951dc88"
- integrity sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==
-
-"@esbuild/win32-ia32@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz#410842e5d66d4ece1757634e297a87635eb82f7a"
- integrity sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==
-
-"@esbuild/win32-x64@0.25.4":
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz#0b17ec8a70b2385827d52314c1253160a0b9bacc"
- integrity sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==
-
-"@ionic/cli-framework-output@^2.2.8":
- version "2.2.8"
- resolved "https://registry.yarnpkg.com/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz#29d541acc7773a6aaceec5f3b079937fbcef5402"
- integrity sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==
- dependencies:
- "@ionic/utils-terminal" "2.3.5"
- debug "^4.0.0"
- tslib "^2.0.1"
-
-"@ionic/core@8.5.7":
- version "8.5.7"
- resolved "https://registry.yarnpkg.com/@ionic/core/-/core-8.5.7.tgz#7297c88035f0372225b052db5426b4e1788b3b42"
- integrity sha512-V5ZRYXD1MgAPdjfLyOejILAdTqIzpMY7/v6GSynFPPWoEpfFbGe/tNsimrYm1/D8iouigYLkJjWSeg2rpIpESA==
- dependencies:
- "@stencil/core" "4.20.0"
- ionicons "^7.2.2"
- tslib "^2.1.0"
-
-"@ionic/pwa-elements@^3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@ionic/pwa-elements/-/pwa-elements-3.3.0.tgz#971c806ebe410c677740f9e4b32bbf26ac29bb93"
- integrity sha512-vbykpxd2nGRlA67AnqDwsiVf8PUmInLyi6lQdnPDjeiML1WZa0CPe6r632nGDV9PTi+sWNde9Xexg9SD6Pwyqw==
-
-"@ionic/react-router@^8.5.0":
- version "8.5.7"
- resolved "https://registry.yarnpkg.com/@ionic/react-router/-/react-router-8.5.7.tgz#e3533505eec53ae76aa2856bf187919edaf8c869"
- integrity sha512-REEnLRIWh23DnqTugNT7VIO2D49GtmSHvxOmmTmaFTjhMXQ1ilzM35oh+Fr2pWU5NmCqD8am+RLfITQhIJI1hA==
- dependencies:
- "@ionic/react" "8.5.7"
- tslib "*"
-
-"@ionic/react@8.5.7", "@ionic/react@^8.5.0":
- version "8.5.7"
- resolved "https://registry.yarnpkg.com/@ionic/react/-/react-8.5.7.tgz#ad09cb3d1189e6f3cc52156fd56216655dd8d5e3"
- integrity sha512-AgX4iu6SfuBhNgYr0H+K3oGsp7ESkCsnaqZdHRO2+GtKTmo4akMrFPihGj4LrZB/IaYwcvYQR/bPWHuZGJYsnw==
- dependencies:
- "@ionic/core" "8.5.7"
- ionicons "^7.0.0"
- tslib "*"
-
-"@ionic/utils-array@2.1.6":
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/@ionic/utils-array/-/utils-array-2.1.6.tgz#eee863be945ee1a28b9a10ff16fdea776fa18c22"
- integrity sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==
- dependencies:
- debug "^4.0.0"
- tslib "^2.0.1"
-
-"@ionic/utils-fs@3.1.7", "@ionic/utils-fs@^3.1.7":
- version "3.1.7"
- resolved "https://registry.yarnpkg.com/@ionic/utils-fs/-/utils-fs-3.1.7.tgz#e0d41225272c346846867e88a0b84b1a4ee9d9c9"
- integrity sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==
- dependencies:
- "@types/fs-extra" "^8.0.0"
- debug "^4.0.0"
- fs-extra "^9.0.0"
- tslib "^2.0.1"
-
-"@ionic/utils-object@2.1.6":
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/@ionic/utils-object/-/utils-object-2.1.6.tgz#c0259bf925b6c12663d06f6bc1703e5dcb565e6d"
- integrity sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==
- dependencies:
- debug "^4.0.0"
- tslib "^2.0.1"
-
-"@ionic/utils-process@2.1.12":
- version "2.1.12"
- resolved "https://registry.yarnpkg.com/@ionic/utils-process/-/utils-process-2.1.12.tgz#17b05d66201859fe11f53b47be22b85aa90b9556"
- integrity sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==
- dependencies:
- "@ionic/utils-object" "2.1.6"
- "@ionic/utils-terminal" "2.3.5"
- debug "^4.0.0"
- signal-exit "^3.0.3"
- tree-kill "^1.2.2"
- tslib "^2.0.1"
-
-"@ionic/utils-stream@3.1.7":
- version "3.1.7"
- resolved "https://registry.yarnpkg.com/@ionic/utils-stream/-/utils-stream-3.1.7.tgz#224f8c99012aa54e7dbf59950de903b6a61cd811"
- integrity sha512-eSELBE7NWNFIHTbTC2jiMvh1ABKGIpGdUIvARsNPMNQhxJB3wpwdiVnoBoTYp+5a6UUIww4Kpg7v6S7iTctH1w==
- dependencies:
- debug "^4.0.0"
- tslib "^2.0.1"
-
-"@ionic/utils-subprocess@^3.0.1":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@ionic/utils-subprocess/-/utils-subprocess-3.0.1.tgz#561608fecf432c28fd80f94c1563dc0d092581b7"
- integrity sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==
- dependencies:
- "@ionic/utils-array" "2.1.6"
- "@ionic/utils-fs" "3.1.7"
- "@ionic/utils-process" "2.1.12"
- "@ionic/utils-stream" "3.1.7"
- "@ionic/utils-terminal" "2.3.5"
- cross-spawn "^7.0.3"
- debug "^4.0.0"
- tslib "^2.0.1"
-
-"@ionic/utils-terminal@2.3.5", "@ionic/utils-terminal@^2.3.4", "@ionic/utils-terminal@^2.3.5":
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz#a48465f40496ee8f29c6d92e4506d5f19762ac3c"
- integrity sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==
- dependencies:
- "@types/slice-ansi" "^4.0.0"
- debug "^4.0.0"
- signal-exit "^3.0.3"
- slice-ansi "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
- tslib "^2.0.1"
- untildify "^4.0.0"
- wrap-ansi "^7.0.0"
-
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
- dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-
-"@jest/schemas@^29.6.3":
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
- integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
- dependencies:
- "@sinclair/typebox" "^0.27.8"
-
-"@jest/types@^24.9.0":
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
- integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^1.1.1"
- "@types/yargs" "^13.0.0"
-
-"@jest/types@^25.5.0":
- version "25.5.0"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
- integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^1.1.1"
- "@types/yargs" "^15.0.0"
- chalk "^3.0.0"
-
-"@jridgewell/gen-mapping@^0.3.5":
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
- integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
- dependencies:
- "@jridgewell/set-array" "^1.2.1"
- "@jridgewell/sourcemap-codec" "^1.4.10"
- "@jridgewell/trace-mapping" "^0.3.24"
-
-"@jridgewell/resolve-uri@^3.1.0":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
- integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
-
-"@jridgewell/set-array@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
- integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
-
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
- integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
-
-"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
- version "0.3.25"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
- integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
- dependencies:
- "@jridgewell/resolve-uri" "^3.1.0"
- "@jridgewell/sourcemap-codec" "^1.4.14"
-
-"@parcel/watcher-android-arm64@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
- integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==
-
-"@parcel/watcher-darwin-arm64@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67"
- integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==
-
-"@parcel/watcher-darwin-x64@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8"
- integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==
-
-"@parcel/watcher-freebsd-x64@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b"
- integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==
-
-"@parcel/watcher-linux-arm-glibc@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1"
- integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==
-
-"@parcel/watcher-linux-arm-musl@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e"
- integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==
-
-"@parcel/watcher-linux-arm64-glibc@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30"
- integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==
-
-"@parcel/watcher-linux-arm64-musl@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2"
- integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==
-
-"@parcel/watcher-linux-x64-glibc@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e"
- integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==
-
-"@parcel/watcher-linux-x64-musl@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee"
- integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==
-
-"@parcel/watcher-win32-arm64@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243"
- integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==
-
-"@parcel/watcher-win32-ia32@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6"
- integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==
-
-"@parcel/watcher-win32-x64@2.5.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947"
- integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==
-
-"@parcel/watcher@^2.4.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200"
- integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==
- dependencies:
- detect-libc "^1.0.3"
- is-glob "^4.0.3"
- micromatch "^4.0.5"
- node-addon-api "^7.0.0"
- optionalDependencies:
- "@parcel/watcher-android-arm64" "2.5.1"
- "@parcel/watcher-darwin-arm64" "2.5.1"
- "@parcel/watcher-darwin-x64" "2.5.1"
- "@parcel/watcher-freebsd-x64" "2.5.1"
- "@parcel/watcher-linux-arm-glibc" "2.5.1"
- "@parcel/watcher-linux-arm-musl" "2.5.1"
- "@parcel/watcher-linux-arm64-glibc" "2.5.1"
- "@parcel/watcher-linux-arm64-musl" "2.5.1"
- "@parcel/watcher-linux-x64-glibc" "2.5.1"
- "@parcel/watcher-linux-x64-musl" "2.5.1"
- "@parcel/watcher-win32-arm64" "2.5.1"
- "@parcel/watcher-win32-ia32" "2.5.1"
- "@parcel/watcher-win32-x64" "2.5.1"
-
-"@react-leaflet/core@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@react-leaflet/core/-/core-3.0.0.tgz#34ccc280ce7d8ac5c09f2b3d5fffded450bdf1a2"
- integrity sha512-3EWmekh4Nz+pGcr+xjf0KNyYfC3U2JjnkWsh0zcqaexYqmmB5ZhH37kz41JXGmKzpaMZCnPofBBm64i+YrEvGQ==
-
-"@rolldown/pluginutils@1.0.0-beta.9":
- version "1.0.0-beta.9"
- resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz#68ef9fff5a9791a642cea0dc4380ce6cb487a84a"
- integrity sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==
-
-"@rollup/rollup-android-arm-eabi@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz#f39f09f60d4a562de727c960d7b202a2cf797424"
- integrity sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==
-
-"@rollup/rollup-android-arm64@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz#d19af7e23760717f1d879d4ca3d2cd247742dff2"
- integrity sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==
-
-"@rollup/rollup-darwin-arm64@4.34.9":
- version "4.34.9"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz#363467bc49fd0b1e17075798ac8e9ad1e1e29535"
- integrity sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==
-
-"@rollup/rollup-darwin-arm64@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz#1c3a2fbf205d80641728e05f4a56c909e95218b7"
- integrity sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==
-
-"@rollup/rollup-darwin-x64@4.34.9":
- version "4.34.9"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz#c2fe3d85fffe47f0ed0f076b3563ada22c8af19c"
- integrity sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==
-
-"@rollup/rollup-darwin-x64@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz#aa66d2ba1a25e609500e13bef06dc0e71cc0c0d4"
- integrity sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==
-
-"@rollup/rollup-freebsd-arm64@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz#df10a7b6316a0ef1028c6ca71a081124c537e30d"
- integrity sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==
-
-"@rollup/rollup-freebsd-x64@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz#a3fdce8a05e95b068cbcb46e4df5185e407d0c35"
- integrity sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==
-
-"@rollup/rollup-linux-arm-gnueabihf@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz#49f766c55383bd0498014a9d76924348c2f3890c"
- integrity sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==
-
-"@rollup/rollup-linux-arm-musleabihf@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz#1d4d7d32fc557e17d52e1857817381ea365e2959"
- integrity sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==
-
-"@rollup/rollup-linux-arm64-gnu@4.34.9":
- version "4.34.9"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz#1015c9d07a99005025d13b8622b7600029d0b52f"
- integrity sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==
-
-"@rollup/rollup-linux-arm64-gnu@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz#f4fc317268441e9589edad3be8f62b6c03009bc1"
- integrity sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==
-
-"@rollup/rollup-linux-arm64-musl@4.34.9":
- version "4.34.9"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz#8f895eb5577748fc75af21beae32439626e0a14c"
- integrity sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==
-
-"@rollup/rollup-linux-arm64-musl@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz#63a1f1b0671cb17822dabae827fef0e443aebeb7"
- integrity sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==
-
-"@rollup/rollup-linux-loongarch64-gnu@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz#c659b01cc6c0730b547571fc3973e1e955369f98"
- integrity sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==
-
-"@rollup/rollup-linux-powerpc64le-gnu@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz#612e746f9ad7e58480f964d65e0d6c3f4aae69a8"
- integrity sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==
-
-"@rollup/rollup-linux-riscv64-gnu@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz#4610dbd1dcfbbae32fbc10c20ae7387acb31110c"
- integrity sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==
-
-"@rollup/rollup-linux-riscv64-musl@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz#054911fab40dc83fafc21e470193c058108f19d8"
- integrity sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==
-
-"@rollup/rollup-linux-s390x-gnu@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz#98896eca8012547c7f04bd07eaa6896825f9e1a5"
- integrity sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==
-
-"@rollup/rollup-linux-x64-gnu@4.34.9":
- version "4.34.9"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz#7193cbd8d128212b8acda37e01b39d9e96259ef8"
- integrity sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==
-
-"@rollup/rollup-linux-x64-gnu@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz#01cf56844a1e636ee80dfb364e72c2b7142ad896"
- integrity sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==
-
-"@rollup/rollup-linux-x64-musl@4.34.9":
- version "4.34.9"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz#29a6867278ca0420b891574cfab98ecad70c59d1"
- integrity sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==
-
-"@rollup/rollup-linux-x64-musl@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz#e67c7531df6dff0b4c241101d4096617fbca87c3"
- integrity sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==
-
-"@rollup/rollup-win32-arm64-msvc@4.34.9":
- version "4.34.9"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz#89427dcac0c8e3a6d32b13a03a296a275d0de9a9"
- integrity sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==
-
-"@rollup/rollup-win32-arm64-msvc@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz#7eeada98444e580674de6989284e4baacd48ea65"
- integrity sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==
-
-"@rollup/rollup-win32-ia32-msvc@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz#516c4b54f80587b4a390aaf4940b40870271d35d"
- integrity sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==
-
-"@rollup/rollup-win32-x64-msvc@4.34.9":
- version "4.34.9"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz#1973871850856ae72bc678aeb066ab952330e923"
- integrity sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==
-
-"@rollup/rollup-win32-x64-msvc@4.41.1":
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz#848f99b0d9936d92221bb6070baeff4db6947a30"
- integrity sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==
-
-"@sheerun/mutationobserver-shim@^0.3.2":
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#5405ee8e444ed212db44e79351f0c70a582aae25"
- integrity sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw==
-
-"@sinclair/typebox@^0.27.8":
- version "0.27.8"
- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
- integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
-
-"@stencil/core@4.20.0":
- version "4.20.0"
- resolved "https://registry.yarnpkg.com/@stencil/core/-/core-4.20.0.tgz#221f2b36ab999891560449b02d6915862c435f49"
- integrity sha512-WPrTHFngvN081RY+dJPneKQLwnOFD60OMCOQGmmSHfCW0f4ujPMzzhwWU1gcSwXPWXz5O+8cBiiCaxAbJU7kAg==
-
-"@stencil/core@^4.0.3":
- version "4.31.0"
- resolved "https://registry.yarnpkg.com/@stencil/core/-/core-4.31.0.tgz#57c5da8e46d9ad51406e7f542dcb2048be4f25d4"
- integrity sha512-Ei9MFJ6LPD9BMFs+klkHylbVOOYhG10Jv4bvoFf3GMH15kA41rSYkEdr4DiX84ZdErQE2qtFV/2SUyWoXh0AhA==
- optionalDependencies:
- "@rollup/rollup-darwin-arm64" "4.34.9"
- "@rollup/rollup-darwin-x64" "4.34.9"
- "@rollup/rollup-linux-arm64-gnu" "4.34.9"
- "@rollup/rollup-linux-arm64-musl" "4.34.9"
- "@rollup/rollup-linux-x64-gnu" "4.34.9"
- "@rollup/rollup-linux-x64-musl" "4.34.9"
- "@rollup/rollup-win32-arm64-msvc" "4.34.9"
- "@rollup/rollup-win32-x64-msvc" "4.34.9"
-
-"@testing-library/dom@*":
- version "10.4.0"
- resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8"
- integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==
- dependencies:
- "@babel/code-frame" "^7.10.4"
- "@babel/runtime" "^7.12.5"
- "@types/aria-query" "^5.0.1"
- aria-query "5.3.0"
- chalk "^4.1.0"
- dom-accessibility-api "^0.5.9"
- lz-string "^1.5.0"
- pretty-format "^27.0.2"
-
-"@testing-library/dom@^6.15.0":
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.16.0.tgz#04ada27ed74ad4c0f0d984a1245bb29b1fd90ba9"
- integrity sha512-lBD88ssxqEfz0wFL6MeUyyWZfV/2cjEZZV3YRpb2IoJRej/4f1jB0TzqIOznTpfR1r34CNesrubxwIlAQ8zgPA==
- dependencies:
- "@babel/runtime" "^7.8.4"
- "@sheerun/mutationobserver-shim" "^0.3.2"
- "@types/testing-library__dom" "^6.12.1"
- aria-query "^4.0.2"
- dom-accessibility-api "^0.3.0"
- pretty-format "^25.1.0"
- wait-for-expect "^3.0.2"
-
-"@testing-library/react@^9.3.1":
- version "9.5.0"
- resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.5.0.tgz#71531655a7890b61e77a1b39452fbedf0472ca5e"
- integrity sha512-di1b+D0p+rfeboHO5W7gTVeZDIK5+maEgstrZbWZSSvxDyfDRkkyBE1AJR5Psd6doNldluXlCWqXriUfqu/9Qg==
- dependencies:
- "@babel/runtime" "^7.8.4"
- "@testing-library/dom" "^6.15.0"
- "@types/testing-library__react" "^9.1.2"
-
-"@types/aria-query@^5.0.1":
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708"
- integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==
-
-"@types/babel__core@^7.20.5":
- version "7.20.5"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
- integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
- dependencies:
- "@babel/parser" "^7.20.7"
- "@babel/types" "^7.20.7"
- "@types/babel__generator" "*"
- "@types/babel__template" "*"
- "@types/babel__traverse" "*"
-
-"@types/babel__generator@*":
- version "7.27.0"
- resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9"
- integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==
- dependencies:
- "@babel/types" "^7.0.0"
-
-"@types/babel__template@*":
- version "7.4.4"
- resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
- integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
- dependencies:
- "@babel/parser" "^7.1.0"
- "@babel/types" "^7.0.0"
-
-"@types/babel__traverse@*":
- version "7.20.7"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2"
- integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==
- dependencies:
- "@babel/types" "^7.20.7"
-
-"@types/debug@^4.0.0":
- version "4.1.12"
- resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917"
- integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==
- dependencies:
- "@types/ms" "*"
-
-"@types/estree-jsx@^1.0.0":
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18"
- integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==
- dependencies:
- "@types/estree" "*"
-
-"@types/estree@*", "@types/estree@1.0.7", "@types/estree@^1.0.0":
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8"
- integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==
-
-"@types/fs-extra@^8.0.0":
- version "8.1.5"
- resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.5.tgz#33aae2962d3b3ec9219b5aca2555ee00274f5927"
- integrity sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==
- dependencies:
- "@types/node" "*"
-
-"@types/geojson@*":
- version "7946.0.16"
- resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a"
- integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==
-
-"@types/googlemaps@^3.38.0":
- version "3.43.3"
- resolved "https://registry.yarnpkg.com/@types/googlemaps/-/googlemaps-3.43.3.tgz#70cf962154a160fe78bcd69d6ccc296dd9175b1f"
- integrity sha512-ZWNoz/O8MPEpiajvj7QiqCY8tTLFNqNZ/a+s+zTV58wFVNAvvqV4bdGfnsjTb5Cs4V6wEsLrX8XRhmnyYJ2Tdg==
-
-"@types/hast@^3.0.0":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa"
- integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==
- dependencies:
- "@types/unist" "*"
-
-"@types/history@^4.7.11":
- version "4.7.11"
- resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64"
- integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==
-
-"@types/hoist-non-react-statics@^3.3.0":
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz#6bba74383cdab98e8db4e20ce5b4a6b98caed010"
- integrity sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==
- dependencies:
- "@types/react" "*"
- hoist-non-react-statics "^3.3.0"
-
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
- integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
-
-"@types/istanbul-lib-report@*":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf"
- integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
- dependencies:
- "@types/istanbul-lib-coverage" "*"
-
-"@types/istanbul-reports@^1.1.1":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
- integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
- dependencies:
- "@types/istanbul-lib-coverage" "*"
- "@types/istanbul-lib-report" "*"
-
-"@types/jest-diff@*":
- version "24.3.0"
- resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-24.3.0.tgz#29e237a3d954babfe6e23cc59b57ecd8ca8d858d"
- integrity sha512-vx1CRDeDUwQ0Pc7v+hS61O1ETA81kD04IMEC0hS1kPyVtHDdZrokAvpF7MT9VI/fVSzicelUZNCepDvhRV1PeA==
- dependencies:
- jest-diff "*"
-
-"@types/jest@24.0.18":
- version "24.0.18"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498"
- integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ==
- dependencies:
- "@types/jest-diff" "*"
-
-"@types/js-cookie@^2.2.6":
- version "2.2.7"
- resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3"
- integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==
-
-"@types/leaflet@^1.9.17":
- version "1.9.18"
- resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-1.9.18.tgz#8c295912419a9df21917b4380310f66e19c46cab"
- integrity sha512-ht2vsoPjezor5Pmzi5hdsA7F++v5UGq9OlUduWHmMZiuQGIpJ2WS5+Gg9HaAA79gNh1AIPtCqhzejcIZ3lPzXQ==
- dependencies:
- "@types/geojson" "*"
-
-"@types/mdast@^4.0.0":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6"
- integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==
- dependencies:
- "@types/unist" "*"
-
-"@types/ms@*":
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78"
- integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
-
-"@types/node@*":
- version "22.15.21"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.21.tgz#196ef14fe20d87f7caf1e7b39832767f9a995b77"
- integrity sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==
- dependencies:
- undici-types "~6.21.0"
-
-"@types/node@20.11.5":
- version "20.11.5"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.5.tgz#be10c622ca7fcaa3cf226cf80166abc31389d86e"
- integrity sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==
- dependencies:
- undici-types "~5.26.4"
-
-"@types/react-dom@*":
- version "19.1.5"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.1.5.tgz#cdfe2c663742887372f54804b16e8dbc26bd794a"
- integrity sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==
-
-"@types/react-dom@19.0.4":
- version "19.0.4"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.4.tgz#bedba97f9346bd4c0fe5d39e689713804ec9ac89"
- integrity sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==
-
-"@types/react-redux@^7.1.34":
- version "7.1.34"
- resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.34.tgz#83613e1957c481521e6776beeac4fd506d11bd0e"
- integrity sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==
- dependencies:
- "@types/hoist-non-react-statics" "^3.3.0"
- "@types/react" "*"
- hoist-non-react-statics "^3.3.0"
- redux "^4.0.0"
-
-"@types/react-router-dom@^5.3.3":
- version "5.3.3"
- resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83"
- integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==
- dependencies:
- "@types/history" "^4.7.11"
- "@types/react" "*"
- "@types/react-router" "*"
-
-"@types/react-router@*", "@types/react-router@^5.1.20":
- version "5.1.20"
- resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c"
- integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==
- dependencies:
- "@types/history" "^4.7.11"
- "@types/react" "*"
-
-"@types/react@*":
- version "19.1.5"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.5.tgz#9feb3bdeb506d0c79d8533b6ebdcacdbcb4756db"
- integrity sha512-piErsCVVbpMMT2r7wbawdZsq4xMvIAhQuac2gedQHysu1TZYEigE6pnFfgZT+/jQnrRuF5r+SHzuehFjfRjr4g==
- dependencies:
- csstype "^3.0.2"
-
-"@types/react@19.0.10":
- version "19.0.10"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.10.tgz#d0c66dafd862474190fe95ce11a68de69ed2b0eb"
- integrity sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==
- dependencies:
- csstype "^3.0.2"
-
-"@types/slice-ansi@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@types/slice-ansi/-/slice-ansi-4.0.0.tgz#eb40dfbe3ac5c1de61f6bcb9ed471f54baa989d6"
- integrity sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==
-
-"@types/testing-library__dom@*":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-7.5.0.tgz#e0a00dd766983b1d6e9d10d33e708005ce6ad13e"
- integrity sha512-mj1aH4cj3XUpMEgVpognma5kHVtbm6U6cHZmEFzCRiXPvKkuHrFr3+yXdGLXvfFRBaQIVshPGHI+hGTOJlhS/g==
- dependencies:
- "@testing-library/dom" "*"
-
-"@types/testing-library__dom@^6.12.1":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.14.0.tgz#1aede831cb4ed4a398448df5a2c54b54a365644e"
- integrity sha512-sMl7OSv0AvMOqn1UJ6j1unPMIHRXen0Ita1ujnMX912rrOcawe4f7wu0Zt9GIQhBhJvH2BaibqFgQ3lP+Pj2hA==
- dependencies:
- pretty-format "^24.3.0"
-
-"@types/testing-library__react@^9.1.2":
- version "9.1.3"
- resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.3.tgz#35eca61cc6ea923543796f16034882a1603d7302"
- integrity sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w==
- dependencies:
- "@types/react-dom" "*"
- "@types/testing-library__dom" "*"
- pretty-format "^25.1.0"
-
-"@types/unist@*", "@types/unist@^3.0.0":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c"
- integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==
-
-"@types/unist@^2.0.0":
- version "2.0.11"
- resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4"
- integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
-
-"@types/use-sync-external-store@^0.0.6":
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc"
- integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==
-
-"@types/yargs-parser@*":
- version "21.0.3"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
- integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
-
-"@types/yargs@^13.0.0":
- version "13.0.12"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092"
- integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==
- dependencies:
- "@types/yargs-parser" "*"
-
-"@types/yargs@^15.0.0":
- version "15.0.19"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9"
- integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==
- dependencies:
- "@types/yargs-parser" "*"
-
-"@ungap/structured-clone@^1.0.0":
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
- integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
-
-"@vitejs/plugin-react@^4.3.4":
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.5.0.tgz#ef2bad6be3031af2b2105b7ab2754f710e890a32"
- integrity sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==
- dependencies:
- "@babel/core" "^7.26.10"
- "@babel/plugin-transform-react-jsx-self" "^7.25.9"
- "@babel/plugin-transform-react-jsx-source" "^7.25.9"
- "@rolldown/pluginutils" "1.0.0-beta.9"
- "@types/babel__core" "^7.20.5"
- react-refresh "^0.17.0"
-
-"@xmldom/xmldom@^0.8.8":
- version "0.8.10"
- resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
- integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
-
-"@xobotyi/scrollbar-width@^1.9.5":
- version "1.9.5"
- resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d"
- integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==
-
-ansi-escapes@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6"
- integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==
- dependencies:
- type-fest "^1.0.2"
-
-ansi-regex@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
- integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
-
-ansi-regex@^5.0.0, ansi-regex@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
- integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-regex@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
- integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
-
-ansi-styles@^3.2.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-styles@^4.0.0, ansi-styles@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
- dependencies:
- color-convert "^2.0.1"
-
-ansi-styles@^5.0.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
- integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-
-ansi-styles@^6.0.0, ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
-aria-query@5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
- integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
- dependencies:
- dequal "^2.0.3"
-
-aria-query@^4.0.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
- integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
- dependencies:
- "@babel/runtime" "^7.10.2"
- "@babel/runtime-corejs3" "^7.10.2"
-
-astral-regex@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
- integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
-
-at-least-node@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
- integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
-
-bail@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d"
- integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-base64-js@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
-big-integer@1.6.x:
- version "1.6.52"
- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
- integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
-
-bplist-parser@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.2.tgz#3ac79d67ec52c4c107893e0237eb787cbacbced7"
- integrity sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==
- dependencies:
- big-integer "1.6.x"
-
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
- dependencies:
- balanced-match "^1.0.0"
-
-braces@^3.0.2, braces@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
- integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
- dependencies:
- fill-range "^7.1.1"
-
-browserslist@^4.24.0:
- version "4.24.5"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b"
- integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==
- dependencies:
- caniuse-lite "^1.0.30001716"
- electron-to-chromium "^1.5.149"
- node-releases "^2.0.19"
- update-browserslist-db "^1.1.3"
-
-buffer-crc32@~0.2.3:
- version "0.2.13"
- resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
- integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
-
-caniuse-lite@^1.0.30001716:
- version "1.0.30001718"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz#dae13a9c80d517c30c6197515a96131c194d8f82"
- integrity sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==
-
-ccount@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
- integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
-
-chalk@5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
- integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
-
-chalk@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
- integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-chalk@^4.0.0, chalk@^4.1.0:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-character-entities-html4@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b"
- integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==
-
-character-entities-legacy@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b"
- integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==
-
-character-entities@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22"
- integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==
-
-character-reference-invalid@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9"
- integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==
-
-chokidar@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
- integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
- dependencies:
- readdirp "^4.0.1"
-
-chownr@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
- integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
-
-cli-cursor@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea"
- integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==
- dependencies:
- restore-cursor "^4.0.0"
-
-cli-truncate@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389"
- integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==
- dependencies:
- slice-ansi "^5.0.0"
- string-width "^5.0.0"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-convert@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
- dependencies:
- color-name "~1.1.4"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
-color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-colorette@^2.0.20:
- version "2.0.20"
- resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
- integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
-
-comma-separated-tokens@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
- integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
-
-commander@11.0.0:
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67"
- integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==
-
-commander@^12.1.0:
- version "12.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
- integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==
-
-convert-source-map@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
- integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
-
-copy-to-clipboard@^3.3.1:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
- integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==
- dependencies:
- toggle-selection "^1.0.6"
-
-core-js-pure@^3.30.2:
- version "3.42.0"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.42.0.tgz#e86c45a7f3bdcb608823e872f73d1ad9ddf0531d"
- integrity sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==
-
-cross-spawn@^7.0.3, cross-spawn@^7.0.6:
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
- integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
-css-in-js-utils@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz#640ae6a33646d401fc720c54fc61c42cd76ae2bb"
- integrity sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==
- dependencies:
- hyphenate-style-name "^1.0.3"
-
-css-tree@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
- integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
- dependencies:
- mdn-data "2.0.14"
- source-map "^0.6.1"
-
-csstype@^3.0.2, csstype@^3.1.2:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
- integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
-
-date-fns@^2.25.0:
- version "2.30.0"
- resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
- integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==
- dependencies:
- "@babel/runtime" "^7.21.0"
-
-dayjs@^1.11.13:
- version "1.11.13"
- resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
- integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
-
-debug@4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
- dependencies:
- ms "2.1.2"
-
-debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.4, debug@^4.4.0:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
- integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
- dependencies:
- ms "^2.1.3"
-
-decode-named-character-reference@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz#5d6ce68792808901210dac42a8e9853511e2b8bf"
- integrity sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==
- dependencies:
- character-entities "^2.0.0"
-
-define-lazy-prop@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
- integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-
-dequal@^2.0.0, dequal@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
- integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
-
-detect-libc@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
- integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
-
-devlop@^1.0.0, devlop@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018"
- integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==
- dependencies:
- dequal "^2.0.0"
-
-diff-sequences@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
- integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
-
-dom-accessibility-api@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.3.0.tgz#511e5993dd673b97c87ea47dba0e3892f7e0c983"
- integrity sha512-PzwHEmsRP3IGY4gv/Ug+rMeaTIyTJvadCb+ujYXYeIylbHJezIyNToe8KfEgHTCEYyC+/bUghYOGg8yMGlZ6vA==
-
-dom-accessibility-api@^0.5.9:
- version "0.5.16"
- resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453"
- integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==
-
-eastasianwidth@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
- integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
-electron-to-chromium@^1.5.149:
- version "1.5.157"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.157.tgz#553b122522ac7bba6f1a0dd7d50b14f297736f75"
- integrity sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==
-
-elementtree@^0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.7.tgz#9ac91be6e52fb6e6244c4e54a4ac3ed8ae8e29c0"
- integrity sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==
- dependencies:
- sax "1.1.4"
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
-env-paths@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
- integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
-
-error-stack-parser@^2.0.6:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
- integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==
- dependencies:
- stackframe "^1.3.4"
-
-esbuild@^0.25.0:
- version "0.25.4"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.4.tgz#bb9a16334d4ef2c33c7301a924b8b863351a0854"
- integrity sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==
- optionalDependencies:
- "@esbuild/aix-ppc64" "0.25.4"
- "@esbuild/android-arm" "0.25.4"
- "@esbuild/android-arm64" "0.25.4"
- "@esbuild/android-x64" "0.25.4"
- "@esbuild/darwin-arm64" "0.25.4"
- "@esbuild/darwin-x64" "0.25.4"
- "@esbuild/freebsd-arm64" "0.25.4"
- "@esbuild/freebsd-x64" "0.25.4"
- "@esbuild/linux-arm" "0.25.4"
- "@esbuild/linux-arm64" "0.25.4"
- "@esbuild/linux-ia32" "0.25.4"
- "@esbuild/linux-loong64" "0.25.4"
- "@esbuild/linux-mips64el" "0.25.4"
- "@esbuild/linux-ppc64" "0.25.4"
- "@esbuild/linux-riscv64" "0.25.4"
- "@esbuild/linux-s390x" "0.25.4"
- "@esbuild/linux-x64" "0.25.4"
- "@esbuild/netbsd-arm64" "0.25.4"
- "@esbuild/netbsd-x64" "0.25.4"
- "@esbuild/openbsd-arm64" "0.25.4"
- "@esbuild/openbsd-x64" "0.25.4"
- "@esbuild/sunos-x64" "0.25.4"
- "@esbuild/win32-arm64" "0.25.4"
- "@esbuild/win32-ia32" "0.25.4"
- "@esbuild/win32-x64" "0.25.4"
-
-escalade@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
- integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
-
-estree-util-is-identifier-name@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd"
- integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==
-
-eventemitter3@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
- integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
-
-execa@7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9"
- integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.1"
- human-signals "^4.3.0"
- is-stream "^3.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^5.1.0"
- onetime "^6.0.0"
- signal-exit "^3.0.7"
- strip-final-newline "^3.0.0"
-
-extend@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
- integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-fast-deep-equal@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
- integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-
-fast-shallow-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b"
- integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==
-
-fastest-stable-stringify@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76"
- integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==
-
-fd-slicer@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
- integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
- dependencies:
- pend "~1.2.0"
-
-fdir@^6.4.4:
- version "6.4.4"
- resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.4.tgz#1cfcf86f875a883e19a8fab53622cfe992e8d2f9"
- integrity sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==
-
-fill-range@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
- integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
- dependencies:
- to-regex-range "^5.0.1"
-
-foreground-child@^3.1.0:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f"
- integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==
- dependencies:
- cross-spawn "^7.0.6"
- signal-exit "^4.0.1"
-
-fs-extra@^11.2.0:
- version "11.3.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d"
- integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
-fs-extra@^9.0.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
- integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
- dependencies:
- at-least-node "^1.0.0"
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
-fs-minipass@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
- integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
- dependencies:
- minipass "^3.0.0"
-
-fsevents@~2.3.2, fsevents@~2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
- integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-
-gensync@^1.0.0-beta.2:
- version "1.0.0-beta.2"
- resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
- integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-
-get-stream@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
- integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
-glob@^11.0.0:
- version "11.0.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.2.tgz#3261e3897bbc603030b041fd77ba636022d51ce0"
- integrity sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^4.0.1"
- minimatch "^10.0.0"
- minipass "^7.1.2"
- package-json-from-dist "^1.0.0"
- path-scurry "^2.0.0"
-
-globals@^11.1.0:
- version "11.12.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
- integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
-graceful-fs@^4.1.6, graceful-fs@^4.2.0:
- version "4.2.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
- integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-has-flag@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
- integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-
-hast-util-to-jsx-runtime@^2.0.0:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98"
- integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==
- dependencies:
- "@types/estree" "^1.0.0"
- "@types/hast" "^3.0.0"
- "@types/unist" "^3.0.0"
- comma-separated-tokens "^2.0.0"
- devlop "^1.0.0"
- estree-util-is-identifier-name "^3.0.0"
- hast-util-whitespace "^3.0.0"
- mdast-util-mdx-expression "^2.0.0"
- mdast-util-mdx-jsx "^3.0.0"
- mdast-util-mdxjs-esm "^2.0.0"
- property-information "^7.0.0"
- space-separated-tokens "^2.0.0"
- style-to-js "^1.0.0"
- unist-util-position "^5.0.0"
- vfile-message "^4.0.0"
-
-hast-util-whitespace@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621"
- integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==
- dependencies:
- "@types/hast" "^3.0.0"
-
-history@^4.9.0:
- version "4.10.1"
- resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
- integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
- dependencies:
- "@babel/runtime" "^7.1.2"
- loose-envify "^1.2.0"
- resolve-pathname "^3.0.0"
- tiny-invariant "^1.0.2"
- tiny-warning "^1.0.0"
- value-equal "^1.0.1"
-
-hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
- integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
- dependencies:
- react-is "^16.7.0"
-
-html-url-attributes@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87"
- integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==
-
-human-signals@^4.3.0:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
- integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
-
-hyphenate-style-name@^1.0.3:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz#1797bf50369588b47b72ca6d5e65374607cf4436"
- integrity sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==
-
-i18next-browser-languagedetector@^7.0.1:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.2.tgz#748e7dc192847613911d8a79d9d9a6c2d266133e"
- integrity sha512-6b7r75uIJDWCcCflmbof+sJ94k9UQO4X0YR62oUfqGI/GjCLVzlCwu8TFdRZIqVLzWbzNcmkmhfqKEr4TLz4HQ==
- dependencies:
- "@babel/runtime" "^7.23.2"
-
-i18next@^22.4.14:
- version "22.5.1"
- resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424"
- integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==
- dependencies:
- "@babel/runtime" "^7.20.6"
-
-immer@^9.0.16:
- version "9.0.21"
- resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176"
- integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==
-
-immutable@^5.0.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.2.tgz#e8169476414505e5a4fa650107b65e1227d16d4b"
- integrity sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==
-
-inherits@^2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ini@^4.1.1:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795"
- integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==
-
-inline-style-parser@0.2.4:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22"
- integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==
-
-inline-style-prefixer@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz#9310f3cfa2c6f3901d1480f373981c02691781e8"
- integrity sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==
- dependencies:
- css-in-js-utils "^3.1.0"
-
-ionicons@^7.0.0, ionicons@^7.1.2, ionicons@^7.2.2:
- version "7.4.0"
- resolved "https://registry.yarnpkg.com/ionicons/-/ionicons-7.4.0.tgz#9c285aaa8089befbd6c5a89ae13292d364cd9ace"
- integrity sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==
- dependencies:
- "@stencil/core" "^4.0.3"
-
-is-alphabetical@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b"
- integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==
-
-is-alphanumerical@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875"
- integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==
- dependencies:
- is-alphabetical "^2.0.0"
- is-decimal "^2.0.0"
-
-is-decimal@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7"
- integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==
-
-is-docker@^2.0.0, is-docker@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-fullwidth-code-point@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
- integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
-
-is-glob@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
- integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-hexadecimal@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027"
- integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-plain-obj@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
- integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==
-
-is-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
- integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
-
-is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
- dependencies:
- is-docker "^2.0.0"
-
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
- integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-
-jackspeak@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.1.tgz#96876030f450502047fc7e8c7fcf8ce8124e43ae"
- integrity sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
-
-jest-diff@*:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a"
- integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==
- dependencies:
- chalk "^4.0.0"
- diff-sequences "^29.6.3"
- jest-get-type "^29.6.3"
- pretty-format "^29.7.0"
-
-jest-get-type@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1"
- integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==
-
-js-cookie@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
- integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==
-
-"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-jsesc@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
- integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
-
-json5@^2.2.3:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
- integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
-
-jsonfile@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
- integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
- dependencies:
- universalify "^2.0.0"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-kleur@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
- integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-
-kleur@^4.1.5:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
- integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
-
-leaflet@^1.9.4:
- version "1.9.4"
- resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.9.4.tgz#23fae724e282fa25745aff82ca4d394748db7d8d"
- integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==
-
-lilconfig@2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
- integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
-
-lint-staged@^13.2.0:
- version "13.3.0"
- resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5"
- integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==
- dependencies:
- chalk "5.3.0"
- commander "11.0.0"
- debug "4.3.4"
- execa "7.2.0"
- lilconfig "2.1.0"
- listr2 "6.6.1"
- micromatch "4.0.5"
- pidtree "0.6.0"
- string-argv "0.3.2"
- yaml "2.3.1"
-
-listr2@6.6.1:
- version "6.6.1"
- resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d"
- integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==
- dependencies:
- cli-truncate "^3.1.0"
- colorette "^2.0.20"
- eventemitter3 "^5.0.1"
- log-update "^5.0.1"
- rfdc "^1.3.0"
- wrap-ansi "^8.1.0"
-
-lodash@^4.17.21:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-log-update@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09"
- integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==
- dependencies:
- ansi-escapes "^5.0.0"
- cli-cursor "^4.0.0"
- slice-ansi "^5.0.0"
- strip-ansi "^7.0.1"
- wrap-ansi "^8.0.1"
-
-longest-streak@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4"
- integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==
-
-loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
- integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
- dependencies:
- js-tokens "^3.0.0 || ^4.0.0"
-
-lru-cache@^11.0.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.1.0.tgz#afafb060607108132dbc1cf8ae661afb69486117"
- integrity sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==
-
-lru-cache@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
- integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
- dependencies:
- yallist "^3.0.2"
-
-lz-string@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
- integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
-
-mdast-util-from-markdown@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a"
- integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==
- dependencies:
- "@types/mdast" "^4.0.0"
- "@types/unist" "^3.0.0"
- decode-named-character-reference "^1.0.0"
- devlop "^1.0.0"
- mdast-util-to-string "^4.0.0"
- micromark "^4.0.0"
- micromark-util-decode-numeric-character-reference "^2.0.0"
- micromark-util-decode-string "^2.0.0"
- micromark-util-normalize-identifier "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
- unist-util-stringify-position "^4.0.0"
-
-mdast-util-mdx-expression@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096"
- integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==
- dependencies:
- "@types/estree-jsx" "^1.0.0"
- "@types/hast" "^3.0.0"
- "@types/mdast" "^4.0.0"
- devlop "^1.0.0"
- mdast-util-from-markdown "^2.0.0"
- mdast-util-to-markdown "^2.0.0"
-
-mdast-util-mdx-jsx@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d"
- integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==
- dependencies:
- "@types/estree-jsx" "^1.0.0"
- "@types/hast" "^3.0.0"
- "@types/mdast" "^4.0.0"
- "@types/unist" "^3.0.0"
- ccount "^2.0.0"
- devlop "^1.1.0"
- mdast-util-from-markdown "^2.0.0"
- mdast-util-to-markdown "^2.0.0"
- parse-entities "^4.0.0"
- stringify-entities "^4.0.0"
- unist-util-stringify-position "^4.0.0"
- vfile-message "^4.0.0"
-
-mdast-util-mdxjs-esm@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97"
- integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==
- dependencies:
- "@types/estree-jsx" "^1.0.0"
- "@types/hast" "^3.0.0"
- "@types/mdast" "^4.0.0"
- devlop "^1.0.0"
- mdast-util-from-markdown "^2.0.0"
- mdast-util-to-markdown "^2.0.0"
-
-mdast-util-phrasing@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3"
- integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==
- dependencies:
- "@types/mdast" "^4.0.0"
- unist-util-is "^6.0.0"
-
-mdast-util-to-hast@^13.0.0:
- version "13.2.0"
- resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4"
- integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==
- dependencies:
- "@types/hast" "^3.0.0"
- "@types/mdast" "^4.0.0"
- "@ungap/structured-clone" "^1.0.0"
- devlop "^1.0.0"
- micromark-util-sanitize-uri "^2.0.0"
- trim-lines "^3.0.0"
- unist-util-position "^5.0.0"
- unist-util-visit "^5.0.0"
- vfile "^6.0.0"
-
-mdast-util-to-markdown@^2.0.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b"
- integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==
- dependencies:
- "@types/mdast" "^4.0.0"
- "@types/unist" "^3.0.0"
- longest-streak "^3.0.0"
- mdast-util-phrasing "^4.0.0"
- mdast-util-to-string "^4.0.0"
- micromark-util-classify-character "^2.0.0"
- micromark-util-decode-string "^2.0.0"
- unist-util-visit "^5.0.0"
- zwitch "^2.0.0"
-
-mdast-util-to-string@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814"
- integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==
- dependencies:
- "@types/mdast" "^4.0.0"
-
-mdn-data@2.0.14:
- version "2.0.14"
- resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
- integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
-
-merge-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-micromark-core-commonmark@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4"
- integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==
- dependencies:
- decode-named-character-reference "^1.0.0"
- devlop "^1.0.0"
- micromark-factory-destination "^2.0.0"
- micromark-factory-label "^2.0.0"
- micromark-factory-space "^2.0.0"
- micromark-factory-title "^2.0.0"
- micromark-factory-whitespace "^2.0.0"
- micromark-util-character "^2.0.0"
- micromark-util-chunked "^2.0.0"
- micromark-util-classify-character "^2.0.0"
- micromark-util-html-tag-name "^2.0.0"
- micromark-util-normalize-identifier "^2.0.0"
- micromark-util-resolve-all "^2.0.0"
- micromark-util-subtokenize "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-factory-destination@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639"
- integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==
- dependencies:
- micromark-util-character "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-factory-label@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1"
- integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==
- dependencies:
- devlop "^1.0.0"
- micromark-util-character "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-factory-space@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc"
- integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==
- dependencies:
- micromark-util-character "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-factory-title@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94"
- integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==
- dependencies:
- micromark-factory-space "^2.0.0"
- micromark-util-character "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-factory-whitespace@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1"
- integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==
- dependencies:
- micromark-factory-space "^2.0.0"
- micromark-util-character "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-util-character@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6"
- integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==
- dependencies:
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-util-chunked@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051"
- integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==
- dependencies:
- micromark-util-symbol "^2.0.0"
-
-micromark-util-classify-character@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629"
- integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==
- dependencies:
- micromark-util-character "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-util-combine-extensions@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9"
- integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==
- dependencies:
- micromark-util-chunked "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-util-decode-numeric-character-reference@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5"
- integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==
- dependencies:
- micromark-util-symbol "^2.0.0"
-
-micromark-util-decode-string@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2"
- integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==
- dependencies:
- decode-named-character-reference "^1.0.0"
- micromark-util-character "^2.0.0"
- micromark-util-decode-numeric-character-reference "^2.0.0"
- micromark-util-symbol "^2.0.0"
-
-micromark-util-encode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8"
- integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==
-
-micromark-util-html-tag-name@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825"
- integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==
-
-micromark-util-normalize-identifier@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d"
- integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==
- dependencies:
- micromark-util-symbol "^2.0.0"
-
-micromark-util-resolve-all@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b"
- integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==
- dependencies:
- micromark-util-types "^2.0.0"
-
-micromark-util-sanitize-uri@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7"
- integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==
- dependencies:
- micromark-util-character "^2.0.0"
- micromark-util-encode "^2.0.0"
- micromark-util-symbol "^2.0.0"
-
-micromark-util-subtokenize@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee"
- integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==
- dependencies:
- devlop "^1.0.0"
- micromark-util-chunked "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromark-util-symbol@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8"
- integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==
-
-micromark-util-types@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e"
- integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==
-
-micromark@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb"
- integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==
- dependencies:
- "@types/debug" "^4.0.0"
- debug "^4.0.0"
- decode-named-character-reference "^1.0.0"
- devlop "^1.0.0"
- micromark-core-commonmark "^2.0.0"
- micromark-factory-space "^2.0.0"
- micromark-util-character "^2.0.0"
- micromark-util-chunked "^2.0.0"
- micromark-util-combine-extensions "^2.0.0"
- micromark-util-decode-numeric-character-reference "^2.0.0"
- micromark-util-encode "^2.0.0"
- micromark-util-normalize-identifier "^2.0.0"
- micromark-util-resolve-all "^2.0.0"
- micromark-util-sanitize-uri "^2.0.0"
- micromark-util-subtokenize "^2.0.0"
- micromark-util-symbol "^2.0.0"
- micromark-util-types "^2.0.0"
-
-micromatch@4.0.5:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
- integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
- dependencies:
- braces "^3.0.2"
- picomatch "^2.3.1"
-
-micromatch@^4.0.5:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
- integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
- dependencies:
- braces "^3.0.3"
- picomatch "^2.3.1"
-
-mimic-fn@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-mimic-fn@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
- integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
-
-minimatch@^10.0.0:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b"
- integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==
- dependencies:
- brace-expansion "^2.0.1"
-
-minipass@^3.0.0:
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
- integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
- dependencies:
- yallist "^4.0.0"
-
-minipass@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
- integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-
-minipass@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
- integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-
-minizlib@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
- integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
- dependencies:
- minipass "^3.0.0"
- yallist "^4.0.0"
-
-mkdirp@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-ms@^2.1.3:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-nano-css@^5.6.2:
- version "5.6.2"
- resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.6.2.tgz#584884ddd7547278f6d6915b6805069742679a32"
- integrity sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==
- dependencies:
- "@jridgewell/sourcemap-codec" "^1.4.15"
- css-tree "^1.1.2"
- csstype "^3.1.2"
- fastest-stable-stringify "^2.0.2"
- inline-style-prefixer "^7.0.1"
- rtl-css-js "^1.16.1"
- stacktrace-js "^2.0.2"
- stylis "^4.3.0"
-
-nanoid@^3.3.8:
- version "3.3.11"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
- integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
-
-native-run@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/native-run/-/native-run-2.0.1.tgz#a9b213c32824b007cbdd0279e0edd3c24bcc2f7a"
- integrity sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==
- dependencies:
- "@ionic/utils-fs" "^3.1.7"
- "@ionic/utils-terminal" "^2.3.4"
- bplist-parser "^0.3.2"
- debug "^4.3.4"
- elementtree "^0.1.7"
- ini "^4.1.1"
- plist "^3.1.0"
- split2 "^4.2.0"
- through2 "^4.0.2"
- tslib "^2.6.2"
- yauzl "^2.10.0"
-
-node-addon-api@^7.0.0:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558"
- integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
-
-node-releases@^2.0.19:
- version "2.0.19"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
- integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
-
-npm-run-path@^5.1.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f"
- integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==
- dependencies:
- path-key "^4.0.0"
-
-object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-
-onetime@^5.1.0:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
- integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
- dependencies:
- mimic-fn "^2.1.0"
-
-onetime@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
- integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
- dependencies:
- mimic-fn "^4.0.0"
-
-open@^8.4.0:
- version "8.4.2"
- resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
- integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
- dependencies:
- define-lazy-prop "^2.0.0"
- is-docker "^2.1.1"
- is-wsl "^2.2.0"
-
-package-json-from-dist@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
- integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
-
-parse-entities@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159"
- integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==
- dependencies:
- "@types/unist" "^2.0.0"
- character-entities-legacy "^3.0.0"
- character-reference-invalid "^2.0.0"
- decode-named-character-reference "^1.0.0"
- is-alphanumerical "^2.0.0"
- is-decimal "^2.0.0"
- is-hexadecimal "^2.0.0"
-
-path-key@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-key@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
- integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
-
-path-scurry@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580"
- integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==
- dependencies:
- lru-cache "^11.0.0"
- minipass "^7.1.2"
-
-path-to-regexp@^1.7.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24"
- integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==
- dependencies:
- isarray "0.0.1"
-
-pend@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
- integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
-
-picocolors@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
- integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
-
-picomatch@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
- integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-
-picomatch@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
- integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
-
-pidtree@0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
- integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
-
-plist@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
- integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==
- dependencies:
- "@xmldom/xmldom" "^0.8.8"
- base64-js "^1.5.1"
- xmlbuilder "^15.1.1"
-
-postcss@^8.5.3:
- version "8.5.3"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb"
- integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==
- dependencies:
- nanoid "^3.3.8"
- picocolors "^1.1.1"
- source-map-js "^1.2.1"
-
-prettier-plugin-organize-imports@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz#f3d3764046a8e7ba6491431158b9be6ffd83b90f"
- integrity sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==
-
-prettier@^2.8.6:
- version "2.8.8"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
- integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
-
-pretty-format@^24.3.0:
- version "24.9.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
- integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
- dependencies:
- "@jest/types" "^24.9.0"
- ansi-regex "^4.0.0"
- ansi-styles "^3.2.0"
- react-is "^16.8.4"
-
-pretty-format@^25.1.0:
- version "25.5.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
- integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
- dependencies:
- "@jest/types" "^25.5.0"
- ansi-regex "^5.0.0"
- ansi-styles "^4.0.0"
- react-is "^16.12.0"
-
-pretty-format@^27.0.2:
- version "27.5.1"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
- integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
- dependencies:
- ansi-regex "^5.0.1"
- ansi-styles "^5.0.0"
- react-is "^17.0.1"
-
-pretty-format@^29.7.0:
- version "29.7.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
- integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
- dependencies:
- "@jest/schemas" "^29.6.3"
- ansi-styles "^5.0.0"
- react-is "^18.0.0"
-
-prompts@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
- integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
- dependencies:
- kleur "^3.0.3"
- sisteransi "^1.0.5"
-
-prop-types@^15.6.2:
- version "15.8.1"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
- integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
- dependencies:
- loose-envify "^1.4.0"
- object-assign "^4.1.1"
- react-is "^16.13.1"
-
-property-information@^7.0.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d"
- integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==
-
-pullstate@^2.0.0-pre.0:
- version "2.0.0-pre.0"
- resolved "https://registry.yarnpkg.com/pullstate/-/pullstate-2.0.0-pre.0.tgz#30dd108112b520ded57c35bdb10929314466da40"
- integrity sha512-lvMKp36NYcl1fVsm7v36CRokEEJUW2j8IlwvOMqbYeFe/shIscDoT+boW1CXFMy08EG8KO1X9pyOFCxXjMh4jw==
- dependencies:
- fast-deep-equal "^3.1.3"
- immer "^9.0.16"
-
-react-dom@19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57"
- integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==
- dependencies:
- scheduler "^0.25.0"
-
-react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.4:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
- integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-react-is@^17.0.1:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
- integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-
-react-is@^18.0.0:
- version "18.3.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
- integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
-
-react-leaflet@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-5.0.0.tgz#945d40bad13b69e8606278b19446b00bab57376a"
- integrity sha512-CWbTpr5vcHw5bt9i4zSlPEVQdTVcML390TjeDG0cK59z1ylexpqC6M1PJFjV8jD7CF+ACBFsLIDs6DRMoLEofw==
- dependencies:
- "@react-leaflet/core" "^3.0.0"
-
-react-markdown@^10.1.0:
- version "10.1.0"
- resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-10.1.0.tgz#e22bc20faddbc07605c15284255653c0f3bad5ca"
- integrity sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==
- dependencies:
- "@types/hast" "^3.0.0"
- "@types/mdast" "^4.0.0"
- devlop "^1.0.0"
- hast-util-to-jsx-runtime "^2.0.0"
- html-url-attributes "^3.0.0"
- mdast-util-to-hast "^13.0.0"
- remark-parse "^11.0.0"
- remark-rehype "^11.0.0"
- unified "^11.0.0"
- unist-util-visit "^5.0.0"
- vfile "^6.0.0"
-
-react-redux@^9.2.0:
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5"
- integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==
- dependencies:
- "@types/use-sync-external-store" "^0.0.6"
- use-sync-external-store "^1.4.0"
-
-react-refresh@^0.17.0:
- version "0.17.0"
- resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
- integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==
-
-react-router-dom@^5.3.4:
- version "5.3.4"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6"
- integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==
- dependencies:
- "@babel/runtime" "^7.12.13"
- history "^4.9.0"
- loose-envify "^1.3.1"
- prop-types "^15.6.2"
- react-router "5.3.4"
- tiny-invariant "^1.0.2"
- tiny-warning "^1.0.0"
-
-react-router@5.3.4, react-router@^5.3.4:
- version "5.3.4"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5"
- integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==
- dependencies:
- "@babel/runtime" "^7.12.13"
- history "^4.9.0"
- hoist-non-react-statics "^3.1.0"
- loose-envify "^1.3.1"
- path-to-regexp "^1.7.0"
- prop-types "^15.6.2"
- react-is "^16.6.0"
- tiny-invariant "^1.0.2"
- tiny-warning "^1.0.0"
-
-react-universal-interface@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b"
- integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==
-
-react-use@^17.2.4:
- version "17.6.0"
- resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.6.0.tgz#2101a3a79dc965a25866b21f5d6de4b128488a14"
- integrity sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==
- dependencies:
- "@types/js-cookie" "^2.2.6"
- "@xobotyi/scrollbar-width" "^1.9.5"
- copy-to-clipboard "^3.3.1"
- fast-deep-equal "^3.1.3"
- fast-shallow-equal "^1.0.0"
- js-cookie "^2.2.1"
- nano-css "^5.6.2"
- react-universal-interface "^0.6.2"
- resize-observer-polyfill "^1.5.1"
- screenfull "^5.1.0"
- set-harmonic-interval "^1.0.1"
- throttle-debounce "^3.0.1"
- ts-easing "^0.2.0"
- tslib "^2.1.0"
-
-react@19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd"
- integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==
-
-readable-stream@3:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
- integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readdirp@^4.0.1:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d"
- integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
-
-redux@^4.0.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197"
- integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==
- dependencies:
- "@babel/runtime" "^7.9.2"
-
-remark-parse@^11.0.0:
- version "11.0.0"
- resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1"
- integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==
- dependencies:
- "@types/mdast" "^4.0.0"
- mdast-util-from-markdown "^2.0.0"
- micromark-util-types "^2.0.0"
- unified "^11.0.0"
-
-remark-rehype@^11.0.0:
- version "11.1.2"
- resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37"
- integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==
- dependencies:
- "@types/hast" "^3.0.0"
- "@types/mdast" "^4.0.0"
- mdast-util-to-hast "^13.0.0"
- unified "^11.0.0"
- vfile "^6.0.0"
-
-reselect@^4.0.0:
- version "4.1.8"
- resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524"
- integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==
-
-resize-observer-polyfill@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
- integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
-
-resolve-pathname@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
- integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
-
-restore-cursor@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9"
- integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==
- dependencies:
- onetime "^5.1.0"
- signal-exit "^3.0.2"
-
-rfdc@^1.3.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca"
- integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
-
-rimraf@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.0.1.tgz#ffb8ad8844dd60332ab15f52bc104bc3ed71ea4e"
- integrity sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==
- dependencies:
- glob "^11.0.0"
- package-json-from-dist "^1.0.0"
-
-rollup@^4.34.9:
- version "4.41.1"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.41.1.tgz#46ddc1b33cf1b0baa99320d3b0b4973dc2253b6a"
- integrity sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==
- dependencies:
- "@types/estree" "1.0.7"
- optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.41.1"
- "@rollup/rollup-android-arm64" "4.41.1"
- "@rollup/rollup-darwin-arm64" "4.41.1"
- "@rollup/rollup-darwin-x64" "4.41.1"
- "@rollup/rollup-freebsd-arm64" "4.41.1"
- "@rollup/rollup-freebsd-x64" "4.41.1"
- "@rollup/rollup-linux-arm-gnueabihf" "4.41.1"
- "@rollup/rollup-linux-arm-musleabihf" "4.41.1"
- "@rollup/rollup-linux-arm64-gnu" "4.41.1"
- "@rollup/rollup-linux-arm64-musl" "4.41.1"
- "@rollup/rollup-linux-loongarch64-gnu" "4.41.1"
- "@rollup/rollup-linux-powerpc64le-gnu" "4.41.1"
- "@rollup/rollup-linux-riscv64-gnu" "4.41.1"
- "@rollup/rollup-linux-riscv64-musl" "4.41.1"
- "@rollup/rollup-linux-s390x-gnu" "4.41.1"
- "@rollup/rollup-linux-x64-gnu" "4.41.1"
- "@rollup/rollup-linux-x64-musl" "4.41.1"
- "@rollup/rollup-win32-arm64-msvc" "4.41.1"
- "@rollup/rollup-win32-ia32-msvc" "4.41.1"
- "@rollup/rollup-win32-x64-msvc" "4.41.1"
- fsevents "~2.3.2"
-
-rtl-css-js@^1.16.1:
- version "1.16.1"
- resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.16.1.tgz#4b48b4354b0ff917a30488d95100fbf7219a3e80"
- integrity sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==
- dependencies:
- "@babel/runtime" "^7.1.2"
-
-safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-sass@^1.85.1:
- version "1.89.0"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.89.0.tgz#6df72360c5c3ec2a9833c49adafe57b28206752d"
- integrity sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==
- dependencies:
- chokidar "^4.0.0"
- immutable "^5.0.2"
- source-map-js ">=0.6.2 <2.0.0"
- optionalDependencies:
- "@parcel/watcher" "^2.4.1"
-
-sax@1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.4.tgz#74b6d33c9ae1e001510f179a91168588f1aedaa9"
- integrity sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==
-
-sax@>=0.6.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
- integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
-
-scheduler@^0.25.0:
- version "0.25.0"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015"
- integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==
-
-screenfull@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba"
- integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==
-
-semver@^6.3.1:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-semver@^7.6.3:
- version "7.7.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
- integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
-
-set-harmonic-interval@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249"
- integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==
-
-shebang-command@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
- dependencies:
- shebang-regex "^3.0.0"
-
-shebang-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
- integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
-sisteransi@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
- integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
-
-slice-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
- integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
- dependencies:
- ansi-styles "^4.0.0"
- astral-regex "^2.0.0"
- is-fullwidth-code-point "^3.0.0"
-
-slice-ansi@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
- integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
- dependencies:
- ansi-styles "^6.0.0"
- is-fullwidth-code-point "^4.0.0"
-
-"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
- integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
-
-source-map@0.5.6:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
- integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==
-
-source-map@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-space-separated-tokens@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f"
- integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==
-
-split2@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
- integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
-
-ssr-window@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/ssr-window/-/ssr-window-4.0.2.tgz#dc6b3ee37be86ac0e3ddc60030f7b3bc9b8553be"
- integrity sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==
-
-stack-generator@^2.0.5:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d"
- integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==
- dependencies:
- stackframe "^1.3.4"
-
-stackframe@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
- integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
-
-stacktrace-gps@^3.0.4:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0"
- integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==
- dependencies:
- source-map "0.5.6"
- stackframe "^1.3.4"
-
-stacktrace-js@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b"
- integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==
- dependencies:
- error-stack-parser "^2.0.6"
- stack-generator "^2.0.5"
- stacktrace-gps "^3.0.4"
-
-string-argv@0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
- integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
-
-"string-width-cjs@npm:string-width@^4.2.0":
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^4.1.0:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
- integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
- dependencies:
- eastasianwidth "^0.2.0"
- emoji-regex "^9.2.2"
- strip-ansi "^7.0.1"
-
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-stringify-entities@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3"
- integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==
- dependencies:
- character-entities-html4 "^2.0.0"
- character-entities-legacy "^3.0.0"
-
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^7.0.1:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
- dependencies:
- ansi-regex "^6.0.1"
-
-strip-final-newline@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
- integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
-
-style-to-js@^1.0.0:
- version "1.1.16"
- resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.16.tgz#e6bd6cd29e250bcf8fa5e6591d07ced7575dbe7a"
- integrity sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==
- dependencies:
- style-to-object "1.0.8"
-
-style-to-object@1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292"
- integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==
- dependencies:
- inline-style-parser "0.2.4"
-
-stylis@^4.3.0:
- version "4.3.6"
- resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320"
- integrity sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==
-
-supports-color@^7.1.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
- integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
- dependencies:
- has-flag "^4.0.0"
-
-swiper@^9.1.1:
- version "9.4.1"
- resolved "https://registry.yarnpkg.com/swiper/-/swiper-9.4.1.tgz#2f48bcd6ab4b4fcf4ae93eaee53980531d42fd42"
- integrity sha512-1nT2T8EzUpZ0FagEqaN/YAhRj33F2x/lN6cyB0/xoYJDMf8KwTFT3hMOeoB8Tg4o3+P/CKqskP+WX0Df046fqA==
- dependencies:
- ssr-window "^4.0.2"
-
-tar@^6.1.11:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
- integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
- dependencies:
- chownr "^2.0.0"
- fs-minipass "^2.0.0"
- minipass "^5.0.0"
- minizlib "^2.1.1"
- mkdirp "^1.0.3"
- yallist "^4.0.0"
-
-throttle-debounce@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb"
- integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==
-
-through2@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
- integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
- dependencies:
- readable-stream "3"
-
-tiny-invariant@^1.0.2:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
- integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
-
-tiny-warning@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
- integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
-
-tinyglobby@^0.2.13:
- version "0.2.13"
- resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.13.tgz#a0e46515ce6cbcd65331537e57484af5a7b2ff7e"
- integrity sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==
- dependencies:
- fdir "^6.4.4"
- picomatch "^4.0.2"
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-toggle-selection@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
- integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==
-
-tree-kill@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
- integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
-
-trim-lines@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338"
- integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==
-
-trough@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f"
- integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==
-
-ts-easing@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec"
- integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==
-
-tslib@*, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.6.2, tslib@^2.8.1:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
- integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-
-type-fest@^1.0.2:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
- integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
-
-typescript@5.3.3:
- version "5.3.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
- integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-undici-types@~6.21.0:
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
- integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
-
-unified@^11.0.0:
- version "11.0.5"
- resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1"
- integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==
- dependencies:
- "@types/unist" "^3.0.0"
- bail "^2.0.0"
- devlop "^1.0.0"
- extend "^3.0.0"
- is-plain-obj "^4.0.0"
- trough "^2.0.0"
- vfile "^6.0.0"
-
-unist-util-is@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424"
- integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==
- dependencies:
- "@types/unist" "^3.0.0"
-
-unist-util-position@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4"
- integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==
- dependencies:
- "@types/unist" "^3.0.0"
-
-unist-util-stringify-position@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2"
- integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==
- dependencies:
- "@types/unist" "^3.0.0"
-
-unist-util-visit-parents@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815"
- integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==
- dependencies:
- "@types/unist" "^3.0.0"
- unist-util-is "^6.0.0"
-
-unist-util-visit@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6"
- integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==
- dependencies:
- "@types/unist" "^3.0.0"
- unist-util-is "^6.0.0"
- unist-util-visit-parents "^6.0.0"
-
-universalify@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
- integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
-
-untildify@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
- integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
-
-update-browserslist-db@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
- integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
- dependencies:
- escalade "^3.2.0"
- picocolors "^1.1.1"
-
-use-sync-external-store@^1.4.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0"
- integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==
-
-util-deprecate@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-
-value-equal@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
- integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
-
-vfile-message@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181"
- integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==
- dependencies:
- "@types/unist" "^3.0.0"
- unist-util-stringify-position "^4.0.0"
-
-vfile@^6.0.0:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab"
- integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==
- dependencies:
- "@types/unist" "^3.0.0"
- vfile-message "^4.0.0"
-
-vite@^6.2.0:
- version "6.3.5"
- resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.5.tgz#fec73879013c9c0128c8d284504c6d19410d12a3"
- integrity sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==
- dependencies:
- esbuild "^0.25.0"
- fdir "^6.4.4"
- picomatch "^4.0.2"
- postcss "^8.5.3"
- rollup "^4.34.9"
- tinyglobby "^0.2.13"
- optionalDependencies:
- fsevents "~2.3.3"
-
-wait-for-expect@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463"
- integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==
-
-which@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
- dependencies:
- isexe "^2.0.0"
-
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^8.0.1, wrap-ansi@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
- integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
- dependencies:
- ansi-styles "^6.1.0"
- string-width "^5.0.1"
- strip-ansi "^7.0.1"
-
-xml2js@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499"
- integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~11.0.0"
-
-xmlbuilder@^15.1.1:
- version "15.1.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
- integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
-
-xmlbuilder@~11.0.0:
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
- integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
-
-yallist@^3.0.2:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
- integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-yaml@2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
- integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==
-
-yauzl@^2.10.0:
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
- integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
- dependencies:
- buffer-crc32 "~0.2.3"
- fd-slicer "~1.1.0"
-
-zwitch@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
- integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==
diff --git a/03_source/mobile.trunk/.editorconfig b/03_source/mobile.trunk/.editorconfig
deleted file mode 100644
index 82da0b1..0000000
--- a/03_source/mobile.trunk/.editorconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-# http://editorconfig.org
-
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[*.md]
-insert_final_newline = false
-trim_trailing_whitespace = false
\ No newline at end of file
diff --git a/03_source/mobile.trunk/.firebaserc b/03_source/mobile.trunk/.firebaserc
deleted file mode 100644
index 711741d..0000000
--- a/03_source/mobile.trunk/.firebaserc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "projects": {
- "default": "ionic-react-conference-app"
- }
-}
diff --git a/03_source/mobile.trunk/.github/CONTRIBUTING.md b/03_source/mobile.trunk/.github/CONTRIBUTING.md
deleted file mode 100644
index 20ff866..0000000
--- a/03_source/mobile.trunk/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Contributing to the Ionic React Conference Application
-
-Thank you for taking the time to contribute! :tada::+1:
-
-The following is a set of guidelines for contributing to the conference app. These are just guidelines, not rules, use your best judgment and feel free to propose changes to this document in a pull request.
-
-## Table of Contents
-- [Reporting Issues](#reporting-issues)
- - [Before Submitting an Issue](#before-submitting-an-issue)
- - [Determining the Repository](#determining-the-repository)
- - [Submitting the Issue](#submitting-the-issue)
-- [Submitting a Pull Request](#submitting-a-pull-request)
- - [Guidelines for Submitting](#guidelines-for-submitting)
- - [Code Style](#code-style)
-
-## Reporting Issues
-
-Before submitting an issue, please go through [the list below](#before-submitting-an-issue) as you might find a solution to your issue.
-
-### Before Submitting an Issue
-
-* Make sure you get the latest version of the code and run through the [Getting Started](https://github.com/ionic-team/ionic-react-conference-app#getting-started) steps to see if this resolves your issue.
-* Check the [forum](https://forum.ionicframework.com) for similar questions and answers.
-* Go through [all issues](https://github.com/ionic-team/ionic-react-conference-app/issues?utf8=%E2%9C%93&q=is%3Aissue) on this repository to see if the issue has already been created. It could have been closed with a resolution, so check closed issues, too.
-* Chat with us on [Discord](https://ionic.link/discord) to see if we can find a solution to the problem!
-* [Determine which repository](#determining-the-repository) the problem should be reported in.
-
-### Determining the Repository
-
-There are several repositories being used for Ionic, which makes it difficult to determine which one to report an issue to. Don't worry if you aren't sure, we can always move it!
-
-* The [Ionic Framework repository](https://github.com/ionic-team/ionic-framework) is a repository for all things related to the Ionic Framework. If you are able to reproduce the issue in any of the Ionic starters (or an existing project), you'll want to submit the issue [here](https://github.com/ionic-team/ionic-framework/issues).
-* The [Ionic CLI repository](https://github.com/ionic-team/ionic-cli) contains all of the code that allows you to run `ionic` commands from a terminal window. It is safe to put any issues [here](https://github.com/ionic-team/ionic-cli/issues) that relate to running an `ionic` command.
-* **This repository** is a demo of the Ionic Framework. If you find an issue with this app that does not occur on [a new app](https://ionicframework.com/docs/intro/cli#start-an-app), please submit the issue [here](https://github.com/ionic-team/ionic-react-conference-app/issues).
-
-### Submitting the Issue
-
-* **Use a clear and descriptive title** for the issue to identify the problem. This makes it easier for others to find.
-* **Describe the exact steps to reproduce the problem** with as many details as needed.
-* **Provide your configuration** by running `ionic info` in a terminal from *within* the project folder and pasting this information in the issue.
-
-## Submitting a Pull Request
-
-### Guidelines for Submitting
-
-When in doubt, keep your pull requests small. To give a PR the best chance of getting accepted, do not bundle more than one "feature" or bug fix per PR. Doing so makes it very hard to accept it if one of the fixes has issues.
-
-It's always best to create two smaller PRs than one big one.
-
-Talk to us before creating a PR that refactors the code or directory structure of the project. This project is constantly changing to reflect the latest version of Ionic Framework so sometimes it will be in the process of getting fixed.
-
-### Code Style
-
-Make sure to follow the existing code style as much as possible.
-
-* No underscores prefixing JS functions.
-* Use flat Sass:
- * **Don't** use [BEM conventions](https://css-tricks.com/bem-101/)
- * Avoid nesting selectors. This is done to make it easier for users without Sass experience to understand and read.
diff --git a/03_source/mobile.trunk/.gitignore b/03_source/mobile.trunk/.gitignore
deleted file mode 100644
index 516dc4d..0000000
--- a/03_source/mobile.trunk/.gitignore
+++ /dev/null
@@ -1,83 +0,0 @@
-# Logs
-.firebase
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (http://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-jspm_packages/
-
-# Typescript v1 declaration files
-typings/
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variables file
-.env
-
-# See https://help.github.com/ignore-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-
-# testing
-/coverage
-
-# production
-/dist
-
-# misc
-.DS_Store
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-.stencil/
diff --git a/03_source/mobile.trunk/.netlify/_redirects b/03_source/mobile.trunk/.netlify/_redirects
deleted file mode 100644
index 50a4633..0000000
--- a/03_source/mobile.trunk/.netlify/_redirects
+++ /dev/null
@@ -1 +0,0 @@
-/* /index.html 200
\ No newline at end of file
diff --git a/03_source/mobile.trunk/.netlify/state.json b/03_source/mobile.trunk/.netlify/state.json
deleted file mode 100644
index f97268e..0000000
--- a/03_source/mobile.trunk/.netlify/state.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "siteId": "86675615-6271-4145-8ffe-9c78dc4d34a3"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/.prettierrc b/03_source/mobile.trunk/.prettierrc
deleted file mode 100644
index ecf89ac..0000000
--- a/03_source/mobile.trunk/.prettierrc
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "tabWidth": 2,
- "semi": true,
- "singleQuote": true,
- "trailingComma": "es5",
- "printWidth": 100,
- "overrides": [
- {
- "files": "src/App.tsx",
- "options": {
- "printWidth": 160
- }
- },
- {
- "files": "src/routes/*",
- "options": {
- "printWidth": 160
- }
- },
- {
- "files": [
- "*.html",
- "legacy/**/*.js"
- ],
- "options": {
- "tabWidth": 4
- }
- }
- ]
-}
diff --git a/03_source/mobile.trunk/.vscode/settings.json b/03_source/mobile.trunk/.vscode/settings.json
deleted file mode 100644
index 3662b37..0000000
--- a/03_source/mobile.trunk/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "typescript.tsdk": "node_modules/typescript/lib"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/LICENSE b/03_source/mobile.trunk/LICENSE
deleted file mode 100644
index 623c70a..0000000
--- a/03_source/mobile.trunk/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright 2015-present Drifty Co.
-http://drifty.com/
-
-MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/03_source/mobile.trunk/README.md b/03_source/mobile.trunk/README.md
deleted file mode 100644
index 7a24529..0000000
--- a/03_source/mobile.trunk/README.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# Ionic React Conference App
-
-[](https://ionicframework.com)
-[](https://reactjs.org)
-[](LICENSE)
-
-
-This is a **kitchen-sink demo application** built with **Ionic Framework** and **React**. It showcases a wide range of Ionic components and features in the context of a fictional tech conference app.
-
-**Note**: There is no actual Ionic Conference. This project is purely for demonstration purposes.
-
-👉 [Try the Live Demo](https://ionic-react-conference-app-git-main-ionic1.vercel.app/tutorial)
-
-## 🧱 Framework Variants
-
-This app is also available in other frameworks:
-
-- 🔗 [Ionic Angular Conference App](https://github.com/ionic-team/ionic-conference-app)
-- 🔗 [Ionic Vue Conference App](https://github.com/ionic-team/ionic-vue-conference-app)
-- ✅ **You're viewing the React version**
-
-## ✨ Features
-
-- Browse conference schedule with filtering
-- View speaker bios and session details
-- User authentication and profile management
-- Interactive maps for venue navigation
-- Push notifications support
-- Dark/Light mode toggling
-- Cross-platform support: iOS, Android, and Web
-
-## ⚙️ Getting Started
-
-### Prerequisites
-
-- Node.js (LTS version recommended) → [Download](https://nodejs.org/)
-- npm (included with Node.js)
-- Ionic CLI → Install globally:
- ```bash
- npm install -g ionic
- ```
-
-### Installation
-1. Clone the repository:
- ```bash
- git clone https://github.com/ionic-team/ionic-react-conference-app.git
- ```
-2. Navigate into the project:
- ```bash
- cd ionic-react-conference-app
- ```
-3. Install dependencies:
- ```bash
- npm install
- ```
-4. Start the dev server:
- ```bash
- ionic serve
- ```
-5. Open your browser to:
- ```
- http://localhost:3000
- ```
-
-## 🤝 Contributing
-
-We welcome contributions! Please see our [Contributing Guide](.github/CONTRIBUTING.md) for details on how to submit pull requests, report issues, and contribute to the project.
-
-## 📄 License
-
-This project is licensed under the MIT [License](./LICENSE).
diff --git a/03_source/mobile.trunk/android/.gitignore b/03_source/mobile.trunk/android/.gitignore
deleted file mode 100644
index 48354a3..0000000
--- a/03_source/mobile.trunk/android/.gitignore
+++ /dev/null
@@ -1,101 +0,0 @@
-# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
-
-# Built application files
-*.apk
-*.aar
-*.ap_
-*.aab
-
-# Files for the ART/Dalvik VM
-*.dex
-
-# Java class files
-*.class
-
-# Generated files
-bin/
-gen/
-out/
-# Uncomment the following line in case you need and you don't have the release build type files in your app
-# release/
-
-# Gradle files
-.gradle/
-build/
-
-# Local configuration file (sdk path, etc)
-local.properties
-
-# Proguard folder generated by Eclipse
-proguard/
-
-# Log Files
-*.log
-
-# Android Studio Navigation editor temp files
-.navigation/
-
-# Android Studio captures folder
-captures/
-
-# IntelliJ
-*.iml
-.idea/workspace.xml
-.idea/tasks.xml
-.idea/gradle.xml
-.idea/assetWizardSettings.xml
-.idea/dictionaries
-.idea/libraries
-# Android Studio 3 in .gitignore file.
-.idea/caches
-.idea/modules.xml
-# Comment next line if keeping position of elements in Navigation Editor is relevant for you
-.idea/navEditor.xml
-
-# Keystore files
-# Uncomment the following lines if you do not want to check your keystore files in.
-#*.jks
-#*.keystore
-
-# External native build folder generated in Android Studio 2.2 and later
-.externalNativeBuild
-.cxx/
-
-# Google Services (e.g. APIs or Firebase)
-# google-services.json
-
-# Freeline
-freeline.py
-freeline/
-freeline_project_description.json
-
-# fastlane
-fastlane/report.xml
-fastlane/Preview.html
-fastlane/screenshots
-fastlane/test_output
-fastlane/readme.md
-
-# Version control
-vcs.xml
-
-# lint
-lint/intermediates/
-lint/generated/
-lint/outputs/
-lint/tmp/
-# lint/reports/
-
-# Android Profiling
-*.hprof
-
-# Cordova plugins for Capacitor
-capacitor-cordova-android-plugins
-
-# Copied web assets
-app/src/main/assets/public
-
-# Generated Config files
-app/src/main/assets/capacitor.config.json
-app/src/main/assets/capacitor.plugins.json
-app/src/main/res/xml/config.xml
diff --git a/03_source/mobile.trunk/android/app/.gitignore b/03_source/mobile.trunk/android/app/.gitignore
deleted file mode 100644
index 043df80..0000000
--- a/03_source/mobile.trunk/android/app/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build/*
-!/build/.npmkeep
diff --git a/03_source/mobile.trunk/android/app/build.gradle b/03_source/mobile.trunk/android/app/build.gradle
deleted file mode 100644
index 6011e85..0000000
--- a/03_source/mobile.trunk/android/app/build.gradle
+++ /dev/null
@@ -1,54 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- namespace "io.ionic.starter"
- compileSdk rootProject.ext.compileSdkVersion
- defaultConfig {
- applicationId "io.ionic.starter"
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- aaptOptions {
- // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
- // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
- ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
- }
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-}
-
-repositories {
- flatDir{
- dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
- }
-}
-
-dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
- implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion"
- implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion"
- implementation project(':capacitor-android')
- testImplementation "junit:junit:$junitVersion"
- androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
- androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
- implementation project(':capacitor-cordova-android-plugins')
-}
-
-apply from: 'capacitor.build.gradle'
-
-try {
- def servicesJSON = file('google-services.json')
- if (servicesJSON.text) {
- apply plugin: 'com.google.gms.google-services'
- }
-} catch(Exception e) {
- logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
-}
diff --git a/03_source/mobile.trunk/android/app/capacitor.build.gradle b/03_source/mobile.trunk/android/app/capacitor.build.gradle
deleted file mode 100644
index ca48bc2..0000000
--- a/03_source/mobile.trunk/android/app/capacitor.build.gradle
+++ /dev/null
@@ -1,24 +0,0 @@
-// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
-
-android {
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_21
- targetCompatibility JavaVersion.VERSION_21
- }
-}
-
-apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
-dependencies {
- implementation project(':capacitor-barcode-scanner')
- implementation project(':capacitor-clipboard')
- implementation project(':capacitor-geolocation')
- implementation project(':capacitor-google-maps')
- implementation project(':capacitor-preferences')
- implementation project(':capacitor-share')
-
-}
-
-
-if (hasProperty('postBuildExtras')) {
- postBuildExtras()
-}
diff --git a/03_source/mobile.trunk/android/app/proguard-rules.pro b/03_source/mobile.trunk/android/app/proguard-rules.pro
deleted file mode 100644
index f1b4245..0000000
--- a/03_source/mobile.trunk/android/app/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
diff --git a/03_source/mobile.trunk/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java b/03_source/mobile.trunk/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java
deleted file mode 100644
index f2c2217..0000000
--- a/03_source/mobile.trunk/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.getcapacitor.myapp;
-
-import static org.junit.Assert.*;
-
-import android.content.Context;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.platform.app.InstrumentationRegistry;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-
- @Test
- public void useAppContext() throws Exception {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
-
- assertEquals("com.getcapacitor.app", appContext.getPackageName());
- }
-}
diff --git a/03_source/mobile.trunk/android/app/src/main/AndroidManifest.xml b/03_source/mobile.trunk/android/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 340e7df..0000000
--- a/03_source/mobile.trunk/android/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.trunk/android/app/src/main/java/io/ionic/starter/MainActivity.java b/03_source/mobile.trunk/android/app/src/main/java/io/ionic/starter/MainActivity.java
deleted file mode 100644
index 73e3a98..0000000
--- a/03_source/mobile.trunk/android/app/src/main/java/io/ionic/starter/MainActivity.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.ionic.starter;
-
-import com.getcapacitor.BridgeActivity;
-
-public class MainActivity extends BridgeActivity {}
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-hdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-land-hdpi/splash.png
deleted file mode 100644
index 90e8400..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-hdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-mdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-land-mdpi/splash.png
deleted file mode 100644
index 990610d..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-mdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xhdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xhdpi/splash.png
deleted file mode 100644
index 3c67e01..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xxhdpi/splash.png
deleted file mode 100644
index cff9eef..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xxhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xxxhdpi/splash.png
deleted file mode 100644
index cd4b88d..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-land-xxxhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-hdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-port-hdpi/splash.png
deleted file mode 100644
index fdd3184..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-hdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-mdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-port-mdpi/splash.png
deleted file mode 100644
index 7dcce56..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-mdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xhdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xhdpi/splash.png
deleted file mode 100644
index bcd0278..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xxhdpi/splash.png
deleted file mode 100644
index 9048412..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xxhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xxxhdpi/splash.png
deleted file mode 100644
index a15aaa1..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable-port-xxxhdpi/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/03_source/mobile.trunk/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index c7bd21d..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable/ic_launcher_background.xml b/03_source/mobile.trunk/android/app/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index d5fccc5..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.trunk/android/app/src/main/res/drawable/splash.png b/03_source/mobile.trunk/android/app/src/main/res/drawable/splash.png
deleted file mode 100644
index 990610d..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/drawable/splash.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/layout/activity_main.xml b/03_source/mobile.trunk/android/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index b5ad138..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/03_source/mobile.trunk/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index 036d09b..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/03_source/mobile.trunk/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index 036d09b..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index d8c727b..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index 2127973..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index d8c727b..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 3b955cd..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index 8ed0605..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 3b955cd..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index a080869..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index df0f158..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index a080869..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 3c46f09..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 2960cbb..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 3c46f09..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 2a94e06..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index d2ea9ab..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 2a94e06..0000000
Binary files a/03_source/mobile.trunk/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/03_source/mobile.trunk/android/app/src/main/res/values/ic_launcher_background.xml b/03_source/mobile.trunk/android/app/src/main/res/values/ic_launcher_background.xml
deleted file mode 100644
index c5d5899..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/values/ic_launcher_background.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- #FFFFFF
-
\ No newline at end of file
diff --git a/03_source/mobile.trunk/android/app/src/main/res/values/strings.xml b/03_source/mobile.trunk/android/app/src/main/res/values/strings.xml
deleted file mode 100644
index a15be2e..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- ionic-react-conference-app
- ionic-react-conference-app
- io.ionic.starter
- io.ionic.starter
-
diff --git a/03_source/mobile.trunk/android/app/src/main/res/values/styles.xml b/03_source/mobile.trunk/android/app/src/main/res/values/styles.xml
deleted file mode 100644
index be874e5..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.trunk/android/app/src/main/res/xml/file_paths.xml b/03_source/mobile.trunk/android/app/src/main/res/xml/file_paths.xml
deleted file mode 100644
index bd0c4d8..0000000
--- a/03_source/mobile.trunk/android/app/src/main/res/xml/file_paths.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.trunk/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java b/03_source/mobile.trunk/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java
deleted file mode 100644
index 0297327..0000000
--- a/03_source/mobile.trunk/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.getcapacitor.myapp;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * @see Testing documentation
- */
-public class ExampleUnitTest {
-
- @Test
- public void addition_isCorrect() throws Exception {
- assertEquals(4, 2 + 2);
- }
-}
diff --git a/03_source/mobile.trunk/android/build.gradle b/03_source/mobile.trunk/android/build.gradle
deleted file mode 100644
index f1b3b0e..0000000
--- a/03_source/mobile.trunk/android/build.gradle
+++ /dev/null
@@ -1,29 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
-
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:8.7.2'
- classpath 'com.google.gms:google-services:4.4.2'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-apply from: "variables.gradle"
-
-allprojects {
- repositories {
- google()
- mavenCentral()
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/03_source/mobile.trunk/android/capacitor.settings.gradle b/03_source/mobile.trunk/android/capacitor.settings.gradle
deleted file mode 100644
index 4d859e4..0000000
--- a/03_source/mobile.trunk/android/capacitor.settings.gradle
+++ /dev/null
@@ -1,21 +0,0 @@
-// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
-include ':capacitor-android'
-project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor')
-
-include ':capacitor-barcode-scanner'
-project(':capacitor-barcode-scanner').projectDir = new File('../node_modules/@capacitor/barcode-scanner/android')
-
-include ':capacitor-clipboard'
-project(':capacitor-clipboard').projectDir = new File('../node_modules/@capacitor/clipboard/android')
-
-include ':capacitor-geolocation'
-project(':capacitor-geolocation').projectDir = new File('../node_modules/@capacitor/geolocation/android')
-
-include ':capacitor-google-maps'
-project(':capacitor-google-maps').projectDir = new File('../node_modules/@capacitor/google-maps/android')
-
-include ':capacitor-preferences'
-project(':capacitor-preferences').projectDir = new File('../node_modules/@capacitor/preferences/android')
-
-include ':capacitor-share'
-project(':capacitor-share').projectDir = new File('../node_modules/@capacitor/share/android')
diff --git a/03_source/mobile.trunk/android/gradle.properties b/03_source/mobile.trunk/android/gradle.properties
deleted file mode 100644
index 2e87c52..0000000
--- a/03_source/mobile.trunk/android/gradle.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
-android.useAndroidX=true
diff --git a/03_source/mobile.trunk/android/gradle/wrapper/gradle-wrapper.jar b/03_source/mobile.trunk/android/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index a4b76b9..0000000
Binary files a/03_source/mobile.trunk/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/03_source/mobile.trunk/android/gradle/wrapper/gradle-wrapper.properties b/03_source/mobile.trunk/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index c1d5e01..0000000
--- a/03_source/mobile.trunk/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
-networkTimeout=10000
-validateDistributionUrl=true
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/03_source/mobile.trunk/android/gradlew b/03_source/mobile.trunk/android/gradlew
deleted file mode 100755
index f5feea6..0000000
--- a/03_source/mobile.trunk/android/gradlew
+++ /dev/null
@@ -1,252 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-##############################################################################
-#
-# Gradle start up script for POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-# This is normally unused
-# shellcheck disable=SC2034
-APP_BASE_NAME=${0##*/}
-# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
-' "$PWD" ) || exit
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
- echo "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD=java
- if ! command -v java >/dev/null 2>&1
- then
- die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC2039,SC3045
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC2039,SC3045
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Collect all arguments for the java command:
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
-# and any embedded shellness will be escaped.
-# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
-# treated as '${Hostname}' itself on the command line.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
- die "xargs is not available"
-fi
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/03_source/mobile.trunk/android/gradlew.bat b/03_source/mobile.trunk/android/gradlew.bat
deleted file mode 100644
index 9b42019..0000000
--- a/03_source/mobile.trunk/android/gradlew.bat
+++ /dev/null
@@ -1,94 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-@rem SPDX-License-Identifier: Apache-2.0
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-@rem This is normally unused
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo. 1>&2
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
-echo. 1>&2
-echo Please set the JAVA_HOME variable in your environment to match the 1>&2
-echo location of your Java installation. 1>&2
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/03_source/mobile.trunk/android/settings.gradle b/03_source/mobile.trunk/android/settings.gradle
deleted file mode 100644
index 3b4431d..0000000
--- a/03_source/mobile.trunk/android/settings.gradle
+++ /dev/null
@@ -1,5 +0,0 @@
-include ':app'
-include ':capacitor-cordova-android-plugins'
-project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/')
-
-apply from: 'capacitor.settings.gradle'
\ No newline at end of file
diff --git a/03_source/mobile.trunk/android/variables.gradle b/03_source/mobile.trunk/android/variables.gradle
deleted file mode 100644
index 2c8e408..0000000
--- a/03_source/mobile.trunk/android/variables.gradle
+++ /dev/null
@@ -1,16 +0,0 @@
-ext {
- minSdkVersion = 23
- compileSdkVersion = 35
- targetSdkVersion = 35
- androidxActivityVersion = '1.9.2'
- androidxAppCompatVersion = '1.7.0'
- androidxCoordinatorLayoutVersion = '1.2.0'
- androidxCoreVersion = '1.15.0'
- androidxFragmentVersion = '1.8.4'
- coreSplashScreenVersion = '1.0.1'
- androidxWebkitVersion = '1.12.1'
- junitVersion = '4.13.2'
- androidxJunitVersion = '1.2.1'
- androidxEspressoCoreVersion = '3.6.1'
- cordovaAndroidVersion = '10.1.1'
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/capacitor.config.json b/03_source/mobile.trunk/capacitor.config.json
deleted file mode 100644
index 0f2dd5f..0000000
--- a/03_source/mobile.trunk/capacitor.config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "appId": "io.ionic.starter",
- "appName": "ionic-react-conference-app",
- "bundledWebRuntime": false,
- "npmClient": "npm",
- "webDir": "dist",
- "cordova": {}
-}
diff --git a/03_source/mobile.trunk/dev.sh b/03_source/mobile.trunk/dev.sh
deleted file mode 100755
index ab73a35..0000000
--- a/03_source/mobile.trunk/dev.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env bash
-
-while true; do
- yarn -D
-
- yarn run dev
-
- echo "restarting..."
- sleep 1
-done
diff --git a/03_source/mobile.trunk/dockerfile b/03_source/mobile.trunk/dockerfile
deleted file mode 100644
index 4f0cf38..0000000
--- a/03_source/mobile.trunk/dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-# Use official Node 18 base image
-FROM node:20-slim
-
-# Install pnpm globally
-# RUN npm install -g pnpm
-
-# Set working directory
-WORKDIR /app
-
-# Copy your application code (optional, comment out if not needed)
-# COPY . /app
-# RUN yarn
-
-# Default command (optional)
-CMD ["npm run start"]
diff --git a/03_source/mobile.trunk/firebase.json b/03_source/mobile.trunk/firebase.json
deleted file mode 100644
index 49a74df..0000000
--- a/03_source/mobile.trunk/firebase.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "hosting": {
- "public": "build",
- "rewrites": [
- {
- "source": "**",
- "destination": "/index.html"
- }
- ],
- "headers": [
- {
- "source": "**/static/**",
- "headers": [
- {
- "key": "Cache-Control",
- "value": "max-age=31536000"
- }
- ]
- },
- {
- "source": "**/*.@(jpg|jpeg|gif|png|svg)",
- "headers": [
- {
- "key": "Cache-Control",
- "value": "max-age=31536000"
- }
- ]
- }
- ]
- }
-}
diff --git a/03_source/mobile.trunk/index.html b/03_source/mobile.trunk/index.html
deleted file mode 100644
index 805b105..0000000
--- a/03_source/mobile.trunk/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
- Ionic Conference App
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.trunk/ionic.config.json b/03_source/mobile.trunk/ionic.config.json
deleted file mode 100644
index f610198..0000000
--- a/03_source/mobile.trunk/ionic.config.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "ionic-react-conference-app",
- "integrations": {
- "capacitor": {}
- },
- "type": "react"
-}
diff --git a/03_source/mobile.trunk/ios/.gitignore b/03_source/mobile.trunk/ios/.gitignore
deleted file mode 100644
index f470299..0000000
--- a/03_source/mobile.trunk/ios/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-App/build
-App/Pods
-App/output
-App/App/public
-DerivedData
-xcuserdata
-
-# Cordova plugins for Capacitor
-capacitor-cordova-ios-plugins
-
-# Generated Config files
-App/App/capacitor.config.json
-App/App/config.xml
diff --git a/03_source/mobile.trunk/ios/App/App.xcodeproj/project.pbxproj b/03_source/mobile.trunk/ios/App/App.xcodeproj/project.pbxproj
deleted file mode 100644
index d6d8154..0000000
--- a/03_source/mobile.trunk/ios/App/App.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,408 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 48;
- objects = {
-
-/* Begin PBXBuildFile section */
- 2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; };
- 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; };
- 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; };
- 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; };
- 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; };
- 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; };
- 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; };
- A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = ""; };
- 50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = ""; };
- 504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- 504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
- 504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; };
- AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; };
- FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 504EC3011FED79650016851F /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 504EC2FB1FED79650016851F = {
- isa = PBXGroup;
- children = (
- 504EC3061FED79650016851F /* App */,
- 504EC3051FED79650016851F /* Products */,
- 7F8756D8B27F46E3366F6CEA /* Pods */,
- 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */,
- );
- sourceTree = "";
- };
- 504EC3051FED79650016851F /* Products */ = {
- isa = PBXGroup;
- children = (
- 504EC3041FED79650016851F /* App.app */,
- );
- name = Products;
- sourceTree = "";
- };
- 504EC3061FED79650016851F /* App */ = {
- isa = PBXGroup;
- children = (
- 50379B222058CBB4000EE86E /* capacitor.config.json */,
- 504EC3071FED79650016851F /* AppDelegate.swift */,
- 504EC30B1FED79650016851F /* Main.storyboard */,
- 504EC30E1FED79650016851F /* Assets.xcassets */,
- 504EC3101FED79650016851F /* LaunchScreen.storyboard */,
- 504EC3131FED79650016851F /* Info.plist */,
- 2FAD9762203C412B000D30F8 /* config.xml */,
- 50B271D01FEDC1A000F3C39B /* public */,
- );
- path = App;
- sourceTree = "";
- };
- 7F8756D8B27F46E3366F6CEA /* Pods */ = {
- isa = PBXGroup;
- children = (
- FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */,
- AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */,
- );
- name = Pods;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 504EC3031FED79650016851F /* App */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */;
- buildPhases = (
- 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */,
- 504EC3001FED79650016851F /* Sources */,
- 504EC3011FED79650016851F /* Frameworks */,
- 504EC3021FED79650016851F /* Resources */,
- 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = App;
- productName = App;
- productReference = 504EC3041FED79650016851F /* App.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 504EC2FC1FED79650016851F /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 0920;
- TargetAttributes = {
- 504EC3031FED79650016851F = {
- CreatedOnToolsVersion = 9.2;
- LastSwiftMigration = 1100;
- ProvisioningStyle = Automatic;
- };
- };
- };
- buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */;
- compatibilityVersion = "Xcode 8.0";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 504EC2FB1FED79650016851F;
- packageReferences = (
- );
- productRefGroup = 504EC3051FED79650016851F /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 504EC3031FED79650016851F /* App */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 504EC3021FED79650016851F /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */,
- 50B271D11FEDC1A000F3C39B /* public in Resources */,
- 504EC30F1FED79650016851F /* Assets.xcassets in Resources */,
- 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */,
- 504EC30D1FED79650016851F /* Main.storyboard in Resources */,
- 2FAD9763203C412B000D30F8 /* config.xml in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
- showEnvVarsInLog = 0;
- };
- 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "[CP] Embed Pods Frameworks";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 504EC3001FED79650016851F /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 504EC3081FED79650016851F /* AppDelegate.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
- 504EC30B1FED79650016851F /* Main.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 504EC30C1FED79650016851F /* Base */,
- );
- name = Main.storyboard;
- sourceTree = "";
- };
- 504EC3101FED79650016851F /* LaunchScreen.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 504EC3111FED79650016851F /* Base */,
- );
- name = LaunchScreen.storyboard;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 504EC3141FED79650016851F /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- 504EC3151FED79650016851F /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 504EC3171FED79650016851F /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = App/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 1.0;
- OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
- PRODUCT_BUNDLE_IDENTIFIER = io.ionic.starter;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- 504EC3181FED79650016851F /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = App/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 14.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = io.ionic.starter;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 504EC3141FED79650016851F /* Debug */,
- 504EC3151FED79650016851F /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 504EC3171FED79650016851F /* Debug */,
- 504EC3181FED79650016851F /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 504EC2FC1FED79650016851F /* Project object */;
-}
diff --git a/03_source/mobile.trunk/ios/App/App.xcworkspace/contents.xcworkspacedata b/03_source/mobile.trunk/ios/App/App.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index b301e82..0000000
--- a/03_source/mobile.trunk/ios/App/App.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
diff --git a/03_source/mobile.trunk/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/03_source/mobile.trunk/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/03_source/mobile.trunk/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/03_source/mobile.trunk/ios/App/App/AppDelegate.swift b/03_source/mobile.trunk/ios/App/App/AppDelegate.swift
deleted file mode 100644
index c3cd83b..0000000
--- a/03_source/mobile.trunk/ios/App/App/AppDelegate.swift
+++ /dev/null
@@ -1,49 +0,0 @@
-import UIKit
-import Capacitor
-
-@UIApplicationMain
-class AppDelegate: UIResponder, UIApplicationDelegate {
-
- var window: UIWindow?
-
- func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
- // Override point for customization after application launch.
- return true
- }
-
- func applicationWillResignActive(_ application: UIApplication) {
- // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
- // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
- }
-
- func applicationDidEnterBackground(_ application: UIApplication) {
- // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
- // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
- }
-
- func applicationWillEnterForeground(_ application: UIApplication) {
- // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
- }
-
- func applicationDidBecomeActive(_ application: UIApplication) {
- // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
- }
-
- func applicationWillTerminate(_ application: UIApplication) {
- // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
- }
-
- func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
- // Called when the app was launched with a url. Feel free to add additional processing here,
- // but if you want the App API to support tracking app url opens, make sure to keep this call
- return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
- }
-
- func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
- // Called when the app was launched with an activity, including Universal Links.
- // Feel free to add additional processing here, but if you want the App API to support
- // tracking app url opens, make sure to keep this call
- return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
- }
-
-}
diff --git a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/03_source/mobile.trunk/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
deleted file mode 100644
index f6a7b1f..0000000
Binary files a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png and /dev/null differ
diff --git a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/03_source/mobile.trunk/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 9b7d382..0000000
--- a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "images" : [
- {
- "filename" : "AppIcon-512@2x.png",
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Contents.json b/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Contents.json
deleted file mode 100644
index da4a164..0000000
--- a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json b/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
deleted file mode 100644
index d7d96a6..0000000
--- a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "splash-2732x2732-2.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "filename" : "splash-2732x2732-1.png",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "filename" : "splash-2732x2732.png",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png b/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png
deleted file mode 100644
index 009110e..0000000
Binary files a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png and /dev/null differ
diff --git a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png b/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png
deleted file mode 100644
index 009110e..0000000
Binary files a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png and /dev/null differ
diff --git a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png b/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png
deleted file mode 100644
index 009110e..0000000
Binary files a/03_source/mobile.trunk/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png and /dev/null differ
diff --git a/03_source/mobile.trunk/ios/App/App/Base.lproj/LaunchScreen.storyboard b/03_source/mobile.trunk/ios/App/App/Base.lproj/LaunchScreen.storyboard
deleted file mode 100644
index e7ae5d7..0000000
--- a/03_source/mobile.trunk/ios/App/App/Base.lproj/LaunchScreen.storyboard
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.trunk/ios/App/App/Base.lproj/Main.storyboard b/03_source/mobile.trunk/ios/App/App/Base.lproj/Main.storyboard
deleted file mode 100644
index b44df7b..0000000
--- a/03_source/mobile.trunk/ios/App/App/Base.lproj/Main.storyboard
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/03_source/mobile.trunk/ios/App/App/Info.plist b/03_source/mobile.trunk/ios/App/App/Info.plist
deleted file mode 100644
index 70a2849..0000000
--- a/03_source/mobile.trunk/ios/App/App/Info.plist
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleDisplayName
- ionic-react-conference-app
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- $(MARKETING_VERSION)
- CFBundleVersion
- $(CURRENT_PROJECT_VERSION)
- LSRequiresIPhoneOS
-
- UILaunchStoryboardName
- LaunchScreen
- UIMainStoryboardFile
- Main
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIViewControllerBasedStatusBarAppearance
-
-
-
diff --git a/03_source/mobile.trunk/ios/App/Podfile b/03_source/mobile.trunk/ios/App/Podfile
deleted file mode 100644
index d7565c9..0000000
--- a/03_source/mobile.trunk/ios/App/Podfile
+++ /dev/null
@@ -1,29 +0,0 @@
-require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers'
-
-platform :ios, '14.0'
-use_frameworks!
-
-# workaround to avoid Xcode caching of Pods that requires
-# Product -> Clean Build Folder after new Cordova plugins installed
-# Requires CocoaPods 1.6 or newer
-install! 'cocoapods', :disable_input_output_paths => true
-
-def capacitor_pods
- pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
- pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
- pod 'CapacitorBarcodeScanner', :path => '../../node_modules/@capacitor/barcode-scanner'
- pod 'CapacitorClipboard', :path => '../../node_modules/@capacitor/clipboard'
- pod 'CapacitorGeolocation', :path => '../../node_modules/@capacitor/geolocation'
- pod 'CapacitorGoogleMaps', :path => '../../node_modules/@capacitor/google-maps'
- pod 'CapacitorPreferences', :path => '../../node_modules/@capacitor/preferences'
- pod 'CapacitorShare', :path => '../../node_modules/@capacitor/share'
-end
-
-target 'App' do
- capacitor_pods
- # Add your Pods here
-end
-
-post_install do |installer|
- assertDeploymentTarget(installer)
-end
diff --git a/03_source/mobile.trunk/ios/App/Podfile.lock b/03_source/mobile.trunk/ios/App/Podfile.lock
deleted file mode 100644
index 29efe53..0000000
--- a/03_source/mobile.trunk/ios/App/Podfile.lock
+++ /dev/null
@@ -1,28 +0,0 @@
-PODS:
- - Capacitor (7.0.1):
- - CapacitorCordova
- - CapacitorCordova (7.0.1)
- - CapacitorPreferences (7.0.0):
- - Capacitor
-
-DEPENDENCIES:
- - "Capacitor (from `../../node_modules/@capacitor/ios`)"
- - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)"
- - "CapacitorPreferences (from `../../node_modules/@capacitor/preferences`)"
-
-EXTERNAL SOURCES:
- Capacitor:
- :path: "../../node_modules/@capacitor/ios"
- CapacitorCordova:
- :path: "../../node_modules/@capacitor/ios"
- CapacitorPreferences:
- :path: "../../node_modules/@capacitor/preferences"
-
-SPEC CHECKSUMS:
- Capacitor: de199cba6c8b20995428ad0b7cb0bc6ca625ffd4
- CapacitorCordova: 63d476958d5022d76f197031e8b7ea3519988c64
- CapacitorPreferences: 8e4bef1f937fc991a19d7ea99330c36a62edd24b
-
-PODFILE CHECKSUM: bc4412675d30bc194ab5961211929e1e7de79579
-
-COCOAPODS: 1.16.2
diff --git a/03_source/mobile.trunk/package.json b/03_source/mobile.trunk/package.json
deleted file mode 100644
index fd2dd7b..0000000
--- a/03_source/mobile.trunk/package.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "name": "ionic-react-conference-app",
- "version": "0.0.0",
- "description": "Ionic Conference App",
- "author": "Ionic Team ",
- "license": "MIT",
- "private": true,
- "dependencies": {
- "@capacitor/android": "7.0.1",
- "@capacitor/barcode-scanner": "^2.0.3",
- "@capacitor/clipboard": "^7.0.1",
- "@capacitor/core": "^7.0.0",
- "@capacitor/geolocation": "^7.1.2",
- "@capacitor/google-maps": "^7.0.2",
- "@capacitor/ios": "7.0.1",
- "@capacitor/preferences": "^7.0.0",
- "@capacitor/share": "^7.0.1",
- "@hookform/resolvers": "^4.1.3",
- "@ionic/react": "^8.5.0",
- "@ionic/react-router": "^8.5.0",
- "@ionic/storage": "^4.0.0",
- "@mdx-js/react": "^3.1.0",
- "@react-hook/window-size": "^3.1.1",
- "@types/leaflet": "^1.9.17",
- "@types/react-redux": "^7.1.34",
- "axios": "^1.9.0",
- "date-fns": "^2.25.0",
- "ionicons": "^7.1.2",
- "leaflet": "^1.9.4",
- "pigeon-maps": "^0.22.1",
- "pullstate": "^1",
- "react": "19.0.0",
- "react-canvas-draw": "^1.2.1",
- "react-color": "^2.19.3",
- "react-confetti": "^6.4.0",
- "react-dom": "19.0.0",
- "react-hook-form": "^7.55.0",
- "react-iconly": "^2.2.10",
- "react-leaflet": "^5.0.0",
- "react-markdown": "^10.1.0",
- "react-qr-code": "^2.0.15",
- "react-qr-reader": "^3.0.0-beta-1",
- "react-redux": "^9.2.0",
- "react-router": "^5.3.4",
- "react-router-dom": "^5.3.4",
- "react-spinners": "^0.17.0",
- "react-use": "^17.6.0",
- "reselect": "^4.0.0",
- "sass": "^1.85.1",
- "swiper": "^11.2.8",
- "use-sound": "^5.0.0",
- "zod": "^3.24.2"
- },
- "scripts": {
- "start": "npm run dev",
- "dev": "vite --force --host 0.0.0.0 --cors",
- "ionic:serve": "vite",
- "ionic:build": "tsc && vite build",
- "build": "tsc && vite build",
- "preview": "vite preview",
- "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
- "precommit": "npm run format && lint-staged"
- },
- "eslintConfig": {
- "extends": "react-app"
- },
- "browserslist": [
- ">0.2%",
- "not dead",
- "not ie <= 11",
- "not op_mini all"
- ],
- "devDependencies": {
- "@capacitor/cli": "^7.0.0",
- "@testing-library/react": "^9.3.1",
- "@types/jest": "24.0.18",
- "@types/react": "19.0.10",
- "@types/react-dom": "19.0.4",
- "@types/react-router": "^5.1.20",
- "@types/react-router-dom": "^5.3.3",
- "@vitejs/plugin-react": "^4.3.4",
- "lint-staged": "^13.2.0",
- "prettier": "^3.5.3",
- "typescript": "^5.8.2",
- "vite": "^6.2.0"
- },
- "lint-staged": {
- "src/**/*.{js,jsx,ts,tsx,json,md}": [
- "prettier --write",
- "git add"
- ]
- }
-}
diff --git a/03_source/mobile.trunk/public/assets/DemoBankingUi/alan.jpg b/03_source/mobile.trunk/public/assets/DemoBankingUi/alan.jpg
deleted file mode 100644
index 98093f9..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoBankingUi/alan.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoBankingUi/chip.png b/03_source/mobile.trunk/public/assets/DemoBankingUi/chip.png
deleted file mode 100644
index 7861be2..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoBankingUi/chip.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoBankingUi/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoBankingUi/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoBankingUi/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoBankingUi/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoBankingUi/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoBankingUi/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoBankingUi/mastercard.png b/03_source/mobile.trunk/public/assets/DemoBankingUi/mastercard.png
deleted file mode 100644
index b4f6667..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoBankingUi/mastercard.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoBankingUi/shapes.svg b/03_source/mobile.trunk/public/assets/DemoBankingUi/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoBankingUi/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoBankingUi/visa.png b/03_source/mobile.trunk/public/assets/DemoBankingUi/visa.png
deleted file mode 100644
index 011d6f9..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoBankingUi/visa.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoDictionaryApp/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoDictionaryApp/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoDictionaryApp/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoDictionaryApp/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoDictionaryApp/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoDictionaryApp/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoDictionaryApp/shapes.svg b/03_source/mobile.trunk/public/assets/DemoDictionaryApp/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoDictionaryApp/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoProfileExample/.gitkeep b/03_source/mobile.trunk/public/assets/DemoProfileExample/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/public/assets/DemoQuizApp/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoQuizApp/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoQuizApp/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoQuizApp/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoQuizApp/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoQuizApp/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoQuizApp/main.png b/03_source/mobile.trunk/public/assets/DemoQuizApp/main.png
deleted file mode 100644
index 42f8f63..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoQuizApp/main.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoQuizApp/shapes.svg b/03_source/mobile.trunk/public/assets/DemoQuizApp/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoQuizApp/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/.gitkeep b/03_source/mobile.trunk/public/assets/DemoReactAddToCart/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/camera.jpeg b/03_source/mobile.trunk/public/assets/DemoReactAddToCart/camera.jpeg
deleted file mode 100644
index d212e39..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/camera.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoReactAddToCart/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoReactAddToCart/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/macbook.jpeg b/03_source/mobile.trunk/public/assets/DemoReactAddToCart/macbook.jpeg
deleted file mode 100644
index 19930e3..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/macbook.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/shapes.svg b/03_source/mobile.trunk/public/assets/DemoReactAddToCart/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/tv.jpeg b/03_source/mobile.trunk/public/assets/DemoReactAddToCart/tv.jpeg
deleted file mode 100644
index 5d1f0d0..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactAddToCart/tv.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactLogin/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoReactLogin/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactLogin/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactLogin/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoReactLogin/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactLogin/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactLogin/login2.jpeg b/03_source/mobile.trunk/public/assets/DemoReactLogin/login2.jpeg
deleted file mode 100644
index 366dcf8..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactLogin/login2.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactLogin/shapes.svg b/03_source/mobile.trunk/public/assets/DemoReactLogin/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactLogin/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/alan.jpg b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/alan.jpg
deleted file mode 100644
index 98093f9..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/alan.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/shapes.svg b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/blue.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/blue.json
deleted file mode 100644
index ec69043..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/blue.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "blue",
- "tab_bar_background_color": "blue",
- "toolbar_color": "",
- "tab_bar_color": "",
- "tab_bar_activated_color": "",
-
- "main_color": "",
- "light_color": "",
-
- "main_color_tint": "",
- "main_color_shade": "",
-
- "light_color_tint": "",
- "light_color_shade": ""
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/coffeebrown.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/coffeebrown.json
deleted file mode 100644
index 8d15f25..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/coffeebrown.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#5f361e",
- "tab_bar_background_color": "#5f361e",
- "toolbar_color": "#d1bfb5",
- "tab_bar_color": "#886551",
- "tab_bar_activated_color": "",
-
- "main_color": "#5f361e",
- "light_color": "#886551",
-
- "main_color_tint": "#855a41",
- "main_color_shade": "#57331e",
-
- "light_color_tint": "#9c7d6b",
- "light_color_shade": "#61412f"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/coffeebrown.png b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/coffeebrown.png
deleted file mode 100644
index 7e4df1d..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/coffeebrown.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/earthytones.png b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/earthytones.png
deleted file mode 100644
index 69de1b0..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/earthytones.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/fireyred.png b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/fireyred.png
deleted file mode 100644
index ce87056..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/fireyred.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/leafygreen.png b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/leafygreen.png
deleted file mode 100644
index 206247c..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/leafygreen.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/moodyblue.png b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/moodyblue.png
deleted file mode 100644
index 6b3aaa8..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/moodyblue.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/peelyorange.png b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/peelyorange.png
deleted file mode 100644
index a2f5685..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/covers/peelyorange.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/earthytones.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/earthytones.json
deleted file mode 100644
index 262c9c1..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/earthytones.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#c4b0c4",
- "tab_bar_background_color": "#c4b0c4",
- "toolbar_color": "#5c4153",
- "tab_bar_color": "#917788",
- "tab_bar_activated_color": "#5c4153",
-
- "main_color": "#5c4153",
- "light_color": "#917788",
-
- "main_color_tint": "#6b5463",
- "main_color_shade": "#4d3545",
-
- "light_color_tint": "#a893a1",
- "light_color_shade": "#74606d"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/fireyred.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/fireyred.json
deleted file mode 100644
index 5d5348f..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/fireyred.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#c93608",
- "tab_bar_background_color": "#c93608",
- "toolbar_color": "",
- "tab_bar_color": "#852506",
- "tab_bar_activated_color": "",
-
- "main_color": "#c93608",
- "light_color": "#c95834",
-
- "main_color_tint": "#aa614a",
- "main_color_shade": "#692611",
-
- "light_color_tint": "#d67151",
- "light_color_shade": "#a85439"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/green.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/green.json
deleted file mode 100644
index cb41fcf..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/green.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "green",
- "tab_bar_background_color": "green",
- "toolbar_color": "",
- "tab_bar_color": "",
- "tab_bar_activated_color": "",
-
- "main_color": "",
- "light_color": "",
-
- "main_color_tint": "",
- "main_color_shade": "",
-
- "light_color_tint": "",
- "light_color_shade": ""
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/leafygreen.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/leafygreen.json
deleted file mode 100644
index f3e86ce..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/leafygreen.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#336b36",
- "tab_bar_background_color": "#336b36",
- "toolbar_color": "white",
- "tab_bar_color": "#1c421d",
- "tab_bar_activated_color": "white",
-
- "main_color": "#336b36",
- "light_color": "#517953",
-
- "main_color_tint": "#497a4b",
- "main_color_shade": "#305832",
-
- "light_color_tint": "#738574",
- "light_color_shade": "#485849"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/moodyblue.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/moodyblue.json
deleted file mode 100644
index db1ba2f..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/moodyblue.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#7baec7",
- "tab_bar_background_color": "#7baec7",
- "toolbar_color": "",
- "tab_bar_color": "#49758b",
- "tab_bar_activated_color": "",
-
- "main_color": "#7baec7",
- "light_color": "#90bbcf",
-
- "main_color_tint": "#96c0d5",
- "main_color_shade": "#6b93a7",
-
- "light_color_tint": "#c3e2f1",
- "light_color_shade": "#89aec0"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/peelyorange.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/peelyorange.json
deleted file mode 100644
index f7f04f2..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/peelyorange.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#fd8f38",
- "tab_bar_background_color": "#fd8f38",
- "toolbar_color": "#815208",
- "tab_bar_color": "#ffb67c",
- "tab_bar_activated_color": "#815208",
-
- "main_color": "#e49200",
- "light_color": "#ffb67c",
-
- "main_color_tint": "#e6ae4b",
- "main_color_shade": "#b4780c",
-
- "light_color_tint": "#fad4b6",
- "light_color_shade": "#ff9c4e"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/red.json b/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/red.json
deleted file mode 100644
index be9c737..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactProfileDashboardUi/themes/red.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "red",
- "tab_bar_background_color": "red",
- "toolbar_color": "",
- "tab_bar_color": "",
- "tab_bar_activated_color": "",
-
- "main_color": "",
- "light_color": "",
-
- "main_color_tint": "",
- "main_color_shade": "",
-
- "light_color_tint": "",
- "light_color_shade": ""
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/blue.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/blue.json
deleted file mode 100644
index ec69043..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/blue.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "blue",
- "tab_bar_background_color": "blue",
- "toolbar_color": "",
- "tab_bar_color": "",
- "tab_bar_activated_color": "",
-
- "main_color": "",
- "light_color": "",
-
- "main_color_tint": "",
- "main_color_shade": "",
-
- "light_color_tint": "",
- "light_color_shade": ""
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/coffeebrown.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/coffeebrown.json
deleted file mode 100644
index 8d15f25..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/coffeebrown.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#5f361e",
- "tab_bar_background_color": "#5f361e",
- "toolbar_color": "#d1bfb5",
- "tab_bar_color": "#886551",
- "tab_bar_activated_color": "",
-
- "main_color": "#5f361e",
- "light_color": "#886551",
-
- "main_color_tint": "#855a41",
- "main_color_shade": "#57331e",
-
- "light_color_tint": "#9c7d6b",
- "light_color_shade": "#61412f"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/coffeebrown.png b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/coffeebrown.png
deleted file mode 100644
index 7e4df1d..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/coffeebrown.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/earthytones.png b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/earthytones.png
deleted file mode 100644
index 69de1b0..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/earthytones.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/fireyred.png b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/fireyred.png
deleted file mode 100644
index ce87056..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/fireyred.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/leafygreen.png b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/leafygreen.png
deleted file mode 100644
index 206247c..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/leafygreen.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/moodyblue.png b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/moodyblue.png
deleted file mode 100644
index 6b3aaa8..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/moodyblue.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/peelyorange.png b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/peelyorange.png
deleted file mode 100644
index a2f5685..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/covers/peelyorange.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/earthytones.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/earthytones.json
deleted file mode 100644
index 262c9c1..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/earthytones.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#c4b0c4",
- "tab_bar_background_color": "#c4b0c4",
- "toolbar_color": "#5c4153",
- "tab_bar_color": "#917788",
- "tab_bar_activated_color": "#5c4153",
-
- "main_color": "#5c4153",
- "light_color": "#917788",
-
- "main_color_tint": "#6b5463",
- "main_color_shade": "#4d3545",
-
- "light_color_tint": "#a893a1",
- "light_color_shade": "#74606d"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/fireyred.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/fireyred.json
deleted file mode 100644
index 5d5348f..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/fireyred.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#c93608",
- "tab_bar_background_color": "#c93608",
- "toolbar_color": "",
- "tab_bar_color": "#852506",
- "tab_bar_activated_color": "",
-
- "main_color": "#c93608",
- "light_color": "#c95834",
-
- "main_color_tint": "#aa614a",
- "main_color_shade": "#692611",
-
- "light_color_tint": "#d67151",
- "light_color_shade": "#a85439"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/green.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/green.json
deleted file mode 100644
index cb41fcf..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/green.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "green",
- "tab_bar_background_color": "green",
- "toolbar_color": "",
- "tab_bar_color": "",
- "tab_bar_activated_color": "",
-
- "main_color": "",
- "light_color": "",
-
- "main_color_tint": "",
- "main_color_shade": "",
-
- "light_color_tint": "",
- "light_color_shade": ""
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/leafygreen.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/leafygreen.json
deleted file mode 100644
index f3e86ce..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/leafygreen.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#336b36",
- "tab_bar_background_color": "#336b36",
- "toolbar_color": "white",
- "tab_bar_color": "#1c421d",
- "tab_bar_activated_color": "white",
-
- "main_color": "#336b36",
- "light_color": "#517953",
-
- "main_color_tint": "#497a4b",
- "main_color_shade": "#305832",
-
- "light_color_tint": "#738574",
- "light_color_shade": "#485849"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/moodyblue.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/moodyblue.json
deleted file mode 100644
index db1ba2f..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/moodyblue.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#7baec7",
- "tab_bar_background_color": "#7baec7",
- "toolbar_color": "",
- "tab_bar_color": "#49758b",
- "tab_bar_activated_color": "",
-
- "main_color": "#7baec7",
- "light_color": "#90bbcf",
-
- "main_color_tint": "#96c0d5",
- "main_color_shade": "#6b93a7",
-
- "light_color_tint": "#c3e2f1",
- "light_color_shade": "#89aec0"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/peelyorange.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/peelyorange.json
deleted file mode 100644
index f7f04f2..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/peelyorange.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "#fd8f38",
- "tab_bar_background_color": "#fd8f38",
- "toolbar_color": "#815208",
- "tab_bar_color": "#ffb67c",
- "tab_bar_activated_color": "#815208",
-
- "main_color": "#e49200",
- "light_color": "#ffb67c",
-
- "main_color_tint": "#e6ae4b",
- "main_color_shade": "#b4780c",
-
- "light_color_tint": "#fad4b6",
- "light_color_shade": "#ff9c4e"
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/red.json b/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/red.json
deleted file mode 100644
index be9c737..0000000
--- a/03_source/mobile.trunk/public/assets/DemoReactThemeSwitcher/themes/red.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "toolbar_background_color": "red",
- "tab_bar_background_color": "red",
- "toolbar_color": "",
- "tab_bar_color": "",
- "tab_bar_activated_color": "",
-
- "main_color": "",
- "light_color": "",
-
- "main_color_tint": "",
- "main_color_shade": "",
-
- "light_color_tint": "",
- "light_color_shade": ""
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/public/assets/DemoRecipeApp/bookmark.png b/03_source/mobile.trunk/public/assets/DemoRecipeApp/bookmark.png
deleted file mode 100644
index 4077d82..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoRecipeApp/bookmark.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoRecipeApp/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoRecipeApp/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoRecipeApp/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoRecipeApp/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoRecipeApp/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoRecipeApp/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoRecipeApp/placeholder.png b/03_source/mobile.trunk/public/assets/DemoRecipeApp/placeholder.png
deleted file mode 100644
index 1c2791a..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoRecipeApp/placeholder.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoRecipeApp/shapes.svg b/03_source/mobile.trunk/public/assets/DemoRecipeApp/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoRecipeApp/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoShopAppUi/cart.png b/03_source/mobile.trunk/public/assets/DemoShopAppUi/cart.png
deleted file mode 100644
index dd0f595..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoShopAppUi/cart.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoShopAppUi/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoShopAppUi/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoShopAppUi/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoShopAppUi/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoShopAppUi/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoShopAppUi/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoShopAppUi/shapes.svg b/03_source/mobile.trunk/public/assets/DemoShopAppUi/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoShopAppUi/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoShopAppUi/shop.png b/03_source/mobile.trunk/public/assets/DemoShopAppUi/shop.png
deleted file mode 100644
index a3a8bba..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoShopAppUi/shop.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/1.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/1.png
deleted file mode 100644
index 8a5fa94..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/1.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/10.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/10.png
deleted file mode 100644
index b68cff1..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/10.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/2.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/2.png
deleted file mode 100644
index 79a2bc2..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/2.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/3.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/3.png
deleted file mode 100644
index 52a6d66..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/3.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/4.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/4.png
deleted file mode 100644
index f3cbf68..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/4.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/5.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/5.png
deleted file mode 100644
index 7957e0b..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/5.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/6.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/6.png
deleted file mode 100644
index 938c186..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/6.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/7.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/7.png
deleted file mode 100644
index 777438b..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/7.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/8.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/8.png
deleted file mode 100644
index e74c488..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/8.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/9.png b/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/9.png
deleted file mode 100644
index 88bdf32..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSkeletonText/scenery/9.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSkeletonText/shapes.svg b/03_source/mobile.trunk/public/assets/DemoSkeletonText/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoSkeletonText/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/autumn.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/autumn.png
deleted file mode 100644
index 3725b34..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/autumn.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar.jpeg
deleted file mode 100644
index 9a30b74..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar1.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar1.png
deleted file mode 100644
index 094634d..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar1.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar2.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar2.png
deleted file mode 100644
index a787854..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar2.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar3.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar3.png
deleted file mode 100644
index 084d895..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar3.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar4.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar4.png
deleted file mode 100644
index c0c8738..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar4.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar5.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar5.png
deleted file mode 100644
index 050e908..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar5.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar6.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar6.png
deleted file mode 100644
index 8114df3..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/avatar6.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover1.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover1.jpeg
deleted file mode 100644
index eeb888c..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover1.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover2.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover2.jpeg
deleted file mode 100644
index 2e5074e..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover2.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover4.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover4.jpeg
deleted file mode 100644
index f31d1f9..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover4.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover5.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover5.jpeg
deleted file mode 100644
index 1e1fea9..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover5.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover6.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover6.jpeg
deleted file mode 100644
index e28dd31..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/cover6.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/flower.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/flower.jpeg
deleted file mode 100644
index 3f56d8c..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/flower.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/h.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/h.jpeg
deleted file mode 100644
index a5be47e..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/h.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/icon/favicon.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/icon/icon.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/ocean.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/ocean.jpeg
deleted file mode 100644
index 22892f1..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/ocean.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/shapes.svg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/spring.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/spring.png
deleted file mode 100644
index 2726d11..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/spring.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/summer.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/summer.png
deleted file mode 100644
index ae4def9..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/summer.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/van.jpeg b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/van.jpeg
deleted file mode 100644
index f73f338..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/van.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/winter.png b/03_source/mobile.trunk/public/assets/DemoSlidingProfile/winter.png
deleted file mode 100644
index 81694c9..0000000
Binary files a/03_source/mobile.trunk/public/assets/DemoSlidingProfile/winter.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/ScoreBoard/icon/favicon.png b/03_source/mobile.trunk/public/assets/ScoreBoard/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/ScoreBoard/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/ScoreBoard/icon/icon.png b/03_source/mobile.trunk/public/assets/ScoreBoard/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/ScoreBoard/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/ScoreBoard/icons/crown_ionicreacthub.png b/03_source/mobile.trunk/public/assets/ScoreBoard/icons/crown_ionicreacthub.png
deleted file mode 100644
index f5e4faf..0000000
Binary files a/03_source/mobile.trunk/public/assets/ScoreBoard/icons/crown_ionicreacthub.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/ScoreBoard/icons/dashboard_ionicreacthub.png b/03_source/mobile.trunk/public/assets/ScoreBoard/icons/dashboard_ionicreacthub.png
deleted file mode 100644
index 856b78d..0000000
Binary files a/03_source/mobile.trunk/public/assets/ScoreBoard/icons/dashboard_ionicreacthub.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/ScoreBoard/scoreboardheader.jpeg b/03_source/mobile.trunk/public/assets/ScoreBoard/scoreboardheader.jpeg
deleted file mode 100644
index fe4d17c..0000000
Binary files a/03_source/mobile.trunk/public/assets/ScoreBoard/scoreboardheader.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/ScoreBoard/shapes.svg b/03_source/mobile.trunk/public/assets/ScoreBoard/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/ScoreBoard/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/WeatherDemo/icon/favicon.png b/03_source/mobile.trunk/public/assets/WeatherDemo/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/WeatherDemo/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/WeatherDemo/icon/icon.png b/03_source/mobile.trunk/public/assets/WeatherDemo/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/WeatherDemo/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/WeatherDemo/map.png b/03_source/mobile.trunk/public/assets/WeatherDemo/map.png
deleted file mode 100644
index 585e1b7..0000000
Binary files a/03_source/mobile.trunk/public/assets/WeatherDemo/map.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/WeatherDemo/shapes.svg b/03_source/mobile.trunk/public/assets/WeatherDemo/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/WeatherDemo/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/WeatherDemo/temp.png b/03_source/mobile.trunk/public/assets/WeatherDemo/temp.png
deleted file mode 100644
index 981b728..0000000
Binary files a/03_source/mobile.trunk/public/assets/WeatherDemo/temp.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/WeatherDemo/temp2.png b/03_source/mobile.trunk/public/assets/WeatherDemo/temp2.png
deleted file mode 100644
index 47a19c0..0000000
Binary files a/03_source/mobile.trunk/public/assets/WeatherDemo/temp2.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/WeatherDemo/wind.png b/03_source/mobile.trunk/public/assets/WeatherDemo/wind.png
deleted file mode 100644
index 9bfa6ee..0000000
Binary files a/03_source/mobile.trunk/public/assets/WeatherDemo/wind.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/data/data.json b/03_source/mobile.trunk/public/assets/data/data.json
deleted file mode 100644
index 44f6125..0000000
--- a/03_source/mobile.trunk/public/assets/data/data.json
+++ /dev/null
@@ -1,467 +0,0 @@
-{
- "schedule": [
- {
- "date": "2047-05-17",
- "groups": [
- {
- "time": "8:00 am",
- "sessions": [
- {
- "name": "Breakfast",
- "timeStart": "8:00 am",
- "timeEnd": "9:00 am",
- "location": "Dining Hall",
- "tracks": ["Food"],
- "id": "1"
- }
- ]
- },
- {
- "time": "9:15 am",
- "sessions": [
- {
- "name": "Getting Started with Ionic",
- "location": "Hall 2",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Ted Turtle"],
- "timeStart": "9:30 am",
- "timeEnd": "9:45 am",
- "tracks": ["Ionic"],
- "id": "2"
- },
- {
- "name": "Ionic Tooling",
- "location": "Executive Ballroom",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Rachel Rabbit"],
- "timeStart": "9:45 am",
- "timeEnd": "10:00 am",
- "tracks": ["Tooling"],
- "id": "3"
- },
- {
- "name": "University of Ionic",
- "location": "Hall 3",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Ellie Elephant"],
- "timeStart": "9:15 am",
- "timeEnd": "9:30 am",
- "tracks": ["Ionic"],
- "id": "4"
- }
- ]
- },
- {
- "time": "10:00 am",
- "sessions": [
- {
- "name": "Migrating to Ionic",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Eva Eagle", "Lionel Lion"],
- "timeStart": "10:00 am",
- "timeEnd": "10:15 am",
- "tracks": ["Ionic"],
- "id": "5"
- },
- {
- "name": "What's New in React",
- "location": "Hall 3",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Rachel Rabbit"],
- "timeStart": "10:15 am",
- "timeEnd": "10:30 am",
- "tracks": ["React"],
- "id": "6"
- },
- {
- "name": "The Evolution of Ionicons",
- "location": "Hall 2",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Isabella Iguana", "Eva Eagle"],
- "timeStart": "10:15 am",
- "timeEnd": "10:30 am",
- "tracks": ["Design"],
- "id": "7"
- },
- {
- "name": "Ionic Pro",
- "location": "Grand Ballroom A",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Charlie Cheetah"],
- "timeStart": "10:45 am",
- "timeEnd": "11:00 am",
- "tracks": ["Services"],
- "id": "8"
- }
- ]
- },
- {
- "time": "11:00 am",
- "sessions": [
- {
- "name": "Ionic Workshop",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Karl Kitten", "Lionel Lion"],
- "timeStart": "11:00 am",
- "timeEnd": "11:45 am",
- "tracks": ["Workshop"],
- "id": "9"
- },
- {
- "name": "Community Interaction",
- "location": "Hall 3",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Lionel Lion", "Gino Giraffe"],
- "timeStart": "11:30 am",
- "timeEnd": "11:50 am",
- "tracks": ["Communication"],
- "id": "10"
- },
- {
- "name": "Navigation in Ionic",
- "location": "Grand Ballroom A",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Rachel Rabbit", "Eva Eagle"],
- "timeStart": "11:30 am",
- "timeEnd": "12:00 pm",
- "tracks": ["Navigation"],
- "id": "11"
- }
- ]
- },
- {
- "time": "12:00 pm",
- "sessions": [
- {
- "name": "Lunch",
- "location": "Dining Hall",
- "description": "Come grab lunch with all the Ionic fanatics and talk all things Ionic",
- "timeStart": "12:00 pm",
- "timeEnd": "1:00 pm",
- "tracks": ["Food"],
- "id": "12"
- }
- ]
- },
- {
- "time": "1:00 pm",
- "sessions": [
- {
- "name": "Ionic in the Enterprise",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Paul Puppy"],
- "timeStart": "1:00 pm",
- "timeEnd": "1:15 pm",
- "tracks": ["Communication"],
- "id": "13"
- },
- {
- "name": "Ionic Worldwide",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Gino Giraffe"],
- "timeStart": "1:15 pm",
- "timeEnd": "1:30 pm",
- "tracks": ["Communication"],
- "id": "14"
- },
- {
- "name": "The Ionic Package",
- "location": "Grand Ballroom B",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Molly Mouse", "Burt Bear"],
- "timeStart": "1:30 pm",
- "timeEnd": "2:00 pm",
- "tracks": ["Services"],
- "id": "15"
- }
- ]
- },
- {
- "time": "2:00 pm",
- "sessions": [
- {
- "name": "Push Notifications in Ionic",
- "location": "Hall 2",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Burt Bear", "Charlie Cheetah"],
- "timeStart": "2:00 pm",
- "timeEnd": "2:30 pm",
- "tracks": ["Services"],
- "id": "16"
- },
- {
- "name": "Ionic Documentation",
- "location": "Grand Ballroom B",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Donald Duck"],
- "timeStart": "2:30 pm",
- "timeEnd": "2:45 pm",
- "tracks": ["Documentation"],
- "id": "17"
- },
- {
- "name": "UX in Ionic",
- "location": "Hall 3",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Isabella Iguana", "Ellie Elephant"],
- "timeStart": "2:45 pm",
- "timeEnd": "3:00 pm",
- "tracks": ["Design"],
- "id": "18"
- }
- ]
- },
- {
- "time": "3:00 pm",
- "sessions": [
- {
- "name": "Building with React and Ionic",
- "location": "Hall 1",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Ted Turtle"],
- "timeStart": "3:00 pm",
- "timeEnd": "3:30 pm",
- "tracks": ["React"],
- "id": "19"
- },
- {
- "name": "Mobile States",
- "location": "Hall 2",
- "description": "Mobile devices and browsers are now advanced enough that developers can build native-quality mobile apps using open web technologies like HTML5, Javascript, and CSS. In this talk, we’ll provide background on why and how we created Ionic, the design decisions made as we integrated Ionic with React, and the performance considerations for mobile platforms that our team had to overcome. We’ll also review new and upcoming Ionic features, and talk about the hidden powers and benefits of combining mobile app development and React.",
- "speakerNames": ["Rachel Rabbit"],
- "timeStart": "3:30 pm",
- "timeEnd": "3:45 pm",
- "tracks": ["Navigation"],
- "id": "20"
- }
- ]
- }
- ]
- }
- ],
-
- "speakers": [
- {
- "name": "Burt Bear",
- "profilePic": "/assets/img/speakers/bear.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Burt is a Bear. Burt's interests include poetry, dashing space heroes, and lions.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "burt@example.com",
- "phone": "+1-541-754-3010",
- "id": "1"
- },
- {
- "name": "Charlie Cheetah",
- "profilePic": "/assets/img/speakers/cheetah.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Charlie is a Cheetah. Charlie's interests include country music, plush animals, pyrotechnics, and skeletons.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "charlie@example.com",
- "phone": "+1-541-754-3010",
- "id": "2"
- },
- {
- "name": "Donald Duck",
- "profilePic": "/assets/img/speakers/duck.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Donald is a Duck. Donald's interests include carpentry, superheroes, merpeople, and glam rock.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "donald@example.com",
- "phone": "+1-541-754-3010",
- "id": "3"
- },
- {
- "name": "Eva Eagle",
- "profilePic": "/assets/img/speakers/eagle.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Eva is an Eagle. Eva's interests include ants, seashells, and cupcakes.",
- "title": "Developer Advocate",
- "location": "Everywhere",
- "email": "eva@example.com",
- "phone": "+1-541-754-3010",
- "id": "4"
- },
- {
- "name": "Ellie Elephant",
- "profilePic": "/assets/img/speakers/elephant.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Ellie is an Elephant. Ellie's interests include pocket watches, pool, hand fans, and ninjas.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "ellie@example.com",
- "phone": "+1-541-754-3010",
- "id": "5"
- },
- {
- "name": "Gino Giraffe",
- "profilePic": "/assets/img/speakers/giraffe.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Gino is a Giraffe. Gino's interests include candy-making, unicorns, and birdhouses.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "gino@example.com",
- "phone": "+1-541-754-3010",
- "id": "6"
- },
- {
- "name": "Isabella Iguana",
- "profilePic": "/assets/img/speakers/iguana.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Isabella is an Iguana. Isabella's interests include crystals, architecture, and candle-making.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "isabella@example.com",
- "phone": "+1-541-754-3010",
- "id": "7"
- },
- {
- "name": "Karl Kitten",
- "profilePic": "/assets/img/speakers/kitten.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Karl is a Kitten. Karl's interests include skiing, jewelry, and needlepoint.",
- "title": "Developer Advocate",
- "location": "Everywhere",
- "email": "karl@example.com",
- "phone": "+1-541-754-3010",
- "id": "8"
- },
- {
- "name": "Lionel Lion",
- "profilePic": "/assets/img/speakers/lion.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Lionel is a Lion. Lionel's interests include lizards and mathematics.",
- "title": "Developer Advocate",
- "location": "Everywhere",
- "email": "lionel@example.com",
- "phone": "+1-541-754-3010",
- "id": "9"
- },
- {
- "name": "Molly Mouse",
- "profilePic": "/assets/img/speakers/mouse.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Molly is a Mouse. Molly's interests include werewolves and magic.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "molly@example.com",
- "phone": "+1-541-754-3010",
- "id": "10"
- },
- {
- "name": "Paul Puppy",
- "profilePic": "/assets/img/speakers/puppy.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Paul is a Puppy. Paul's interests include maps, whales, and dragons.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "paul@example.com",
- "phone": "+1-541-754-3010",
- "id": "11"
- },
- {
- "name": "Rachel Rabbit",
- "profilePic": "/assets/img/speakers/rabbit.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Rachel is a Rabbit. Rachel's interests include clowns, skeletons, and yo-yos.",
- "title": "Senior Software Engineer",
- "location": "Everywhere",
- "email": "rachel@example.com",
- "phone": "+1-541-754-3010",
- "id": "12"
- },
- {
- "name": "Ted Turtle",
- "profilePic": "/assets/img/speakers/turtle.jpg",
- "instagram": "ionicframework",
- "twitter": "ionicframework",
- "about": "Ted is a Turtle. Ted's interests include butterflies, skiing, and cupcakes.",
- "title": "Software Engineer",
- "location": "Everywhere",
- "email": "ted@example.com",
- "phone": "+1-541-754-3010",
- "id": "13"
- }
- ],
-
- "map": [
- {
- "name": "Monona Terrace Convention Center",
- "lat": 43.071584,
- "lng": -89.38012,
- "center": true
- },
- {
- "name": "Ionic HQ",
- "lat": 43.074395,
- "lng": -89.381056
- },
- {
- "name": "Afterparty - Brocach Irish Pub",
- "lat": 43.07336,
- "lng": -89.38335
- }
- ],
-
- "tracks": [
- {
- "name": "React",
- "icon": "logo-react"
- },
- {
- "name": "Documentation",
- "icon": "document"
- },
- {
- "name": "Food",
- "icon": "restaurant"
- },
- {
- "name": "Ionic",
- "icon": "logo-ionic"
- },
- {
- "name": "Tooling",
- "icon": "hammer"
- },
- {
- "name": "Design",
- "icon": "color-palette"
- },
- {
- "name": "Services",
- "icon": "cog"
- },
- {
- "name": "Workshop",
- "icon": "construct"
- },
- {
- "name": "Communication",
- "icon": "call"
- },
- {
- "name": "Navigation",
- "icon": "compass"
- }
- ]
-}
diff --git a/03_source/mobile.trunk/public/assets/data/locations.json b/03_source/mobile.trunk/public/assets/data/locations.json
deleted file mode 100644
index 7743cc9..0000000
--- a/03_source/mobile.trunk/public/assets/data/locations.json
+++ /dev/null
@@ -1,23 +0,0 @@
-[
- {
- "id": 1,
- "name": "Map Center",
- "lat": 43.071584,
- "lng": -89.380120
- }, {
- "id": 2,
- "name": "Monona Terrace Convention Center",
- "lat": 43.071584,
- "lng": -89.380120
- }, {
- "id": 3,
- "name": "Ionic HQ",
- "lat": 43.074395,
- "lng": -89.381056
- }, {
- "id": 4,
- "name": "Afterparty - Brocach Irish Pub",
- "lat": 43.07336,
- "lng": -89.38335
- }
-]
diff --git a/03_source/mobile.trunk/public/assets/icon/favicon.png b/03_source/mobile.trunk/public/assets/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/about/austin.jpg b/03_source/mobile.trunk/public/assets/img/about/austin.jpg
deleted file mode 100644
index b4eb329..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/about/austin.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/about/chicago.jpg b/03_source/mobile.trunk/public/assets/img/about/chicago.jpg
deleted file mode 100644
index b982b65..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/about/chicago.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/about/madison.jpg b/03_source/mobile.trunk/public/assets/img/about/madison.jpg
deleted file mode 100644
index c46fbf0..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/about/madison.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/about/seattle.jpg b/03_source/mobile.trunk/public/assets/img/about/seattle.jpg
deleted file mode 100644
index 4c5946a..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/about/seattle.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/appicon.png b/03_source/mobile.trunk/public/assets/img/appicon.png
deleted file mode 100644
index 3aa6ee2..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/appicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/appicon.svg b/03_source/mobile.trunk/public/assets/img/appicon.svg
deleted file mode 100644
index 3d2a03b..0000000
--- a/03_source/mobile.trunk/public/assets/img/appicon.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-1.png b/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-1.png
deleted file mode 100644
index 9233602..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-1.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-2.png b/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-2.png
deleted file mode 100644
index 2fdce7d..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-2.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-3.png b/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-3.png
deleted file mode 100644
index a304e88..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-3.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-4.png b/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-4.png
deleted file mode 100644
index 2f263d6..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/ica-slidebox-img-4.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/ionic-logo-white.svg b/03_source/mobile.trunk/public/assets/img/ionic-logo-white.svg
deleted file mode 100644
index 7ebf0cd..0000000
--- a/03_source/mobile.trunk/public/assets/img/ionic-logo-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/img/speaker-background.png b/03_source/mobile.trunk/public/assets/img/speaker-background.png
deleted file mode 100644
index 220634e..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speaker-background.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/bear.jpg b/03_source/mobile.trunk/public/assets/img/speakers/bear.jpg
deleted file mode 100755
index a968db7..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/bear.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/cheetah.jpg b/03_source/mobile.trunk/public/assets/img/speakers/cheetah.jpg
deleted file mode 100755
index f188a81..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/cheetah.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/duck.jpg b/03_source/mobile.trunk/public/assets/img/speakers/duck.jpg
deleted file mode 100755
index b8b7c52..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/duck.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/eagle.jpg b/03_source/mobile.trunk/public/assets/img/speakers/eagle.jpg
deleted file mode 100755
index ac839a5..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/eagle.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/elephant.jpg b/03_source/mobile.trunk/public/assets/img/speakers/elephant.jpg
deleted file mode 100755
index 0727847..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/elephant.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/giraffe.jpg b/03_source/mobile.trunk/public/assets/img/speakers/giraffe.jpg
deleted file mode 100755
index 30a854c..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/giraffe.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/iguana.jpg b/03_source/mobile.trunk/public/assets/img/speakers/iguana.jpg
deleted file mode 100755
index 75d528f..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/iguana.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/kitten.jpg b/03_source/mobile.trunk/public/assets/img/speakers/kitten.jpg
deleted file mode 100755
index 3cc1359..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/kitten.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/lion.jpg b/03_source/mobile.trunk/public/assets/img/speakers/lion.jpg
deleted file mode 100755
index f5eb632..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/lion.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/mouse.jpg b/03_source/mobile.trunk/public/assets/img/speakers/mouse.jpg
deleted file mode 100755
index ca30177..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/mouse.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/puppy.jpg b/03_source/mobile.trunk/public/assets/img/speakers/puppy.jpg
deleted file mode 100755
index d635a8a..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/puppy.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/rabbit.jpg b/03_source/mobile.trunk/public/assets/img/speakers/rabbit.jpg
deleted file mode 100755
index 475d62c..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/rabbit.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/img/speakers/turtle.jpg b/03_source/mobile.trunk/public/assets/img/speakers/turtle.jpg
deleted file mode 100755
index 60c3496..0000000
Binary files a/03_source/mobile.trunk/public/assets/img/speakers/turtle.jpg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/beds.jpeg b/03_source/mobile.trunk/public/assets/react-shop/beds.jpeg
deleted file mode 100644
index 8582d80..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/beds.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/coats3.jpeg b/03_source/mobile.trunk/public/assets/react-shop/coats3.jpeg
deleted file mode 100644
index edff4bf..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/coats3.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/coffee_table.jpeg b/03_source/mobile.trunk/public/assets/react-shop/coffee_table.jpeg
deleted file mode 100644
index 21e9601..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/coffee_table.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/dresses3.jpeg b/03_source/mobile.trunk/public/assets/react-shop/dresses3.jpeg
deleted file mode 100644
index 7a34676..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/dresses3.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/formal_shirts2.jpeg b/03_source/mobile.trunk/public/assets/react-shop/formal_shirts2.jpeg
deleted file mode 100644
index 59cd44f..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/formal_shirts2.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/home.jpeg b/03_source/mobile.trunk/public/assets/react-shop/home.jpeg
deleted file mode 100644
index 75f42a3..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/home.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/icon/favicon.png b/03_source/mobile.trunk/public/assets/react-shop/icon/favicon.png
deleted file mode 100644
index 51888a7..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/icon/favicon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/icon/icon.png b/03_source/mobile.trunk/public/assets/react-shop/icon/icon.png
deleted file mode 100644
index a7f6374..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/icon/icon.png and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/jeans.jpeg b/03_source/mobile.trunk/public/assets/react-shop/jeans.jpeg
deleted file mode 100644
index b90bfd1..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/jeans.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/makeup2.jpeg b/03_source/mobile.trunk/public/assets/react-shop/makeup2.jpeg
deleted file mode 100644
index e291108..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/makeup2.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/men.jpeg b/03_source/mobile.trunk/public/assets/react-shop/men.jpeg
deleted file mode 100644
index 23bf901..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/men.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/office.jpeg b/03_source/mobile.trunk/public/assets/react-shop/office.jpeg
deleted file mode 100644
index 486ec39..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/office.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/shapes.svg b/03_source/mobile.trunk/public/assets/react-shop/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/react-shop/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/assets/react-shop/sportswear2.jpeg b/03_source/mobile.trunk/public/assets/react-shop/sportswear2.jpeg
deleted file mode 100644
index 285614c..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/sportswear2.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/react-shop/women.jpeg b/03_source/mobile.trunk/public/assets/react-shop/women.jpeg
deleted file mode 100644
index 0ad70ef..0000000
Binary files a/03_source/mobile.trunk/public/assets/react-shop/women.jpeg and /dev/null differ
diff --git a/03_source/mobile.trunk/public/assets/shapes.svg b/03_source/mobile.trunk/public/assets/shapes.svg
deleted file mode 100644
index d370b4d..0000000
--- a/03_source/mobile.trunk/public/assets/shapes.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/03_source/mobile.trunk/public/favicon.ico b/03_source/mobile.trunk/public/favicon.ico
deleted file mode 100644
index a11777c..0000000
Binary files a/03_source/mobile.trunk/public/favicon.ico and /dev/null differ
diff --git a/03_source/mobile.trunk/public/manifest.json b/03_source/mobile.trunk/public/manifest.json
deleted file mode 100644
index ee4307c..0000000
--- a/03_source/mobile.trunk/public/manifest.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "short_name": "Ionic React Conf",
- "name": "Ionic React Conf",
- "icons": [
- {
- "src": "assets/icon/favicon.png",
- "sizes": "64x64 32x32 24x24 16x16",
- "type": "image/x-icon"
- },
- {
- "src": "assets/icon/icon.png",
- "type": "image/png",
- "sizes": "512x512",
- "purpose": "maskable"
- }
- ],
- "start_url": ".",
- "display": "standalone",
- "theme_color": "#ffffff",
- "background_color": "#ffffff"
-}
diff --git a/03_source/mobile.trunk/src/App.scss b/03_source/mobile.trunk/src/App.scss
deleted file mode 100644
index b0e2713..0000000
--- a/03_source/mobile.trunk/src/App.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * App Global CSS
- * ----------------------------------------------------------------------------
- * Put style rules here that you want to apply globally. These styles are for
- * the entire app and not just one component.
- */
-
-@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+HK:wght@100..900&family=Noto+Sans+JP:wght@100..900&family=Noto+Sans+SC:wght@100..900&display=swap');
-
-.noto-sans-hk-body {
- font-family: 'Noto Sans HK', sans-serif;
- font-optical-sizing: auto;
- font-weight: unset;
- font-style: normal;
-}
-
-.noto-sans-sc-body {
- font-family: 'Noto Sans SC', sans-serif;
- font-optical-sizing: auto;
- font-weight: unset;
- font-style: normal;
-}
-
-.noto-sans-jp-body {
- font-family: 'Noto Sans JP', sans-serif;
- font-optical-sizing: auto;
- font-weight: unset;
- font-style: normal;
-}
diff --git a/03_source/mobile.trunk/src/App.test.tsx b/03_source/mobile.trunk/src/App.test.tsx
deleted file mode 100644
index 2ae5593..0000000
--- a/03_source/mobile.trunk/src/App.test.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import App from './App';
-import { render } from '@testing-library/react';
-
-it('renders without crashing', () => {
- const { asFragment, container } = render( );
- expect(asFragment()).toMatchSnapshot();
-});
diff --git a/03_source/mobile.trunk/src/App.tsx b/03_source/mobile.trunk/src/App.tsx
deleted file mode 100644
index 31095d8..0000000
--- a/03_source/mobile.trunk/src/App.tsx
+++ /dev/null
@@ -1,149 +0,0 @@
-import React, { useEffect } from 'react';
-import { Route } from 'react-router-dom';
-import { IonApp, IonRouterOutlet, IonSplitPane, setupIonicReact } from '@ionic/react';
-import { IonReactRouter } from '@ionic/react-router';
-
-import Menu from './components/Menu';
-
-/* Core CSS required for Ionic components to work properly */
-import '@ionic/react/css/core.css';
-
-/* Basic CSS for apps built with Ionic */
-import '@ionic/react/css/normalize.css';
-import '@ionic/react/css/structure.css';
-import '@ionic/react/css/typography.css';
-
-/* Optional CSS utils that can be commented out */
-import '@ionic/react/css/padding.css';
-import '@ionic/react/css/float-elements.css';
-import '@ionic/react/css/text-alignment.css';
-import '@ionic/react/css/text-transformation.css';
-import '@ionic/react/css/flex-utils.css';
-import '@ionic/react/css/display.css';
-
-/**
- * Ionic Dark Mode
- * -----------------------------------------------------
- * For more info, please see:
- * https://ionicframework.com/docs/theming/dark-mode
- */
-
-// import '@ionic/react/css/palettes/dark.always.css';
-// import '@ionic/react/css/palettes/dark.system.css';
-import '@ionic/react/css/palettes/dark.class.css';
-
-/* Theme variables */
-import './theme/variables.css';
-
-/* Leaflet CSS */
-import 'leaflet/dist/leaflet.css';
-
-/* Global styles */
-import './App.scss';
-import MainTabs from './pages/MainTabs';
-import { connect } from './data/connect';
-import { AppContextProvider } from './data/AppContext';
-import { loadConfData } from './data/sessions/sessions.actions';
-import { setIsLoggedIn, setUsername, loadUserData } from './data/user/user.actions';
-import Account from './pages/Account';
-import Login from './pages/Login';
-import MyLogin from './pages/MyLogin';
-import Signup from './pages/Signup';
-import Support from './pages/Support';
-import Tutorial from './pages/Tutorial';
-import HomeOrTutorial from './components/HomeOrTutorial';
-import { Schedule } from './models/Schedule';
-import RedirectToLogin from './components/RedirectToLogin';
-import AppRoute from './AppRoute';
-
-import AppDemoRoute from './routes/DemoRoute';
-import Settings from './pages/Settings';
-
-setupIonicReact();
-
-const App: React.FC = () => {
- return (
-
-
-
- );
-};
-
-interface StateProps {
- darkMode: boolean;
- schedule: Schedule;
-}
-
-interface DispatchProps {
- loadConfData: typeof loadConfData;
- loadUserData: typeof loadUserData;
- setIsLoggedIn: typeof setIsLoggedIn;
- setUsername: typeof setUsername;
-}
-
-interface IonicAppProps extends StateProps, DispatchProps {}
-
-const IonicApp: React.FC = ({ darkMode, schedule, setIsLoggedIn, setUsername, loadConfData, loadUserData }) => {
- useEffect(() => {
- loadUserData();
- loadConfData();
-
- // eslint-disable-next-line
- }, []);
-
- return schedule.groups.length === 0 ? (
-
- ) : (
-
-
-
-
-
- {/*
- We use IonRoute here to keep the tabs state intact,
- which makes transitions between tabs and non tab pages smooth
- */}
-
-
-
-
- } />
-
-
-
-
-
-
-
-
-
-
- {
- return ;
- }}
- />
-
-
-
-
-
- );
-};
-
-export default App;
-
-const IonicAppConnected = connect<{}, StateProps, DispatchProps>({
- mapStateToProps: (state) => ({
- darkMode: state.user.darkMode,
- schedule: state.data.schedule,
- }),
- mapDispatchToProps: {
- loadConfData,
- loadUserData,
- setIsLoggedIn,
- setUsername,
- },
- component: IonicApp,
-});
diff --git a/03_source/mobile.trunk/src/AppRoute.tsx b/03_source/mobile.trunk/src/AppRoute.tsx
deleted file mode 100644
index 070aafc..0000000
--- a/03_source/mobile.trunk/src/AppRoute.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// pages without bottom tab bar
-//
-
-import { Route } from 'react-router';
-import NotImplemented from './pages/NotImplemented';
-import EventDetail from './pages/EventDetail';
-import MemberProfile from './pages/MemberProfile';
-import PATHS from './PATHS';
-import Settings from './pages/Settings';
-import ChangeLanguage from './pages/ChangeLanguage';
-import ServiceAgreement from './pages/ServiceAgreement';
-import PrivacyAgreement from './pages/PrivacyAgreement';
-// import OrderDetails from './pages/OrderDetail';
-import OrderDetail from './pages/OrderDetail';
-
-const AppRoute: React.FC = () => {
- return (
- <>
-
-
- {/* */}
-
-
-
- {/* component make the ":id" available in the "OrderDetail" */}
-
- {/* */}
-
- {/* */}
-
-
-
-
- >
- );
-};
-
-export default AppRoute;
diff --git a/03_source/mobile.trunk/src/PATHS.ts b/03_source/mobile.trunk/src/PATHS.ts
deleted file mode 100644
index 032b23e..0000000
--- a/03_source/mobile.trunk/src/PATHS.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-const PATHS = {
- NOT_IMPLEMENTED: '/not_implemented',
- SETTINGS: '/settings',
- CHANGE_LANGUAGE: '/change_language',
- SERVICE_AGREEMENT: '/service_agreement',
- PRIVACY_AGREEMENT: '/privacy_agreement',
- SIGN_IN: '/mylogin',
- //
- ORDER_DETAIL: '/order_detail/:id',
- getOrderDetail: (id: string) => `/order_detail/${id}`,
- //
- TAB_NOT_IMPLEMENTED: '/tabs/not_implemented',
- EVENT_LIST: `/tabs/events`,
- MESSAGE_LIST: `/tabs/messages`,
- NEARBY_LIST: '/tabs/nearby',
- ORDERS_LIST: '/tabs/orders',
- FAVOURITES_LIST: `/tabs/favourites`,
- PROFILE: '/tabs/my_profile',
-
- //
- // DEMO_WEATHER_APP: '/demo-weather-app',
- DEMO_WEATHER_APP_UI: '/demo-weather-app-ui',
- //
-
- DEMO_2FA_EXAMPLE: '/demo-2fa-example',
- DEMO_ACCORDION_TUTORIAL: '/demo-accordion-tutorial',
- DEMO_BANKING_UI: '/demo-banking-ui',
- DEMO_BLOG_POST_UI: '/demo-blog-post-ui',
- DEMO_CAPACITOR_GOOGLE_MAPS_TUTORIAL: '/demo-capacitor-google-maps-tutorial',
- DEMO_CLUB_HOUSE: '/demo-club-house',
- DEMO_COLOR_TUTORIAL: '/demo-color-tutorial',
- DEMO_DICTIONARY_APP: '/demo-dictionary-app',
- DEMO_ECOMMERCE_EXAMPLE: '/demo-ecommerce-example',
- DEMO_FACEBOOK_CLONE: '/demo-facebook-clone',
- DEMO_FAST_FOOD_APP: '/demo-fast-food-app',
- DEMO_FLOATING_TABS: '/demo-floating-tabs',
- DEMO_INSTAGRAM_CLONE: '/demo-instagram-clone',
- DEMO_KANBAN_BOARD: '/demo-kanban-board',
- DEMO_ORDERING_APP: '/demo-ordering-app',
- DEMO_PAGE: '/tabs/demo-list',
- DEMO_PINTEREST_FLOATING_TAB_BAR: '/demo-pinterest-floating-tab-bar',
- DEMO_PROFILE_EXAMPLE: '/demo-profile-example',
- DEMO_PULLSTATE_TUTORIAL: '/demo-pullstate-tutorial',
- DEMO_QUIZ_APP: '/demo-quiz-app',
- DEMO_QUOTE_APP: '/demo-quote-app',
- DEMO_REACT_ADD_TO_CART: '/demo-react-add-to-cart',
- DEMO_REACT_CALCULATOR: '/demo-react-calculator',
- DEMO_REACT_DRAWING_CANVAS: '/demo-react-drawing-canvas',
- DEMO_REACT_HOOK_FORM_EXAMPLE: '/demo-react-hook-form-example',
- DEMO_REACT_ITEM_LIST: '/demo-react-item-list',
- DEMO_REACT_LIFECYCLES: '/demo-react-lifecycles',
- DEMO_REACT_LOGIN: '/demo-react-login',
- DEMO_REACT_MARVEL_APP: '/demo-react-marvel-app',
- DEMO_REACT_MOVIE_APP_WITH_ALGOLIA: '/demo-react-movie-app-with-algolia',
- DEMO_REACT_NOTES: '/demo-react-notes',
- DEMO_REACT_ONBOARDING_UI: '/demo-react-onboarding-ui',
- DEMO_REACT_OVERLAY_HOOKS: '/demo-react-overlay-hooks',
- DEMO_REACT_POLL_APP: '/demo-react-poll-app',
- DEMO_REACT_PROFILE_DASHBOARD_UI: '/demo-react-profile-dashboard-ui',
-
- DEMO_REACT_QR_CODE: '/demo-react-qr-code',
- DEMO_QR_SCANNER: '/demo-qr-scanner',
-
- DEMO_REACT_QUOTES: '/demo-react-quotes',
- DEMO_REACT_SHOP_UI: '/demo-react-shop-ui',
- DEMO_REACT_SHOP: '/demo-react-shop',
- DEMO_REACT_SWITCH_TABS: '/demo-react-switch-tabs',
- DEMO_REACT_TABS_MENUS_CUSTOM: '/demo-react-tabs-menus-custom',
- DEMO_REACT_THEME_SWITCHER: '/demo-react-theme-switcher',
- DEMO_REACT_TRAVEL_APP: '/demo-react-travel-app',
- DEMO_REACT_WHATSAPP_CLONE: '/demo-react-whatsapp-clone',
- DEMO_RECIPE_APP: '/demo-recipe-app',
- DEMO_RESTAURANT_FINDER: '/demo-restaurant-finder',
- DEMO_SCORE_BOARD: '/demo-score-board',
- DEMO_SHOP_APP_UI: '/demo-shop-app-ui',
- DEMO_SKELETON_TEXT: '/demo-skeleton-text',
- DEMO_SLIDING_PROFILE: '/demo-sliding-profile',
- DEMO_STICKY_BOTTOM_SHEET_EXAMPLE: '/demo-sticky-bottom-sheet-example',
- DEMO_STORAGE_EXAMPLE: '/demo-storage-example',
-};
-export default PATHS;
diff --git a/03_source/mobile.trunk/src/TabAppRoute.tsx b/03_source/mobile.trunk/src/TabAppRoute.tsx
deleted file mode 100644
index 7f64525..0000000
--- a/03_source/mobile.trunk/src/TabAppRoute.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import { Route } from 'react-router';
-import NotImplemented from './pages/NotImplemented';
-import EventDetail from './pages/EventDetail';
-import MemberProfile from './pages/MemberProfile';
-import PATHS from './PATHS';
-import MembersNearByList from './pages/MembersNearByList';
-import OrderList from './pages/OrderList';
-import MessageList from './pages/MessageList';
-import Favourites from './pages/Favourites';
-import MyProfile from './pages/MyProfile';
-import EventList from './pages/EventList';
-import Helloworld from './pages/Helloworld';
-// import WeatherDemo from './pages/WeatherDemo/Tab1';
-import DemoList from './pages/DemoList';
-// import DemoReactShop from './pages/DemoReactShop';
-
-const TabAppRoute: React.FC = () => {
- return (
- <>
-
-
- {/* */}
- } exact={true} />
-
- {/* */}
- } exact={true} />
-
- {/* */}
- } exact={true} />
-
- {/* */}
- } exact={true} />
-
- {/* */}
- } exact={true} />
-
- {/* */}
- } exact={true} />
-
- {/* */}
- } exact={true} />
-
- {/* */}
- } exact={true} />
- >
- );
-};
-
-export default TabAppRoute;
diff --git a/03_source/mobile.trunk/src/__snapshots__/App.test.tsx.snap b/03_source/mobile.trunk/src/__snapshots__/App.test.tsx.snap
deleted file mode 100644
index 444f038..0000000
--- a/03_source/mobile.trunk/src/__snapshots__/App.test.tsx.snap
+++ /dev/null
@@ -1,280 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`renders without crashing 1`] = `
-
-
-
-
-
-
-
- Menu
-
-
-
-
-
-
- Navigate
-
-
-
-
-
- Schedule
-
-
-
-
-
-
-
- Speakers
-
-
-
-
-
-
-
- Map
-
-
-
-
-
-
-
- About
-
-
-
-
-
-
- Account
-
-
-
-
-
- Account
-
-
-
-
-
-
-
- Support
-
-
-
-
-
-
-
- Logout
-
-
-
-
-
-
- Tutorial
-
-
-
- Show Tutorial
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- All
-
-
- Favorites
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- No Sessions Found
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Schedule
-
-
-
-
-
- Speakers
-
-
-
-
-
- Map
-
-
-
-
-
- About
-
-
-
-
-
-
-
-
-`;
diff --git a/03_source/mobile.trunk/src/api/Helloworld.ts b/03_source/mobile.trunk/src/api/Helloworld.ts
deleted file mode 100644
index 5c5216f..0000000
--- a/03_source/mobile.trunk/src/api/Helloworld.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-function Helloworld() {
- console.log('helloworld');
-}
-
-export { Helloworld };
diff --git a/03_source/mobile.trunk/src/api/getEventById.ts b/03_source/mobile.trunk/src/api/getEventById.ts
deleted file mode 100644
index f75b2b2..0000000
--- a/03_source/mobile.trunk/src/api/getEventById.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// REQ0042/event-detail
-//
-// PURPOSE:
-// - provide api access to backend db
-//
-// RULES:
-// - T.B.A.
-//
-
-import axios from 'axios';
-import constants from '../constants';
-
-function getEventById(id: string) {
- return axios.get(`${constants.API_ENDPOINT}/v1/events/1`);
-}
-
-export { getEventById };
diff --git a/03_source/mobile.trunk/src/api/getEvents.ts b/03_source/mobile.trunk/src/api/getEvents.ts
deleted file mode 100644
index 14b9e74..0000000
--- a/03_source/mobile.trunk/src/api/getEvents.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// REQ0042/event-detail
-//
-// PURPOSE:
-// - provide api access to backend db
-//
-// RULES:
-// - T.B.A.
-//
-
-import axios from 'axios';
-import constants from '../constants';
-
-function getEvents() {
- return axios.get(`${constants.API_ENDPOINT}/v1/events`);
-}
-
-export { getEvents };
diff --git a/03_source/mobile.trunk/src/api/getMemberById.ts b/03_source/mobile.trunk/src/api/getMemberById.ts
deleted file mode 100644
index dfee0ed..0000000
--- a/03_source/mobile.trunk/src/api/getMemberById.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// REQ0042/event-detail
-//
-// PURPOSE:
-// - provide api access to backend db
-//
-// RULES:
-// - T.B.A.
-//
-
-import axios from 'axios';
-import constants from '../constants';
-
-function getMemberById(id: string) {
- return axios.get(`${constants.API_ENDPOINT}/v1/members/2`);
-}
-
-export { getMemberById };
diff --git a/03_source/mobile.trunk/src/api/getMembers.ts b/03_source/mobile.trunk/src/api/getMembers.ts
deleted file mode 100644
index b65bab8..0000000
--- a/03_source/mobile.trunk/src/api/getMembers.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// REQ0042/event-detail
-//
-// PURPOSE:
-// - provide api access to backend db
-//
-// RULES:
-// - T.B.A.
-//
-
-import axios from 'axios';
-import constants from '../constants';
-
-function getMembers() {
- return axios.get(`${constants.API_ENDPOINT}/v1/members`);
-}
-
-export { getMembers };
diff --git a/03_source/mobile.trunk/src/api/getOrders.ts b/03_source/mobile.trunk/src/api/getOrders.ts
deleted file mode 100644
index 50bb6fd..0000000
--- a/03_source/mobile.trunk/src/api/getOrders.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// REQ0047/order-page
-//
-// PURPOSE:
-// - provide api access to backend db for orders
-//
-// RULES:
-// - T.B.A.
-//
-
-import axios from 'axios';
-import constants from '../constants';
-
-function getOrders() {
- return axios.get(`${constants.API_ENDPOINT}/v1/orders`);
-}
-
-export { getOrders };
diff --git a/03_source/mobile.trunk/src/api/getProfileById.ts b/03_source/mobile.trunk/src/api/getProfileById.ts
deleted file mode 100644
index 9b09f93..0000000
--- a/03_source/mobile.trunk/src/api/getProfileById.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// REQ0053/profile-page
-//
-// PURPOSE:
-// - Provides functionality get user profile by id
-//
-// RULES:
-// - T.B.A.
-//
-
-import axios from 'axios';
-import constants from '../constants';
-
-function getProfileById(id: string) {
- return axios.get(`${constants.API_ENDPOINT}/v1/profile/${id}`);
-}
-
-export { getProfileById };
diff --git a/03_source/mobile.trunk/src/components/AboutPopover.tsx b/03_source/mobile.trunk/src/components/AboutPopover.tsx
deleted file mode 100644
index fbfcb10..0000000
--- a/03_source/mobile.trunk/src/components/AboutPopover.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from 'react';
-import { IonList, IonItem, IonLabel } from '@ionic/react';
-
-interface AboutPopoverProps {
- dismiss: () => void;
-}
-
-const AboutPopover: React.FC = ({ dismiss }) => {
- const close = (url: string) => {
- window.open(url, '_blank');
- dismiss();
- };
-
- return (
-
- close('https://ionicframework.com/docs')}>
- Learn Ionic
-
- close('https://ionicframework.com/docs/react')}
- >
- Documentation
-
- close('https://showcase.ionicframework.com')}
- >
- Showcase
-
- close('https://github.com/ionic-team/ionic-framework')}
- >
- GitHub Repo
-
-
- Support
-
-
- );
-};
-
-export default AboutPopover;
diff --git a/03_source/mobile.trunk/src/components/HomeOrTutorial.tsx b/03_source/mobile.trunk/src/components/HomeOrTutorial.tsx
deleted file mode 100644
index 8d4f61e..0000000
--- a/03_source/mobile.trunk/src/components/HomeOrTutorial.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from 'react';
-import { connect } from '../data/connect';
-import { Redirect } from 'react-router';
-
-interface StateProps {
- hasSeenTutorial: boolean;
-}
-
-const HomeOrTutorial: React.FC = ({ hasSeenTutorial }) => {
- return hasSeenTutorial ? : ;
-};
-
-export default connect<{}, StateProps, {}>({
- mapStateToProps: (state) => ({
- hasSeenTutorial: state.user.hasSeenTutorial,
- }),
- component: HomeOrTutorial,
-});
diff --git a/03_source/mobile.trunk/src/components/Loading/index.tsx b/03_source/mobile.trunk/src/components/Loading/index.tsx
deleted file mode 100644
index f306eaf..0000000
--- a/03_source/mobile.trunk/src/components/Loading/index.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import React, { CSSProperties, useState } from 'react';
-import { connect } from '../../data/connect';
-import { IonLoading } from '@ionic/react';
-import { GridLoader } from 'react-spinners';
-
-interface OwnProps {}
-
-interface StateProps {}
-
-interface DispatchProps {}
-
-const override: CSSProperties = {
- display: 'block',
- margin: '0 auto',
- borderColor: 'red',
-};
-
-function Loading() {
- let [loading, setLoading] = useState(true);
- let [color, setColor] = useState('#333333');
-
- return (
- <>
-
- >
- );
-}
-
-export default connect({
- mapStateToProps: (state) => ({}),
- component: React.memo(Loading),
-});
diff --git a/03_source/mobile.trunk/src/components/Menu.css b/03_source/mobile.trunk/src/components/Menu.css
deleted file mode 100644
index cee89be..0000000
--- a/03_source/mobile.trunk/src/components/Menu.css
+++ /dev/null
@@ -1,89 +0,0 @@
-ion-menu ion-content {
- --padding-top: 20px;
- --padding-bottom: 20px;
-
- --background: var(--ion-item-background, var(--ion-background-color, #fff));
-}
-
-/* Remove background transitions for switching themes */
-ion-menu ion-item {
- --transition: none;
-}
-
-ion-item.selected {
- --color: var(--ion-color-primary);
-}
-
-/*
- * Material Design Menu
-*/
-ion-menu.md ion-list {
- padding: 20px 0;
-}
-
-ion-menu.md ion-list-header {
- padding-left: 18px;
- padding-right: 18px;
-
- text-transform: uppercase;
- letter-spacing: 0.1em;
- font-size: min(0.875rem, 32px);
- font-weight: 450;
-}
-
-ion-menu.md ion-item {
- --padding-start: 18px;
-
- margin-right: 10px;
-
- border-radius: 0 50px 50px 0;
-
- font-weight: 500;
-}
-
-ion-menu.md ion-item.selected {
- --background: rgba(var(--ion-color-primary-rgb), 0.14);
-}
-
-ion-menu.md ion-item.selected ion-icon {
- color: var(--ion-color-primary);
-}
-
-ion-menu.md ion-list-header,
-ion-menu.md ion-item ion-icon {
- color: var(--ion-color-step-650, #5f6368);
-}
-
-ion-menu.md ion-list:not(:last-of-type) {
- border-bottom: 1px solid var(--ion-color-step-150, #d7d8da);
-}
-
-
-/*
- * iOS Menu
-*/
-ion-menu.ios ion-list-header {
- padding-left: 16px;
- padding-right: 16px;
-
- margin-bottom: 8px;
- font-size: clamp(22px, 1.375rem, 40px);
-}
-
-ion-menu.ios ion-list {
- padding: 20px 0 0;
-}
-
-ion-menu.ios ion-item {
- --padding-start: 16px;
- --min-height: 50px;
-}
-
-ion-menu.ios ion-item ion-icon {
- font-size: 24px;
- color: #73849a;
-}
-
-ion-menu.ios ion-item.selected ion-icon {
- color: var(--ion-color-primary);
-}
diff --git a/03_source/mobile.trunk/src/components/Menu.tsx b/03_source/mobile.trunk/src/components/Menu.tsx
deleted file mode 100644
index 6d58d83..0000000
--- a/03_source/mobile.trunk/src/components/Menu.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-import React from 'react';
-import { RouteComponentProps, withRouter, useLocation } from 'react-router';
-
-import {
- IonContent,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonListHeader,
- IonMenu,
- IonMenuToggle,
- IonToggle,
-} from '@ionic/react';
-import {
- calendarOutline,
- hammer,
- moonOutline,
- help,
- informationCircleOutline,
- logIn,
- logOut,
- mapOutline,
- peopleOutline,
- person,
- personAdd,
-} from 'ionicons/icons';
-
-import { connect } from '../data/connect';
-import { setDarkMode } from '../data/user/user.actions';
-
-import './Menu.css';
-
-const routes = {
- appPages: [
- { title: 'Schedule', path: '/tabs/schedule', icon: calendarOutline },
- { title: 'Speakers', path: '/tabs/speakers', icon: peopleOutline },
- { title: 'Map', path: '/tabs/map', icon: mapOutline },
- { title: 'About', path: '/tabs/about', icon: informationCircleOutline },
- ],
- loggedInPages: [
- { title: 'Account', path: '/account', icon: person },
- { title: 'Support', path: '/support', icon: help },
- { title: 'Logout', path: '/logout', icon: logOut },
- ],
- loggedOutPages: [
- { title: 'Login', path: '/login', icon: logIn },
- { title: 'Support', path: '/support', icon: help },
- { title: 'Signup', path: '/signup', icon: personAdd },
- ],
-};
-
-interface Pages {
- title: string;
- path: string;
- icon: string;
- routerDirection?: string;
-}
-interface StateProps {
- darkMode: boolean;
- isAuthenticated: boolean;
- menuEnabled: boolean;
-}
-
-interface DispatchProps {
- setDarkMode: typeof setDarkMode;
-}
-
-interface MenuProps extends RouteComponentProps, StateProps, DispatchProps {}
-
-const Menu: React.FC = ({
- darkMode,
- history,
- isAuthenticated,
- setDarkMode,
- menuEnabled,
-}) => {
- const location = useLocation();
-
- function renderlistItems(list: Pages[]) {
- return list
- .filter((route) => !!route.path)
- .map((p) => (
-
-
-
- {p.title}
-
-
- ));
- }
-
- return (
-
-
-
- Conference
- {renderlistItems(routes.appPages)}
-
-
- Account
- {isAuthenticated
- ? renderlistItems(routes.loggedInPages)
- : renderlistItems(routes.loggedOutPages)}
-
-
- setDarkMode(!darkMode)}
- >
- Dark Mode
-
-
-
-
- Tutorial
- {
- history.push('/tutorial');
- }}
- >
-
- Show Tutorial
-
-
-
-
- );
-};
-
-export default connect<{}, StateProps, {}>({
- mapStateToProps: (state) => ({
- darkMode: state.user.darkMode,
- isAuthenticated: state.user.isLoggedin,
- menuEnabled: state.data.menuEnabled,
- }),
- mapDispatchToProps: {
- setDarkMode,
- },
- component: withRouter(Menu),
-});
diff --git a/03_source/mobile.trunk/src/components/NoSavedEvents/alert-svgrepo-com.svg b/03_source/mobile.trunk/src/components/NoSavedEvents/alert-svgrepo-com.svg
deleted file mode 100644
index 4a975fe..0000000
--- a/03_source/mobile.trunk/src/components/NoSavedEvents/alert-svgrepo-com.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- alert
- Created with Sketch Beta.
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/components/NoSavedEvents/alert-svgrepo-com.svg:Zone.Identifier b/03_source/mobile.trunk/src/components/NoSavedEvents/alert-svgrepo-com.svg:Zone.Identifier
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/components/NoSavedEvents/index.tsx b/03_source/mobile.trunk/src/components/NoSavedEvents/index.tsx
deleted file mode 100644
index 0f85db6..0000000
--- a/03_source/mobile.trunk/src/components/NoSavedEvents/index.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-// REQ0088/favorite-event-empty
-
-import React, { CSSProperties, useState } from 'react';
-import { connect } from '../../data/connect';
-import { IonIcon, IonLoading } from '@ionic/react';
-import { GridLoader } from 'react-spinners';
-import { alertCircleOutline } from 'ionicons/icons';
-import AlertSvg from './alert-svgrepo-com.svg';
-
-interface OwnProps {}
-
-interface StateProps {}
-
-interface DispatchProps {}
-
-const override: CSSProperties = {
- display: 'block',
- margin: '0 auto',
- borderColor: 'red',
-};
-
-function NoSavedEvents() {
- let [loading, setLoading] = useState(true);
- let [color, setColor] = useState('#333333');
-
- return (
- <>
-
-
-
-
-
-
You have not saved yet
-
- To add your favourites,
- simply take a look here
-
-
-
-
- >
- );
-}
-
-export default connect({
- mapStateToProps: (state) => ({}),
- component: React.memo(NoSavedEvents),
-});
diff --git a/03_source/mobile.trunk/src/components/RedirectToLogin.tsx b/03_source/mobile.trunk/src/components/RedirectToLogin.tsx
deleted file mode 100644
index ca86a65..0000000
--- a/03_source/mobile.trunk/src/components/RedirectToLogin.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React, { useEffect, useContext } from 'react';
-import { IonRouterContext } from '@ionic/react';
-
-interface RedirectToLoginProps {
- setIsLoggedIn: Function;
- setUsername: Function;
-}
-
-const RedirectToLogin: React.FC = ({ setIsLoggedIn, setUsername }) => {
- const ionRouterContext = useContext(IonRouterContext);
- useEffect(() => {
- setIsLoggedIn(false);
- setUsername(undefined);
- ionRouterContext.push('/tabs/events');
- }, [setIsLoggedIn, setUsername]);
- return null;
-};
-
-export default RedirectToLogin;
diff --git a/03_source/mobile.trunk/src/components/SessionList.tsx b/03_source/mobile.trunk/src/components/SessionList.tsx
deleted file mode 100644
index f61f219..0000000
--- a/03_source/mobile.trunk/src/components/SessionList.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import {
- IonItemDivider,
- IonItemGroup,
- IonLabel,
- IonList,
- IonListHeader,
- IonAlert,
- AlertButton,
-} from '@ionic/react';
-import React, { useState, useCallback, useRef, useEffect } from 'react';
-import { Schedule, Session } from '../models/Schedule';
-import SessionListItem from './SessionListItem';
-import { connect } from '../data/connect';
-import { addFavorite, removeFavorite } from '../data/sessions/sessions.actions';
-
-interface OwnProps {
- schedule: Schedule;
- listType: 'all' | 'favorites';
- hide: boolean;
-}
-
-interface StateProps {
- favoriteSessions: number[];
-}
-
-interface DispatchProps {
- addFavorite: typeof addFavorite;
- removeFavorite: typeof removeFavorite;
-}
-
-interface SessionListProps extends OwnProps, StateProps, DispatchProps {}
-
-const SessionList: React.FC = ({
- addFavorite,
- removeFavorite,
- favoriteSessions,
- hide,
- schedule,
- listType,
-}) => {
- const scheduleListRef = useRef(null);
- const [showAlert, setShowAlert] = useState(false);
- const [alertHeader, setAlertHeader] = useState('');
- const [alertMessage, setAlertMessage] = useState('');
- const [alertButtons, setAlertButtons] = useState<(AlertButton | string)[]>(
- []
- );
-
- const handleShowAlert = useCallback(
- (header: string, message: string, buttons: AlertButton[]) => {
- setAlertHeader(header);
- setAlertMessage(message);
- setAlertButtons(buttons);
- setShowAlert(true);
- },
- []
- );
-
- useEffect(() => {
- if (scheduleListRef.current) {
- scheduleListRef.current.closeSlidingItems();
- }
- }, [hide]);
-
- if (schedule.groups.length === 0 && !hide) {
- return (
-
- No Sessions Found
-
- );
- }
-
- return (
- <>
-
- {schedule.groups.map((group, index: number) => (
-
-
- {group.time}
-
- {group.sessions.map((session: Session, sessionIndex: number) => (
- -1}
- onAddFavorite={addFavorite}
- onRemoveFavorite={removeFavorite}
- key={`group-${index}-${sessionIndex}`}
- session={session}
- listType={listType}
- />
- ))}
-
- ))}
-
- setShowAlert(false)}
- >
- >
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- favoriteSessions: state.data.favorites,
- }),
- mapDispatchToProps: {
- addFavorite,
- removeFavorite,
- },
- component: SessionList,
-});
diff --git a/03_source/mobile.trunk/src/components/SessionListFilter.css b/03_source/mobile.trunk/src/components/SessionListFilter.css
deleted file mode 100644
index 4516c7a..0000000
--- a/03_source/mobile.trunk/src/components/SessionListFilter.css
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Material Design
- */
-
-.md .session-list-filter ion-toolbar ion-button {
- text-transform: capitalize;
- letter-spacing: 0;
-}
-
-.md .session-list-filter ion-checkbox {
- --checkbox-background-checked: transparent;
- --border-color: transparent;
- --border-color-checked: transparent;
- --checkmark-color: var(--ion-color-primary);
-}
-
-.md .session-list-filter ion-list {
- background: inherit;
-}
-
-/*
- * iOS
- */
-
-.ios .session-list-filter ion-list-header {
- margin-top: 10px;
-}
-
-.ios .session-list-filter ion-checkbox {
- color: var(--ion-color-primary);
-}
diff --git a/03_source/mobile.trunk/src/components/SessionListFilter.tsx b/03_source/mobile.trunk/src/components/SessionListFilter.tsx
deleted file mode 100644
index 1d80cbc..0000000
--- a/03_source/mobile.trunk/src/components/SessionListFilter.tsx
+++ /dev/null
@@ -1,160 +0,0 @@
-import React from 'react';
-
-import { getMode } from '@ionic/core';
-import {
- IonHeader,
- IonToolbar,
- IonButtons,
- IonButton,
- IonTitle,
- IonContent,
- IonList,
- IonListHeader,
- IonItem,
- IonLabel,
- IonCheckbox,
- IonFooter,
- IonIcon,
-} from '@ionic/react';
-import {
- logoReact,
- call,
- document,
- logoIonic,
- hammer,
- restaurant,
- cog,
- colorPalette,
- construct,
- compass,
-} from 'ionicons/icons';
-
-import './SessionListFilter.css';
-
-import { connect } from '../data/connect';
-import { updateFilteredTracks } from '../data/sessions/sessions.actions';
-
-interface OwnProps {
- onDismissModal: () => void;
-}
-
-interface StateProps {
- allTracks: string[];
- filteredTracks: string[];
-}
-
-interface DispatchProps {
- updateFilteredTracks: typeof updateFilteredTracks;
-}
-
-type SessionListFilterProps = OwnProps & StateProps & DispatchProps;
-
-const SessionListFilter: React.FC = ({
- allTracks,
- filteredTracks,
- onDismissModal,
- updateFilteredTracks,
-}) => {
- const ios = getMode() === 'ios';
-
- const toggleTrackFilter = (track: string) => {
- if (filteredTracks.indexOf(track) > -1) {
- updateFilteredTracks(filteredTracks.filter((x) => x !== track));
- } else {
- updateFilteredTracks([...filteredTracks, track]);
- }
- };
-
- const handleDeselectAll = () => {
- updateFilteredTracks([]);
- };
-
- const handleSelectAll = () => {
- updateFilteredTracks([...allTracks]);
- };
-
- const iconMap: { [key: string]: any } = {
- React: logoReact,
- Documentation: document,
- Food: restaurant,
- Ionic: logoIonic,
- Tooling: hammer,
- Design: colorPalette,
- Services: cog,
- Workshop: construct,
- Navigation: compass,
- Communication: call,
- };
-
- return (
- <>
-
-
-
- {ios && Cancel }
- {!ios && Reset }
-
-
- Filter Sessions
-
-
-
- Done
-
-
-
-
-
-
-
- Tracks
-
- {allTracks.map((track) => (
-
- {ios && (
-
- )}
- toggleTrackFilter(track)}
- checked={filteredTracks.indexOf(track) !== -1}
- color="primary"
- value={track}
- >
- {track}
-
-
- ))}
-
-
-
- {ios && (
-
-
-
- Deselect All
-
-
- Select All
-
-
-
- )}
- >
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- allTracks: state.data.allTracks,
- filteredTracks: state.data.filteredTracks,
- }),
- mapDispatchToProps: {
- updateFilteredTracks,
- },
- component: SessionListFilter,
-});
diff --git a/03_source/mobile.trunk/src/components/SessionListItem.tsx b/03_source/mobile.trunk/src/components/SessionListItem.tsx
deleted file mode 100644
index 911acbc..0000000
--- a/03_source/mobile.trunk/src/components/SessionListItem.tsx
+++ /dev/null
@@ -1,120 +0,0 @@
-import React, { useRef } from 'react';
-import {
- IonItemSliding,
- IonItem,
- IonLabel,
- IonItemOptions,
- IonItemOption,
- AlertButton,
- useIonToast,
-} from '@ionic/react';
-import { Session } from '../models/Schedule';
-
-interface SessionListItemProps {
- session: Session;
- listType: 'all' | 'favorites';
- onAddFavorite: (id: number) => void;
- onRemoveFavorite: (id: number) => void;
- onShowAlert: (
- header: string,
- message: string,
- buttons: AlertButton[]
- ) => void;
- isFavorite: boolean;
-}
-
-const SessionListItem: React.FC = ({
- isFavorite,
- onAddFavorite,
- onRemoveFavorite,
- onShowAlert,
- session,
- listType,
-}) => {
- const [presentToast] = useIonToast();
- const ionItemSlidingRef = useRef(null);
-
- const dismissAlert = () => {
- ionItemSlidingRef.current && ionItemSlidingRef.current.close();
- };
-
- const removeFavoriteSession = (title: string) => {
- onAddFavorite(session.id);
- onShowAlert(
- title,
- 'Would you like to remove this session from your favorites?',
- [
- {
- text: 'Cancel',
- handler: dismissAlert,
- },
- {
- text: 'Remove',
- handler: () => {
- onRemoveFavorite(session.id);
- dismissAlert();
- },
- },
- ]
- );
- };
-
- const addFavoriteSession = async () => {
- if (isFavorite) {
- // Prompt to remove favorite
- removeFavoriteSession('Favorite already added');
- } else {
- // Add as a favorite
- onAddFavorite(session.id);
-
- // Close the open item
- ionItemSlidingRef.current && ionItemSlidingRef.current.close();
-
- // Create a toast
- presentToast({
- message: `${session.name} was successfully added as a favorite.`,
- duration: 3000,
- buttons: [
- {
- text: 'Close',
- role: 'cancel',
- },
- ],
- });
- }
- };
-
- return (
-
-
-
- {session.name}
-
- {session.timeStart} —
- {session.timeEnd}:
- {session.location}
-
-
-
-
- {listType === 'favorites' ? (
- removeFavoriteSession('Remove Favorite')}
- >
- Remove
-
- ) : (
-
- Favorite
-
- )}
-
-
- );
-};
-
-export default React.memo(SessionListItem);
diff --git a/03_source/mobile.trunk/src/components/ShareSocialFab.tsx b/03_source/mobile.trunk/src/components/ShareSocialFab.tsx
deleted file mode 100644
index fb80766..0000000
--- a/03_source/mobile.trunk/src/components/ShareSocialFab.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import {
- IonLoading,
- IonFab,
- IonFabButton,
- IonIcon,
- IonFabList,
-} from '@ionic/react';
-import {
- shareSocial,
- logoVimeo,
- logoInstagram,
- logoTwitter,
- logoFacebook,
-} from 'ionicons/icons';
-import React, { useState } from 'react';
-
-const ShareSocialFab: React.FC = () => {
- const [loadingMessage, setLoadingMessage] = useState('');
- const [showLoading, setShowLoading] = useState(false);
-
- const openSocial = (network: string) => {
- setLoadingMessage(`Posting to ${network}`);
- setShowLoading(true);
- };
-
- return (
- <>
- setShowLoading(false)}
- />
-
-
-
-
-
- openSocial('Vimeo')}>
-
-
- openSocial('Instagram')}
- >
-
-
- openSocial('Twitter')}>
-
-
- openSocial('Facebook')}>
-
-
-
-
- >
- );
-};
-
-export default ShareSocialFab;
diff --git a/03_source/mobile.trunk/src/components/SpeakerItem.tsx b/03_source/mobile.trunk/src/components/SpeakerItem.tsx
deleted file mode 100644
index 242a9df..0000000
--- a/03_source/mobile.trunk/src/components/SpeakerItem.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import React from 'react';
-import { Session } from '../models/Schedule';
-import { Speaker } from '../models/Speaker';
-import {
- IonCard,
- IonCardHeader,
- IonItem,
- IonLabel,
- IonAvatar,
- IonCardContent,
- IonList,
-} from '@ionic/react';
-
-interface SpeakerItemProps {
- speaker: Speaker;
- sessions: Session[];
-}
-
-const SpeakerItem: React.FC = ({ speaker, sessions }) => {
- return (
- <>
-
-
-
-
-
-
-
- {speaker.name}
- {speaker.title}
-
-
-
-
-
-
- {sessions.map((session) => (
-
-
- {session.name}
-
-
- ))}
-
-
- About {speaker.name}
-
-
-
-
-
- >
- );
-};
-
-export default SpeakerItem;
diff --git a/03_source/mobile.trunk/src/constants.ts b/03_source/mobile.trunk/src/constants.ts
deleted file mode 100644
index b6f26ac..0000000
--- a/03_source/mobile.trunk/src/constants.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-const constants = { API_ENDPOINT: import.meta.env.VITE_API_ENDPOINT };
-
-export default constants;
diff --git a/03_source/mobile.trunk/src/context/action.tsx b/03_source/mobile.trunk/src/context/action.tsx
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/context/index.ts b/03_source/mobile.trunk/src/context/index.ts
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/context/jwt/action.tsx b/03_source/mobile.trunk/src/context/jwt/action.tsx
deleted file mode 100644
index e091237..0000000
--- a/03_source/mobile.trunk/src/context/jwt/action.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import axios, { endpoints } from '../../lib/axios';
-
-import { setSession } from './utils';
-import { JWT_STORAGE_KEY } from './constant';
-
-// ----------------------------------------------------------------------
-
-export type SignInParams = {
- email: string;
- password: string;
-};
-
-export type SignUpParams = {
- email: string;
- password: string;
- firstName: string;
- lastName: string;
-};
-
-const ERR_ACCESS_TOKEN_NOT_FOUND = `Access token not found in response`;
-
-/** **************************************
- * Sign in
- *************************************** */
-export const signInWithPassword = async ({
- email,
- password,
-}: SignInParams): Promise => {
- try {
- const params = { email, password };
-
- const res = await axios.post(endpoints.auth.signIn, params);
-
- const { accessToken } = res.data;
-
- console.log({ t: res.data });
-
- if (!accessToken) {
- throw new Error(ERR_ACCESS_TOKEN_NOT_FOUND);
- }
-
- // setSession(accessToken);
- return accessToken;
- } catch (error) {
- console.error('Error during sign in:', error);
- throw error;
- }
-};
-
-/** **************************************
- * Sign up
- *************************************** */
-export const signUp = async ({
- email,
- password,
- firstName,
- lastName,
-}: SignUpParams): Promise => {
- const params = {
- email,
- password,
- firstName,
- lastName,
- };
-
- try {
- const res = await axios.post(endpoints.auth.signUp, params);
-
- const { accessToken } = res.data;
-
- if (!accessToken) {
- throw new Error('Access token not found in response');
- }
-
- sessionStorage.setItem(JWT_STORAGE_KEY, accessToken);
- } catch (error) {
- console.error('Error during sign up:', error);
- throw error;
- }
-};
-
-/** **************************************
- * Sign out
- *************************************** */
-export const signOut = async (): Promise => {
- try {
- await setSession(null);
- } catch (error) {
- console.error('Error during sign out:', error);
- throw error;
- }
-};
diff --git a/03_source/mobile.trunk/src/context/jwt/constant.ts b/03_source/mobile.trunk/src/context/jwt/constant.ts
deleted file mode 100644
index c9cb827..0000000
--- a/03_source/mobile.trunk/src/context/jwt/constant.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const JWT_STORAGE_KEY = 'jwt_access_token';
diff --git a/03_source/mobile.trunk/src/context/jwt/utils.tsx b/03_source/mobile.trunk/src/context/jwt/utils.tsx
deleted file mode 100644
index 6bdb963..0000000
--- a/03_source/mobile.trunk/src/context/jwt/utils.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-// import { paths } from 'src/routes/paths';
-
-import axios from '../../lib/axios';
-
-import { JWT_STORAGE_KEY } from './constant.js';
-import PATHS from '../../PATHS.js';
-
-// ----------------------------------------------------------------------
-
-export function jwtDecode(token: string) {
- try {
- if (!token) return null;
-
- const parts = token.split('.');
- if (parts.length < 2) {
- throw new Error('Invalid token!');
- }
-
- const base64Url = parts[1];
- const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
- const decoded = JSON.parse(atob(base64));
-
- return decoded;
- } catch (error) {
- console.error('Error decoding token:', error);
- throw error;
- }
-}
-
-// ----------------------------------------------------------------------
-
-export function isValidToken(accessToken: string) {
- if (!accessToken) {
- return false;
- }
-
- try {
- const decoded = jwtDecode(accessToken);
-
- if (!decoded || !('exp' in decoded)) {
- return false;
- }
-
- const currentTime = Date.now() / 1000;
-
- return decoded.exp > currentTime;
- } catch (error) {
- console.error('Error during token validation:', error);
- return false;
- }
-}
-
-// ----------------------------------------------------------------------
-
-export function tokenExpired(exp: number) {
- const currentTime = Date.now();
- const timeLeft = exp * 1000 - currentTime;
-
- setTimeout(() => {
- try {
- alert('Token expired!');
- sessionStorage.removeItem(JWT_STORAGE_KEY);
- window.location.href = PATHS.SIGN_IN;
- } catch (error) {
- console.error('Error during token expiration:', error);
- throw error;
- }
- }, timeLeft);
-}
-
-// ----------------------------------------------------------------------
-
-const INVALID_ACCESS_TOKEN = 'Invalid access token!';
-
-export async function setSession(accessToken: string | null) {
- try {
- if (accessToken) {
- sessionStorage.setItem(JWT_STORAGE_KEY, accessToken);
-
- axios.defaults.headers.common.Authorization = `Bearer ${accessToken}`;
-
- const decodedToken = jwtDecode(accessToken); // ~3 days by minimals server
-
- if (decodedToken && 'exp' in decodedToken) {
- tokenExpired(decodedToken.exp);
- } else {
- throw new Error(INVALID_ACCESS_TOKEN);
- }
- } else {
- sessionStorage.removeItem(JWT_STORAGE_KEY);
- delete axios.defaults.headers.common.Authorization;
- }
- } catch (error) {
- console.error('Error during set session:', error);
- throw error;
- }
-}
diff --git a/03_source/mobile.trunk/src/data/AppContext.tsx b/03_source/mobile.trunk/src/data/AppContext.tsx
deleted file mode 100644
index d1375ad..0000000
--- a/03_source/mobile.trunk/src/data/AppContext.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import React, { createContext, PropsWithChildren, useReducer } from 'react';
-import { initialState, AppState, reducers } from './state';
-
-export interface AppContextState {
- state: AppState;
- dispatch: React.Dispatch;
-}
-
-export const AppContext = createContext({
- state: initialState,
- dispatch: () => undefined,
-});
-
-export const AppContextProvider: React.FC = ({ children }) => {
- const [store, dispatch] = useReducer(reducers, initialState);
-
- return (
-
- {children}
-
- );
-};
diff --git a/03_source/mobile.trunk/src/data/combineReducers.ts b/03_source/mobile.trunk/src/data/combineReducers.ts
deleted file mode 100644
index 44769b0..0000000
--- a/03_source/mobile.trunk/src/data/combineReducers.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-interface R {
- [key: string]: (...args: any) => any;
-}
-
-export function combineReducers(reducers: R) {
- type keys = keyof typeof reducers;
- type returnType = { [K in keys]: ReturnType<(typeof reducers)[K]> };
- const combinedReducer = (state: any, action: any) => {
- const newState: returnType = {} as any;
- const keys = Object.keys(reducers);
- keys.forEach((key) => {
- const result = reducers[key](state[key], action);
- newState[key as keys] = result || state[key];
- });
- return newState;
- };
- return combinedReducer;
-}
diff --git a/03_source/mobile.trunk/src/data/connect.tsx b/03_source/mobile.trunk/src/data/connect.tsx
deleted file mode 100644
index a4ae695..0000000
--- a/03_source/mobile.trunk/src/data/connect.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import React, { useContext, useMemo } from 'react';
-import { AppContext } from './AppContext';
-import { DispatchObject } from '../util/types';
-import { AppState } from './state';
-
-interface ConnectParams {
- mapStateToProps?: (state: AppState, props: TOwnProps) => TStateProps;
- mapDispatchToProps?: TDispatchProps;
- component: React.ComponentType;
-}
-
-export function connect<
- TOwnProps = any,
- TStateProps = any,
- TDispatchProps = any
->({
- mapStateToProps = () => ({} as TStateProps),
- mapDispatchToProps = {} as TDispatchProps,
- component,
-}: ConnectParams<
- TOwnProps,
- TStateProps,
- TDispatchProps
->): React.FunctionComponent {
- const Connect = (ownProps: TOwnProps) => {
- const context = useContext(AppContext);
-
- const dispatchFuncs = useMemo(() => {
- const dispatchFuncs: { [key: string]: any } = {};
- if (mapDispatchToProps) {
- Object.keys(mapDispatchToProps).forEach((key) => {
- const oldFunc = (mapDispatchToProps as any)[key];
- const newFunc = (...args: any) => {
- const dispatchFunc = oldFunc(...args);
- if (typeof dispatchFunc === 'object') {
- context.dispatch(dispatchFunc);
- } else {
- const result = dispatchFunc(context.dispatch);
- if (typeof result === 'object' && result.then) {
- result.then((dispatchObject?: DispatchObject) => {
- if (dispatchObject && dispatchObject.type) {
- context.dispatch(dispatchObject);
- }
- });
- }
- }
- };
- dispatchFuncs[key] = newFunc;
- });
- }
- return dispatchFuncs;
- // eslint-disable-next-line
- }, [mapDispatchToProps]);
-
- const props = useMemo(() => {
- return Object.assign(
- {},
- ownProps,
- mapStateToProps(context.state, ownProps),
- dispatchFuncs
- );
- // eslint-disable-next-line
- }, [ownProps, context.state]);
-
- return React.createElement(component, props);
- };
- return React.memo(Connect as any);
-}
diff --git a/03_source/mobile.trunk/src/data/dataApi.ts b/03_source/mobile.trunk/src/data/dataApi.ts
deleted file mode 100644
index e08558d..0000000
--- a/03_source/mobile.trunk/src/data/dataApi.ts
+++ /dev/null
@@ -1,151 +0,0 @@
-import { GetResult, Preferences as Storage } from '@capacitor/preferences';
-import { Schedule, Session } from '../models/Schedule';
-import { Speaker } from '../models/Speaker';
-import { Location } from '../models/Location';
-import axios from 'axios';
-import constants from '../constants';
-import { IOrderItem } from '../models/Order';
-import { Event } from '../models/Event';
-
-const dataUrl = '/assets/data/data.json';
-const locationsUrl = '/assets/data/locations.json';
-
-const HAS_LOGGED_IN = 'hasLoggedIn';
-const HAS_SEEN_TUTORIAL = 'hasSeenTutorial';
-const USERNAME = 'username';
-const ACCESS_TOKEN = 'a_token';
-const ACTIVE_SESSION = 'a_session';
-
-export const getConfData = async () => {
- const response = await Promise.all([
- fetch(dataUrl),
- fetch(locationsUrl),
- fetch(`${constants.API_ENDPOINT}/api/order/list`),
- fetch(`${constants.API_ENDPOINT}/api/event/list`),
- // axios.get(`${constants.API_ENDPOINT}/v1/events`),
- // axios.get(`${constants.API_ENDPOINT}/v1/members`),
- //
- ]);
-
- const responseData = await response[0].json();
- const schedule = responseData.schedule[0] as Schedule;
- const sessions = parseSessions(schedule);
- const speakers = responseData.speakers as Speaker[];
- const locations = (await response[1].json()) as Location[];
- const allTracks = sessions
- .reduce((all, session) => all.concat(session.tracks), [] as string[])
- .filter((trackName, index, array) => array.indexOf(trackName) === index)
- .sort();
-
- // const events = response[2].data;
- // const nearByMembers = response[3].data;
-
- // TODO: update this due to not use axios anymore
- // the data object is not available
- // const orders = response[2].data.orders as IOrderItem[];
- // const events = response[3].data.events as Event[];
- const orderResponse = response[2];
- let orders = {
- result: { status: orderResponse.status, ok: orderResponse.ok },
- data: [],
- };
- if (orderResponse.status == 200) {
- orders = { ...orders, data: await orderResponse.json() };
- }
-
- const eventResponse = response[3];
- let events = {
- result: { status: eventResponse.status, ok: eventResponse.ok },
- data: [],
- };
- if (eventResponse.status == 200) {
- events = { ...events, data: await eventResponse.json() };
- }
-
- const nearByMembers = [];
-
- const data = {
- schedule,
- sessions,
- locations,
- speakers,
- allTracks,
- filteredTracks: [...allTracks],
- //
- events,
- // nearByMembers,
- orders,
- hello: 'world',
- //
- };
-
- return data;
-};
-
-export const getUserData = async () => {
- const response = await Promise.all([
- Storage.get({ key: HAS_LOGGED_IN }),
- Storage.get({ key: HAS_SEEN_TUTORIAL }),
- Storage.get({ key: USERNAME }),
- ]);
- const isLoggedin = (await response[0].value) === 'true';
- const hasSeenTutorial = (await response[1].value) === 'true';
- const username = (await response[2].value) || undefined;
- const data = {
- isLoggedin,
- hasSeenTutorial,
- username,
- };
- return data;
-};
-
-export const setIsLoggedInData = async (isLoggedIn: boolean) => {
- await Storage.set({ key: HAS_LOGGED_IN, value: JSON.stringify(isLoggedIn) });
-};
-
-export const setHasSeenTutorialData = async (hasSeenTutorial: boolean) => {
- await Storage.set({
- key: HAS_SEEN_TUTORIAL,
- value: JSON.stringify(hasSeenTutorial),
- });
-};
-
-export const setUsernameData = async (username?: string) => {
- if (!username) {
- await Storage.remove({ key: USERNAME });
- } else {
- await Storage.set({ key: USERNAME, value: username });
- }
-};
-
-export const setAccessTokenData = async (accessToken?: string) => {
- if (!accessToken) {
- await Storage.remove({ key: ACCESS_TOKEN });
- } else {
- await Storage.set({ key: ACCESS_TOKEN, value: accessToken });
- }
-};
-
-export const getAccessTokenData = async (): Promise => {
- return Storage.get({ key: ACCESS_TOKEN });
-};
-
-function parseSessions(schedule: Schedule) {
- const sessions: Session[] = [];
- schedule.groups.forEach((g) => {
- g.sessions.forEach((s) => sessions.push(s));
- });
- return sessions;
-}
-
-export const setActiveSessionData = async (activeSession: any) => {
- if (!activeSession) {
- await Storage.remove({ key: ACTIVE_SESSION });
- } else {
- await Storage.set({ key: ACTIVE_SESSION, value: JSON.stringify(activeSession) });
- }
-};
-
-export const getActiveSessionData = async (): Promise => {
- return Storage.get({ key: JSON.parse(ACTIVE_SESSION) });
-};
diff --git a/03_source/mobile.trunk/src/data/locations/locations.actions.ts b/03_source/mobile.trunk/src/data/locations/locations.actions.ts
deleted file mode 100644
index c2f4234..0000000
--- a/03_source/mobile.trunk/src/data/locations/locations.actions.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { DispatchObject } from '../../util/types';
-import { Location } from '../../models/Location';
-
-export const SET_LOCATIONS = 'SET_LOCATIONS';
-
-export const setLocations = (locations: Location[]): DispatchObject => ({
- type: SET_LOCATIONS,
- payload: locations,
-});
-
-export const loadLocations =
- () => async (dispatch: (action: DispatchObject) => void) => {
- try {
- const response = await fetch('/assets/data/locations.json');
- const locations = await response.json();
- dispatch(setLocations(locations));
- } catch (error) {
- console.error('Error loading locations:', error);
- // Set default locations if data cannot be loaded
- dispatch(
- setLocations([
- {
- id: 1,
- name: 'Monona Terrace Convention Center',
- lat: 43.071584,
- lng: -89.38012,
- center: true,
- },
- ])
- );
- }
- };
diff --git a/03_source/mobile.trunk/src/data/locations/locations.reducer.ts b/03_source/mobile.trunk/src/data/locations/locations.reducer.ts
deleted file mode 100644
index 87cbf78..0000000
--- a/03_source/mobile.trunk/src/data/locations/locations.reducer.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { LocationState, initialState } from '../../models/Location';
-import { SET_LOCATIONS } from './locations.actions';
-
-export const locationsReducer = (
- state: LocationState = initialState,
- action: { type: string; payload: any }
-): LocationState => {
- switch (action.type) {
- case SET_LOCATIONS:
- return {
- ...state,
- locations: action.payload,
- };
- default:
- return state;
- }
-};
diff --git a/03_source/mobile.trunk/src/data/selectors.ts b/03_source/mobile.trunk/src/data/selectors.ts
deleted file mode 100644
index 1b06acc..0000000
--- a/03_source/mobile.trunk/src/data/selectors.ts
+++ /dev/null
@@ -1,197 +0,0 @@
-import { createSelector } from 'reselect';
-import { Schedule, Session, ScheduleGroup } from '../models/Schedule';
-import { Speaker } from '../models/Speaker';
-import { Location } from '../models/Location';
-
-import { AppState } from './state';
-import { IOrderItem } from '../models/Order';
-import { Event } from '../models/Event';
-
-const getSchedule = (state: AppState) => {
- return state.data.schedule;
-};
-
-export const getSpeakers = (state: AppState) => state.data.speakers;
-
-const getSessions = (state: AppState) => state.data.sessions;
-const getFilteredTracks = (state: AppState) => state.data.filteredTracks;
-const getFavoriteIds = (state: AppState) => state.data.favorites;
-const getSearchText = (state: AppState) => state.data.searchText;
-
-export const getEvents = (state: AppState) => {
- return state.data.events;
-};
-
-export const getNearbyMembers = (state: AppState) => state.data.nearByMembers;
-
-export const getOrders = (state: AppState) => {
- return state.data.orders;
-};
-
-export const getFilteredSchedule = createSelector(
- getSchedule,
- getFilteredTracks,
- (schedule, filteredTracks) => {
- const groups: ScheduleGroup[] = [];
-
- // Helper function to convert 12-hour time to 24-hour time for proper sorting
- const convertTo24Hour = (timeStr: string) => {
- const [time, period] = timeStr.toLowerCase().split(' ');
- let [hours, minutes] = time.split(':').map(Number);
-
- if (period === 'pm' && hours !== 12) {
- hours += 12;
- } else if (period === 'am' && hours === 12) {
- hours = 0;
- }
-
- return `${hours.toString().padStart(2, '0')}:${minutes || '00'}`;
- };
-
- // Sort the groups by time
- const sortedGroups = [...schedule.groups].sort((a, b) => {
- const timeA = convertTo24Hour(a.time);
- const timeB = convertTo24Hour(b.time);
- return timeA.localeCompare(timeB);
- });
-
- sortedGroups.forEach((group: ScheduleGroup) => {
- const sessions: Session[] = [];
- group.sessions.forEach((session) => {
- session.tracks.forEach((track) => {
- if (filteredTracks.indexOf(track) > -1) {
- sessions.push(session);
- }
- });
- });
-
- if (sessions.length) {
- // Sort sessions within each group by start time
- const sortedSessions = sessions.sort((a, b) => {
- const timeA = convertTo24Hour(a.timeStart);
- const timeB = convertTo24Hour(b.timeStart);
- return timeA.localeCompare(timeB);
- });
-
- const groupToAdd: ScheduleGroup = {
- time: group.time,
- sessions: sortedSessions,
- };
- groups.push(groupToAdd);
- }
- });
-
- return {
- date: schedule.date,
- groups,
- } as Schedule;
- }
-);
-
-export const getSearchedSchedule = createSelector(
- getFilteredSchedule,
- getSearchText,
- (schedule, searchText) => {
- if (!searchText) {
- return schedule;
- }
- const groups: ScheduleGroup[] = [];
- schedule.groups.forEach((group) => {
- const sessions = group.sessions.filter(
- (s) => s.name.toLowerCase().indexOf(searchText.toLowerCase()) > -1
- );
- if (sessions.length) {
- const groupToAdd: ScheduleGroup = {
- time: group.time,
- sessions,
- };
- groups.push(groupToAdd);
- }
- });
- return {
- date: schedule.date,
- groups,
- } as Schedule;
- }
-);
-
-export const getScheduleList = createSelector(getSearchedSchedule, (schedule) => schedule);
-
-export const getGroupedFavorites = createSelector(
- getScheduleList,
- getFavoriteIds,
- (schedule, favoriteIds) => {
- const groups: ScheduleGroup[] = [];
- schedule.groups.forEach((group) => {
- const sessions = group.sessions.filter((s) => favoriteIds.indexOf(s.id) > -1);
- if (sessions.length) {
- const groupToAdd: ScheduleGroup = {
- time: group.time,
- sessions,
- };
- groups.push(groupToAdd);
- }
- });
- return {
- date: schedule.date,
- groups,
- } as Schedule;
- }
-);
-
-const getIdParam = (_state: AppState, props: any) => {
- return props.match.params['id'];
-};
-
-export const getSession = createSelector(getSessions, getIdParam, (sessions, id) => {
- return sessions.find((s: Session) => s.id === id);
-});
-
-export const getSpeaker = createSelector(getSpeakers, getIdParam, (speakers, id) =>
- speakers.find((x: Speaker) => x.id === id)
-);
-
-export const getEvent = createSelector(getEvents, getIdParam, (data_events, id) => {
- const {
- data: { events },
- } = data_events;
-
- return events.find((x: Event) => x.id === id);
-});
-
-export const getOrder = createSelector(getOrders, getIdParam, (data_orders, id) => {
- const {
- data: { orders },
- } = data_orders;
-
- return orders.find((x: IOrderItem) => x.id === id);
-});
-
-export const getSpeakerSessions = createSelector(getSessions, (sessions) => {
- const speakerSessions: { [key: string]: Session[] } = {};
-
- sessions.forEach((session: Session) => {
- session.speakerNames &&
- session.speakerNames.forEach((name) => {
- if (speakerSessions[name]) {
- speakerSessions[name].push(session);
- } else {
- speakerSessions[name] = [session];
- }
- });
- });
- return speakerSessions;
-});
-
-export const mapCenter = (state: AppState) => {
- const item = state.data.locations.find((l: Location) => l.id === state.data.mapCenterId);
- if (item == null) {
- return {
- id: 1,
- name: 'Map Center',
- lat: 43.071584,
- lng: -89.38012,
- };
- }
- return item;
-};
diff --git a/03_source/mobile.trunk/src/data/sessions/conf.state.ts b/03_source/mobile.trunk/src/data/sessions/conf.state.ts
deleted file mode 100644
index 94d5c80..0000000
--- a/03_source/mobile.trunk/src/data/sessions/conf.state.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Location } from '../../models/Location';
-import { Speaker } from '../../models/Speaker';
-import { Schedule, Session } from '../../models/Schedule';
-//
-import { Event } from '../../models/Event';
-import { IOrderItem } from '../../models/Order';
-
-export interface ConfState {
- schedule: Schedule;
- sessions: Session[];
- speakers: Speaker[];
- favorites: number[];
- locations: Location[];
- filteredTracks: string[];
- searchText?: string;
- mapCenterId?: number;
- loading?: boolean;
- allTracks: string[];
- menuEnabled: boolean;
- //
- events: Event[];
- orders: IOrderItem[];
-}
diff --git a/03_source/mobile.trunk/src/data/sessions/orders.actions.ts b/03_source/mobile.trunk/src/data/sessions/orders.actions.ts
deleted file mode 100644
index 36ac38f..0000000
--- a/03_source/mobile.trunk/src/data/sessions/orders.actions.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { getConfData } from '../dataApi';
-import { ActionType } from '../../util/types';
-import { ConfState } from './conf.state';
-
-export const loadConfData = () => async (dispatch: React.Dispatch) => {
- dispatch(setLoading(true));
- const data = await getConfData();
- dispatch(setData(data));
- dispatch(setLoading(false));
-};
-
-export const setLoading = (isLoading: boolean) =>
- ({
- type: 'set-conf-loading',
- isLoading,
- } as const);
-
-export const setData = (data: Partial) =>
- ({
- type: 'set-conf-data',
- data,
- } as const);
-
-export const addFavorite = (sessionId: number) =>
- ({
- type: 'add-favorite',
- sessionId,
- } as const);
-
-export const removeFavorite = (sessionId: number) =>
- ({
- type: 'remove-favorite',
- sessionId,
- } as const);
-
-export const updateFilteredTracks = (filteredTracks: string[]) =>
- ({
- type: 'update-filtered-tracks',
- filteredTracks,
- } as const);
-
-export const setSearchText = (searchText?: string) =>
- ({
- type: 'set-search-text',
- searchText,
- } as const);
-
-export const setMenuEnabled = (menuEnabled: boolean) =>
- ({
- type: 'set-menu-enabled',
- menuEnabled,
- } as const);
-
-export type OrdersActions =
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType;
diff --git a/03_source/mobile.trunk/src/data/sessions/orders.reducer.ts b/03_source/mobile.trunk/src/data/sessions/orders.reducer.ts
deleted file mode 100644
index 3687bc0..0000000
--- a/03_source/mobile.trunk/src/data/sessions/orders.reducer.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { OrdersActions } from './orders.actions';
-import { ConfState } from './conf.state';
-
-export const orderReducer = (state: ConfState, action: OrdersActions): ConfState => {
- switch (action.type) {
- case 'set-conf-loading': {
- return { ...state, loading: action.isLoading };
- }
- case 'set-conf-data': {
- return { ...state, ...action.data };
- }
- case 'add-favorite': {
- return { ...state, favorites: [...state.favorites, action.sessionId] };
- }
- case 'remove-favorite': {
- return {
- ...state,
- favorites: [...state.favorites.filter((x) => x !== action.sessionId)],
- };
- }
- case 'update-filtered-tracks': {
- return { ...state, filteredTracks: action.filteredTracks };
- }
- case 'set-search-text': {
- return { ...state, searchText: action.searchText };
- }
- case 'set-menu-enabled': {
- return { ...state, menuEnabled: action.menuEnabled };
- }
- }
-};
diff --git a/03_source/mobile.trunk/src/data/sessions/sessions.actions.ts b/03_source/mobile.trunk/src/data/sessions/sessions.actions.ts
deleted file mode 100644
index daea818..0000000
--- a/03_source/mobile.trunk/src/data/sessions/sessions.actions.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { getConfData } from '../dataApi';
-import { ActionType } from '../../util/types';
-import { ConfState } from './conf.state';
-
-export const loadConfData = () => async (dispatch: React.Dispatch) => {
- dispatch(setLoading(true));
- const data = await getConfData();
- dispatch(setData(data));
- dispatch(setLoading(false));
-};
-
-export const setLoading = (isLoading: boolean) =>
- ({
- type: 'set-conf-loading',
- isLoading,
- } as const);
-
-export const setData = (data: Partial) =>
- ({
- type: 'set-conf-data',
- data,
- } as const);
-
-export const addFavorite = (sessionId: number) =>
- ({
- type: 'add-favorite',
- sessionId,
- } as const);
-
-export const removeFavorite = (sessionId: number) =>
- ({
- type: 'remove-favorite',
- sessionId,
- } as const);
-
-export const updateFilteredTracks = (filteredTracks: string[]) =>
- ({
- type: 'update-filtered-tracks',
- filteredTracks,
- } as const);
-
-export const setSearchText = (searchText?: string) =>
- ({
- type: 'set-search-text',
- searchText,
- } as const);
-
-export const setMenuEnabled = (menuEnabled: boolean) =>
- ({
- type: 'set-menu-enabled',
- menuEnabled,
- } as const);
-
-export type SessionsActions =
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType;
diff --git a/03_source/mobile.trunk/src/data/sessions/sessions.reducer.ts b/03_source/mobile.trunk/src/data/sessions/sessions.reducer.ts
deleted file mode 100644
index 3540821..0000000
--- a/03_source/mobile.trunk/src/data/sessions/sessions.reducer.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { SessionsActions } from './sessions.actions';
-import { ConfState } from './conf.state';
-
-export const sessionsReducer = (state: ConfState, action: SessionsActions): ConfState => {
- switch (action.type) {
- case 'set-conf-loading': {
- return { ...state, loading: action.isLoading };
- }
- case 'set-conf-data': {
- return { ...state, ...action.data };
- }
- case 'add-favorite': {
- return { ...state, favorites: [...state.favorites, action.sessionId] };
- }
- case 'remove-favorite': {
- return {
- ...state,
- favorites: [...state.favorites.filter((x) => x !== action.sessionId)],
- };
- }
- case 'update-filtered-tracks': {
- return { ...state, filteredTracks: action.filteredTracks };
- }
- case 'set-search-text': {
- return { ...state, searchText: action.searchText };
- }
- case 'set-menu-enabled': {
- return { ...state, menuEnabled: action.menuEnabled };
- }
- }
-};
diff --git a/03_source/mobile.trunk/src/data/state.ts b/03_source/mobile.trunk/src/data/state.ts
deleted file mode 100644
index 0680912..0000000
--- a/03_source/mobile.trunk/src/data/state.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { combineReducers } from './combineReducers';
-//
-import { sessionsReducer } from './sessions/sessions.reducer';
-import { userReducer } from './user/user.reducer';
-import { locationsReducer } from './locations/locations.reducer';
-//
-import { orderReducer } from './sessions/orders.reducer';
-
-export const initialState: AppState = {
- data: {
- schedule: { groups: [] } as any,
- sessions: [],
- speakers: [],
- favorites: [],
- locations: [],
- allTracks: [],
- filteredTracks: [],
- mapCenterId: 0,
- loading: false,
- menuEnabled: true,
- //
- events: [],
- nearbyMembers: [],
- orders: [],
- },
- user: {
- hasSeenTutorial: false,
- darkMode: false,
- isLoggedin: false,
- loading: false,
- //
- isSessionValid: false,
- },
- locations: {
- locations: [],
- },
-};
-
-export const reducers = combineReducers({
- data: sessionsReducer,
- user: userReducer,
- locations: locationsReducer,
- //
- order: orderReducer,
-});
-
-export type AppState = ReturnType;
diff --git a/03_source/mobile.trunk/src/data/user/user.actions.ts b/03_source/mobile.trunk/src/data/user/user.actions.ts
deleted file mode 100644
index 04ace1d..0000000
--- a/03_source/mobile.trunk/src/data/user/user.actions.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-import {
- getUserData,
- setIsLoggedInData,
- setUsernameData,
- setHasSeenTutorialData,
- setAccessTokenData,
- getAccessTokenData,
- setActiveSessionData,
-} from '../dataApi';
-import { ActionType } from '../../util/types';
-import { UserState } from './user.state';
-import { isValidToken } from '../../context/jwt/utils';
-import axios from 'axios';
-import { endpoints } from '../../pages/MyLogin/endpoints';
-
-export const loadUserData = () => async (dispatch: React.Dispatch) => {
- dispatch(setLoading(true));
-
- const data = await getUserData();
- dispatch(setData(data));
-
- dispatch(setLoading(false));
-};
-
-export const setLoading = (isLoading: boolean) =>
- ({
- type: 'set-user-loading',
- isLoading,
- } as const);
-
-export const setData = (data: Partial) =>
- ({
- type: 'set-user-data',
- data,
- } as const);
-
-export const logoutUser = () => async (dispatch: React.Dispatch) => {
- //
- await setIsLoggedInData(false);
- dispatch(setUsername());
-};
-
-export const setIsLoggedIn = (loggedIn: boolean) => async (dispatch: React.Dispatch) => {
- await setIsLoggedInData(loggedIn);
- return {
- type: 'set-is-loggedin',
- loggedIn,
- } as const;
-};
-
-export const setUsername = (username?: string) => async (dispatch: React.Dispatch) => {
- await setUsernameData(username);
- console.log('setUsername triggered');
-
- return {
- type: 'set-username',
- username,
- } as const;
-};
-
-export const setAccessToken = (token?: string) => async (dispatch: React.Dispatch) => {
- await setAccessTokenData(token);
-
- return {
- type: 'set-access-token',
- token,
- } as const;
-};
-
-export const setActiveSession = (session: any) => async (dispatch: React.Dispatch) => {
- await setActiveSessionData(session);
- return {
- type: 'set-active-session',
- session,
- } as const;
-};
-
-export const checkUserSession = () => async (dispatch: React.Dispatch) => {
- let accessToken = (await getAccessTokenData()).value;
- console.log('check user session');
- let sessionValid = false;
-
- try {
- if (accessToken && isValidToken(accessToken)) {
- const res = await axios.get(endpoints.auth.me, {
- headers: { Authorization: `Bearer ${accessToken}` },
- });
-
- const { user } = res.data;
-
- setActiveSession({ user: { ...user, accessToken }, loading: false });
- sessionValid = true;
- console.log('session valid');
- } else {
- setActiveSession({ user: null, loading: false });
- console.log('session not valid');
- }
- } catch (error) {
- console.error(error);
- setActiveSession({ user: null, loading: false });
- }
-
- return {
- type: 'check-user-session',
- sessionValid,
- } as const;
-};
-
-export const setHasSeenTutorial =
- (hasSeenTutorial: boolean) => async (dispatch: React.Dispatch) => {
- await setHasSeenTutorialData(hasSeenTutorial);
- return {
- type: 'set-has-seen-tutorial',
- hasSeenTutorial,
- } as const;
- };
-
-export const setDarkMode = (darkMode: boolean) =>
- ({
- type: 'set-dark-mode',
- darkMode,
- } as const);
-
-export type UserActions =
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType
- | ActionType;
diff --git a/03_source/mobile.trunk/src/data/user/user.reducer.ts b/03_source/mobile.trunk/src/data/user/user.reducer.ts
deleted file mode 100644
index f6e6acb..0000000
--- a/03_source/mobile.trunk/src/data/user/user.reducer.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { UserActions } from './user.actions';
-import { UserState } from './user.state';
-
-export function userReducer(state: UserState, action: UserActions): UserState {
- switch (action.type) {
- case 'set-user-loading':
- return { ...state, loading: action.isLoading };
- case 'set-user-data':
- return { ...state, ...action.data };
- case 'set-username':
- return { ...state, username: action.username };
- case 'set-has-seen-tutorial':
- return { ...state, hasSeenTutorial: action.hasSeenTutorial };
- case 'set-dark-mode':
- return { ...state, darkMode: action.darkMode };
- case 'set-is-loggedin':
- return { ...state, isLoggedin: action.loggedIn };
- case 'set-access-token':
- return { ...state, token: action.token };
- case 'check-user-session':
- return { ...state, isSessionValid: action.sessionValid };
- }
-}
diff --git a/03_source/mobile.trunk/src/data/user/user.state.ts b/03_source/mobile.trunk/src/data/user/user.state.ts
deleted file mode 100644
index 56e5666..0000000
--- a/03_source/mobile.trunk/src/data/user/user.state.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export interface UserState {
- loading: boolean;
- username?: string;
- hasSeenTutorial: boolean;
- darkMode: boolean;
- isLoggedin: boolean;
- isSessionValid: boolean;
- session?: any;
- token?: string;
-}
diff --git a/03_source/mobile.trunk/src/declarations.ts b/03_source/mobile.trunk/src/declarations.ts
deleted file mode 100644
index dbe667a..0000000
--- a/03_source/mobile.trunk/src/declarations.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface AppPage {
- url: string;
- icon: object;
- title: string;
-}
diff --git a/03_source/mobile.trunk/src/global-config.ts b/03_source/mobile.trunk/src/global-config.ts
deleted file mode 100644
index 71b4f35..0000000
--- a/03_source/mobile.trunk/src/global-config.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export const CONFIG = {
- serverUrl: '',
-};
diff --git a/03_source/mobile.trunk/src/hooks/use-set-state.ts b/03_source/mobile.trunk/src/hooks/use-set-state.ts
deleted file mode 100644
index f820bd2..0000000
--- a/03_source/mobile.trunk/src/hooks/use-set-state.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Custom hook to manage state with utility functions to set state, set a specific field, and reset state.
- *
- * @param {T} initialState - The initial state value.
- *
- * @returns {UseSetStateReturn} - An object containing:
- * - `state`: The current state.
- * - `resetState`: A function to reset the state to the initial value.
- * - `setState`: A function to update the state.
- * - `setField`: A function to update a specific field in the state.
- *
- * @example
- * const { state, setState, setField, resetState } = useSetState({ name: '', age: 0 });
- *
- * return (
- *
- *
Name: {state.name}
- *
Age: {state.age}
- *
setField('name', 'John')}>Set Name
- *
Reset
- *
- * );
- */
-type UseSetStateReturn = {
- state: T;
- resetState: (defaultState?: T) => void;
- setState: (updateState: T | Partial) => void;
- setField: (name: keyof T, updateValue: T[keyof T]) => void;
-};
-declare function useSetState(initialState?: T): UseSetStateReturn;
-
-export { type UseSetStateReturn, useSetState };
diff --git a/03_source/mobile.trunk/src/main.tsx b/03_source/mobile.trunk/src/main.tsx
deleted file mode 100644
index 964b804..0000000
--- a/03_source/mobile.trunk/src/main.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import App from './App';
-import * as serviceWorker from './serviceWorker';
-
-ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
-
-
-
-);
-// If you want your app to work offline and load faster, you can change
-// unregister() to register() below. Note this comes with some pitfalls.
-// Learn more about service workers: https://bit.ly/CRA-PWA
-serviceWorker.register();
diff --git a/03_source/mobile.trunk/src/models/Event.ts b/03_source/mobile.trunk/src/models/Event.ts
deleted file mode 100644
index 31ac548..0000000
--- a/03_source/mobile.trunk/src/models/Event.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-// 03_source/mobile/src/models/Event.ts
-
-export type IDateValue = string | number | null;
-
-export interface Event {
- id: string;
- createdAt: IDateValue;
- updatedAt: IDateValue;
- //
- name: string;
- code: string;
- price: number;
- //
- eventDate: Date;
- joinMembers: { email: string; avatar: string; sex: string }[];
- title: string;
- currency: string;
- duration_m: number;
- ageBottom: number;
- ageTop: number;
- location: string;
- avatar: string;
- //
-}
diff --git a/03_source/mobile.trunk/src/models/Location.ts b/03_source/mobile.trunk/src/models/Location.ts
deleted file mode 100644
index 9bc6d77..0000000
--- a/03_source/mobile.trunk/src/models/Location.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export interface Location {
- id: number;
- name: string;
- lat: number;
- lng: number;
- center?: boolean;
-}
-
-export interface LocationState {
- locations: Location[];
-}
-
-export const initialState: LocationState = {
- locations: [],
-};
diff --git a/03_source/mobile.trunk/src/models/Order.ts b/03_source/mobile.trunk/src/models/Order.ts
deleted file mode 100644
index 6d4b184..0000000
--- a/03_source/mobile.trunk/src/models/Order.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-export type IDateValue = string | number | null;
-
-export type IOrderProductItem = {
- id: string;
- sku: string;
- name: string;
- price: number;
- coverUrl: string;
- quantity: number;
-};
-
-export type IOrderHistory = {
- orderTime: IDateValue;
- paymentTime: IDateValue;
- deliveryTime: IDateValue;
- completionTime: IDateValue;
- timeline: { title: string; time: IDateValue }[];
-};
-
-export type IOrderDelivery = {
- shipBy: string;
- speedy: string;
- trackingNumber: string;
-};
-
-export type IOrderShippingAddress = {
- fullAddress: string;
- phoneNumber: string;
-};
-
-export type IOrderPayment = {
- cardType: string;
- cardNumber: string;
-};
-
-export interface IOrderItem {
- id: string;
- createdAt: IDateValue;
- updatedAt: IDateValue;
- //
- taxes: number;
- status: string;
- shipping: number;
- discount: number;
- subtotal: number;
- orderNumber: string;
- totalAmount: number;
- totalQuantity: number;
- //
- items: IOrderProductItem[];
- history: IOrderHistory | undefined;
- delivery: IOrderDelivery;
- shippingAddress: IOrderShippingAddress;
- payment: IOrderPayment;
-}
diff --git a/03_source/mobile.trunk/src/models/Schedule.ts b/03_source/mobile.trunk/src/models/Schedule.ts
deleted file mode 100644
index f210ff8..0000000
--- a/03_source/mobile.trunk/src/models/Schedule.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-export interface Schedule {
- date: string;
- groups: ScheduleGroup[];
-}
-
-export interface ScheduleGroup {
- time: string;
- sessions: Session[];
-}
-
-export interface Session {
- id: number;
- timeStart: string;
- timeEnd: string;
- name: string;
- location: string;
- description: string;
- speakerNames: string[];
- tracks: string[];
-}
diff --git a/03_source/mobile.trunk/src/models/SessionGroup.ts b/03_source/mobile.trunk/src/models/SessionGroup.ts
deleted file mode 100644
index 93d46ad..0000000
--- a/03_source/mobile.trunk/src/models/SessionGroup.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Session } from './Schedule';
-export interface SessionGroup {
- startTime: string;
- sessions: Session[];
-}
diff --git a/03_source/mobile.trunk/src/models/Speaker.ts b/03_source/mobile.trunk/src/models/Speaker.ts
deleted file mode 100644
index 35d8c78..0000000
--- a/03_source/mobile.trunk/src/models/Speaker.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export interface Speaker {
- id: number;
- name: string;
- profilePic: string;
- twitter: string;
- instagram: string;
- about: string;
- title: string;
- location: string;
- email: string;
- phone: string;
-}
diff --git a/03_source/mobile.trunk/src/pages/About.scss b/03_source/mobile.trunk/src/pages/About.scss
deleted file mode 100644
index f7d1ac0..0000000
--- a/03_source/mobile.trunk/src/pages/About.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url("/assets/img/about/madison.jpg");
- }
-
- .about-header .austin {
- background-image: url("/assets/img/about/austin.jpg");
- }
-
- .about-header .chicago {
- background-image: url("/assets/img/about/chicago.jpg");
- }
-
- .about-header .seattle {
- background-image: url("/assets/img/about/seattle.jpg");
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/About.tsx b/03_source/mobile.trunk/src/pages/About.tsx
deleted file mode 100644
index 2c45965..0000000
--- a/03_source/mobile.trunk/src/pages/About.tsx
+++ /dev/null
@@ -1,171 +0,0 @@
-import React, { useState } from 'react';
-import {
- IonHeader,
- IonToolbar,
- IonContent,
- IonPage,
- IonButtons,
- IonMenuButton,
- IonButton,
- IonIcon,
- IonDatetime,
- IonSelectOption,
- IonList,
- IonItem,
- IonLabel,
- IonSelect,
- IonPopover,
- IonText,
-} from '@ionic/react';
-import './About.scss';
-import { ellipsisHorizontal, ellipsisVertical } from 'ionicons/icons';
-import AboutPopover from '../components/AboutPopover';
-import { format, parseISO } from 'date-fns';
-
-interface AboutProps {}
-
-const About: React.FC = () => {
- const [showPopover, setShowPopover] = useState(false);
- const [popoverEvent, setPopoverEvent] = useState();
- const [location, setLocation] = useState<
- 'madison' | 'austin' | 'chicago' | 'seattle'
- >('madison');
- const [conferenceDate, setConferenceDate] = useState(
- '2047-05-17T00:00:00-05:00'
- );
-
- const selectOptions = {
- header: 'Select a Location',
- };
-
- const presentPopover = (e: React.MouseEvent) => {
- setPopoverEvent(e.nativeEvent);
- setShowPopover(true);
- };
-
- function displayDate(date: string, dateFormat: string) {
- return format(parseISO(date), dateFormat);
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* Instead of loading an image each time the select changes, use opacity to transition them */}
-
-
-
-
-
-
-
About
-
-
- The Ionic Conference is a one-day event happening on {' '}
- {displayDate(conferenceDate, 'MMM dd, yyyy')}, featuring talks from the
- Ionic team. The conference focuses on building applications with Ionic
- Framework, including topics such as app migration to the latest version,
- React best practices, Webpack, Sass, and other technologies
- commonly used in the Ionic ecosystem. Tickets are completely sold out,
- and we're expecting over 1,000 developers — making this the largest
- Ionic conference to date!
-
-
-
Details
-
-
-
- setLocation(e.detail.value as any)}
- >
- Madison, WI
- Austin, TX
- Chicago, IL
- Seattle, WA
-
-
-
- Date
-
- {displayDate(conferenceDate, 'MMM dd, yyyy')}
-
-
-
- setConferenceDate(e.detail.value! as string)
- }
- presentation="date"
- >
-
-
-
-
-
Internet
-
-
-
- Wifi network
-
- ica{displayDate(conferenceDate, 'y')}
-
-
-
- Password
- makegoodthings
-
-
-
-
-
- setShowPopover(false)}
- >
- setShowPopover(false)} />
-
-
- );
-};
-
-export default React.memo(About);
diff --git a/03_source/mobile.trunk/src/pages/Account.scss b/03_source/mobile.trunk/src/pages/Account.scss
deleted file mode 100644
index e3c2761..0000000
--- a/03_source/mobile.trunk/src/pages/Account.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-#account-page {
- img {
- max-width: 140px;
- border-radius: 50%;
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/Account.tsx b/03_source/mobile.trunk/src/pages/Account.tsx
deleted file mode 100644
index 56f89e0..0000000
--- a/03_source/mobile.trunk/src/pages/Account.tsx
+++ /dev/null
@@ -1,110 +0,0 @@
-import React, { useState } from 'react';
-import {
- IonHeader,
- IonToolbar,
- IonTitle,
- IonContent,
- IonPage,
- IonButtons,
- IonMenuButton,
- IonList,
- IonItem,
- IonAlert,
-} from '@ionic/react';
-import './Account.scss';
-import { setUsername } from '../data/user/user.actions';
-import { connect } from '../data/connect';
-import { RouteComponentProps } from 'react-router';
-
-interface OwnProps extends RouteComponentProps {}
-
-interface StateProps {
- username?: string;
-}
-
-interface DispatchProps {
- setUsername: typeof setUsername;
-}
-
-interface AccountProps extends OwnProps, StateProps, DispatchProps {}
-
-const Account: React.FC = ({ setUsername, username }) => {
- const [showAlert, setShowAlert] = useState(false);
-
- const clicked = (text: string) => {
- console.log(`Clicked ${text}`);
- };
-
- return (
-
-
-
-
-
-
- Account
-
-
-
- {username && (
-
-
-
{username}
-
- clicked('Update Picture')}>
- Update Picture
-
- setShowAlert(true)}>
- Change Username
-
- clicked('Change Password')}>
- Change Password
-
-
- Support
-
-
- Logout
-
-
-
- )}
-
- {
- setUsername(data.username);
- },
- },
- ]}
- inputs={[
- {
- type: 'text',
- name: 'username',
- value: username,
- placeholder: 'username',
- },
- ]}
- onDidDismiss={() => setShowAlert(false)}
- />
-
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- username: state.user.username,
- }),
- mapDispatchToProps: {
- setUsername,
- },
- component: Account,
-});
diff --git a/03_source/mobile.trunk/src/pages/ChangeLanguage/index.tsx b/03_source/mobile.trunk/src/pages/ChangeLanguage/index.tsx
deleted file mode 100644
index 81a4ae6..0000000
--- a/03_source/mobile.trunk/src/pages/ChangeLanguage/index.tsx
+++ /dev/null
@@ -1,231 +0,0 @@
-// REQ0041/home_discover_event_tab
-
-import React, { useEffect, useRef, useState } from 'react';
-import {
- IonHeader,
- IonToolbar,
- IonTitle,
- IonContent,
- IonPage,
- IonButtons,
- IonMenuButton,
- IonGrid,
- IonRow,
- IonCol,
- useIonRouter,
- IonButton,
- IonIcon,
- IonPopover,
- IonAvatar,
- IonImg,
- IonItem,
- IonLabel,
- IonList,
- IonModal,
- IonSearchbar,
- useIonModal,
- IonInput,
- IonRefresher,
- IonRefresherContent,
- RefresherEventDetail,
- IonToast,
- useIonToast,
-} from '@ionic/react';
-import SpeakerItem from '../../components/SpeakerItem';
-import { Speaker } from '../../models/Speaker';
-import { Session } from '../../models/Schedule';
-import { connect } from '../../data/connect';
-import * as selectors from '../../data/selectors';
-import '../SpeakerList.scss';
-import { getEvents } from '../../api/getEvents';
-import { format } from 'date-fns';
-import { Event } from './types';
-import {
- checkmarkOutline,
- chevronBackOutline,
- chevronDownCircleOutline,
- closeOutline,
- heart,
- languageOutline,
- menuOutline,
-} from 'ionicons/icons';
-import AboutPopover from '../../components/AboutPopover';
-import Loading from '../../components/Loading';
-
-interface OwnProps {}
-
-interface StateProps {
- events: Event[];
-}
-
-interface DispatchProps {}
-
-interface SpeakerListProps extends OwnProps, StateProps, DispatchProps {}
-
-const EventList: React.FC = ({ events }) => {
- const modal = useRef(null);
-
- const router = useIonRouter();
-
- function handleShowPartyEventDetail(event_id: string) {
- router.push(`/event_detail/${event_id}`);
- }
-
- function handleRefresh(event: CustomEvent) {
- setTimeout(() => {
- // Any calls to load data go here
- event.detail.complete();
- }, 2000);
- }
-
- const [confirmChangeLanguage, setConfirmChangeLanguage] =
- useState(false);
-
- function handleChangeToChinese() {
- setConfirmChangeLanguage(true);
- }
-
- function handleChangeToEnglish() {
- setConfirmChangeLanguage(true);
- }
-
- function handleChangeToJapanese() {
- setConfirmChangeLanguage(true);
- }
-
- function handleApplyChangeLanguage() {
- setConfirmChangeLanguage(false);
- }
-
- function handleBackClick() {
- router.goBack();
- }
-
- function handleCancelChangeLanguage() {
- setConfirmChangeLanguage(false);
- }
-
- const [present] = useIonToast();
-
- const presentToast = () => {
- present({
- message: 'sorry but the function not yet implemented!',
- duration: 1500,
- position: 'bottom',
- });
-
- setConfirmChangeLanguage(false);
- };
-
- if (!events || events.length == 0) return ;
-
- return (
-
-
-
-
- {/* */}
-
-
-
-
-
-
- Change Language
-
-
-
-
-
-
-
- Change Language
-
-
-
-
-
- Chinese
-
-
- English
-
-
- Japanese
-
-
-
-
- {/* REQ0079/event-filter */}
- setConfirmChangeLanguage(false)}
- >
-
-
-
- Confirm change language
-
-
- Change language to Chinese
-
-
-
-
- No
-
-
-
- Yes
-
-
-
-
-
-
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- events: selectors.getEvents(state),
- }),
- component: React.memo(EventList),
-});
diff --git a/03_source/mobile.trunk/src/pages/ChangeLanguage/style.scss b/03_source/mobile.trunk/src/pages/ChangeLanguage/style.scss
deleted file mode 100644
index 5fae6e3..0000000
--- a/03_source/mobile.trunk/src/pages/ChangeLanguage/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/NOTES.md b/03_source/mobile.trunk/src/pages/Demo2FaExample/NOTES.md
deleted file mode 100644
index a1700c9..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/NOTES.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-tags: mobile
----
-
-# REQ0119/demo-2fa-example
-
-## description
-
-This is the Ionic implementation example of two-factor authentication (2FA) demonstrating various authentication flows and UI components.
-
-## relation
-
--
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/Keypad.module.scss b/03_source/mobile.trunk/src/pages/Demo2FaExample/components/Keypad.module.scss
deleted file mode 100644
index 38c85a2..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/Keypad.module.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-.keypad {
- bottom: 0;
- position: absolute;
- width: 100%;
-}
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/Keypad.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/components/Keypad.tsx
deleted file mode 100644
index db88125..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/Keypad.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-import { IonRow } from "@ionic/react";
-import styles from "./Keypad.module.scss";
-import KeypadButton from "./KeypadButton";
-
-const Keypad = (props: any): JSX.Element => {
- const { activeIndex, handleClick, handleRemove, amount, correct } = props;
-
- const keypadButtons = [
- [
- {
- value: "1",
- handleClick: () => handleClick(activeIndex, 1),
- small: false,
- remove: false,
- },
- {
- value: "2",
- handleClick: () => handleClick(activeIndex, 2),
- small: false,
- remove: false,
- },
- {
- value: "3",
- handleClick: () => handleClick(activeIndex, 3),
- small: false,
- remove: false,
- },
- ],
- [
- {
- value: "4",
- handleClick: () => handleClick(activeIndex, 4),
- small: false,
- remove: false,
- },
- {
- value: "5",
- handleClick: () => handleClick(activeIndex, 5),
- small: false,
- remove: false,
- },
- {
- value: "6",
- handleClick: () => handleClick(activeIndex, 6),
- small: false,
- remove: false,
- },
- ],
- [
- {
- value: "7",
- handleClick: () => handleClick(activeIndex, 7),
- small: false,
- remove: false,
- },
- {
- value: "8",
- handleClick: () => handleClick(activeIndex, 8),
- small: false,
- remove: false,
- },
- {
- value: "9",
- handleClick: () => handleClick(activeIndex, 9),
- small: false,
- remove: false,
- },
- ],
- [
- {
- value: "Resend",
- handleClick: () => handleClick(activeIndex, 1),
- small: true,
- remove: false,
- },
- {
- value: "0",
- handleClick: () => handleClick(activeIndex, 2),
- small: false,
- remove: false,
- },
- {
- value: "",
- handleClick: () => handleRemove(),
- small: true,
- remove: true,
- },
- ],
- ];
-
- return (
-
- {keypadButtons.map((keypadRow, index) => {
- const isDisabled = parseInt(activeIndex) === parseInt(amount);
-
- return (
-
- {keypadRow.map((button, index2) => {
- return (
-
- );
- })}
-
- );
- })}
-
- );
-};
-
-export default Keypad;
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadButton.module.scss b/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadButton.module.scss
deleted file mode 100644
index 400a722..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadButton.module.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-.logo {
- height: 4rem;
- width: auto;
-}
-
-.keypadButton {
- --background: none;
- --color: black;
- font-size: 2rem;
- font-weight: 700;
- --outline: none;
- --border: none;
- --box-shadow: none;
- padding: none;
- margin: none;
- --background-hover: rgb(245, 245, 245) !important;
- --background-focused: rgb(245, 245, 245) !important;
- --background-activated: rgb(245, 245, 245) !important;
-}
-
-.smallKeypadButton {
- font-size: 1.4rem;
- margin-top: 1rem;
-}
-
-.keypad {
- bottom: 0;
- position: absolute;
- width: 100%;
-}
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadButton.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadButton.tsx
deleted file mode 100644
index 320a13c..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadButton.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { IonButton, IonCol, IonIcon } from "@ionic/react";
-import { backspaceOutline } from "ionicons/icons";
-import styles from "./KeypadButton.module.scss";
-
-const KeypadButton = (props: any): JSX.Element => {
- const {
- small,
- value,
- remove,
- handleClick,
- isDisabled = false,
- correct,
- } = props;
-
- return (
-
-
- {!remove && value}
- {remove && }
-
-
- );
-};
-
-export default KeypadButton;
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInput.module.scss b/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInput.module.scss
deleted file mode 100644
index c54a1b8..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInput.module.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-.keypadInput {
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- align-items: center;
- font-size: 2.5rem;
- width: 100%;
- min-height: 2.5rem;
- background-color: rgb(245, 245, 245);
- border-radius: 4px;
- color: rgb(207, 207, 207);
- transition: 0.2s linear;
-}
-
-.active {
- background-color: rgba(26, 150, 251, 0.2);
- border: 0 !important;
- color: white !important;
- transition: 0.2s linear;
-}
-
-.filled {
- color: rgb(151, 151, 151);
- transition: 0.2s linear;
-}
-
-.incorrect {
- background-color: rgba(251, 26, 26, 0.2);
- color: rgb(218, 67, 67);
- transition: 0.2s linear;
-}
-
-.correct {
- background-color: rgba(26, 251, 120, 0.2);
- color: rgb(67, 218, 112);
- transition: 0.2s linear;
-}
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInput.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInput.tsx
deleted file mode 100644
index 5b6f532..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInput.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import { IonCol } from "@ionic/react";
-import styles from "./KeypadInput.module.scss";
-
-const KeypadInput = (props: any): JSX.Element => {
- const {
- value,
- isActive = false,
- isFilled = false,
- incorrect,
- correct,
- } = props;
-
- return (
-
-
- {value}
- {!isFilled && "0"}
-
-
- );
-};
-
-export default KeypadInput;
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInputs.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInputs.tsx
deleted file mode 100644
index 139e0f9..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/components/KeypadInputs.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { IonRow } from "@ionic/react";
-import { useEffect, useRef } from "react";
-import KeypadInput from "./KeypadInput";
-
-const KeypadInputs = (props: any): JSX.Element => {
- const { values, activeIndex, incorrect, correct } = props;
- const keypadRef = useRef(null);
-
- useEffect(() => {
- if (incorrect && keypadRef.current) {
- keypadRef.current.classList.add("incorrect");
-
- setTimeout(() => {
- if (keypadRef.current) {
- keypadRef.current.classList.remove("incorrect");
- }
- }, 1000);
- }
- }, [incorrect]);
-
- useEffect(() => {
- if (correct) {
- if (keypadRef.current) {
- keypadRef.current.classList.add("correct");
- }
- }
- }, [correct]);
-
- return (
-
- {values.map((value: string, index: number) => {
- const isActive = parseInt(index.toString()) === parseInt(activeIndex);
- const isFilled = value !== "" ? true : false;
-
- return (
-
- );
- })}
-
- );
-};
-
-export default KeypadInputs;
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/index.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/index.tsx
deleted file mode 100644
index d91e0db..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/index.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-// REQ0119/demo-2fa-example
-//
-// RULES:
-// T.B.A.
-//
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import Home from './pages/Home';
-
-function Demo2FaExample() {
- return (
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default Demo2FaExample;
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/Demo2FaExample/pages/Home.module.scss
deleted file mode 100644
index 3d0a7fe..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/pages/Home.module.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-.logo {
- height: 4rem;
- width: auto;
-}
-
-.incorrect {
- color: rgb(218, 67, 67);
-}
-
-.successContainer {
-}
-
-.successText {
- background-color: rgba(26, 251, 120, 0.2);
- color: rgb(67, 218, 112);
- padding: 1rem;
-}
-
-.successContinue {
- font-weight: 700;
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- align-items: center;
-}
-
-.successContinue ion-icon {
- margin-top: 0.2rem;
-}
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/pages/Home.tsx b/03_source/mobile.trunk/src/pages/Demo2FaExample/pages/Home.tsx
deleted file mode 100644
index 1cd7885..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/pages/Home.tsx
+++ /dev/null
@@ -1,135 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonImg,
- IonPage,
- IonRow,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { arrowForwardOutline, chevronBackOutline } from 'ionicons/icons';
-import styles from './Home.module.scss';
-import KeypadInputs from '../components/KeypadInputs';
-import Keypad from '../components/Keypad';
-import { JSX, useEffect, useRef, useState } from 'react';
-
-const Home = (): JSX.Element => {
- const correctCode = [5, 9, 2, 5];
- const [keypadValues, setKeypadValues] = useState(['', '', '', '']);
- const [activeIndex, setActiveIndex] = useState(0);
- const successRef = useRef(null);
-
- const [incorrect, setIncorrect] = useState(false);
- const [correct, setCorrect] = useState(false);
-
- const tempValues: { [key: string]: any } = {};
-
- const handleClick = (index: number, value: any) => {
- const stringKey = index.toString();
- tempValues[stringKey] = value;
-
- setKeypadValues(value);
- setActiveIndex((activeIndex) => activeIndex + 1);
- };
-
- const handleRemove = () => {
- const tempValues = [...keypadValues];
- tempValues[activeIndex - 1] = '';
-
- setKeypadValues(tempValues);
- activeIndex > 0 && setActiveIndex((activeIndex) => activeIndex - 1);
- setIncorrect(false);
- setCorrect(false);
- };
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- useEffect(() => {
- if (parseInt(activeIndex.toString()) === parseInt(keypadValues.length.toString())) {
- var error = false;
-
- keypadValues.forEach((value, index) => {
- if (parseInt(value) !== parseInt(correctCode[index].toString())) {
- error = true;
- return false;
- }
- });
-
- if (error) {
- setIncorrect(true);
- } else {
- setCorrect(true);
-
- setTimeout(() => {
- if (successRef.current) {
- successRef.current.classList.remove('hidden');
- successRef.current.classList.add('success');
- }
- }, 900);
- }
- }
- }, [activeIndex]);
-
- return (
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
-
- Verification required
- Enter your 4 digit verification code
-
-
-
-
-
-
- Awesome! You may continue.
-
-
- Continue
-
-
-
-
-
-
-
- {incorrect && Wrong code entered
}
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/Demo2FaExample/theme/variables.scss b/03_source/mobile.trunk/src/pages/Demo2FaExample/theme/variables.scss
deleted file mode 100644
index dc5200e..0000000
--- a/03_source/mobile.trunk/src/pages/Demo2FaExample/theme/variables.scss
+++ /dev/null
@@ -1,249 +0,0 @@
-.demo-2fa-example {
- /* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
- * {
- font-family: 'Lato', sans-serif;
- }
-
- .hidden {
- display: none;
- transition: 0.2s linear;
- }
-
- /** Ionic CSS Variables **/
- :root {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-
- .incorrect {
- -webkit-animation: incorrect-animation 0.9s both;
- animation: incorrect-animation 0.9s both;
- }
-
- @-webkit-keyframes incorrect-animation {
- 0% {
- -webkit-transform: scale3d(1, 1, 1);
- transform: scale3d(1, 1, 1);
- }
-
- 30% {
- -webkit-transform: scale3d(1.25, 0.75, 1);
- transform: scale3d(1.25, 0.75, 1);
- }
-
- 40% {
- -webkit-transform: scale3d(0.75, 1.25, 1);
- transform: scale3d(0.75, 1.25, 1);
- }
-
- 50% {
- -webkit-transform: scale3d(1.15, 0.85, 1);
- transform: scale3d(1.15, 0.85, 1);
- }
-
- 65% {
- -webkit-transform: scale3d(0.95, 1.05, 1);
- transform: scale3d(0.95, 1.05, 1);
- }
-
- 75% {
- -webkit-transform: scale3d(1.05, 0.95, 1);
- transform: scale3d(1.05, 0.95, 1);
- }
-
- 100% {
- -webkit-transform: scale3d(1, 1, 1);
- transform: scale3d(1, 1, 1);
- }
- }
-
- @keyframes incorrect-animation {
- 0% {
- -webkit-transform: scale3d(1, 1, 1);
- transform: scale3d(1, 1, 1);
- }
-
- 30% {
- -webkit-transform: scale3d(1.25, 0.75, 1);
- transform: scale3d(1.25, 0.75, 1);
- }
-
- 40% {
- -webkit-transform: scale3d(0.75, 1.25, 1);
- transform: scale3d(0.75, 1.25, 1);
- }
-
- 50% {
- -webkit-transform: scale3d(1.15, 0.85, 1);
- transform: scale3d(1.15, 0.85, 1);
- }
-
- 65% {
- -webkit-transform: scale3d(0.95, 1.05, 1);
- transform: scale3d(0.95, 1.05, 1);
- }
-
- 75% {
- -webkit-transform: scale3d(1.05, 0.95, 1);
- transform: scale3d(1.05, 0.95, 1);
- }
-
- 100% {
- -webkit-transform: scale3d(1, 1, 1);
- transform: scale3d(1, 1, 1);
- }
- }
-
- .correct {
- -webkit-animation: correct-animation 1s ease-in both;
- animation: correct-animation 1s ease-in both;
- }
-
- @-webkit-keyframes correct-animation {
- 0% {
- -webkit-transform: translateY(0) rotateX(0) scale(1);
- transform: translateY(0) rotateX(0) scale(1);
- -webkit-transform-origin: 50% 1400px;
- transform-origin: 50% 1400px;
- opacity: 1;
- }
-
- 100% {
- -webkit-transform: translateY(-600px) rotateX(-30deg) scale(0);
- transform: translateY(-600px) rotateX(-30deg) scale(0);
- -webkit-transform-origin: 50% 100%;
- transform-origin: 50% 100%;
- opacity: 1;
- }
- }
-
- @keyframes correct-animation {
- 0% {
- -webkit-transform: translateY(0) rotateX(0) scale(1);
- transform: translateY(0) rotateX(0) scale(1);
- -webkit-transform-origin: 50% 1400px;
- transform-origin: 50% 1400px;
- opacity: 1;
- }
-
- 100% {
- -webkit-transform: translateY(-600px) rotateX(-30deg) scale(0);
- transform: translateY(-600px) rotateX(-30deg) scale(0);
- -webkit-transform-origin: 50% 100%;
- transform-origin: 50% 100%;
- opacity: 1;
- }
- }
-
- .success {
- -webkit-animation: success-animation 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- animation: success-animation 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
- }
-
- @-webkit-keyframes success-animation {
- 0% {
- -webkit-transform: translateY(-600px) rotateX(-30deg) scale(0);
- transform: translateY(-600px) rotateX(-30deg) scale(0);
- -webkit-transform-origin: 50% 100%;
- transform-origin: 50% 100%;
- opacity: 0;
- }
-
- 100% {
- -webkit-transform: translateY(0) rotateX(0) scale(1);
- transform: translateY(0) rotateX(0) scale(1);
- -webkit-transform-origin: 50% 1400px;
- transform-origin: 50% 1400px;
- opacity: 1;
- }
- }
-
- @keyframes success-animation {
- 0% {
- -webkit-transform: translateY(-600px) rotateX(-30deg) scale(0);
- transform: translateY(-600px) rotateX(-30deg) scale(0);
- -webkit-transform-origin: 50% 100%;
- transform-origin: 50% 100%;
- opacity: 0;
- }
-
- 100% {
- -webkit-transform: translateY(0) rotateX(0) scale(1);
- transform: translateY(0) rotateX(0) scale(1);
- -webkit-transform-origin: 50% 1400px;
- transform-origin: 50% 1400px;
- opacity: 1;
- }
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/AppPages/Tab1.jsx
deleted file mode 100644
index 54ab2b9..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../components/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../components/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/AppPages/Tab2.jsx
deleted file mode 100644
index 216544f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../components/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/NOTES.md b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/NOTES.md
deleted file mode 100644
index a746fff..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0120
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/Accordion.jsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/Accordion.jsx
deleted file mode 100644
index c679c72..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/Accordion.jsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { IonAccordion, IonAccordionGroup, IonIcon, IonItem, IonLabel, IonList } from '@ionic/react';
-import { topics } from '../data';
-
-export const Accordion = () => {
- return (
-
- {topics.map((topic, index) => {
- return (
-
-
-
- {topic.header}
-
-
-
- {topic.options.map((option, index2) => {
- return (
-
- {option.label}
-
- );
- })}
-
-
- );
- })}
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/Accordion.tsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/Accordion.tsx
deleted file mode 100644
index 7e495fa..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/Accordion.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { IonAccordion, IonAccordionGroup, IonIcon, IonItem, IonLabel, IonList } from '@ionic/react';
-import { topics } from '../data';
-import React from 'react';
-
-export const Accordion: React.FC = () => {
- return (
-
- {topics.map((topic: any, index: number) => {
- return (
-
-
-
- {topic.header}
-
-
-
- {topic.options.map((option: any, index2: number) => {
- return (
-
- {option.label}
-
- );
- })}
-
-
- );
- })}
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/components/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/data.js b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/data.js
deleted file mode 100644
index 457fe00..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/data.js
+++ /dev/null
@@ -1,120 +0,0 @@
-import { bicycleOutline, fastFoodOutline, filmOutline, gameControllerOutline, libraryOutline } from 'ionicons/icons';
-
-export const topics = [
- {
- header: 'Attractions',
- color: 'primary',
- icon: filmOutline,
- options: [
- {
- label: 'Cinema',
- },
- {
- label: 'Bowling Alley',
- },
- {
- label: 'Crazy Golf',
- },
- {
- label: 'Theme Park',
- },
- ],
- },
- {
- header: 'Dining',
- color: 'success',
- icon: fastFoodOutline,
- options: [
- {
- label: 'Breakfast & Brunch',
- },
- {
- label: 'New American',
- },
- {
- label: 'Sushi Bars',
- },
- {
- label: 'Filipino Food',
- },
- {
- label: 'Asian Fusion',
- },
- {
- label: 'Ramen Houses',
- },
- {
- label: 'Dinner Venues',
- },
- ],
- },
- {
- header: 'Gaming',
- color: 'warning',
- icon: gameControllerOutline,
- options: [
- {
- label: 'Xbox',
- },
- {
- label: 'Playstation',
- },
- {
- label: 'Nintendo Switch',
- },
- {
- label: 'PC',
- },
- {
- label: 'Mobile',
- },
- {
- label: 'Dreamcast',
- },
- ],
- },
- {
- header: 'Exercise',
- color: 'secondary',
- icon: bicycleOutline,
- options: [
- {
- label: 'Yoga',
- },
- {
- label: 'Pilates',
- },
- {
- label: 'Weight Training',
- },
- {
- label: 'Cardio',
- },
- {
- label: 'Zumba',
- },
- ],
- },
- {
- header: 'Education',
- color: 'danger',
- icon: libraryOutline,
- options: [
- {
- label: 'School',
- },
- {
- label: 'High School',
- },
- {
- label: 'University Bachelors',
- },
- {
- label: 'University Masters',
- },
- {
- label: 'University pHD',
- },
- ],
- },
-];
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/data.ts b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/data.ts
deleted file mode 100644
index 10fb915..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/data.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-import {
- bicycleOutline,
- fastFoodOutline,
- filmOutline,
- gameControllerOutline,
- libraryOutline,
-} from 'ionicons/icons';
-
-export const topics: any = [
- {
- header: 'Attractions',
- color: 'primary',
- icon: filmOutline,
- options: [
- {
- label: 'Cinema',
- },
- {
- label: 'Bowling Alley',
- },
- {
- label: 'Crazy Golf',
- },
- {
- label: 'Theme Park',
- },
- ],
- },
- {
- header: 'Dining',
- color: 'success',
- icon: fastFoodOutline,
- options: [
- {
- label: 'Breakfast & Brunch',
- },
- {
- label: 'New American',
- },
- {
- label: 'Sushi Bars',
- },
- {
- label: 'Filipino Food',
- },
- {
- label: 'Asian Fusion',
- },
- {
- label: 'Ramen Houses',
- },
- {
- label: 'Dinner Venues',
- },
- ],
- },
- {
- header: 'Gaming',
- color: 'warning',
- icon: gameControllerOutline,
- options: [
- {
- label: 'Xbox',
- },
- {
- label: 'Playstation',
- },
- {
- label: 'Nintendo Switch',
- },
- {
- label: 'PC',
- },
- {
- label: 'Mobile',
- },
- {
- label: 'Dreamcast',
- },
- ],
- },
- {
- header: 'Exercise',
- color: 'secondary',
- icon: bicycleOutline,
- options: [
- {
- label: 'Yoga',
- },
- {
- label: 'Pilates',
- },
- {
- label: 'Weight Training',
- },
- {
- label: 'Cardio',
- },
- {
- label: 'Zumba',
- },
- ],
- },
- {
- header: 'Education',
- color: 'danger',
- icon: libraryOutline,
- options: [
- {
- label: 'School',
- },
- {
- label: 'High School',
- },
- {
- label: 'University Bachelors',
- },
- {
- label: 'University Masters',
- },
- {
- label: 'University pHD',
- },
- ],
- },
-];
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/index.tsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/index.tsx
deleted file mode 100644
index c1f670a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/index.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import Topic from './pages/Topic';
-import Home from './pages/Home';
-
-import './style.scss';
-
-function DemoAccordionTutorial() {
- return (
-
-
- {/*
-
-
-
-
-
-
- */}
-
-
-
-
-
-
-
-
-
-
-
- {/* */}
-
-
- {/*
-
-
-
- Dashboard
-
-
-
- Search
-
-
- */}
-
- );
-}
-
-export default DemoAccordionTutorial;
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Home.css b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Home.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Home.jsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Home.jsx
deleted file mode 100644
index a0add98..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Home.jsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import {
- IonAccordion,
- IonAccordionGroup,
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { Accordion } from '../components/Accordion';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Home = () => {
- const router = useIonRouter();
-
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Accordion
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Accordion
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- {/*
-
-
- Languages
-
-
-
-
- English
-
-
- Spanish
-
-
- Italian
-
-
-
-
-
-
- Languages 2
-
-
-
-
- English
-
-
- Spanish
-
-
- Italian
-
-
-
- */}
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Home.tsx
deleted file mode 100644
index 65a2e4a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Home.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import {
- IonAccordion,
- IonAccordionGroup,
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { Accordion } from '../components/Accordion';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Home: React.FC = () => {
- const router = useIonRouter();
-
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Accordion
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Accordion
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- {/*
-
-
- Languages
-
-
-
-
- English
-
-
- Spanish
-
-
- Italian
-
-
-
-
-
-
- Languages 2
-
-
-
-
- English
-
-
- Spanish
-
-
- Italian
-
-
-
- */}
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Topic.jsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Topic.jsx
deleted file mode 100644
index 32beb84..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Topic.jsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { IonBackButton, IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonLabel, IonPage, IonRow, IonTitle, IonToolbar } from '@ionic/react';
-import { useParams } from 'react-router';
-
-const Topic = () => {
-
- const { topic } = useParams();
-
- return (
-
-
-
-
-
-
-
-
- { topic }
-
-
-
-
-
- { topic }
-
-
-
-
-
-
- This is the page for the topic: { topic }.
-
-
-
-
-
- );
-};
-
-export default Topic;
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Topic.tsx b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Topic.tsx
deleted file mode 100644
index 54c48e7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/pages/Topic.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import {
- IonBackButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonLabel,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useParams } from 'react-router';
-
-const Topic = () => {
- const { topic } = useParams<{ topic: string }>();
-
- return (
-
-
-
-
-
-
-
- {topic}
-
-
-
-
-
- {topic}
-
-
-
-
-
-
- This is the page for the topic: {topic}.
-
-
-
-
-
- );
-};
-
-export default Topic;
diff --git a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/style.scss b/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/style.scss
deleted file mode 100644
index d12d506..0000000
--- a/03_source/mobile.trunk/src/pages/DemoAccordionTutorial/style.scss
+++ /dev/null
@@ -1,237 +0,0 @@
-.demo-accordion-tutorial {
- /* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
- /** Ionic CSS Variables **/
- * {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-
- @media (prefers-color-scheme: dark) {
- /*
- * Dark Colors
- * -------------------------------------------
- */
-
- body {
- --ion-color-primary: #428cff;
- --ion-color-primary-rgb: 66, 140, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3a7be0;
- --ion-color-primary-tint: #5598ff;
-
- --ion-color-secondary: #50c8ff;
- --ion-color-secondary-rgb: 80, 200, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #46b0e0;
- --ion-color-secondary-tint: #62ceff;
-
- --ion-color-tertiary: #6a64ff;
- --ion-color-tertiary-rgb: 106, 100, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #5d58e0;
- --ion-color-tertiary-tint: #7974ff;
-
- --ion-color-success: #2fdf75;
- --ion-color-success-rgb: 47, 223, 117;
- --ion-color-success-contrast: #000000;
- --ion-color-success-contrast-rgb: 0, 0, 0;
- --ion-color-success-shade: #29c467;
- --ion-color-success-tint: #44e283;
-
- --ion-color-warning: #ffd534;
- --ion-color-warning-rgb: 255, 213, 52;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0bb2e;
- --ion-color-warning-tint: #ffd948;
-
- --ion-color-danger: #ff4961;
- --ion-color-danger-rgb: 255, 73, 97;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #e04055;
- --ion-color-danger-tint: #ff5b71;
-
- --ion-color-dark: #f4f5f8;
- --ion-color-dark-rgb: 244, 245, 248;
- --ion-color-dark-contrast: #000000;
- --ion-color-dark-contrast-rgb: 0, 0, 0;
- --ion-color-dark-shade: #d7d8da;
- --ion-color-dark-tint: #f5f6f9;
-
- --ion-color-medium: #989aa2;
- --ion-color-medium-rgb: 152, 154, 162;
- --ion-color-medium-contrast: #000000;
- --ion-color-medium-contrast-rgb: 0, 0, 0;
- --ion-color-medium-shade: #86888f;
- --ion-color-medium-tint: #a2a4ab;
-
- --ion-color-light: #222428;
- --ion-color-light-rgb: 34, 36, 40;
- --ion-color-light-contrast: #ffffff;
- --ion-color-light-contrast-rgb: 255, 255, 255;
- --ion-color-light-shade: #1e2023;
- --ion-color-light-tint: #383a3e;
- }
-
- /*
- * iOS Dark Theme
- * -------------------------------------------
- */
-
- .ios body {
- --ion-background-color: #000000;
- --ion-background-color-rgb: 0, 0, 0;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-color-step-50: #0d0d0d;
- --ion-color-step-100: #1a1a1a;
- --ion-color-step-150: #262626;
- --ion-color-step-200: #333333;
- --ion-color-step-250: #404040;
- --ion-color-step-300: #4d4d4d;
- --ion-color-step-350: #595959;
- --ion-color-step-400: #666666;
- --ion-color-step-450: #737373;
- --ion-color-step-500: #808080;
- --ion-color-step-550: #8c8c8c;
- --ion-color-step-600: #999999;
- --ion-color-step-650: #a6a6a6;
- --ion-color-step-700: #b3b3b3;
- --ion-color-step-750: #bfbfbf;
- --ion-color-step-800: #cccccc;
- --ion-color-step-850: #d9d9d9;
- --ion-color-step-900: #e6e6e6;
- --ion-color-step-950: #f2f2f2;
-
- --ion-item-background: #000000;
-
- --ion-card-background: #1c1c1d;
- }
-
- .ios ion-modal {
- --ion-background-color: var(--ion-color-step-100);
- --ion-toolbar-background: var(--ion-color-step-150);
- --ion-toolbar-border-color: var(--ion-color-step-250);
- }
-
- /*
- * Material Design Dark Theme
- * -------------------------------------------
- */
-
- .md body {
- --ion-background-color: #121212;
- --ion-background-color-rgb: 18, 18, 18;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-border-color: #222222;
-
- --ion-color-step-50: #1e1e1e;
- --ion-color-step-100: #2a2a2a;
- --ion-color-step-150: #363636;
- --ion-color-step-200: #414141;
- --ion-color-step-250: #4d4d4d;
- --ion-color-step-300: #595959;
- --ion-color-step-350: #656565;
- --ion-color-step-400: #717171;
- --ion-color-step-450: #7d7d7d;
- --ion-color-step-500: #898989;
- --ion-color-step-550: #949494;
- --ion-color-step-600: #a0a0a0;
- --ion-color-step-650: #acacac;
- --ion-color-step-700: #b8b8b8;
- --ion-color-step-750: #c4c4c4;
- --ion-color-step-800: #d0d0d0;
- --ion-color-step-850: #dbdbdb;
- --ion-color-step-900: #e7e7e7;
- --ion-color-step-950: #f3f3f3;
-
- --ion-item-background: #1e1e1e;
-
- --ion-toolbar-background: #1f1f1f;
-
- --ion-tab-bar-background: #1f1f1f;
-
- --ion-card-background: #1e1e1e;
- }
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/AppPages/Tab1.jsx
deleted file mode 100644
index 54ab2b9..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../components/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../components/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/AppPages/Tab2.jsx
deleted file mode 100644
index 216544f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../components/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/NOTES.md b/03_source/mobile.trunk/src/pages/DemoBankingUi/NOTES.md
deleted file mode 100644
index 54c3e76..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0121
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CardSlide.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CardSlide.jsx
deleted file mode 100644
index ef077a6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CardSlide.jsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import { IonButton, IonCardSubtitle, IonCol, IonIcon, IonList, IonRow } from '@ionic/react';
-import DebitCard from './DebitCard';
-
-import styles from './CardSlide.module.css';
-import TransactionItem from './TransactionItem';
-import { addOutline, arrowRedoOutline } from 'ionicons/icons';
-import { formatBalance } from '../data/Utils';
-
-const CardSlide = (props) => {
- const { index, card, profile } = props;
-
- return (
- <>
-
-
- balance
-
- £
- {formatBalance(card.balance)}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Transactions
-
-
-
- {card.transactions.length > 0 && (
-
-
-
- {card.transactions.length > 0 &&
- card.transactions
- .slice(0)
- .reverse()
- .map((transaction, index) => )}
-
-
-
- )}
-
- {card.transactions.length === 0 && (
-
-
- No transactions found
-
-
- Transfer funds
-
-
-
- )}
- >
- );
-};
-
-export default CardSlide;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CardSlide.module.css b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CardSlide.module.css
deleted file mode 100644
index 7ef5587..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CardSlide.module.css
+++ /dev/null
@@ -1,51 +0,0 @@
-.customSlide {
- display: flex;
- flex-direction: column;
-}
-
-.transactionList {
- overflow: scroll;
- width: 100vw;
-}
-
-.balance {
- font-weight: 300;
- font-size: 1.5rem;
- color: black;
-
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- align-items: center;
-}
-
-.poundSign {
- font-weight: 800;
- font-size: 1.2rem;
-}
-
-.heading h6 {
- padding: 0;
- margin: 0;
- text-align: left !important;
- float: left !important;
- text-align: left !important;
- color: rgb(124, 124, 124);
- font-weight: 400;
-}
-
-.heading {
- width: 83%;
- padding: 0;
- margin: 0;
- margin-top: 0.75rem;
-}
-
-.addButton {
- --border-radius: 500px !important;
- width: fit-content !important;
- margin-top: 0.45rem;
- margin-left: 1rem;
- opacity: 0.6;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/DebitCard.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/DebitCard.jsx
deleted file mode 100644
index 4ea47c6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/DebitCard.jsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { useEffect, useState } from 'react';
-import styles from './DebitCard.module.css';
-
-const DebitCard = (props) => {
- const { type, number, profile, expiry, secret, color } = props;
- const [lastFourCardNumbers, setLastFourCardNumbers] = useState('****');
-
- const cardClass = `card_${color}`;
- const cardTypeLogo = type === 'visa' ? '/visa.png' : '/mastercard.png';
-
- useEffect(() => {
- var lastFourNumbers = number ? number.substr(number.length - 4) : '1234';
- setLastFourCardNumbers(lastFourNumbers);
- }, [number]);
-
- return (
-
-
-
-
-
-
**** **** **** {lastFourCardNumbers}
-
-
Card holder
-
{`${profile.firstname} ${profile.surname}`}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default DebitCard;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/DebitCard.module.css b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/DebitCard.module.css
deleted file mode 100644
index b2064a5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/DebitCard.module.css
+++ /dev/null
@@ -1,188 +0,0 @@
-@import url('https://fonts.googleapis.com/css?family=Space+Mono:400,400i,700,700i');
-
-.card {
- box-sizing: border-box;
- font-family: 'Space Mono', monospace;
- margin: 0 auto;
-}
-
-.title {
- margin-bottom: 30px;
- color: #162969;
-}
-
-.card {
- width: 320px;
- height: 190px;
- -webkit-perspective: 600px;
- -moz-perspective: 600px;
- perspective: 600px;
-}
-
-.card__part {
- box-shadow: 1px 1px #aaa3a3;
- top: 0;
- position: absolute;
- z-index: 1000;
- left: 0;
- display: inline-block;
- width: 320px;
- height: 190px;
- background-repeat: no-repeat;
- background-position: center;
- background-size: cover;
- border-radius: 8px;
-
- -webkit-transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
- -moz-transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
- -ms-transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
- -o-transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
- transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
- -webkit-transform-style: preserve-3d;
- -moz-transform-style: preserve-3d;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
-}
-
-.card_orange {
- background: linear-gradient(to right bottom, #fd696b, #fa616e, #f65871, #c74261, #d62158);
-}
-
-.card_blue {
- background: linear-gradient(to right bottom, #699dfd, #61b5fa, #58aff6, #4b86c9, #2151d6);
-}
-
-.card_black {
- background: linear-gradient(to right bottom, #292929, #363636, #555555, #444444, #0f0f0f);
-}
-
-.card_purple {
- background: linear-gradient(to right bottom, #7a43df, #644897, #8964cf, #633cac, #512c96);
-}
-
-.card__front {
- padding: 18px;
- -webkit-transform: rotateY(0);
- -moz-transform: rotateY(0);
-}
-
-.card__back {
- padding: 18px 0;
- -webkit-transform: rotateY(-180deg);
- -moz-transform: rotateY(-180deg);
-}
-
-.card__black_line {
- margin-top: 5px;
- height: 38px;
- background-color: #303030;
-}
-
-.card__logo {
- height: 16px !important;
-}
-
-.card__front_chip {
- left: 1.2rem;
- height: 1.5rem !important;
- position: absolute;
-}
-
-.card__front_logo {
- position: absolute;
- top: 18px;
- right: 18px;
-}
-
-.card__square {
- border-radius: 5px;
- height: 30px !important;
-}
-
-.card_number {
- display: block;
- width: 100%;
- word-spacing: 4px;
- font-size: 20px;
- letter-spacing: 2px;
- color: #fff;
- text-align: center;
- margin-bottom: 20px;
- margin-top: 20px;
-}
-
-.card__space_75 {
- width: 75%;
- float: left;
-}
-
-.card__space_25 {
- width: 25%;
- float: left;
-}
-
-.card__label {
- font-size: 10px;
- text-transform: uppercase;
- color: rgba(255, 255, 255, 0.8);
- letter-spacing: 1px;
-}
-
-.card__info {
- margin-bottom: 0;
- margin-top: 5px;
- font-size: 16px;
- line-height: 18px;
- color: #fff;
- letter-spacing: 1px;
- text-transform: uppercase;
-}
-
-.card__back_content {
- padding: 15px 15px 0;
-}
-.card__secret__last {
- color: #303030;
- text-align: right;
- margin: 0;
- font-size: 14px;
-}
-
-.card__secret {
- padding: 5px 12px;
- background-color: #fff;
- position: relative;
-}
-
-.card__secret:before {
- content: '';
- position: absolute;
- top: -3px;
- left: -3px;
- height: calc(100% + 6px);
- width: calc(100% - 42px);
- border-radius: 4px;
- background: repeating-linear-gradient(45deg, #ededed, #ededed 5px, #f9f9f9 5px, #f9f9f9 10px);
-}
-
-.card__back_logo {
- position: absolute;
- bottom: 15px;
- right: 15px;
-}
-
-.card__back_square {
- position: absolute;
- bottom: 15px;
- left: 15px;
-}
-
-.card:hover .card__front {
- -webkit-transform: rotateY(180deg);
- -moz-transform: rotateY(180deg);
-}
-
-.card:hover .card__back {
- -webkit-transform: rotateY(0deg);
- -moz-transform: rotateY(0deg);
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/SkeletonDashboard/index.tsx
deleted file mode 100644
index ae39e44..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import React from 'react';
-
-export const SkeletonDashboard = (): React.JSX.Element => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/TransactionItem.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/TransactionItem.jsx
deleted file mode 100644
index 9813971..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/TransactionItem.jsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { IonAvatar, IonItem, IonLabel } from '@ionic/react';
-import { formatBalance } from '../data/Utils';
-import styles from './TransactionItem.module.css';
-
-const TransactionItem = (props) => {
- const { name, amount, deposit, color } = props;
-
- const getContactNameInitials = (contactName) => {
- var nameInitials = '';
-
- if (contactName && contactName !== '' && contactName !== undefined) {
- const nameParts = contactName && contactName.split(' ');
-
- if (nameParts) {
- if (nameParts[0].charAt(0).match(/^[a-z]+$/i)) {
- nameInitials += nameParts[0].charAt(0).toUpperCase();
- }
-
- if (nameParts[1]) {
- if (nameParts[1].charAt(0).match(/^[a-z]+$/i)) {
- nameInitials += nameParts[1].charAt(0).toUpperCase();
- }
- } else {
- nameInitials += nameParts[0].charAt(1).toUpperCase();
- }
- }
- }
-
- return nameInitials;
- };
-
- return (
-
-
-
-
- {getContactNameInitials(name)}
-
-
-
-
- {name}
-
-
-
-
- {deposit ? '+' : '-'}
- £{formatBalance(amount)}
-
-
-
-
- );
-};
-
-export default TransactionItem;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/TransactionItem.module.css b/03_source/mobile.trunk/src/pages/DemoBankingUi/components/TransactionItem.module.css
deleted file mode 100644
index 68649fd..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/components/TransactionItem.module.css
+++ /dev/null
@@ -1,48 +0,0 @@
-.avatarImage {
- /* background-color: var(--ion-color); */
- width: 2.5rem;
- height: 2.5rem;
- border-radius: 500px;
- color: black;
- font-size: 1.3rem;
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- align-items: center;
- padding: 0.5rem !important;
- border: 2px solid rgb(44, 44, 44);
- margin-top: 0.2rem;
-}
-
-.transactionItem {
- flex-direction: row;
- padding: 0;
- margin: 0;
-}
-
-.transactionItemContent {
- padding-left: 3rem;
- padding-right: 2rem;
- display: flex !important;
- flex-direction: row !important;
- justify-content: space-between;
- width: 100%;
- align-content: center;
- align-items: center;
- margin-top: -0.2rem;
- margin-bottom: -0.2rem;
-}
-
-.transactionContent {
- padding: 1rem;
- text-align: left !important;
-}
-
-.green {
- color: rgb(0, 165, 0);
-}
-
-.red {
- color: red;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/data/AccountStore.js b/03_source/mobile.trunk/src/pages/DemoBankingUi/data/AccountStore.js
deleted file mode 100644
index e7df019..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/data/AccountStore.js
+++ /dev/null
@@ -1,119 +0,0 @@
-import { Store } from 'pullstate';
-
-export const AccountStore = new Store({
- profile: {
- firstname: 'Alan',
- surname: 'Montgomery',
- avatar: '/assets/DemoBankingUi/alan.jpg',
- },
- cards: [
- {
- id: 1,
- type: 'visa',
- description: 'Current Account',
- number: '4859 2390 5635 7347',
- expiry: '11/22',
- secret: '483',
- color: 'orange',
- balance: '38.21',
- transactions: [
- {
- name: 'Joe Bloggs',
- amount: '2.50',
- deposit: true,
- },
- {
- name: 'Ocean Pratt',
- amount: '12.99',
- deposit: true,
- },
- {
- name: 'Eugene Piper',
- amount: '74.99',
- deposit: false,
- },
- {
- name: 'Emeli Potts',
- amount: '4.20',
- deposit: false,
- },
- {
- name: 'Asia Wells',
- amount: '12.73',
- deposit: true,
- },
- {
- name: 'Awais Brook',
- amount: '17.10',
- deposit: false,
- },
- {
- name: 'Coen Haas',
- amount: '9.99',
- deposit: true,
- },
- ],
- },
- {
- id: 2,
- type: 'visa',
- description: 'Savings',
- number: '7349 1284 6790 4587',
- expiry: '05/23',
- secret: '590',
- color: 'blue',
- balance: '120.90',
- transactions: [
- {
- name: 'Joe Bloggs',
- amount: '120.90',
- deposit: true,
- },
- ],
- },
- {
- id: 3,
- type: 'visa',
- description: 'House Fund',
- number: '6783 5692 4475 6682',
- expiry: '01/24',
- secret: '321',
- color: 'purple',
- balance: '0',
- transactions: [],
- },
- ],
-});
-
-export const addCardToAccount = (newCard) => {
- AccountStore.update((s) => {
- s.cards = [...s.cards, newCard];
- });
-};
-
-export const addTransactionToCard = (newTransaction, cardID) => {
- AccountStore.update((s) => {
- s.cards.find((c, index) =>
- parseInt(c.id) === parseInt(cardID) ? (s.cards[index].transactions = [...s.cards[index].transactions, newTransaction]) : false
- );
- });
-
- if (newTransaction.deposit) {
- AccountStore.update((s) => {
- s.cards.find((c, index) =>
- parseInt(c.id) === parseInt(cardID) ? (s.cards[index].balance = parseFloat(s.cards[index].balance) + parseFloat(newTransaction.amount)) : false
- );
- });
- } else {
- AccountStore.update((s) => {
- s.cards.find((c, index) =>
- parseInt(c.id) === parseInt(cardID) ? (s.cards[index].balance = parseFloat(s.cards[index].balance) - parseFloat(newTransaction.amount)) : false
- );
- });
- }
-};
-
-// export const removeFromCart = productIndex => {
-
-// AccountStore.update(s => { s.product_ids.splice(productIndex, 1) });
-// }
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/data/CardStore.js b/03_source/mobile.trunk/src/pages/DemoBankingUi/data/CardStore.js
deleted file mode 100644
index a50176d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/data/CardStore.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { Store } from 'pullstate';
-
-export const CardStore = new Store({
- card_colors: ['orange', 'black', 'blue', 'purple'],
- card_types: ['visa', 'mastercard'],
-});
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/data/Utils.js b/03_source/mobile.trunk/src/pages/DemoBankingUi/data/Utils.js
deleted file mode 100644
index c943a9e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/data/Utils.js
+++ /dev/null
@@ -1,9 +0,0 @@
-export const formatBalance = (balance) => {
- var formatter = new Intl.NumberFormat('en-GB', {
- // style: 'currency',
- currency: 'GBP',
- minimumFractionDigits: 2,
- });
-
- return formatter.format(balance);
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/index.tsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/index.tsx
deleted file mode 100644
index 338da1e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/index.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import Home from './pages/Home';
-import Account from './pages/Account';
-import AddCard from './pages/AddCard';
-import AddTransaction from './pages/AddTransaction';
-
-import './style.scss';
-import React from 'react';
-
-function DemoBankingUi(): React.JSX.Element {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoBankingUi;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Account.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Account.jsx
deleted file mode 100644
index 3ee3118..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Account.jsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import {
- IonBackButton,
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import styles from './Account.module.css';
-import { AccountStore } from '../data/AccountStore';
-import { addOutline, logOutOutline } from 'ionicons/icons';
-import { formatBalance } from '../data/Utils';
-
-const Account = () => {
- const cards = AccountStore.useState((s) => s.cards);
- const profile = AccountStore.useState((s) => s.profile);
-
- return (
-
-
-
-
-
-
-
- Account
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {`${profile.firstname} ${profile.surname}`}
- {cards.length} current cards
-
-
-
-
-
-
-
- Add Card
-
-
-
-
-
- {cards.map((card, index) => {
- return (
-
-
-
-
-
-
- {card.description}
-
-
-
- £{formatBalance(card.balance)}
-
-
-
-
- );
- })}
-
-
-
-
- );
-};
-
-export default Account;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Account.module.css b/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Account.module.css
deleted file mode 100644
index 8e59143..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Account.module.css
+++ /dev/null
@@ -1,54 +0,0 @@
-.accountPage ion-toolbar {
- --border-style: none;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.avatar {
- border-radius: 500px;
- border: 3px solid var(--ion-color-primary);
- padding: 0.2rem;
-}
-
-.profileDetails {
-}
-
-.profileDetails h6,
-.profileDetails h5 {
- margin: 0;
- padding: 0;
-}
-
-.profileDetails h6 {
- color: var(--ion-color-medium);
-}
-
-.cards {
- /* margin-top: */
-}
-
-.smallCard {
- width: 15%;
- height: 80%;
- border-radius: 5px;
- opacity: 0.7;
-}
-
-.cardDescription {
- padding-left: 1.5rem;
-}
-
-.cardDescription h4 {
- font-weight: 400;
-}
-
-.cardItem {
- --background: rgb(246, 246, 246);
- --border-radius: 5px;
- --padding-start: 1rem;
- --padding-end: 1rem;
- --padding-top: 0.5rem;
- --padding-bottom: 0.5rem;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/AddCard.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/AddCard.jsx
deleted file mode 100644
index db360e8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/AddCard.jsx
+++ /dev/null
@@ -1,209 +0,0 @@
-import { useState } from 'react';
-import {
- IonBackButton,
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonInput,
- IonItem,
- IonLabel,
- IonPage,
- IonRow,
- IonSelect,
- IonSelectOption,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import styles from './Account.module.css';
-import DebitCard from '../components/DebitCard';
-import { AccountStore, addCardToAccount } from '../data/AccountStore';
-import { CardStore } from '../data/CardStore';
-import { addOutline, timerOutline } from 'ionicons/icons';
-import { useHistory } from 'react-router';
-
-const AddCard = () => {
- const cards = AccountStore.useState((s) => s.cards);
- const cardTypes = CardStore.useState((s) => s.card_types);
- const cardColors = CardStore.useState((s) => s.card_colors);
- const profile = AccountStore.useState((s) => s.profile);
-
- const [cardType, setCardType] = useState(cardTypes[0]);
- const [cardColor, setCardColor] = useState(cardColors[0]);
- const [cardDescription, setCardDescription] = useState('');
- const [cardNumber, setCardNumber] = useState('1234 1234 1234 1234');
- const [cardSecret, setCardSecret] = useState('123');
- const [cardExpiry, setCardExpiry] = useState('01/22');
- const [cardBalance, setCardBalance] = useState(0);
-
- const history = useHistory();
- const [adding, setAdding] = useState(false);
-
- const addCard = async () => {
- setAdding(true);
-
- const newCard = {
- id: cards.length + 1,
- type: cardType,
- color: cardColor,
- description: cardDescription,
- number: cardNumber,
- secret: cardSecret,
- expiry: cardExpiry,
- balance: cardBalance,
- transactions: [
- {
- name: 'Starting Balance',
- amount: cardBalance,
- deposit: true,
- },
- ],
- };
-
- await addCardToAccount(newCard);
-
- setTimeout(() => {
- setAdding(false);
- history.goBack();
- }, 500);
- };
-
- return (
-
-
-
-
-
-
-
- Add Card
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Card Type
- setCardType(e.currentTarget.value)}>
- {cardTypes.map((option, index) => {
- return (
-
- {option.toUpperCase()}
-
- );
- })}
-
-
-
-
-
-
- Card Color
- setCardColor(e.currentTarget.value)}>
- {cardColors.map((option, index) => {
- return (
-
- {option.toUpperCase()}
-
- );
- })}
-
-
-
-
-
-
-
-
- Card Name
- setCardDescription(e.currentTarget.value)}
- />
-
-
-
-
-
- Starting Balance
- setCardBalance(e.currentTarget.value)} />
-
-
-
-
-
-
-
- Card Number
- setCardNumber(e.currentTarget.value)}
- />
-
-
-
-
-
-
-
- Card Expiry
- setCardExpiry(e.currentTarget.value)} />
-
-
-
-
-
- Card Secret
- setCardSecret(e.currentTarget.value)} />
-
-
-
-
-
-
-
- {!adding && (
- <>
-
- Add Card
- >
- )}
-
- {adding && (
- <>
-
- Adding...
- >
- )}
-
-
-
-
-
-
- );
-};
-
-export default AddCard;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/AddTransaction.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/AddTransaction.jsx
deleted file mode 100644
index 8461455..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/AddTransaction.jsx
+++ /dev/null
@@ -1,165 +0,0 @@
-import { useState } from 'react';
-import {
- IonBackButton,
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonInput,
- IonItem,
- IonLabel,
- IonPage,
- IonRow,
- IonSelect,
- IonSelectOption,
- IonTitle,
- IonToggle,
- IonToolbar,
- useIonViewWillEnter,
-} from '@ionic/react';
-import styles from './Account.module.css';
-import DebitCard from '../components/DebitCard';
-import { AccountStore, addCardToAccount, addTransactionToCard } from '../data/AccountStore';
-import { CardStore } from '../data/CardStore';
-import { addOutline, timerOutline } from 'ionicons/icons';
-import { useHistory, useParams } from 'react-router';
-
-const AddTransaction = () => {
- const cards = AccountStore.useState((s) => s.cards);
- const profile = AccountStore.useState((s) => s.profile);
-
- const [cardID, setCardID] = useState(false);
- const [card, setCard] = useState({});
- const [transactionName, setTransactionName] = useState('Test Transaction');
- const [transactionAmount, setTransactionAmount] = useState(0);
- const [transactionDeposit, setTransactionDeposit] = useState(false);
-
- const history = useHistory();
- const params = useParams();
- const [adding, setAdding] = useState(false);
-
- useIonViewWillEnter(() => {
- const tempCardID = params.card_id;
- const tempCard = cards.filter((c) => parseInt(c.id) === parseInt(tempCardID))[0];
- setCardID(tempCardID);
- setCard(tempCard);
- });
-
- const addTransaction = async () => {
- setAdding(true);
-
- const newTransaction = {
- name: transactionName,
- amount: transactionAmount,
- deposit: transactionDeposit,
- };
-
- await addTransactionToCard(newTransaction, cardID);
-
- setTimeout(() => {
- setAdding(false);
- history.goBack();
- }, 500);
- };
-
- return (
-
-
-
-
-
-
-
- Add Transaction
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name
- setTransactionName(e.currentTarget.value)}
- />
-
-
-
-
-
- Amount
- setTransactionAmount(e.currentTarget.value)}
- />
-
-
-
-
-
-
-
- Deposit?
- setTransactionDeposit(e.currentTarget.checked)}
- />
-
-
-
-
-
-
-
- {!adding && (
- <>
-
- Add Transaction
- >
- )}
-
- {adding && (
- <>
-
- Adding...
- >
- )}
-
-
-
-
-
-
- );
-};
-
-export default AddTransaction;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.jsx b/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.jsx
deleted file mode 100644
index 01ea13c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.jsx
+++ /dev/null
@@ -1,146 +0,0 @@
-import { useRef, useState } from 'react';
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
- useIonViewDidEnter,
-} from '@ionic/react';
-import styles from './Home.module.css';
-import { AccountStore } from '../data/AccountStore';
-import CardSlide from '../components/CardSlide';
-import { chevronBackOutline, searchOutline } from 'ionicons/icons';
-
-// Import Swiper React components
-import { Swiper, SwiperSlide } from 'swiper/react';
-
-// Import Swiper styles
-// import 'swiper/swiper.scss';
-import 'swiper/css';
-
-import stylesS from './Home.module.scss';
-
-const Home = () => {
- const cards = AccountStore.useState((s) => s.cards);
- const profile = AccountStore.useState((s) => s.profile);
-
- const [pageTitle, setPageTitle] = useState(cards[0].description);
- const [mainColor, setMainColor] = useState(cards[0].color);
- const [slideSpace, setSlideSpace] = useState(10);
-
- const slidesRef = useRef(null);
-
- useIonViewDidEnter(() => {
- setSlideSpace(0);
- });
-
- const changeSlide = async (e) => {
- const swiper = e;
- const swiperIndex = swiper.activeIndex;
-
- setPageTitle(cards[swiperIndex].description);
- setMainColor(cards[swiperIndex].color);
-
- document.getElementById(`slide_${swiperIndex}_balance`).classList.add('animate__headShake');
-
- setTimeout(() => {
- document
- .getElementById(`slide_${swiperIndex}_balance`)
- .classList.remove('animate__headShake');
- }, 1000);
- };
-
- const manageTouch = async (touched, e) => {
- const swiper = e;
- const swiperIndex = swiper.activeIndex;
-
- if (touched) {
- document
- .getElementById(`slide_${swiperIndex}_transactions`)
- .classList.add('animate__fadeOut');
- } else {
- document
- .getElementById(`slide_${swiperIndex}_transactions`)
- .classList.remove('animate__fadeOut');
- document.getElementById(`slide_${swiperIndex}_transactions`).classList.add('animate__fadeIn');
- }
- };
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
-
- {/* */}
-
-
-
-
-
- {pageTitle}
-
-
- handleBackClick()}>
-
-
- {/* */}
-
-
-
-
-
-
-
-
-
- manageTouch(true, e)}
- onTouchEnd={(e) => manageTouch(false, e)}
- onSlideChange={(e) => changeSlide(e)}
- >
- {cards.map((card, index) => {
- return (
-
-
-
- );
- })}
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.module.css b/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.module.css
deleted file mode 100644
index 5d5719c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.module.css
+++ /dev/null
@@ -1,38 +0,0 @@
-.homePage ion-toolbar {
- --border-style: none;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.customSlide {
- display: flex;
- flex-direction: column;
-}
-
-.transactionList {
- overflow: scroll;
- width: 100vw;
-}
-
-.balance {
- font-weight: 300;
- font-size: 1.5rem;
- color: black;
-}
-
-.poundSign {
- font-weight: 800;
- font-size: 1.2rem;
-}
-
-.toolbarAvatarImage {
- border-radius: 500px;
- height: 100%;
- width: auto;
-}
-
-.helloworld {
- background-color: gold;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.module.scss
deleted file mode 100644
index 0065249..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/pages/Home.module.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-.homePage ion-toolbar {
- --border-style: none;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.customSlide {
- display: flex;
- flex-direction: column;
-}
-
-.transactionList {
- overflow: scroll;
- width: 100vw;
-}
-
-.balance {
- font-weight: 300;
- font-size: 1.5rem;
- color: black;
-}
-
-.poundSign {
- font-weight: 800;
- font-size: 1.2rem;
-}
-
-.toolbarAvatarImage {
- border-radius: 500px;
- height: 32px;
- width: auto;
-}
-
-.helloworld {
- background-color: cyan;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBankingUi/style.scss b/03_source/mobile.trunk/src/pages/DemoBankingUi/style.scss
deleted file mode 100644
index 378cae3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBankingUi/style.scss
+++ /dev/null
@@ -1,139 +0,0 @@
-.demo-banking-ui {
- /* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
- /** Ionic CSS Variables **/
- * {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-
- ion-item {
- --padding-start: 0;
- --inner-padding-end: 0;
- }
-
- ion-label {
- margin-top: 12px;
- margin-bottom: 12px;
- }
-
- ion-item h2 {
- font-weight: 600;
- margin: 0;
- }
-
- ion-item p {
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
- width: 95%;
- }
-
- ion-item .date {
- float: right;
- align-items: center;
- display: flex;
- }
-
- ion-item ion-icon {
- color: #c9c9ca;
- }
-
- ion-item ion-note {
- font-size: 15px;
- margin-right: 8px;
- font-weight: normal;
- }
-
- ion-item ion-note.md {
- margin-right: 14px;
- }
-
- .dot {
- display: block;
- height: 12px;
- width: 12px;
- border-radius: 50%;
- align-self: start;
- margin: 16px 10px 16px 16px;
- }
-
- .dot-unread {
- background: var(--ion-color-primary);
- }
-
- ion-footer ion-title {
- font-size: 11px;
- font-weight: normal;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/BlogPost.css b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/BlogPost.css
deleted file mode 100644
index e754dfd..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/BlogPost.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.view-post-footer {
-
- background-color: white;
- padding-left: 1rem;
- padding-right: 1rem;
- padding-bottom: 1rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/BlogPost.jsx b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/BlogPost.jsx
deleted file mode 100644
index 3c295ba..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/BlogPost.jsx
+++ /dev/null
@@ -1,90 +0,0 @@
-import {
- IonBackButton,
- IonBadge,
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonContent,
- IonFooter,
- IonGrid,
- IonHeader,
- IonIcon,
- IonNote,
- IonPage,
- IonRow,
- IonText,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { bookmarkOutline, shareOutline } from 'ionicons/icons';
-import { useParams } from 'react-router';
-import { blogPosts } from '../localData';
-import './BlogPost.css';
-
-const BlogPost = () => {
- const { id } = useParams();
- const post = blogPosts.filter((post) => parseInt(post.id) === parseInt(id))[0];
-
- return (
-
-
-
- Blog
-
-
-
-
-
-
-
-
-
-
-
-
-
- {post.author}
-
-
- {post.date}
-
-
-
-
- {post.title}
-
-
-
-
-
- {post.content}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {post.category}
-
-
-
-
-
- );
-};
-
-export default BlogPost;
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/Home.jsx b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/Home.jsx
deleted file mode 100644
index 7fff026..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/AppPages/Home.jsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { Post } from '../components/Post';
-import { blogPosts } from '../localData';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Home = () => {
- const router = useIonRouter();
-
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Ionic Blog
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Ionic Blog
-
-
-
- {blogPosts.map((post, index) => (
-
- ))}
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/NOTES.md b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/NOTES.md
deleted file mode 100644
index 583ec8b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0122
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/components/Post.css b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/components/Post.css
deleted file mode 100644
index 4b6c13d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/components/Post.css
+++ /dev/null
@@ -1,37 +0,0 @@
-.post-author-avatar {
- height: 2rem;
- width: 2rem;
- border-radius: 500px;
-}
-
-.post-title {
- font-size: 1.4rem;
- margin-top: 0.75rem;
-}
-
-.post-content {
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-line-clamp: 3;
- -webkit-box-orient: vertical;
-}
-
-.post-footer {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-content: center;
- width: 100%;
- border-top: 2px solid rgb(245, 245, 245);
- margin-top: 2rem;
- padding-top: 1rem;
-}
-
-.post-category {
- margin-top: 1.1rem;
-}
-
-.post-image {
- width: 100%;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/components/Post.jsx b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/components/Post.jsx
deleted file mode 100644
index 96437dd..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/components/Post.jsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonCard,
- IonCardContent,
- IonCardHeader,
- IonCardSubtitle,
- IonCardTitle,
- IonIcon,
- IonNote,
- IonRow,
-} from '@ionic/react';
-import { bookmarkOutline, shareOutline } from 'ionicons/icons';
-
-import './Post.css';
-
-export const Post = ({ post }) => {
- return (
-
-
-
-
-
-
-
-
- {post.author}
-
-
- {post.date}
-
- {post.title}
-
-
-
- {post.content}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {post.category}
-
-
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/index.tsx b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/index.tsx
deleted file mode 100644
index c924f7d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/index.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-import Home from './AppPages/Home';
-import BlogPost from './AppPages/BlogPost';
-
-import './style.scss';
-
-function DemoBlogPostUi() {
- return (
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoBlogPostUi;
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/localData/index.js b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/localData/index.js
deleted file mode 100644
index f6aa8b1..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/localData/index.js
+++ /dev/null
@@ -1,98 +0,0 @@
-export const blogPosts = [
- {
- "id": 1,
- "title": "How to Convince Your Boss to Choose Ionic",
- "title_link": "https://ionicframework.com/blog/convince-boss-choose-ionic-app-development/",
- "date": "August 3, 2021",
- "author": "By Kim Maida",
- "authorImage": "https://ionicframework.com/blog/wp-content/uploads/2021/07/kim-maida-150x150.jpg",
- "category": "ANNOUNCEMENTS",
- "category_link": "https://ionicframework.com/blog//blog/category/announcements",
- "image": "https://ionicframework.com/blog/wp-content/uploads/2021/07/how-to-convince-your-boss_image_1aug2021.png",
- "content": "Greetings, friend! You’re a web developer, team lead, or engineering manager who has discovered that Ionic products are awesome. They have helped you build cross-platform applications quickly, made the app development process enjoyable, and solved important mobile development problems. You can see that Ionic would be extremely beneficial in your daily job, but are wondering how to convince your boss to endorse the adoption of new software. In a nutshell:"
- },
- {
- "id": 2,
- "title": "Ioniconf 2021 Conference Recap",
- "title_link": "https://ionicframework.com/blog/ioniconf-2021-conference-recap/",
- "date": "July 29, 2021",
- "author": "By Mike Hartington",
- "authorImage": "https://ionicframework.com/blog/wp-content/uploads/2018/08/mike-headshot-2-smaller-150x150.png",
- "category": "ANNOUNCEMENTS",
- "category_link": "https://ionicframework.com/blog//blog/category/announcements",
- "image": "https://ionicframework.com/blog/wp-content/uploads/2021/06/og-imgx2.png",
- "content": "And with that, Ioniconf 2021 has concluded! Ioniconf, our online conference for Ionic developers and the wider web development community, featured twelve expert Ionic speakers and was attended by many thousands of Ionic community members. We’re thrilled by the community’s reception to the event and are already looking forward to our next event taking place in September. Read on for a recap and links to all recorded talks."
- },
- {
- "id": 3,
- "title": "Announcing Identity Vault 5.0",
- "title_link": "https://ionicframework.com/blog/announcing-identity-vault-5-0/",
- "date": "July 28, 2021",
- "author": "By Dallas James",
- "authorImage": "https://ionicframework.com/blog/wp-content/uploads/2021/07/dallas-james-150x150.jpg",
- "category": "PRODUCT",
- "category_link": "https://ionicframework.com/blog//blog/category/announcements",
- "image": "https://ionicframework.com/blog/wp-content/uploads/2021/07/iv-5-feature-image.png",
- "content": "Today I’m excited to announce Identity Vault 5.0, the newest version of Ionic’s mobile biometrics solution. Featuring the latest in native security best practices, Identity Vault improves frontend security in any Ionic app by making it easy to add secure biometric authentication in minutes."
- },
- {
- "id": 4,
- "title": "Building with Stencil: Clock Component",
- "title_link": "https://ionicframework.com/blog/building-with-stencil-clock-component/",
- "date": "July 22, 2021",
- "author": "By Kevin Hoyt",
- "authorImage": "https://ionicframework.com/blog/wp-content/uploads/2021/07/2520666-150x150.jpg",
- "category": "ANNOUNCEMENTS",
- "category_link": "https://ionicframework.com/blog//blog/category/announcements",
- "image": "https://ionicframework.com/blog/wp-content/uploads/2021/07/Image-from-iOS.png",
- "content": "I have not seen a clock in a web-based user interface in a long time. This makes sense — they are pretty redundant these days. You have a clock on your watch, on your mobile device, and on your desktop, and those are just the digital versions available at a glance. Nonetheless, the process of building a clock can reveal a lot about how a platform works."
- },
- {
- "id": 5,
- "title": "Building with Stencil: Calendar Component",
- "title_link": "https://ionicframework.com/blog/building-with-stencil-calendar-component/",
- "date": "July 19, 2021",
- "author": "By Kevin Hoyt",
- "authorImage": "https://ionicframework.com/blog/wp-content/uploads/2021/07/2520666-150x150.jpg",
- "category": "TUTORIALS",
- "category_link": null,
- "image": "https://ionicframework.com/blog/wp-content/uploads/2021/07/ionic-blog-post-image_first-look-01.png",
- "content": "Take a look at the month view of a calendar and you will see several rows of numbers. The numbers themselves, increasing in value one after the other, are arranged in columns. HTML and CSS provide us with a number of tools to display content in rows and columns. Making a calendar component should be easy, right? Right?"
- },
- {
- "id": 6,
- "title": "Introducing the New Overlay Hooks for Ionic React",
- "title_link": "https://ionicframework.com/blog/introducing-the-new-overlay-hooks-for-ionic-react/",
- "date": "July 14, 2021",
- "author": "By Ely Lucas",
- "authorImage": "https://secure.gravatar.com/avatar/45ad19965b4bde97e9f4396ea01ed184?s=32&r=g",
- "category": "ENGINEERING",
- "category_link": null,
- "image": "https://ionicframework.com/blog/wp-content/uploads/2021/07/react-overlay-hooks-feature-image.png",
- "content": "Hello Friends! We know everyone is excited about the new features in Ionic Framework 6.0 beta, but that doesn’t mean we’re done with V5! In Ionic React 5.6, we packaged up a new set of hooks for controlling our overlay components that we think you might like. What is an overlay you ask? It’s the term we give components that display over your current content, such as alerts, modals, toasts, etc."
- },
- {
- "id": 7,
- "title": "The Future of Stencil: Expanded Team, New Software Platform, and More",
- "title_link": "https://ionicframework.com/blog/the-future-of-stencil-expanded-team-new-software-platform-and-more/",
- "date": "July 7, 2021",
- "author": "By Nick Hyatt",
- "authorImage": "https://ionicframework.com/blog/wp-content/uploads/2018/11/Nick-Hyatt-Headshot-150x150.jpeg",
- "category": "ANNOUNCEMENTS",
- "category_link": null,
- "image": "https://ionicframework.com/blog/wp-content/uploads/2021/07/stencil-future-feature-image.png",
- "content": "Today I’m excited to share some news about Stencil, Ionic’s open source toolchain that generates small, fast, and 100% standards-based Web Components that run in every browser. As you might have noticed, we’ve been actively increasing our investments across the entire Ionic App Platform, including the recent launch of Capacitor 3.0, Ionic Portals, tons of Appflow improvements, and the upcoming Ionic Framework v6."
- },
- {
- "id": 8,
- "title": "Announcing the Ionic Framework v6 Beta",
- "title_link": "https://ionicframework.com/blog/announcing-the-ionic-framework-v6-beta/",
- "date": "June 29, 2021",
- "author": "By Liam DeBeasi",
- "authorImage": "https://ionicframework.com/blog/wp-content/uploads/2020/01/ZNK4lRAJ_400x400-150x150.jpg",
- "category": "ANNOUNCEMENTS",
- "category_link": null,
- "image": "https://ionicframework.com/blog/wp-content/uploads/2021/06/framework6-feature-image.png",
- "content": "Earlier this week I had the privilege of giving the Ionic Framework Update at Ioniconf 2021 where we announced the Ionic Framework v6 beta. Ionic Framework has come far from its roots as an AngularJS-only UI library to a truly cross-platform framework for building Web Native applications. As we look to the future of Ionic Framework, let’s talk about some of the improvements coming in Framework v6 and how you can get access to these improvements today."
- }
-];
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/style.scss b/03_source/mobile.trunk/src/pages/DemoBlogPostUi/style.scss
deleted file mode 100644
index 83c6630..0000000
--- a/03_source/mobile.trunk/src/pages/DemoBlogPostUi/style.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-.demo-blog-post-ui {
- /* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
- /** Ionic CSS Variables **/
- * {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/AppPages/Tab1.jsx
deleted file mode 100644
index 54ab2b9..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../components/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../components/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/AppPages/Tab2.jsx
deleted file mode 100644
index 216544f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../components/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/NOTES.md b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/NOTES.md
deleted file mode 100644
index 83a41c1..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0123
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/ExploreContainer.css b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/ExploreContainer.css
deleted file mode 100644
index e99f514..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/ExploreContainer.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.container strong {
- font-size: 20px;
- line-height: 26px;
-}
-
-.container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
-}
-
-.container a {
- text-decoration: none;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/ExploreContainer.tsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/ExploreContainer.tsx
deleted file mode 100644
index 1b4b3c0..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/ExploreContainer.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import './ExploreContainer.css';
-
-interface ContainerProps { }
-
-const ExploreContainer: React.FC = () => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/MarkerInfoWindow.jsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/MarkerInfoWindow.jsx
deleted file mode 100644
index a98804b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/MarkerInfoWindow.jsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import { IonButton, IonCol, IonContent, IonGrid, IonIcon, IonLabel, IonNote, IonRow } from '@ionic/react';
-import { globeOutline, heartOutline, locationOutline, navigateOutline, phonePortraitOutline } from 'ionicons/icons';
-
-export const MarkerInfoWindow = ({ marker, dismiss }) => {
- return (
-
-
-
-
-
- {marker.title}
- {marker.description}
-
-
-
-
-
-
-
-
-
- {marker.address}
-
-
-
-
-
-
-
- {marker.website}
-
-
-
-
-
-
-
- {marker.phone}
-
-
-
-
-
- Favourite
-
-
-
- Navigate
-
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/components/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/data/index.js b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/data/index.js
deleted file mode 100644
index 8750b5c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/data/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export const markers = [
-
- {lat: 54.5258924, lng: -6.0812478, title: "Man Lee", description: "Chinese Takeaway", address: "122 Ballymacash Rd, Lisburn BT28 3EZ", website: "https://m.facebook.com/pages/Man-Lee/228415820694835", phone: "028 92 662853"},
- {lat: 54.5097827, lng: -6.0572343, title: "Cam Hing", description: "Chinese Takeaway", address: "70 Longstone St, Lisburn BT28 1TR", website: "https://camhinglisbunr.com", phone: "028 92 677928"},
- {lat: 54.5095162, lng: -6.0595896, title: "Golden Garden", description: "Chinese Takeaway", address: "140 Longstone St, Lisburn BT28 1TR", website: "https://golden-garden.business.site", phone: "028 92 671311"},
- {lat: 54.5091808, lng: -6.0363902, title: "Pagoda", description: "Chinese Takeaway", address: "79 Sloan St, Lisburn BT27 5AG", website: "https://pagodalisburn.com", phone: "028 92 665289"},
- {lat: 54.5989611, lng: -5.9972126, title: "Little Wing", description: "Pizzeria", address: "10 Ann St, Belfast BT1 4EF", website: "https://littlewingpizzeria.com", phone: "028 90 247000"}
-];
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/index.tsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/index.tsx
deleted file mode 100644
index 70dcf42..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/index.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-import Tab1 from './AppPages/Tab1';
-import Tab2 from './AppPages/Tab2';
-
-import Home from './pages/Home';
-
-import './style.scss';
-
-function DemoCapacitorGoogleMapsTutorial() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoCapacitorGoogleMapsTutorial;
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/pages/Home.css b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/pages/Home.css
deleted file mode 100644
index 912345b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/pages/Home.css
+++ /dev/null
@@ -1,5 +0,0 @@
-capacitor-google-map {
- display: inline-block;
- width: 100%;
- height: 86vh;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/pages/Home.jsx b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/pages/Home.jsx
deleted file mode 100644
index b1ba0ef..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/pages/Home.jsx
+++ /dev/null
@@ -1,128 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonModal,
- useIonRouter,
- useIonViewWillEnter,
-} from '@ionic/react';
-import { useRef, useState } from 'react';
-import './Home.css';
-
-import { GoogleMap } from '@capacitor/google-maps';
-import { markers } from '../data';
-import { MarkerInfoWindow } from '../components/MarkerInfoWindow.jsx';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Home = () => {
- // This key is now dead!
- // Replace with your own :)
- // Remember to secure keys using env files or requesting from server!
- // This was for demo purposes :)
- const key = 'AIzaSyBJwKYcub1yNcDd2V8iu4ZfGvDi4eW_fpU';
- let newMap;
- const mapRef = useRef(null);
-
- const [selectedMarker, setSelectedMarker] = useState(null);
-
- const [present, dismiss] = useIonModal(MarkerInfoWindow, {
- marker: selectedMarker,
- });
-
- const modalOptions = {
- initialBreakpoint: 0.4,
- breakpoints: [0, 0.4],
- backdropBreakpoint: 0,
- onDidDismiss: () => dismiss(),
- };
-
- const [mapConfig, setMapConfig] = useState({
- zoom: 10,
- center: {
- lat: markers[0].lat,
- lng: markers[0].lng,
- },
- });
-
- const markerClick = (marker) => {
- setSelectedMarker(markers.filter((m) => m.lat === marker.latitude && m.lng === marker.longitude)[0]);
- present(modalOptions);
- };
-
- const addMapMarker = async (marker) => {
- await newMap.addMarker({
- coordinate: {
- lat: marker.lat,
- lng: marker.lng,
- },
- title: marker.title,
- });
- };
-
- const addMapMarkers = () => markers.forEach((marker) => addMapMarker(marker));
-
- const createMap = async () => {
- if (!mapRef.current) return;
-
- newMap = await GoogleMap.create({
- id: 'google-map',
- element: mapRef.current,
- apiKey: key,
- config: mapConfig,
- });
-
- newMap.setOnMarkerClickListener((marker) => markerClick(marker));
- addMapMarkers();
- };
-
- useIonViewWillEnter(() => createMap());
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Capacitor Google Map
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Capacitor Google Map
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/style.scss b/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/style.scss
deleted file mode 100644
index 697843e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoCapacitorGoogleMapsTutorial/style.scss
+++ /dev/null
@@ -1,2 +0,0 @@
-.demo-capacitor-google-maps-tutorial {
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab1.css b/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab1.css
deleted file mode 100644
index 67366ad..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab1.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.extra-padding {
-
- padding-right: 1.3rem !important;
- padding-left: 1.3rem !important;
-}
-
-.title {
-
- font-weight: 600;
- font-size: 1.2rem;
- margin-bottom: 0.5rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab1.jsx
deleted file mode 100644
index df15105..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,90 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonText,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { chevronBack, personOutline } from 'ionicons/icons';
-import { useStoreState } from 'pullstate';
-import { TalkStore } from '../store';
-import { getTalks } from '../store/Selectors';
-import './Tab1.css';
-
-import { TalkCard } from '../components/TalkCard';
-import { useRef } from 'react';
-
-const Tab1 = () => {
- const pageRef = useRef(null);
- const talks = useStoreState(TalkStore, getTalks);
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- All Rooms
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Upcoming
-
-
-
-
-
-
-
-
-
-
-
-
-
- Happening Now
-
-
-
-
-
-
- {talks.map((talk, talkIndex) => {
- return talkIndex > 0 && ;
- })}
-
-
-
-
-
- );
-};
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab2.css b/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab2.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab2.jsx
deleted file mode 100644
index a668cd0..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import './Tab2.css';
-
-const Tab2 = () => {
- return (
-
-
-
- TO DO :)
-
-
-
-
-
- TO DO :)
-
-
-
-
- );
-};
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab3.css b/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab3.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab3.jsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab3.jsx
deleted file mode 100644
index 5717606..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/AppPages/Tab3.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import './Tab3.css';
-
-const Tab3 = () => {
- return (
-
-
-
- TO DO :)
-
-
-
-
-
- TO DO :)
-
-
-
-
- );
-};
-
-export default Tab3;
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/NOTES.md b/03_source/mobile.trunk/src/pages/DemoClubHouse/NOTES.md
deleted file mode 100644
index 74774f7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0124
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkCard.jsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkCard.jsx
deleted file mode 100644
index 2d1f200..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkCard.jsx
+++ /dev/null
@@ -1,100 +0,0 @@
-import { IonCardSubtitle, IonIcon, IonModal, IonNote, IonRow, useIonModal } from "@ionic/react";
-import { bulb, micOutline, personOutline } from "ionicons/icons";
-import { useStoreState } from "pullstate";
-import { useEffect, useState } from "react";
-
-import { CategoryStore } from '../store';
-import { getPeople } from "../store/PeopleStore";
-import { getCategory } from '../store/Selectors';
-
-import styles from "./TalkCard.module.css";
-import { TalkModal } from "./TalkModal";
-
-export const TalkCard = ({ upcoming = false, talk, pageRef }) => {
-
- const talkCategory = useStoreState(CategoryStore, getCategory(talk.category_id));
- const [ speakers, setSpeakers ] = useState([]);
- const [ showModal, setShowModal ] = useState(false);
-
- useEffect(() => {
-
- setSpeakers(getPeople(talk.speakers));
- }, [ talk ]);
-
- // const [ present, dismiss ] = useIonModal(TalkModal, {
-
- // dismiss: () => dismiss(),
- // talk,
- // speakers,
- // category: talkCategory
- // });
-
- // const handleShowTalk = () => {
-
- // console.log("in here");
-
- // present({
-
- // // presentingElement: pageRef.current
- // });
- // }
-
- return (
- <>
- setShowModal(true) }>
-
-
- { talkCategory.name } talks
-
-
-
-
{ talk.title }
-
-
- { !upcoming &&
-
-
- { speakers.map((speaker, index) => {
-
- return (
-
-
-
-
- );
- })}
-
- }
-
- { upcoming &&
-
-
{ talk.time }
-
-
- { talk.speakers } Speakers
-
-
- }
-
- { !upcoming &&
-
-
-
-
- { talk.speakers } Speakers
-
-
-
-
- { talk.audience } Audience
-
-
- }
-
-
- setShowModal(false) } presentingElement={ pageRef.current }>
- setShowModal(false) } speakers={ speakers } talk={ talk } category={ talkCategory } />
-
- >
- );
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkCard.module.css b/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkCard.module.css
deleted file mode 100644
index 881aa99..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkCard.module.css
+++ /dev/null
@@ -1,105 +0,0 @@
-.talkCard {
-
- display: flex;
- flex-direction: column;
- border-radius: 10px;
- padding: 2rem;
- box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1);
- background-color: white;
-}
-
-.talkCard:not(:first-child) {
-
- margin-top: 2rem;
-}
-
-.upcomingCard {
-
- background-color: var(--ion-color-primary);
- color: white;
-}
-
-.cardTitle {
-
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- color: white;
-}
-
-.cardTitle ion-icon {
-
- border-radius: 500px;
- padding: 0.2rem;
- margin-right: 0.75rem;
- background-color: var(--ion-color-primary);
- margin-top: -0.2rem;
-}
-
-.upcomingCard .cardTitle ion-icon {
-
- background-color: white;
-}
-
-.talkTitle h3 {
-
- font-size: 1.3rem !important;
- font-weight: 600;
-}
-
-.talkDate {
-
- display: flex;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- margin-top: 0.5rem;
-}
-
-.talkSpeakers {
-
- display: flex;
- flex-direction: row;
- margin-top: 0.5rem;
-}
-
-.talkSpeaker {
-
- display: flex;
- align-items: center;
- justify-content: center;
- height: 3.5rem;
- width: 3.5rem;
- border-radius: 12px;
- margin-right: 0.2rem;
- background-color: var(--ion-color-primary);
-}
-
-.talkSpeaker img {
-
- height: 3rem;
- width: 3rem;
-}
-
-.talkDetails {
-
- display: flex;
- justify-content: space-between;
- margin-top: 1.5rem;
-}
-
-.detailCount {
-
- display: flex;
- align-content: center;
- align-items: center;
- font-weight: 500;
- font-size: 0.9rem;
-}
-
-.detailCount ion-icon {
-
- font-size: 1.2rem;
- margin-right: 0.3rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkModal.jsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkModal.jsx
deleted file mode 100644
index 3207e87..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkModal.jsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import { IonButton, IonButtons, IonCardSubtitle, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonPage, IonRow, IonTitle, IonToolbar } from "@ionic/react";
-import { bulb, exitOutline, micOutline, personOutline } from "ionicons/icons";
-import { useStoreState } from "pullstate";
-import { PeopleStore } from "../store";
-import { getAllPeople } from "../store/Selectors";
-
-import styles from "./TalkModal.module.css";
-
-export const TalkModal = ({ dismiss, talk, category, speakers }) => {
-
- const people = useStoreState(PeopleStore, getAllPeople);
-
- return (
-
-
-
-
- Talk Room
-
-
-
-
- {/* Leave Room */}
-
-
-
-
-
-
-
-
-
-
-
-
- { category.name } talks
-
-
-
-
-
-
- { talk.title }
-
-
-
-
-
-
-
- { talk.speakers } Speakers
-
-
-
-
-
- { speakers.map((speaker, index) => {
-
- return (
-
-
-
-
-
- { speaker.name.split(" ")[0] }
-
- );
- })}
-
-
-
-
-
-
- { talk.audience } Audience
-
-
-
-
-
- { [ ...Array(talk.audience)].map((audience, index) => {
-
- return (
-
-
-
-
-
- { people[Math.floor(Math.random() * 30)].name.split(" ")[0] }
-
- );
- })}
-
-
-
-
- );
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkModal.module.css b/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkModal.module.css
deleted file mode 100644
index 3661f23..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/components/TalkModal.module.css
+++ /dev/null
@@ -1,150 +0,0 @@
-.talkCard {
-
- display: flex;
- flex-direction: column;
- border-radius: 10px;
- padding: 2rem;
- box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1);
- background-color: white;
-}
-
-.talkCard:not(:first-child) {
-
- margin-top: 2rem;
-}
-
-.upcomingCard {
-
- background-color: var(--ion-color-primary);
- color: white;
-}
-
-.cardTitle {
-
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- color: white;
-}
-
-.cardTitle ion-icon {
-
- border-radius: 500px;
- padding: 0.2rem;
- margin-right: 0.75rem;
- background-color: var(--ion-color-primary);
- margin-top: -0.2rem;
-}
-
-.upcomingCard .cardTitle ion-icon {
-
- background-color: white;
-}
-
-.talkTitle {
-
- margin-top: -1rem;
-}
-
-.talkTitle h3 {
-
- font-size: 1.3rem !important;
- font-weight: 600;
-}
-
-.talkDate {
-
- display: flex;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- margin-top: 0.5rem;
-}
-
-.talkSpeakers {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- margin-top: 0.5rem;
- margin-bottom: 1.5rem;
-}
-
-.speakerContainer {
-
- display: flex;
- flex-direction: column;
- align-content: center;
- align-items: center;
- justify-content: space-between;
-}
-
-.audienceContainer {
-
- margin-bottom: 1rem;
- /* margin: 0.5rem; */
-}
-
-.talkSpeaker {
-
- display: flex;
- align-items: center;
- justify-content: center;
- height: 3.5rem;
- width: 3.5rem;
- border-radius: 12px;
- margin-right: 0.2rem;
- background-color: var(--ion-color-primary);
-}
-
-.audienceContainer .talkSpeaker {
-
- background-color: #f2efe5;
- border: 2px solid #dfd9c7;
-}
-
-.talkSpeaker img {
-
- height: 3rem;
- width: 3rem;
-}
-
-.speakerContainer p {
-
- margin: 0;
- padding: 0;
- margin-top: 0.2rem;
- font-weight: 500;
- font-size: 0.9rem;
-}
-
-.talkDetails {
-
- display: flex;
- justify-content: space-between;
- margin-top: 1.5rem;
-}
-
-.detailCount {
-
- display: flex;
- align-content: center;
- align-items: center;
- font-weight: 600;
- font-size: 0.9rem;
- margin-top: 1rem;
- margin-bottom: 0.3rem;
-}
-
-.detailCount ion-icon {
-
- font-size: 1.2rem;
- margin-right: 0.3rem;
- margin-left: -0.4rem;
-}
-
-.activeSpeaker {
-
- border: 3px solid rgb(255, 187, 0);
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/components1/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/index.tsx b/03_source/mobile.trunk/src/pages/DemoClubHouse/index.tsx
deleted file mode 100644
index ad6b329..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/index.tsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonLabel,
- IonPage,
- IonRouterOutlet,
- IonRow,
- IonTabBar,
- IonTabButton,
- IonTabs,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from './components1/SkeletonDashboard';
-import {
- addCircle,
- addCircleOutline,
- chevronBack,
- cloudOutline,
- home,
- homeOutline,
- notifications,
- notificationsOutline,
- person,
- personOutline,
- refreshOutline,
- search,
- searchOutline,
-} from 'ionicons/icons';
-import { CurrentWeather } from './components1/CurrentWeather';
-import { IonReactRouter } from '@ionic/react-router';
-import { Route, Redirect } from 'react-router';
-import Tab1 from './AppPages/Tab1';
-import Tab2 from './AppPages/Tab2';
-import Tab3 from './AppPages/Tab3';
-
-const DemoClubHouse = () => {
- const tabs = [
- {
- name: 'Home',
- url: '/demo-club-house/home',
- activeIcon: home,
- icon: homeOutline,
- component: Tab1,
- },
- {
- name: 'Search',
- url: '/search',
- activeIcon: search,
- icon: searchOutline,
- component: Tab2,
- },
- {
- name: 'Add',
- url: '/add',
- activeIcon: addCircle,
- icon: addCircleOutline,
- component: Tab3,
- },
- {
- name: 'Account',
- url: '/account',
- activeIcon: person,
- icon: personOutline,
- component: Tab3,
- },
- {
- name: 'Notifications',
- url: '/notifications',
- activeIcon: notifications,
- icon: notificationsOutline,
- component: Tab3,
- },
- ];
-
- const [activeTab, setActiveTab] = useState(tabs[0].name);
-
- return (
- setActiveTab(e.detail.tab)}>
-
- {tabs.map((tab, index) => {
- return (
-
-
-
- );
- })}
-
-
-
-
-
-
- {tabs.map((tab, barIndex) => {
- const active = tab.name === activeTab;
-
- return (
-
-
-
- );
- })}
-
-
- );
-};
-
-export default DemoClubHouse;
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/CategoryStore.js b/03_source/mobile.trunk/src/pages/DemoClubHouse/store/CategoryStore.js
deleted file mode 100644
index 368b756..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/CategoryStore.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Store } from "pullstate";
-
-const CategoryStore = new Store({
-
- categories: [
- {
- id: 1,
- name: "Design"
- },
- {
- id: 2,
- name: "Javascript"
- },
- {
- id: 3,
- name: "Mobile"
- },
- {
- id: 4,
- name: "Business"
- }
- ]
-});
-
-export default CategoryStore;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/PeopleStore.js b/03_source/mobile.trunk/src/pages/DemoClubHouse/store/PeopleStore.js
deleted file mode 100644
index b014c02..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/PeopleStore.js
+++ /dev/null
@@ -1,209 +0,0 @@
-import { Store } from "pullstate";
-
-const PeopleStore = new Store({
-
- people: [
- {
- name: "Andrew Bennet",
- image: "/avatars/Avatar-1.png"
- },
- {
- name: "Elizabeth Moore",
- image: "/avatars/Avatar-2.png"
- },
- {
- name: "Oscar Clarke",
- image: "/avatars/Avatar-3.png"
- },
- {
- name: "Sandra Simpson",
- image: "/avatars/Avatar-4.png"
- },
- {
- name: "Sophia Price",
- image: "/avatars/Avatar-5.png"
- },
- {
- name: "Jasmine Ruiz",
- image: "/avatars/Avatar-6.png"
- },
- {
- name: "Adriana Bonny",
- image: "/avatars/Avatar-7.png"
- },
- {
- name: "Maya Watson",
- image: "/avatars/Avatar-8.png"
- },
- {
- name: "Tatum Porter",
- image: "/avatars/Avatar-9.png"
- },
- {
- name: "Jackson Watts",
- image: "/avatars/Avatar-10.png"
- },
- {
- name: "Lana Cooper",
- image: "/avatars/Avatar-11.png"
- },
- {
- name: "Mateo Hoffman",
- image: "/avatars/Avatar-12.png"
- },
- {
- name: "Harper James",
- image: "/avatars/Avatar-13.png"
- },
- {
- name: "Edgar Douglas",
- image: "/avatars/Avatar-14.png"
- },
- {
- name: "Lilly Hale",
- image: "/avatars/Avatar-15.png"
- },
- {
- name: "Jade Williams",
- image: "/avatars/Avatar-16.png"
- },
- {
- name: "Cayden Long",
- image: "/avatars/Avatar-17.png"
- },
- {
- name: "Millie Klein",
- image: "/avatars/Avatar-18.png"
- },
- {
- name: "Heidi Toffer",
- image: "/avatars/Avatar-19.png"
- },
- {
- name: "Alaya Bailey",
- image: "/avatars/Avatar-20.png"
- },
- {
- name: "Laura Diaz",
- image: "/avatars/Avatar-21.png"
- },
- {
- name: "Alina Gomez",
- image: "/avatars/Avatar-22.png"
- },
- {
- name: "Rachel Tiffin",
- image: "/avatars/Avatar-23.png"
- },
- {
- name: "Liz Faxty",
- image: "/avatars/Avatar-24.png"
- },
- {
- name: "Sarah Goodman",
- image: "/avatars/Avatar-25.png"
- },
- {
- name: "Melissa Bengin",
- image: "/avatars/Avatar-26.png"
- },
- {
- name: "Stephanie Morter",
- image: "/avatars/Avatar-27.png"
- },
- {
- name: "Rebecca Slims",
- image: "/avatars/Avatar-28.png"
- },
- {
- name: "Arielle May",
- image: "/avatars/Avatar-29.png"
- },
- {
- name: "Jack Boppes",
- image: "/avatars/Avatar-30.png"
- },
- {
- name: "Christina Rankin",
- image: "/avatars/Avatar-31.png"
- },
- {
- name: "Ronan Murf",
- image: "/avatars/Avatar-32.png"
- },
- {
- name: "Daniel Jackson",
- image: "/avatars/Avatar-33.png"
- },
- {
- name: "Richard Bales",
- image: "/avatars/Avatar-34.png"
- },
- {
- name: "Harmony Martin",
- image: "/avatars/Avatar-35.png"
- },
- {
- name: "Chris Huges",
- image: "/avatars/Avatar-36.png"
- }
- ]
-});
-
-export default PeopleStore;
-
-export const getPeople = amount => {
-
- let tempPeople = [ ...PeopleStore.getRawState().people ];
- return tempPeople.sort(() => Math.random() - Math.random()).slice(0, amount);
-}
-
-// export const markActiveAsDone = () => {
-
-// PeopleStore.update(state => {
-
-// const scoreboardIndex = state.scoreboards.findIndex(scoreboard => scoreboard.active === true);
-// state.scoreboards[scoreboardIndex].done = true;
-// });
-// }
-
-// export const addScoreboard = (players, details) => {
-
-// PeopleStore.update(s => { s.scoreboards = s.scoreboards.map(scoreboard => scoreboard.active = false) });
-
-// PeopleStore.update(state => {
-
-// state.scoreboards.forEach((scoreboard, index) => {
-
-// state.scoreboards[index].active = false;
-// });
-// });
-
-
-// const newScoreboard = {
-
-// id: Date.now(),
-// title: details.title,
-// players: [ ...players ],
-// active: true
-// };
-
-// const playersToSave = players.filter(p => p.saved === true);
-
-// PeopleStore.update(s => { s.scoreboards = [ ...s.scoreboards, newScoreboard ] });
-// PeopleStore.update(s => { s.players = [ ...s.players, ...playersToSave ] });
-// }
-
-// export const addScoreToPlayer = (scoreboardId, playerIndex) => {
-
-// PeopleStore.update(state => {
-
-// const scoreboardIndex = state.scoreboards.findIndex(scoreboard => scoreboard.id === parseInt(scoreboardId));
-// state.scoreboards[scoreboardIndex].players[playerIndex].score += 1;
-
-// state.scoreboards[scoreboardIndex].players.sort((a, b) => {
-// if (a.score > b.score) return -1
-// return a.score < b.score ? 1 : 0
-// });
-// });
-// }
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/Selectors.js b/03_source/mobile.trunk/src/pages/DemoClubHouse/store/Selectors.js
deleted file mode 100644
index e285e42..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/Selectors.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { createSelector } from 'reselect';
-
-const getState = state => state;
-
-// General getters
-export const getAllPeople = createSelector(getState, state => state.people);
-export const getCategories = createSelector(getState, state => state.categories);
-export const getTalks = createSelector(getState, state => state.talks);
-
-// Specific getters
-export const getCategoryTalks = categoryId => createSelector(getState, state => state.talks.filter(talk => parseInt(talk.category_id) === parseInt(categoryId))[0]);
-export const getTalk = id => createSelector(getState, state => state.talks.filter(talk => parseInt(talk.id) === parseInt(id))[0]);
-export const getCategory = id => createSelector(getState, state => state.categories.filter(category => parseInt(category.id) === parseInt(id))[0]);
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/TalkStore.js b/03_source/mobile.trunk/src/pages/DemoClubHouse/store/TalkStore.js
deleted file mode 100644
index 7e2c61f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/TalkStore.js
+++ /dev/null
@@ -1,111 +0,0 @@
-import { Store } from "pullstate";
-
-const TalkStore = new Store({
-
- talks: [
- {
- id: 1,
- title: "The future of design systems",
- date: "29th Oct 2021",
- time: "5:00PM",
- speakers: 3,
- audience: 14,
- category_id: 1
- },
- {
- id: 2,
- title: "Lets talk about ReactJS",
- date: "13th Nov 2021",
- time: "2:00PM",
- speakers: 4,
- audience: 239,
- category_id: 2
- },
- {
- id: 3,
- title: "How Ionic can transform mobile development",
- date: "21st Nov 2021",
- time: "7:30PM",
- speakers: 2,
- audience: 371,
- category_id: 3
- },
- {
- id: 4,
- title: "Using capacitor to access native features",
- date: "25th Nov 2021",
- time: "4:15PM",
- speakers: 2,
- audience: 587,
- category_id: 3
- },
- {
- id: 5,
- title: "Does SASS give you an advantage?",
- date: "29th Nov 2021",
- time: "6:00PM",
- speakers: 4,
- audience: 97,
- category_id: 1
- },
- {
- id: 6,
- title: "Building a startup from the ground up",
- date: "1st Dec 2021",
- time: "9:00PM",
- speakers: 4,
- audience: 316,
- category_id: 4
- },
- {
- id: 7,
- title: "How we went from 9-5 to my own boss",
- date: "12th Dec 2021",
- time: "1:00PM",
- speakers: 2,
- audience: 33,
- category_id: 4
- },
- {
- id: 8,
- title: "Features of the beast, Angular",
- date: "19th Dec 2021",
- time: "3:30PM",
- speakers: 3,
- audience: 114,
- category_id: 2
- }
- ]
-});
-
-export default TalkStore;
-
-export const addTalk = details => {
-
- const newTalk = {
-
- id: Date.now(),
- title: details.title,
- date: details.date,
- time: details.time,
- speakers: details.speakers,
- audience: Math.random(900),
- category_id: details.category_id
- };
-
- TalkStore.update(s => { s.talks = [ ...s.talks, newTalk ] });
-}
-
-// export const addScoreToPlayer = (scoreboardId, playerIndex) => {
-
-// PeopleStore.update(state => {
-
-// const scoreboardIndex = state.scoreboards.findIndex(scoreboard => scoreboard.id === parseInt(scoreboardId));
-// state.scoreboards[scoreboardIndex].players[playerIndex].score += 1;
-
-// state.scoreboards[scoreboardIndex].players.sort((a, b) => {
-// if (a.score > b.score) return -1
-// return a.score < b.score ? 1 : 0
-// });
-// });
-// }
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/index.js b/03_source/mobile.trunk/src/pages/DemoClubHouse/store/index.js
deleted file mode 100644
index ffb042e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/store/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export { default as PeopleStore } from "./PeopleStore";
-export { default as TalkStore } from "./TalkStore";
-export { default as CategoryStore } from "./CategoryStore";
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoClubHouse/style.scss b/03_source/mobile.trunk/src/pages/DemoClubHouse/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoClubHouse/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/NOTES.md b/03_source/mobile.trunk/src/pages/DemoColorTutorial/NOTES.md
deleted file mode 100644
index c42d003..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0125
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/components/ExploreContainer.css b/03_source/mobile.trunk/src/pages/DemoColorTutorial/components/ExploreContainer.css
deleted file mode 100644
index e99f514..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/components/ExploreContainer.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.container strong {
- font-size: 20px;
- line-height: 26px;
-}
-
-.container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
-}
-
-.container a {
- text-decoration: none;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/components/ExploreContainer.tsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/components/ExploreContainer.tsx
deleted file mode 100644
index 354df7b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/components/ExploreContainer.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import './ExploreContainer.css';
-
-interface ContainerProps {
- name: string;
-}
-
-const ExploreContainer: React.FC = ({ name }) => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/index.tsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/index.tsx
deleted file mode 100644
index 6090ccb..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/index.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, ellipse, searchOutline, square, triangle } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import Tab1 from './pages/Tab1';
-import Tab2 from './pages/Tab2';
-import Tab3 from './pages/Tab3';
-
-import './style.scss';
-
-function DemoColorTutorial() {
- return (
-
- {/*
-
-
-
-
-
-
-
-
-
-
-
- */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
-
-
- Dashboard
-
-
-
- Search
-
- */}
-
- {/* update path base from `/` to `/demo-color-tutorial` */}
-
-
- Tab 1
-
-
-
- Tab 2
-
-
-
- Tab 3
-
-
-
- );
-}
-
-export default DemoColorTutorial;
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab1.css b/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab1.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab1.tsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab1.tsx
deleted file mode 100644
index af8f8ee..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab1.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonButtons,
- IonCheckbox,
- IonContent,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonNote,
- IonPage,
- IonRadio,
- IonTitle,
- IonToggle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab1.css';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Tab1: React.FC = () => {
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Tab 1
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Tab 1
-
-
-
- Button
-
-
- Toggle
-
-
-
-
- Checkbox
-
-
-
-
- Badge
- 14 notifications
-
-
-
- Note
- 3 unread
-
-
-
- );
-};
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab2.css b/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab2.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab2.tsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab2.tsx
deleted file mode 100644
index 05458aa..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab2.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab2.css';
-
-const Tab2: React.FC = () => {
- return (
-
-
-
- Tab 2
-
-
-
-
-
- Tab 2
-
-
-
-
-
- );
-};
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab3.css b/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab3.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab3.tsx b/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab3.tsx
deleted file mode 100644
index 3a29b8a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/pages/Tab3.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab3.css';
-
-const Tab3: React.FC = () => {
- return (
-
-
-
- Tab 3
-
-
-
-
-
- Tab 3
-
-
-
-
-
- );
-};
-
-export default Tab3;
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/style.scss b/03_source/mobile.trunk/src/pages/DemoColorTutorial/style.scss
deleted file mode 100644
index 5430344..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/style.scss
+++ /dev/null
@@ -1,256 +0,0 @@
-.demo-color-tutorial {
- /*
-Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/
-*/
-
- /** Ionic CSS Variables **/
- * {
- /** alans color **/
- --ion-color-alans-color: #6c9400;
- --ion-color-alans-color-rgb: 108, 148, 0;
- --ion-color-alans-color-contrast: #ffffff;
- --ion-color-alans-color-contrast-rgb: 255, 255, 255;
- --ion-color-alans-color-shade: #5f8200;
- --ion-color-alans-color-tint: #7b9f1a;
-
- /** primary **/
- --ion-color-primary: #be402f;
- --ion-color-primary-rgb: 190, 64, 47;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #a73829;
- --ion-color-primary-tint: #c55344;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-
- .ion-color-alans-color {
- --ion-color-base: var(--ion-color-alans-color);
- --ion-color-base-rgb: var(--ion-color-alans-color-rgb);
- --ion-color-contrast: var(--ion-color-alans-color-contrast);
- --ion-color-contrast-rgb: var(--ion-color-alans-color-contrast-rgb);
- --ion-color-shade: var(--ion-color-alans-color-shade);
- --ion-color-tint: var(--ion-color-alans-color-tint);
- }
-
- @media (prefers-color-scheme: dark) {
- /*
- * Dark Colors
- * -------------------------------------------
- */
-
- body {
- --ion-color-primary: #428cff;
- --ion-color-primary-rgb: 66, 140, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3a7be0;
- --ion-color-primary-tint: #5598ff;
-
- --ion-color-secondary: #50c8ff;
- --ion-color-secondary-rgb: 80, 200, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #46b0e0;
- --ion-color-secondary-tint: #62ceff;
-
- --ion-color-tertiary: #6a64ff;
- --ion-color-tertiary-rgb: 106, 100, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #5d58e0;
- --ion-color-tertiary-tint: #7974ff;
-
- --ion-color-success: #2fdf75;
- --ion-color-success-rgb: 47, 223, 117;
- --ion-color-success-contrast: #000000;
- --ion-color-success-contrast-rgb: 0, 0, 0;
- --ion-color-success-shade: #29c467;
- --ion-color-success-tint: #44e283;
-
- --ion-color-warning: #ffd534;
- --ion-color-warning-rgb: 255, 213, 52;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0bb2e;
- --ion-color-warning-tint: #ffd948;
-
- --ion-color-danger: #ff4961;
- --ion-color-danger-rgb: 255, 73, 97;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #e04055;
- --ion-color-danger-tint: #ff5b71;
-
- --ion-color-dark: #f4f5f8;
- --ion-color-dark-rgb: 244, 245, 248;
- --ion-color-dark-contrast: #000000;
- --ion-color-dark-contrast-rgb: 0, 0, 0;
- --ion-color-dark-shade: #d7d8da;
- --ion-color-dark-tint: #f5f6f9;
-
- --ion-color-medium: #989aa2;
- --ion-color-medium-rgb: 152, 154, 162;
- --ion-color-medium-contrast: #000000;
- --ion-color-medium-contrast-rgb: 0, 0, 0;
- --ion-color-medium-shade: #86888f;
- --ion-color-medium-tint: #a2a4ab;
-
- --ion-color-light: #222428;
- --ion-color-light-rgb: 34, 36, 40;
- --ion-color-light-contrast: #ffffff;
- --ion-color-light-contrast-rgb: 255, 255, 255;
- --ion-color-light-shade: #1e2023;
- --ion-color-light-tint: #383a3e;
- }
-
- /*
- * iOS Dark Theme
- * -------------------------------------------
- */
-
- .ios body {
- --ion-background-color: #000000;
- --ion-background-color-rgb: 0, 0, 0;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-color-step-50: #0d0d0d;
- --ion-color-step-100: #1a1a1a;
- --ion-color-step-150: #262626;
- --ion-color-step-200: #333333;
- --ion-color-step-250: #404040;
- --ion-color-step-300: #4d4d4d;
- --ion-color-step-350: #595959;
- --ion-color-step-400: #666666;
- --ion-color-step-450: #737373;
- --ion-color-step-500: #808080;
- --ion-color-step-550: #8c8c8c;
- --ion-color-step-600: #999999;
- --ion-color-step-650: #a6a6a6;
- --ion-color-step-700: #b3b3b3;
- --ion-color-step-750: #bfbfbf;
- --ion-color-step-800: #cccccc;
- --ion-color-step-850: #d9d9d9;
- --ion-color-step-900: #e6e6e6;
- --ion-color-step-950: #f2f2f2;
-
- --ion-item-background: #000000;
-
- --ion-card-background: #1c1c1d;
- }
-
- .ios ion-modal {
- --ion-background-color: var(--ion-color-step-100);
- --ion-toolbar-background: var(--ion-color-step-150);
- --ion-toolbar-border-color: var(--ion-color-step-250);
- }
-
- /*
- * Material Design Dark Theme
- * -------------------------------------------
- */
-
- .md body {
- --ion-background-color: #121212;
- --ion-background-color-rgb: 18, 18, 18;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-border-color: #222222;
-
- --ion-color-step-50: #1e1e1e;
- --ion-color-step-100: #2a2a2a;
- --ion-color-step-150: #363636;
- --ion-color-step-200: #414141;
- --ion-color-step-250: #4d4d4d;
- --ion-color-step-300: #595959;
- --ion-color-step-350: #656565;
- --ion-color-step-400: #717171;
- --ion-color-step-450: #7d7d7d;
- --ion-color-step-500: #898989;
- --ion-color-step-550: #949494;
- --ion-color-step-600: #a0a0a0;
- --ion-color-step-650: #acacac;
- --ion-color-step-700: #b8b8b8;
- --ion-color-step-750: #c4c4c4;
- --ion-color-step-800: #d0d0d0;
- --ion-color-step-850: #dbdbdb;
- --ion-color-step-900: #e7e7e7;
- --ion-color-step-950: #f3f3f3;
-
- --ion-item-background: #1e1e1e;
-
- --ion-toolbar-background: #1f1f1f;
-
- --ion-tab-bar-background: #1f1f1f;
-
- --ion-card-background: #1e1e1e;
- }
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoColorTutorial/theme/variables.css b/03_source/mobile.trunk/src/pages/DemoColorTutorial/theme/variables.css
deleted file mode 100644
index 5f9d075..0000000
--- a/03_source/mobile.trunk/src/pages/DemoColorTutorial/theme/variables.css
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
-Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/
-*/
-
-/** Ionic CSS Variables **/
-:root {
- /** alans color **/
- --ion-color-alans-color: #6c9400;
- --ion-color-alans-color-rgb: 108, 148, 0;
- --ion-color-alans-color-contrast: #ffffff;
- --ion-color-alans-color-contrast-rgb: 255, 255, 255;
- --ion-color-alans-color-shade: #5f8200;
- --ion-color-alans-color-tint: #7b9f1a;
-
- /** primary **/
- --ion-color-primary: #be402f;
- --ion-color-primary-rgb: 190, 64, 47;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #a73829;
- --ion-color-primary-tint: #c55344;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
-}
-
-.ion-color-alans-color {
- --ion-color-base: var(--ion-color-alans-color);
- --ion-color-base-rgb: var(--ion-color-alans-color-rgb);
- --ion-color-contrast: var(--ion-color-alans-color-contrast);
- --ion-color-contrast-rgb: var(--ion-color-alans-color-contrast-rgb);
- --ion-color-shade: var(--ion-color-alans-color-shade);
- --ion-color-tint: var(--ion-color-alans-color-tint);
-}
-
-@media (prefers-color-scheme: dark) {
- /*
- * Dark Colors
- * -------------------------------------------
- */
-
- body {
- --ion-color-primary: #428cff;
- --ion-color-primary-rgb: 66, 140, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3a7be0;
- --ion-color-primary-tint: #5598ff;
-
- --ion-color-secondary: #50c8ff;
- --ion-color-secondary-rgb: 80, 200, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #46b0e0;
- --ion-color-secondary-tint: #62ceff;
-
- --ion-color-tertiary: #6a64ff;
- --ion-color-tertiary-rgb: 106, 100, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #5d58e0;
- --ion-color-tertiary-tint: #7974ff;
-
- --ion-color-success: #2fdf75;
- --ion-color-success-rgb: 47, 223, 117;
- --ion-color-success-contrast: #000000;
- --ion-color-success-contrast-rgb: 0, 0, 0;
- --ion-color-success-shade: #29c467;
- --ion-color-success-tint: #44e283;
-
- --ion-color-warning: #ffd534;
- --ion-color-warning-rgb: 255, 213, 52;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0bb2e;
- --ion-color-warning-tint: #ffd948;
-
- --ion-color-danger: #ff4961;
- --ion-color-danger-rgb: 255, 73, 97;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #e04055;
- --ion-color-danger-tint: #ff5b71;
-
- --ion-color-dark: #f4f5f8;
- --ion-color-dark-rgb: 244, 245, 248;
- --ion-color-dark-contrast: #000000;
- --ion-color-dark-contrast-rgb: 0, 0, 0;
- --ion-color-dark-shade: #d7d8da;
- --ion-color-dark-tint: #f5f6f9;
-
- --ion-color-medium: #989aa2;
- --ion-color-medium-rgb: 152, 154, 162;
- --ion-color-medium-contrast: #000000;
- --ion-color-medium-contrast-rgb: 0, 0, 0;
- --ion-color-medium-shade: #86888f;
- --ion-color-medium-tint: #a2a4ab;
-
- --ion-color-light: #222428;
- --ion-color-light-rgb: 34, 36, 40;
- --ion-color-light-contrast: #ffffff;
- --ion-color-light-contrast-rgb: 255, 255, 255;
- --ion-color-light-shade: #1e2023;
- --ion-color-light-tint: #383a3e;
- }
-
- /*
- * iOS Dark Theme
- * -------------------------------------------
- */
-
- .ios body {
- --ion-background-color: #000000;
- --ion-background-color-rgb: 0, 0, 0;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-color-step-50: #0d0d0d;
- --ion-color-step-100: #1a1a1a;
- --ion-color-step-150: #262626;
- --ion-color-step-200: #333333;
- --ion-color-step-250: #404040;
- --ion-color-step-300: #4d4d4d;
- --ion-color-step-350: #595959;
- --ion-color-step-400: #666666;
- --ion-color-step-450: #737373;
- --ion-color-step-500: #808080;
- --ion-color-step-550: #8c8c8c;
- --ion-color-step-600: #999999;
- --ion-color-step-650: #a6a6a6;
- --ion-color-step-700: #b3b3b3;
- --ion-color-step-750: #bfbfbf;
- --ion-color-step-800: #cccccc;
- --ion-color-step-850: #d9d9d9;
- --ion-color-step-900: #e6e6e6;
- --ion-color-step-950: #f2f2f2;
-
- --ion-item-background: #000000;
-
- --ion-card-background: #1c1c1d;
- }
-
- .ios ion-modal {
- --ion-background-color: var(--ion-color-step-100);
- --ion-toolbar-background: var(--ion-color-step-150);
- --ion-toolbar-border-color: var(--ion-color-step-250);
- }
-
- /*
- * Material Design Dark Theme
- * -------------------------------------------
- */
-
- .md body {
- --ion-background-color: #121212;
- --ion-background-color-rgb: 18, 18, 18;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-border-color: #222222;
-
- --ion-color-step-50: #1e1e1e;
- --ion-color-step-100: #2a2a2a;
- --ion-color-step-150: #363636;
- --ion-color-step-200: #414141;
- --ion-color-step-250: #4d4d4d;
- --ion-color-step-300: #595959;
- --ion-color-step-350: #656565;
- --ion-color-step-400: #717171;
- --ion-color-step-450: #7d7d7d;
- --ion-color-step-500: #898989;
- --ion-color-step-550: #949494;
- --ion-color-step-600: #a0a0a0;
- --ion-color-step-650: #acacac;
- --ion-color-step-700: #b8b8b8;
- --ion-color-step-750: #c4c4c4;
- --ion-color-step-800: #d0d0d0;
- --ion-color-step-850: #dbdbdb;
- --ion-color-step-900: #e7e7e7;
- --ion-color-step-950: #f3f3f3;
-
- --ion-item-background: #1e1e1e;
-
- --ion-toolbar-background: #1f1f1f;
-
- --ion-tab-bar-background: #1f1f1f;
-
- --ion-card-background: #1e1e1e;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab1.jsx
deleted file mode 100644
index d1d807c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,114 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { bookOutline, chevronBackOutline, heart, search } from 'ionicons/icons';
-import { useStoreState } from 'pullstate';
-import { useRef } from 'react';
-import { WordStore } from '../store';
-import { getFavourites, getSearchCount } from '../store/Selectors';
-
-const Tab1 = () => {
- const router = useIonRouter();
- const pageRef = useRef(null);
- const favourites = useStoreState(WordStore, getFavourites);
- const searchCount = useStoreState(WordStore, getSearchCount);
-
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Dashboard
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
-
-
-
-
- Ionic Dictionary App
- Based on the English language
-
-
-
-
-
-
-
-
-
- Did you know?
- There are 171, 146 words in the English language!
-
- Search now →
-
-
-
-
-
-
-
-
-
-
-
- {favourites.length}
- Favourites
-
-
-
-
-
-
-
- {searchCount}
- Searches
-
-
-
-
-
-
-
- );
-};
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab2.jsx
deleted file mode 100644
index bb59c51..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState, useRef } from 'react';
-import { NoSearch } from '../components/NoSearch';
-import { NoResultsWordCard, WordCard } from '../components/WordCard';
-import { WordStore } from '../store';
-import { searchWord } from '../utils';
-
-const Tab2 = () => {
- const pageRef = useRef(null);
- const [searchTerm, setSearchTerm] = useState('');
- const [searchResult, setSearchResult] = useState(false);
- const [animatedClass, setAnimatedClass] = useState('');
-
- const performSearch = async () => {
- setAnimatedClass('animate__slideOutRight');
- const result = searchTerm !== '' ? await searchWord(searchTerm) : undefined;
-
- setTimeout(() => setSearchResult(result === undefined ? 'none' : result), 250);
- setTimeout(() => setAnimatedClass('animate__slideInLeft'), 250);
-
- WordStore.update((s) => {
- s.searchCount++;
- });
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
-
- setSearchTerm(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
- {searchResult && searchResult !== 'none' && (
-
- )}
-
- {searchResult && searchResult === 'none' && (
-
- )}
-
- {!searchResult && }
-
-
-
- );
-};
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab3.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab3.jsx
deleted file mode 100644
index 7d8298f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/AppPages/Tab3.jsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import { useStoreState } from 'pullstate';
-import { useRef, useState } from 'react';
-import { NoFavourites } from '../components/NoFavourites';
-import { WordCard } from '../components/WordCard';
-import { WordStore } from '../store';
-import { getFavourites } from '../store/Selectors';
-
-const Tab3 = () => {
- const pageRef = useRef(null);
- const favourites = useStoreState(WordStore, getFavourites);
- const [animatedClass, setAnimatedClass] = useState('animate__slideInLeft');
-
- return (
-
-
-
- Favourites
-
-
-
-
-
- Favourites
-
-
-
- {favourites.map((favourite, index) => {
- return (
-
- );
- })}
-
- {favourites.length < 1 && }
-
-
- );
-};
-
-export default Tab3;
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/NOTES.md b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/NOTES.md
deleted file mode 100644
index dbb9c22..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0126
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/NoFavourites.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/NoFavourites.jsx
deleted file mode 100644
index 0f446f7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/NoFavourites.jsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { IonCol, IonLabel, IonRow } from '@ionic/react';
-
-export const NoFavourites = () => (
-
-
-
- You don't have any favourites yet!
-
- Any time you see the heart icon, press it to add the related word to your favourites and
- quickly access it from here.
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/NoSearch.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/NoSearch.jsx
deleted file mode 100644
index 27f6fa3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/NoSearch.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { IonCol, IonLabel, IonRow } from '@ionic/react';
-
-export const NoSearch = () => (
-
-
-
- Search for a word in the English language
-
- This app will give you word meaninigs, phonetics, origin and also an audio clip so you can
- hear what it sounds like.
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordCard.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordCard.jsx
deleted file mode 100644
index 9ec2346..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordCard.jsx
+++ /dev/null
@@ -1,129 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonIcon,
- IonNote,
- IonRow,
- useIonModal,
-} from '@ionic/react';
-import { checkmarkCircleOutline, chevronForward, closeCircleOutline } from 'ionicons/icons';
-import WordModal from './WordModal';
-
-export const WordCard = ({ word, animatedClass, pageRef }) => {
- const closeModal = () => {
- hideModal();
- };
-
- const openModal = () => {
- showModal({
- presentingElement: pageRef.current,
- onDidDismiss: hideModal,
- });
- };
-
- const [showModal, hideModal] = useIonModal(WordModal, {
- dismiss: closeModal,
- word,
- });
-
- return (
-
-
-
-
- {word.word}
-
- {word.meanings &&
- word.meanings.map((meaning, index) => {
- return (
-
- {meaning.partOfSpeech}
-
-
- );
- })}
-
- {word.origin}
-
-
-
- {word.meanings.length}
- meanings
-
-
-
- {word.phonetics.length}
- phonetics
-
-
-
-
-
- audio
-
-
-
-
-
-
- View
-
-
-
-
-
-
-
-
- );
-};
-
-export const NoResultsWordCard = ({ word, animatedClass }) => {
- return (
-
-
-
-
- Whoops...
-
- no results
- found
-
-
- No results have been found for your search criteria! Please try another word.
-
-
-
-
- 0
- meanings
-
-
-
- 0
- phonetics
-
-
-
-
-
- audio
-
-
-
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordCardHeading.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordCardHeading.jsx
deleted file mode 100644
index ff23fc0..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordCardHeading.jsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { IonText } from "@ionic/react";
-
-export const WordCardHeading = ({ text }) => (
-
-
-
- { text }
-
-
-);
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordMeaning.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordMeaning.jsx
deleted file mode 100644
index 1f5d3b7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordMeaning.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { IonBadge } from '@ionic/react';
-
-export const WordMeaning = ({ meaning, index }) => (
- 0 ? 'ion-padding-top' : ''}>
-
- {meaning.partOfSpeech}
-
-
- {meaning.definitions.map((definition, index2) => {
- return (
-
0 ? 'ion-padding-top' : ''}>
- {index2 + 1}.
- {definition.definition}
-
- );
- })}
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordModal.jsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordModal.jsx
deleted file mode 100644
index 0896a4b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/components/WordModal.jsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonButtons,
- IonCard,
- IonCardContent,
- IonCardHeader,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonNote,
- IonPage,
- IonRow,
- IonText,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { heart, heartOutline, play } from 'ionicons/icons';
-import { useStoreState } from 'pullstate';
-import { WordStore } from '../store';
-import { getFavourites } from '../store/Selectors';
-import { addToFavourites } from '../store/WordStore';
-import { WordCardHeading } from './WordCardHeading';
-import { WordMeaning } from './WordMeaning';
-
-const WordModal = ({ dismiss, word }) => {
- const favourites = useStoreState(WordStore, getFavourites);
- const isFavourite = favourites.includes(word);
- const audio = word.phonetics[0] ? word.phonetics[0].audio : false;
-
- const playAudio = () => {
- const audioElement = new Audio(`https:${audio}`);
- audioElement.play();
- };
-
- return (
-
-
-
-
- addToFavourites(word)}>
-
-
-
- View Word
-
-
- Close
-
-
-
-
-
-
-
-
-
- {word.word}
-
- {word.meanings &&
- word.meanings.map((meaning, index) => {
- return (
-
-
- {meaning.partOfSpeech}
-
-
-
- );
- })}
-
- {word.origin}
-
-
-
-
-
- {audio && (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )}
-
-
-
-
-
-
-
- {word.meanings &&
- word.meanings.map((meaning, index) => {
- return ;
- })}
-
-
-
-
-
-
-
- );
-};
-
-export default WordModal;
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/index.tsx b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/index.tsx
deleted file mode 100644
index 8e1f78b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/index.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, heart, search, searchOutline, statsChart } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-import Tab1 from './AppPages/Tab1';
-import Tab2 from './AppPages/Tab2';
-import Tab3 from './AppPages/Tab3';
-
-import './style.scss';
-
-function DemoDictionaryApp() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* */}
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoDictionaryApp;
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/Selectors.js b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/Selectors.js
deleted file mode 100644
index eeb9eb0..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/Selectors.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { createSelector } from 'reselect';
-
-const getState = state => state;
-
-// General getters
-export const getFavourites = createSelector(getState, state => state.favourites);
-export const getPopularWords = createSelector(getState, state => state.popularWords);
-export const getSearchCount = createSelector(getState, state => state.searchCount);
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/WordStore.js b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/WordStore.js
deleted file mode 100644
index 374c814..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/WordStore.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { Store } from "pullstate";
-
-const WordStore = new Store({
-
- favourites: [],
- popularWords: [],
- searchCount: 0
-});
-
-export default WordStore;
-
-export const addToFavourites = (passedWord) => {
-
- const currentFavourites = WordStore.getRawState().favourites;
- const added = !currentFavourites.includes(passedWord);
-
- WordStore.update(s => {
-
- if (currentFavourites.includes(passedWord)) {
-
- s.favourites = currentFavourites.filter(word => word !== passedWord);
- } else {
-
- s.favourites = [ ...s.favourites, passedWord ];
- }
- });
-
- return added;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/index.js b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/index.js
deleted file mode 100644
index b232728..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/store/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as WordStore } from "./WordStore";
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/style.scss b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/style.scss
deleted file mode 100644
index bb952e0..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/style.scss
+++ /dev/null
@@ -1,240 +0,0 @@
-/* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
-/** Ionic CSS Variables **/
-.demo-dictionary-app {
- * {
- /** primary **/
- --ion-color-primary: #953cd0;
- --ion-color-primary-rgb: 149, 60, 208;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #8335b7;
- --ion-color-primary-tint: #a050d5;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #ffffff;
- --ion-color-light-rgb: 255, 255, 255;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #e0e0e0;
- --ion-color-light-tint: #ffffff;
-
- --ion-background-color: #1e1b27 !important;
- --ion-tab-bar-color-selected: #953cd0;
- --ion-tab-bar-color: #412f6e;
- --ion-text-color: white;
- --ion-tab-bar-background: #191620;
- --ion-toolbar-background: #191620 !important;
- --ion-item-background: #000000 !important;
-
- --ion-card-background: #272333 !important;
- --ion-modal-background: #272333 !important;
- }
-
- ion-tab-bar {
- --border-style: none;
- border: none;
- }
-
- /*
- * Dark Colors
- * -------------------------------------------
- */
-
- ion-modal {
- -ms-overflow-style: none; /* for Internet Explorer, Edge */
- scrollbar-width: none; /* for Firefox */
- overflow-y: scroll;
- }
-
- body {
- overflow: hidden !important;
- --ion-color-primary: #953cd0;
- --ion-color-primary-rgb: 149, 60, 208;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #8335b7;
- --ion-color-primary-tint: #a050d5;
-
- --ion-color-secondary: #50c8ff;
- --ion-color-secondary-rgb: 80, 200, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #46b0e0;
- --ion-color-secondary-tint: #62ceff;
-
- --ion-color-tertiary: #6a64ff;
- --ion-color-tertiary-rgb: 106, 100, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #5d58e0;
- --ion-color-tertiary-tint: #7974ff;
-
- --ion-color-success: #2fdf75;
- --ion-color-success-rgb: 47, 223, 117;
- --ion-color-success-contrast: #000000;
- --ion-color-success-contrast-rgb: 0, 0, 0;
- --ion-color-success-shade: #29c467;
- --ion-color-success-tint: #44e283;
-
- --ion-color-warning: #ffd534;
- --ion-color-warning-rgb: 255, 213, 52;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0bb2e;
- --ion-color-warning-tint: #ffd948;
-
- --ion-color-danger: #ff4961;
- --ion-color-danger-rgb: 255, 73, 97;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #e04055;
- --ion-color-danger-tint: #ff5b71;
-
- --ion-color-dark: #f4f5f8;
- --ion-color-dark-rgb: 244, 245, 248;
- --ion-color-dark-contrast: #000000;
- --ion-color-dark-contrast-rgb: 0, 0, 0;
- --ion-color-dark-shade: #d7d8da;
- --ion-color-dark-tint: #f5f6f9;
-
- --ion-color-medium: #989aa2;
- --ion-color-medium-rgb: 152, 154, 162;
- --ion-color-medium-contrast: #000000;
- --ion-color-medium-contrast-rgb: 0, 0, 0;
- --ion-color-medium-shade: #86888f;
- --ion-color-medium-tint: #a2a4ab;
-
- --ion-color-light: #ffffff;
- --ion-color-light-rgb: 255, 255, 255;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #e0e0e0;
- --ion-color-light-tint: #ffffff;
- }
-
- /*
- * iOS Dark Theme
- * -------------------------------------------
- */
-
- .ios body {
- /* --ion-background-color: #000000; */
- /* --ion-background-color-rgb: 0,0,0; */
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-color-step-50: #0d0d0d;
- --ion-color-step-100: #1a1a1a;
- --ion-color-step-150: #262626;
- --ion-color-step-200: #333333;
- --ion-color-step-250: #404040;
- --ion-color-step-300: #4d4d4d;
- --ion-color-step-350: #595959;
- --ion-color-step-400: #666666;
- --ion-color-step-450: #737373;
- --ion-color-step-500: #808080;
- --ion-color-step-550: #8c8c8c;
- --ion-color-step-600: #999999;
- --ion-color-step-650: #a6a6a6;
- --ion-color-step-700: #b3b3b3;
- --ion-color-step-750: #bfbfbf;
- --ion-color-step-800: #cccccc;
- --ion-color-step-850: #d9d9d9;
- --ion-color-step-900: #e6e6e6;
- --ion-color-step-950: #f2f2f2;
- }
-
- /*
- * Material Design Dark Theme
- * -------------------------------------------
- */
-
- .md body {
- /* --ion-background-color: #121212; */
- /* --ion-background-color-rgb: 18,18,18; */
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-border-color: #222222;
-
- --ion-color-step-50: #1e1e1e;
- --ion-color-step-100: #2a2a2a;
- --ion-color-step-150: #363636;
- --ion-color-step-200: #414141;
- --ion-color-step-250: #4d4d4d;
- --ion-color-step-300: #595959;
- --ion-color-step-350: #656565;
- --ion-color-step-400: #717171;
- --ion-color-step-450: #7d7d7d;
- --ion-color-step-500: #898989;
- --ion-color-step-550: #949494;
- --ion-color-step-600: #a0a0a0;
- --ion-color-step-650: #acacac;
- --ion-color-step-700: #b8b8b8;
- --ion-color-step-750: #c4c4c4;
- --ion-color-step-800: #d0d0d0;
- --ion-color-step-850: #dbdbdb;
- --ion-color-step-900: #e7e7e7;
- --ion-color-step-950: #f3f3f3;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/utils.js b/03_source/mobile.trunk/src/pages/DemoDictionaryApp/utils.js
deleted file mode 100644
index fa5327f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoDictionaryApp/utils.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import { WordStore } from './store';
-
-const API_URL = 'https://api.dictionaryapi.dev/api/v2/entries/en/';
-
-export const searchWord = async (word, returnOne = true) => {
- const response = await fetch(`${API_URL}${word.toLowerCase()}`);
- const data = await response.json();
-
- return returnOne ? data[0] : data;
-};
-
-export const fetchPopularWords = async () => {
- const words = ['mobile', 'applications', 'ionic', 'framework'];
-
- words.forEach(async (word) => {
- const wordData = await searchWord(word, false);
- WordStore.update((s) => {
- s.popularWords = [...s.popularWords, wordData[0]];
- });
- });
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/NOTES.md b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/NOTES.md
deleted file mode 100644
index 056b5dc..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0127
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/components/ProductCard.module.css b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/components/ProductCard.module.css
deleted file mode 100644
index 7cb75fd..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/components/ProductCard.module.css
+++ /dev/null
@@ -1,72 +0,0 @@
-.categoryPage ion-toolbar {
-
- --border-style: none;
-}
-
-.categoryCard {
-
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- align-items: center;
- /* min-height: 20rem !important; */
-}
-
-.productCardActions {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- width: 100%;
- margin-bottom: 1rem;
-}
-
-.productCardAction {
-
- font-size: 1.1rem;
-}
-
-.productCardHeader {
-
- min-height: 17rem;
-}
-
-.productCardHeader p {
-
- font-size: 0.8rem;
- padding: 0;
- margin: 0;
- margin-top: 0.75rem;
-}
-
-.categoryCardContent {
-
- display: flex;
- flex-direction: column;
-}
-
-.categoryCardContent ion-button {
-
- height: 1.5rem;
- font-size: 0.8rem;
-}
-
-.categoryCardContent p {
-
- font-size: 0.8rem;
- padding: 0;
- margin: 0;
-}
-
-.categoryCard img {
-
- /* border-radius: 5px; */
- /* padding: 1rem; */
-}
-
-.productPrice {
-
- display: flex;
- flex-direction: row;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/components/ProductCard.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/components/ProductCard.tsx
deleted file mode 100644
index e3a0266..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/components/ProductCard.tsx
+++ /dev/null
@@ -1,105 +0,0 @@
-import { IonButton, IonCard, IonCardContent, IonCardHeader, IonCol, IonIcon } from '@ionic/react';
-import { arrowRedoOutline, cart, cartOutline, heart, heartOutline } from 'ionicons/icons';
-import { useEffect, useRef, useState } from 'react';
-import { addToCart } from '../data/CartStore';
-import { addToFavourites, FavouritesStore } from '../data/FavouritesStore';
-import styles from './ProductCard.module.css';
-
-const ProductCard = (props): React.FC => {
- const { product, category, index, cartRef } = props;
- const favourites = FavouritesStore.useState((s) => s.product_ids);
-
- const productCartRef = useRef();
- const productFavouriteRef = useRef();
- const [isFavourite, setIsFavourite] = useState(false);
-
- useEffect(() => {
- const tempIsFavourite = favourites.find((f) => f === `${category.slug}/${product.id}`);
- setIsFavourite(tempIsFavourite ? true : false);
- }, [props.product, favourites]);
-
- const addProductToFavourites = (e, categorySlug, productID) => {
- e.preventDefault();
- e.stopPropagation();
- addToFavourites(categorySlug, productID);
-
- productFavouriteRef.current.style.display = '';
- productFavouriteRef.current.classList.add('animate__fadeOutTopRight');
-
- setTimeout(() => {
- if (productCartRef.current) {
- productFavouriteRef.current.classList.remove('animate__fadeOutTopRight');
- productFavouriteRef.current.style.display = 'none';
- }
- }, 500);
- };
-
- const addProductToCart = (e, categorySlug, productID) => {
- e.preventDefault();
- e.stopPropagation();
-
- productCartRef.current.style.display = '';
- productCartRef.current.classList.add('animate__fadeOutUp');
-
- setTimeout(() => {
- cartRef.current.classList.add('animate__tada');
- addToCart(categorySlug, productID);
-
- setTimeout(() => {
- cartRef.current.classList.remove('animate__tada');
- productCartRef.current.style.display = 'none';
- }, 500);
- }, 500);
- };
-
- return (
-
-
-
-
- addProductToFavourites(e, category.slug, product.id)}
- />
-
-
-
-
- {product.name}
-
-
-
-
-
- {product.price}
-
- addProductToCart(e, category.slug, product.id)}>
-
-
-
-
-
-
-
-
- );
-};
-
-export default ProductCard;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/CartStore.ts b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/CartStore.ts
deleted file mode 100644
index c9af57b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/CartStore.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Store } from 'pullstate';
-
-export const CartStore = new Store({
- total: 0,
- product_ids: [],
-});
-
-export const addToCart = (categorySlug, productID) => {
- CartStore.update((s) => {
- s.product_ids = [...s.product_ids, `${categorySlug}/${parseInt(productID)}`];
- });
-};
-
-export const removeFromCart = (productIndex) => {
- CartStore.update((s) => {
- s.product_ids.splice(productIndex, 1);
- });
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/FavouritesStore.ts b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/FavouritesStore.ts
deleted file mode 100644
index 53d6d22..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/FavouritesStore.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Store } from "pullstate";
-
-export const FavouritesStore = new Store({
-
- total: 0,
- product_ids: []
-});
-
-export const addToFavourites = (categorySlug, productID) => {
- FavouritesStore.update(s => {
- if (s.product_ids.find(id => id === `${ categorySlug }/${ parseInt(productID) }`)) {
- s.product_ids = s.product_ids.filter(id => id !== `${ categorySlug }/${ parseInt(productID) }`);
- } else {
- s.product_ids = [ ...s.product_ids, `${ categorySlug }/${ parseInt(productID) }` ];
- }
- });
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/ProductStore.ts b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/ProductStore.ts
deleted file mode 100644
index 86dbaf4..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/ProductStore.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { Store } from "pullstate";
-
-export const ProductStore = new Store({
-
- products: []
-});
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/fetcher.ts b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/fetcher.ts
deleted file mode 100644
index 4d026ff..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/data/fetcher.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { ProductStore } from './ProductStore';
-
-export const fetchData = async () => {
- const json = [
- 'beds.json',
- 'armchairs.json',
- 'coffee_tables.json',
- 'cushions.json',
- 'floor_lamps.json',
- 'office_chairs.json',
- ];
-
- var products = [];
-
- json.forEach(async (category) => {
- const products = await fetchProducts(category);
-
- let categoryName = category.replace('.json', '');
- categoryName = categoryName.replace('_', ' ');
- categoryName = uppercaseWords(categoryName);
-
- const productCategory = {
- name: categoryName,
- slug: category.replace('.json', ''),
- cover: products[6].image,
- products,
- };
-
- ProductStore.update((s) => {
- s.products = [...s.products, productCategory];
- });
- });
-
- return products;
-};
-
-const fetchProducts = async (category) => {
- const response = await fetch(`products/${category}`);
- const data = await response.json();
-
- // Set a product id
- await data.forEach((d, i) => {
- d.id = i + 1;
- });
-
- return data;
-};
-
-const uppercaseWords = (words) => {
- words = words
- .toLowerCase()
- .split(' ')
- .map((s) => s.charAt(0).toUpperCase() + s.substring(1))
- .join(' ');
-
- return words;
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/index.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/index.tsx
deleted file mode 100644
index f351a32..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/index.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import Home from './pages/Home';
-import { fetchData } from './data/fetcher';
-import CategoryProducts from './pages/CategoryProducts';
-import Product from './pages/Product';
-import FavouriteProducts from './pages/FavouriteProducts';
-import CartProducts from './pages/CartProducts';
-
-import './style.scss';
-import React, { useEffect } from 'react';
-
-function DemoEcommerceExample(): React.JSX.Element {
- useEffect(() => {
- fetchData();
- }, []);
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* */}
-
-
-
- Dashboard
-
-
-
- Search
-
-
-
- );
-}
-
-export default DemoEcommerceExample;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/module.d.ts b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/module.d.ts
deleted file mode 100644
index d774364..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/module.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CartProducts.module.css b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CartProducts.module.css
deleted file mode 100644
index 6be2867..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CartProducts.module.css
+++ /dev/null
@@ -1,31 +0,0 @@
-.cartCheckout {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- margin: 1rem;
-}
-
-.cartFooter {
- border-top: 2px solid rgb(200, 200, 200);
- background-color: white;
-}
-
-.cartCheckout ion-card-subtitle {
- font-size: 1.3rem;
-}
-
-.cartItem ion-avatar {
- height: 4rem;
- width: 4rem;
-}
-
-.cartSlider:not(:nth-child(1)) {
- border-top: 2px solid rgb(236, 236, 236);
-}
-
-.cartActions {
- display: flex;
- flex-direction: column;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CartProducts.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CartProducts.tsx
deleted file mode 100644
index 208eb31..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CartProducts.tsx
+++ /dev/null
@@ -1,161 +0,0 @@
-import {
- IonAvatar,
- IonBadge,
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonCol,
- IonContent,
- IonFooter,
- IonHeader,
- IonIcon,
- IonImg,
- IonItem,
- IonItemOption,
- IonItemOptions,
- IonItemSliding,
- IonLabel,
- IonList,
- IonNote,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { cart, checkmarkSharp, chevronBackOutline, trashOutline } from 'ionicons/icons';
-import React, { useEffect, useRef, useState } from 'react';
-import { CartStore, removeFromCart } from '../data/CartStore';
-import { ProductStore } from '../data/ProductStore';
-
-import styles from './CartProducts.module.css';
-
-const CartProducts = (): React.JSX.Element => {
- const cartRef = useRef(null);
- const products = ProductStore.useState((s) => s.products);
- const shopCart = CartStore.useState((s) => s.product_ids);
- const [cartProducts, setCartProducts] = useState([]);
- const [amountLoaded, setAmountLoaded] = useState(6);
-
- const [total, setTotal] = useState(0);
-
- useEffect(() => {
- const getCartProducts = () => {
- setCartProducts([]);
- setTotal(0);
-
- shopCart.forEach((product) => {
- var favouriteParts = product.split('/');
- var categorySlug = favouriteParts[0];
- var productID = favouriteParts[1];
-
- const tempCategory = products.filter((p) => p.slug === categorySlug)[0];
- const tempProduct = tempCategory.products.filter(
- (p) => parseInt(p.id) === parseInt(productID)
- )[0];
-
- const tempCartProduct = {
- category: tempCategory,
- product: tempProduct,
- };
-
- setTotal((prevTotal) => prevTotal + parseInt(tempProduct.price.replace('£', '')));
- setCartProducts((prevSearchResults) => [...prevSearchResults, tempCartProduct]);
- });
- };
-
- getCartProducts();
- }, [shopCart]);
-
- const fetchMore = async (e) => {
- // Increment the amount loaded by 6 for the next iteration
- setAmountLoaded((prevAmount) => prevAmount + 6);
- e.target.complete();
- };
-
- const removeProductFromCart = async (index) => {
- removeFromCart(index);
- };
-
- return (
-
-
-
-
-
-
- Categories
-
-
- Cart
-
-
- {shopCart.length}
-
-
-
-
-
-
-
-
-
-
-
- {cartProducts && cartProducts.length}{' '}
- {cartProducts.length > 1 || cartProducts.length === 0 ? ' products' : ' product'}{' '}
- found
-
-
-
-
-
- {cartProducts &&
- cartProducts.map((product, index) => {
- if (index <= amountLoaded) {
- return (
-
-
-
-
-
-
- {product.category.name}
- {product.product.name}
-
-
-
- {product.product.price}
-
-
-
-
- removeProductFromCart(index)}
- >
-
-
-
-
- );
- }
- })}
-
-
-
-
-
- £{total.toFixed(2)}
-
-
-
- Checkout
-
-
-
-
- );
-};
-
-export default CartProducts;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CategoryProducts.module.css b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CategoryProducts.module.css
deleted file mode 100644
index e42a0b1..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CategoryProducts.module.css
+++ /dev/null
@@ -1,10 +0,0 @@
-.categoryPage ion-toolbar {
-
- --border-style: none;
-}
-
-.search {
-
- --background: rgb(240, 240, 240);
- --color: black;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CategoryProducts.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CategoryProducts.tsx
deleted file mode 100644
index ccbd65a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/CategoryProducts.tsx
+++ /dev/null
@@ -1,134 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonInfiniteScroll,
- IonInfiniteScrollContent,
- IonNote,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { cart, chevronBackOutline, searchOutline } from 'ionicons/icons';
-import { useEffect, useRef, useState } from 'react';
-import { useParams } from 'react-router';
-import ProductCard from '../components/ProductCard';
-
-import { CartStore } from '../data/CartStore';
-import { ProductStore } from '../data/ProductStore';
-
-import styles from './CategoryProducts.module.css';
-
-const CategoryProducts = () => {
- const params = useParams();
- const cartRef = useRef();
- const products = ProductStore.useState((s) => s.products);
- const shopCart = CartStore.useState((s) => s.product_ids);
- const [category, setCategory] = useState({});
- const [searchResults, setsearchResults] = useState([]);
- const [amountLoaded, setAmountLoaded] = useState(6);
-
- useEffect(() => {
- const categorySlug = params.slug;
- const tempCategory = products.filter((p) => p.slug === categorySlug)[0];
- setCategory(tempCategory);
- setsearchResults(tempCategory.products);
- }, [params.slug]);
-
- const fetchMore = async (e) => {
- // Increment the amount loaded by 6 for the next iteration
- setAmountLoaded((prevAmount) => prevAmount + 6);
- e.target.complete();
- };
-
- const search = async (e) => {
- const searchVal = e.target.value;
-
- if (searchVal !== '') {
- const tempResults = category.products.filter((p) =>
- p.name.toLowerCase().includes(searchVal.toLowerCase())
- );
- setsearchResults(tempResults);
- } else {
- setsearchResults(category.products);
- }
- };
-
- return (
-
-
-
-
-
-
- Categories
-
-
- {category && category.name}
-
-
- {shopCart.length}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {searchResults && searchResults.length}{' '}
- {searchResults.length > 1 || searchResults.length === 0 ? ' products' : ' product'}{' '}
- found
-
-
-
-
-
- {searchResults &&
- searchResults.map((product, index) => {
- if (index <= amountLoaded && product.image) {
- return (
-
- );
- }
- })}
-
-
-
-
-
-
-
-
- );
-};
-
-export default CategoryProducts;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/FavouriteProducts.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/FavouriteProducts.tsx
deleted file mode 100644
index 7543053..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/FavouriteProducts.tsx
+++ /dev/null
@@ -1,131 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonInfiniteScroll,
- IonInfiniteScrollContent,
- IonNote,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { cart, chevronBackOutline } from 'ionicons/icons';
-import { useEffect, useRef, useState } from 'react';
-import ProductCard from '../components/ProductCard';
-import { CartStore } from '../data/CartStore';
-import { FavouritesStore } from '../data/FavouritesStore';
-import { ProductStore } from '../data/ProductStore';
-
-import styles from './CategoryProducts.module.css';
-
-const FavouriteProducts = () => {
- const cartRef = useRef(null);
- const products = ProductStore.useState((s) => s.products);
- const favourites = FavouritesStore.useState((s) => s.product_ids);
- const shopCart = CartStore.useState((s) => s.product_ids);
- const [searchResults, setSearchResults] = useState([]);
- const [amountLoaded, setAmountLoaded] = useState(6);
-
- useEffect(() => {
- const getFavourites = () => {
- setSearchResults([]);
-
- favourites.forEach((favourite) => {
- var favouriteParts = favourite.split('/');
- var categorySlug = favouriteParts[0];
- var productID = favouriteParts[1];
-
- const tempCategory = products.filter((p) => p.slug === categorySlug)[0];
- const tempProduct = tempCategory.products.filter(
- (p) => parseInt(p.id) === parseInt(productID)
- )[0];
-
- const tempFavourite = {
- category: tempCategory,
- product: tempProduct,
- };
-
- setSearchResults((prevSearchResults) => [...prevSearchResults, tempFavourite]);
- });
- };
-
- getFavourites();
- }, [favourites]);
-
- const fetchMore = async (e) => {
- // Increment the amount loaded by 6 for the next iteration
- setAmountLoaded((prevAmount) => prevAmount + 6);
- e.target.complete();
- };
-
- return (
-
-
-
-
-
-
- Categories
-
-
- Favourites
-
-
- {shopCart.length}
-
-
-
-
-
-
-
-
-
-
-
-
- {searchResults && searchResults.length}{' '}
- {searchResults.length > 1 || searchResults.length === 0
- ? ' favourites'
- : ' favourite'}{' '}
- found
-
-
-
-
-
- {searchResults &&
- searchResults.map((product, index) => {
- if (index <= amountLoaded) {
- return (
-
- );
- }
- })}
-
-
-
-
-
-
-
-
- );
-};
-
-export default FavouriteProducts;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Home.module.css b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Home.module.css
deleted file mode 100644
index e543907..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Home.module.css
+++ /dev/null
@@ -1,42 +0,0 @@
-.homePage ion-toolbar {
-
- --border-style: none;
-}
-
-.logo {
-
- margin-top: 0.25rem;
- color: var(--ion-color-primary);
-}
-
-.categoryCard,
-.categoryCardContent {
-
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- align-items: center;
-}
-
-.categoryCardContent ion-button {
-
- height: 1.5rem;
- font-size: 0.8rem;
-}
-
-.categoryCardContent {
-
- background-color: rgb(238, 238, 238);
-}
-
-.categoryCardContent ion-card-subtitle {
-
- /* color: rgb(78, 78, 78); */
-}
-
-.categoryCard img {
-
- /* border-radius: 5px; */
- padding: 1rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Home.tsx
deleted file mode 100644
index 25cb577..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Home.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { useState } from 'react';
-import {
- IonBadge,
- IonButton,
- IonButtons,
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-
-import styles from './Home.module.css';
-import { cart, heart } from 'ionicons/icons';
-
-import { ProductStore } from '../data/ProductStore';
-import { FavouritesStore } from '../data/FavouritesStore';
-import { CartStore } from '../data/CartStore';
-
-const Home = () => {
- const products = ProductStore.useState((s) => s.products);
- const favourites = FavouritesStore.useState((s) => s.product_ids);
- const shopCart = CartStore.useState((s) => s.product_ids);
-
- return (
-
-
-
- Categories
-
-
- Ionic Furniture
-
-
-
- {favourites.length}
-
-
-
-
- {shopCart.length}
-
-
-
-
-
-
-
-
-
-
- Categories
-
-
-
-
-
- {products.map((category, index) => {
- return (
-
-
-
-
-
- {category.name}
-
-
-
- );
- })}
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Product.module.css b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Product.module.css
deleted file mode 100644
index 253b7ed..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Product.module.css
+++ /dev/null
@@ -1,66 +0,0 @@
-.categoryPage ion-toolbar {
-
- --border-style: none;
-}
-
-.categoryCard {
-
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- align-items: center;
- text-align: center;
-}
-
-.productCardActions {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- width: 100%;
- margin-bottom: 1rem;
-}
-
-.productCardAction {
-
- font-size: 1.1rem;
-}
-
-.productCardHeader {
-
- min-height: 17rem;
-}
-
-.productCardHeader p {
-
- font-size: 1.2rem;
- padding: 0;
- margin: 0;
- margin-top: 0.75rem;
-}
-
-.categoryCardContent {
-
- display: flex;
- flex-direction: column;
- text-align: center;
-}
-
-.categoryCardContent ion-button {
-
- font-size: 0.8rem;
-}
-
-.categoryCardContent p {
-
- font-size: 1.5rem;
- padding: 0;
- margin: 0;
-}
-
-.productPrice {
-
- display: flex;
- flex-direction: row;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Product.tsx b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Product.tsx
deleted file mode 100644
index c7c7f18..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/pages/Product.tsx
+++ /dev/null
@@ -1,210 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonButtons,
- IonCard,
- IonCardContent,
- IonCardHeader,
- IonCardSubtitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import {
- arrowRedoOutline,
- cart,
- cartOutline,
- chevronBackOutline,
- heart,
- heartOutline,
-} from 'ionicons/icons';
-import { useEffect, useRef, useState } from 'react';
-import { useParams } from 'react-router';
-import ProductCard from '../components/ProductCard';
-import { addToCart, CartStore } from '../data/CartStore';
-import { addToFavourites, FavouritesStore } from '../data/FavouritesStore';
-import { ProductStore } from '../data/ProductStore';
-
-import styles from './Product.module.css';
-
-const Product = () => {
- const params = useParams();
- const cartRef = useRef(null);
- const products = ProductStore.useState((s) => s.products);
- const favourites = FavouritesStore.useState((s) => s.product_ids);
- const [isFavourite, setIsFavourite] = useState(false);
- const shopCart = CartStore.useState((s) => s.product_ids);
- const [product, setProduct] = useState({});
- const [category, setCategory] = useState({});
-
- useEffect(() => {
- const categorySlug = params.slug;
- const productID = params.id;
- const tempCategory = products.filter((p) => p.slug === categorySlug)[0];
- const tempProduct = tempCategory.products.filter(
- (p) => parseInt(p.id) === parseInt(productID)
- )[0];
-
- const tempIsFavourite = favourites.find((f) => f === `${categorySlug}/${productID}`);
-
- setIsFavourite(tempIsFavourite);
- setCategory(tempCategory);
- setProduct(tempProduct);
- }, [params.slug, params.id]);
-
- useEffect(() => {
- const tempIsFavourite = favourites.find((f) => f === `${category.slug}/${product.id}`);
- setIsFavourite(tempIsFavourite ? true : false);
- }, [favourites, product]);
-
- const addProductToFavourites = (e, categorySlug, productID) => {
- e.preventDefault();
- addToFavourites(categorySlug, productID);
-
- document.getElementById(
- `placeholder_favourite_product_${categorySlug}_${productID}`
- ).style.display = '';
- document
- .getElementById(`placeholder_favourite_product_${categorySlug}_${productID}`)
- .classList.add('animate__fadeOutTopRight');
- };
-
- const addProductToCart = (e, categorySlug, productID) => {
- e.preventDefault();
-
- document.getElementById(`placeholder_cart_${categorySlug}_${productID}`).style.display = '';
- document
- .getElementById(`placeholder_cart_${categorySlug}_${productID}`)
- .classList.add('animate__fadeOutUp');
-
- setTimeout(() => {
- cartRef.current.classList.add('animate__tada');
- addToCart(categorySlug, productID);
-
- setTimeout(() => {
- cartRef.current.classList.remove('animate__tada');
- }, 500);
- }, 500);
- };
-
- return (
-
-
-
-
-
-
- {category.name}
-
-
-
- View Product
-
-
- {shopCart.length}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- addProductToFavourites(e, category.slug, product.id)}
- />
-
-
-
-
- {product.name}
-
-
-
-
-
- {product.price}
-
- addProductToCart(e, category.slug, product.id)}
- >
-
- Add to Cart
-
-
-
-
-
-
-
-
-
-
-
- Similar products...
-
-
-
-
- {category &&
- category.products &&
- category.products.map((similar, index) => {
- if (similar.id !== product.id && product.image && index < 4) {
- return (
-
- );
- }
- })}
-
-
-
-
- );
-};
-
-export default Product;
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/style.scss b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/theme/variables.css b/03_source/mobile.trunk/src/pages/DemoEcommerceExample/theme/variables.css
deleted file mode 100644
index 985de6f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoEcommerceExample/theme/variables.css
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
-/** Ionic CSS Variables **/
-:root {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
-
- --ion-toolbar-color: black;
- --ion-grid-column-padding: 0rem;
- /* --ion-toolbar-background: var(--ion-color-warning); */
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/NOTES.md b/03_source/mobile.trunk/src/pages/DemoFacebookClone/NOTES.md
deleted file mode 100644
index bb7672c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0128
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/ExploreContainer.css b/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/ExploreContainer.css
deleted file mode 100644
index e99f514..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/ExploreContainer.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.container strong {
- font-size: 20px;
- line-height: 26px;
-}
-
-.container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
-}
-
-.container a {
- text-decoration: none;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/ExploreContainer.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/ExploreContainer.tsx
deleted file mode 100644
index f003f7f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/ExploreContainer.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import './ExploreContainer.css';
-
-interface ContainerProps {
- name: string;
-}
-
-const ExploreContainer: React.FC = ({ name }) => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/Post.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/Post.tsx
deleted file mode 100644
index 275e4ad..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/Post.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonAvatar,
- IonButton,
- IonCol,
- IonIcon,
- IonImg,
- IonItem,
- IonLabel,
- IonRow,
- IonText,
-} from '@ionic/react';
-import {
- arrowRedoOutline,
- chatboxOutline,
- ellipsisHorizontal,
- globe,
- heart,
- thumbsUp,
- thumbsUpOutline,
-} from 'ionicons/icons';
-import '../pages/Tab2.css';
-import React from 'react';
-
-const Post = (props): React.JSX.Element => {
- const { post } = props;
-
- return (
-
-
-
-
-
-
-
-
-
- {post.name}
-
- {post.sponsored ? 'Sponsored' : post.time}
-
-
-
-
-
-
-
-
-
- {post.message}
-
-
- {post.image &&
}
-
- {post.sponsored && (
-
-
- ionicframework.com
- Start building apps today!
-
-
-
Learn more
-
- )}
-
-
-
-
-
-
-
- {post.sponsored &&
{post.views} Views
}
-
-
-
-
-
- Like
-
-
-
-
- Comment
-
-
-
-
- Share
-
-
-
-
-
- );
-};
-
-export default Post;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/Tabs.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/Tabs.tsx
deleted file mode 100644
index 8a1c7d2..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/components/Tabs.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react';
-import { IonIcon, IonLabel, IonTabBar, IonTabButton, IonTabs, IonRouterOutlet } from '@ionic/react';
-import { Redirect, Route } from 'react-router-dom';
-import Tab1 from '../pages/Tab1';
-import Tab2 from '../pages/Tab2';
-import Tab3 from '../pages/Tab3';
-import { chatboxOutline, cogOutline, personOutline } from 'ionicons/icons';
-
-const Tabs = (props): React.JSX.Element => {
- return (
-
-
- } />
- } />
- } />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Tabs;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/index.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/index.tsx
deleted file mode 100644
index 545fc4e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/index.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import Tab1 from './pages/Tab1';
-import Tab2 from './pages/Tab2';
-import Tab3 from './pages/Tab3';
-import Tabs from './components/Tabs';
-
-import './style.scss';
-
-function DemoFacebookClone() {
- return (
-
- } />
- } />
-
-
-
- );
-}
-
-export default DemoFacebookClone;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/main/messages.js b/03_source/mobile.trunk/src/pages/DemoFacebookClone/main/messages.js
deleted file mode 100644
index 0d37b93..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/main/messages.js
+++ /dev/null
@@ -1,105 +0,0 @@
-export const messages = [
- {
- name: 'Ionic Framework',
- avatar: 'https://pbs.twimg.com/profile_images/1148952014036054016/xxv7lLvp_400x400.jpg',
- message: '',
- online: false,
- last_message_sent: 3,
- new_message_count: 2,
- },
- {
- name: 'Capacitor JS',
- avatar: 'https://pbs.twimg.com/profile_images/1268235262641004544/OLW1xl7t_400x400.png',
- message: '',
- online: true,
- last_message_sent: 9,
- new_message_count: 0,
- },
- {
- name: 'Max Lynch',
- avatar: 'https://pbs.twimg.com/profile_images/1318970727173885953/bln98FNj_400x400.jpg',
- message: '',
- online: true,
- last_message_sent: 15,
- new_message_count: 0,
- },
- {
- name: 'Ben Sperry',
- avatar: 'https://pbs.twimg.com/profile_images/1328390491126308864/jHHgl5Dm_400x400.jpg',
- message: '',
- online: false,
- last_message_sent: 27,
- new_message_count: 0,
- },
- {
- name: 'Matt Netkow',
- avatar: 'https://pbs.twimg.com/profile_images/1323383930150621187/GKc0nVzi_400x400.jpg',
- message: '',
- online: false,
- last_message_sent: 31,
- new_message_count: 1,
- },
- {
- name: 'Liam DeBeasi',
- avatar: 'https://pbs.twimg.com/profile_images/1105953692669366273/ZNK4lRAJ_400x400.jpg',
- message: '',
- online: true,
- last_message_sent: 41,
- new_message_count: 0,
- },
- {
- name: 'Mike Hartington',
- avatar: 'https://pbs.twimg.com/profile_images/1084993841898446849/DJ8XtR6L_400x400.jpg',
- message: '',
- online: false,
- last_message_sent: 47,
- new_message_count: 0,
- },
- {
- name: 'Adam Bradley',
- avatar: 'https://pbs.twimg.com/profile_images/909075942320025600/hfYqicUk_400x400.jpg',
- message: '',
- online: true,
- last_message_sent: 51,
- new_message_count: 0,
- },
- {
- name: 'Brody Kidd',
- avatar: 'https://pbs.twimg.com/profile_images/477539679567228928/JObyaUW__400x400.jpeg',
- message: '',
- online: true,
- last_message_sent: 53,
- new_message_count: 0,
- },
-];
-
-export const posts = [
- {
- name: 'Max Lynch',
- sponsored: false,
- time: '12 m',
- avatar: 'https://pbs.twimg.com/profile_images/1318970727173885953/bln98FNj_400x400.jpg',
- message: 'Join a global community of web native developers!',
- views: '',
- online: true,
- },
- {
- name: 'Ben Sperry',
- sponsored: false,
- image: 'https://ionicons.com/assets/img/meta/ionicons-og.png',
- time: '1 h',
- avatar: 'https://pbs.twimg.com/profile_images/1328390491126308864/jHHgl5Dm_400x400.jpg',
- message: 'Check out all the cool IonIcons used on this IonicBook app!',
- views: '',
- online: false,
- },
- {
- name: 'Matt Netkow',
- sponsored: false,
- time: '2 h',
- avatar: 'https://pbs.twimg.com/profile_images/1323383930150621187/GKc0nVzi_400x400.jpg',
- message: 'I help web developers build cross-platform Web Native apps.',
- views: '',
- online: false,
- },
-];
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/MessageItem.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/MessageItem.tsx
deleted file mode 100644
index 4c4d3b3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/MessageItem.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { IonAvatar, IonBadge, IonImg, IonItem, IonLabel } from '@ionic/react';
-import React from 'react';
-
-const MessageItem = (props): React.JSX.Element => {
- return (
-
-
-
-
- {props.message.online &&
}
-
-
- {props.message.name}
- This is a test message for a messenger item
-
-
-
-
{props.message.last_message_sent} min
- {props.message.new_message_count > 0 && (
-
{props.message.new_message_count}
- )}
-
-
- );
-};
-
-export default MessageItem;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab1.css b/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab1.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab1.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab1.tsx
deleted file mode 100644
index 2ccdb20..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab1.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import {
- IonAvatar,
- IonBackButton,
- IonBadge,
- IonButton,
- IonButtons,
- IonContent,
- IonFab,
- IonFabButton,
- IonHeader,
- IonIcon,
- IonImg,
- IonItem,
- IonLabel,
- IonList,
- IonPage,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { addOutline, searchOutline } from 'ionicons/icons';
-import ExploreContainer from '../components/ExploreContainer';
-import { messages } from '../main/messages';
-import MessageItem from './MessageItem';
-import './Tab1.css';
-
-const Tab1 = () => {
- return (
-
-
-
- Messages
-
-
-
-
-
- @93alan
-
-
-
-
-
-
-
-
-
-
-
-
- Messages
-
-
-
-
- {messages.map((message, index) => {
- return ;
- })}
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab2.css b/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab2.css
deleted file mode 100644
index 6cb99f6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab2.css
+++ /dev/null
@@ -1,373 +0,0 @@
-.timeline-toolbar {
-
- display: flex;
- flex-direction: row !important;
-}
-
-.toolbar-title {
-
- font-size: 1.8rem;
- font-weight: 700;
- margin-left: 0.5rem;
-}
-
-.toolbar-icons {
-
- margin-right: 0.5rem;
- background-color: white;
-}
-
-.toolbar-icons ion-icon {
-
- color: black;
- background-color:rgb(235, 235, 235);
- border-radius: 500px;
- font-size: 1.5rem;
- margin-left: 0.5rem;
- padding: 0.3rem;
-}
-
-.second-toolbar {
-
- border-bottom: 0.1px solid rgb(144, 144, 144);
- padding-top: 0.75rem;
- background-color: white;
- position: fixed;
- width: 100%;
- z-index: 9999999;
-}
-
-.second-toolbar ion-col ion-icon {
-
- font-size: 1.75rem;
- color: rgb(138, 138, 138);
-}
-
-.second-toolbar ion-col ion-icon.selected {
-
- /* border-bottom: 5px solid var(--ion-color-primary); */
-}
-
-.selected-icon {
-
- border-bottom: 1.5px solid var(--ion-color-primary);
-}
-
-.top-input-container {
-
- border-bottom: 0.1px solid rgb(200, 200, 200);
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- background-color: white;
- margin-top: 3.5rem;
-}
-
-.top-input {
-
- border: 1px solid rgb(149, 149, 149);
- border-radius: 25px;
- padding-left: 1rem !important;
- height: 2.2rem;
-}
-
-.below-input-label-container {
-
- border-bottom: 1px solid rgb(185, 185, 185);
- background-color: white;
-}
-
-.below-input-label {
-
- margin-top: 0.8rem;
- margin-bottom: 0.8rem;
-}
-
-.below-input-label:not(:last-child) {
-
- border-right: 1px solid rgb(167, 167, 167);
-}
-
-.below-input-label ion-text {
-
- color: rgb(114, 114, 114);
- font-size: 0.8rem;
- font-weight: 700 !important;
- margin-left: 1.7rem;
-}
-
-.below-input-label ion-icon {
-
- font-size: 1.2rem;
- margin-right: 0.5rem;
- position: absolute;
-}
-
-.timeline-bg {
-
- --background:rgb(218, 218, 218) !important;
-}
-
-.rooms-container {
-
- background-color: white;
- margin-top: 0.5rem;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- border-bottom: 0.1px solid rgb(144, 144, 144);
- border-top: 0.1px solid rgb(144, 144, 144);
-}
-
-.rooms-people-container {
-
- white-space: nowrap;
- position: relative;
- overflow-x: scroll;
- overflow-y: hidden;
- -webkit-overflow-scrolling: touch;
- display: flex;
- flex-direction: row;
- width: 70%;
-}
-
-.rooms-people-container ion-avatar {
-
- height: 2.5rem;
- width: 2.5rem;
-}
-
-.rooms-people-container div {
-
- margin-top: 0.4rem !important;
- margin-right: 1rem !important;
-}
-
-.rooms-create {
-
- border: 1px solid rgb(149, 225, 255);
- border-radius: 70px;
- justify-content: center;
- flex-direction: row;
- padding: 0.2rem !important;
-
-}
-
-.rooms-create ion-icon {
-
- font-size: 1.5rem !important;
- margin-left: 0.5rem !important;
- margin-top: 0.3rem !important;
- float: left !important;
-}
-
-.rooms-create ion-text {
-
- font-size: 0.7rem !important;
- color:rgb(136, 136, 136) !important;
- font-weight: 700 !important;
- margin: 0 !important;
- padding: 0 !important;
- line-height: -1rem !important;
-}
-
-.rooms-online {
-
- height: 13px !important;
- width: 13px !important;
- border-radius: 500px !important;
- border: 2px solid white !important;
- background-color: green !important;
- z-index: 9999 !important;
- position: absolute !important;
- margin-left: 0.5rem !important;
- margin-top: -0.8rem !important;
-}
-
-.post {
-
- margin-top: 0.5rem !important;
-}
-
-.post-container {
-
- background-color: white !important;
-}
-
-.post-header {
-
- /* padding: none !important; */
- /* margin: none !important; */
-}
-
-.post-header {
-
- padding-top: 0.5rem !important;
- padding-left: 0.5rem !important;
- z-index: 9999;
-}
-
-.post-header ion-avatar {
-
- /* border: 2px solid rgb(164, 222, 255); */
-}
-
-.post-header ion-label {
-
- margin-left: 0.5rem !important;
- z-index: 99999 !important;
-}
-
-.post-header ion-label h3 {
-
- font-weight: 600 !important;
-}
-
-.post-header ion-label p ion-icon {
-
- position: absolute !important;
- margin-top: 0.15rem !important;
-}
-
-.post-header ion-icon {
-
- color: rgb(133, 133, 133) !important;
-}
-
-.post-content {
-
- padding-left: 0.5rem !important;
- margin-top: -0.7rem !important;
-}
-
-.post-link {
-
- padding-left: 0.5rem !important;
- background-color: rgb(245, 245, 245) !important;
- display: flex !important;
- flex-direction: row !important;
- justify-content: space-between !important;
- padding-top: 0.75rem !important;
- padding-bottom: 0.75rem !important;
-}
-
-.post-link ion-button {
-
- margin-right: 0.5rem !important;
- --background: rgb(245, 245, 245) !important;
- border: 1px solid rgb(98, 98, 98) !important;
- border-radius: 8px !important;
- color: rgb(98, 98, 98) !important;
- text-transform: uppercase !important;
- font-size: 0.8rem !important;
-}
-
-.post-likes {
-
- padding-left: 0.5rem !important;
- padding-top: 0.5rem !important;
- padding-bottom: 0.5rem !important;
- display: flex !important;
- flex-direction: row !important;
- justify-content: space-between !important;
-}
-
-.post-like-icons {
-
- margin-top: 0.2rem !important;
-}
-
-.post-likes ion-icon:not(:last-child) {
-
- background-color: rgb(70, 128, 255) !important;
-}
-
-.post-likes ion-icon:last-child {
-
- background-color: rgb(255, 76, 76) !important;
- margin-left: -0.5rem !important;
-}
-
-.post-likes ion-icon {
-
- color: white !important;
- border-radius: 100px !important;
- padding: 0.2rem !important;
- border: 2px solid white !important;
-}
-
-.post-likes p {
-
- padding: none !important;
- margin: none !important;
- margin-top: 0.4rem !important;
- font-size: 0.8rem !important;
- margin-right: 0.5rem !important;
- color: rgb(156, 156, 156) !important;
-
-}
-
-.post-image {
-
- padding: none !important;
- margin: none !important;
-}
-
-.post-image ion-img {
-
- width: 100% !important;
-}
-
-.post-content p {
-
- font-size: 1rem !important;
-}
-
-.post-actions {
-
- background-color: white !important;
- display: flex !important;
- flex-direction: row !important;
- justify-content: space-between !important;
- border-top: 0.1px solid rgb(228, 228, 228) !important;
- padding-top: 0.5rem !important;
- padding-bottom: 0.2rem !important;
-}
-
-.post-actions ion-col {
-
- margin-left: -1rem !important;
-}
-
-.post-actions ion-col:first-child {
-
- margin-right: -2rem !important;
-}
-
-.post-actions ion-col:last-child {
-
- margin-right: 2rem !important;
-}
-
-.post-actions ion-col ion-icon {
-
- font-size: 1.4rem !important;
- color:rgb(105, 105, 105) !important;
-}
-
-.post-actions ion-col ion-text {
-
- font-size: 0.8rem !important;
- color: rgb(107, 107, 107) !important;
- margin-top: 0.2rem !important;
- margin-left: 0.5rem !important;
- position: absolute !important;
-}
-
-/*
- */
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab2.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab2.tsx
deleted file mode 100644
index 9b7f202..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab2.tsx
+++ /dev/null
@@ -1,242 +0,0 @@
-import {
- IonAvatar,
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonImg,
- IonInput,
- IonItem,
- IonLabel,
- IonPage,
- IonRouterLink,
- IonRow,
- IonSearchbar,
- IonText,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import {
- searchOutline,
- chatboxOutline,
- playCircleOutline,
- bagOutline,
- homeOutline,
- menuOutline,
- flagOutline,
- notificationsOutline,
- homeSharp,
- home,
- videocam,
- images,
- globe,
- ellipse,
- ellipsisHorizontal,
- thumbsUp,
- heart,
- thumbsUpOutline,
- shareOutline,
- arrowRedoOutline,
- chevronBackOutline,
-} from 'ionicons/icons';
-import ExploreContainer from '../components/ExploreContainer';
-import Post from '../components/Post';
-import { messages, posts } from '../main/messages';
-import './Tab2.css';
-import React from 'react';
-
-const Tab2 = (): React.JSX.Element => {
- const router = useIonRouter();
-
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
-
- handleBackClick()}>
-
-
-
-
- ionicbook
-
-
-
-
-
-
-
-
-
-
-
-
- {/* */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Live
-
-
-
-
- Photo
-
-
-
-
- Room
-
-
-
-
-
-
-
-
- Create
-
- Room
-
-
-
-
-
- {messages.map((message, index) => {
- if (index > 1) {
- return (
-
-
-
-
- {message.online && }
-
- );
- }
- })}
-
-
-
-
-
-
-
-
-
-
-
-
- Ionic Framework
-
- Sponsored
-
-
-
-
-
-
-
-
- Build cross-platform web native mobile apps with one codebase! 🎉
-
-
- {/*
*/}
-
- {/* */}
-
-
-
- ionicframework.com
- Start building apps today!
-
-
-
Learn more
-
-
-
-
-
-
-
- Like
-
-
-
-
- Comment
-
-
-
-
- Share
-
-
-
-
-
-
- {posts.map((post, index) => {
- return ;
- })}
-
-
- );
-};
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab3.css b/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab3.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab3.tsx b/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab3.tsx
deleted file mode 100644
index 3a29b8a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/pages/Tab3.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab3.css';
-
-const Tab3: React.FC = () => {
- return (
-
-
-
- Tab 3
-
-
-
-
-
- Tab 3
-
-
-
-
-
- );
-};
-
-export default Tab3;
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/style.scss b/03_source/mobile.trunk/src/pages/DemoFacebookClone/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoFacebookClone/theme/variables.css b/03_source/mobile.trunk/src/pages/DemoFacebookClone/theme/variables.css
deleted file mode 100644
index 12e7354..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFacebookClone/theme/variables.css
+++ /dev/null
@@ -1,352 +0,0 @@
-/* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
-/** Ionic CSS Variables **/
-:root {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** purple **/
- --ion-color-tertiary: #894eb1;
- --ion-color-tertiary-rgb: 235, 68, 90;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #6f00b9;
- --ion-color-tertiary-tint: #8633bd;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
-}
-
-@media (prefers-color-scheme: dark1) {
- /*
- * Dark Colors
- * -------------------------------------------
- */
-
- body {
- --ion-color-primary: #428cff;
- --ion-color-primary-rgb: 66,140,255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255,255,255;
- --ion-color-primary-shade: #3a7be0;
- --ion-color-primary-tint: #5598ff;
-
- --ion-color-secondary: #50c8ff;
- --ion-color-secondary-rgb: 80,200,255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255,255,255;
- --ion-color-secondary-shade: #46b0e0;
- --ion-color-secondary-tint: #62ceff;
-
- --ion-color-tertiary: #6a64ff;
- --ion-color-tertiary-rgb: 106,100,255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255,255,255;
- --ion-color-tertiary-shade: #5d58e0;
- --ion-color-tertiary-tint: #7974ff;
-
- --ion-color-success: #2fdf75;
- --ion-color-success-rgb: 47,223,117;
- --ion-color-success-contrast: #000000;
- --ion-color-success-contrast-rgb: 0,0,0;
- --ion-color-success-shade: #29c467;
- --ion-color-success-tint: #44e283;
-
- --ion-color-warning: #ffd534;
- --ion-color-warning-rgb: 255,213,52;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0,0,0;
- --ion-color-warning-shade: #e0bb2e;
- --ion-color-warning-tint: #ffd948;
-
- --ion-color-danger: #ff4961;
- --ion-color-danger-rgb: 255,73,97;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255,255,255;
- --ion-color-danger-shade: #e04055;
- --ion-color-danger-tint: #ff5b71;
-
- --ion-color-dark: #f4f5f8;
- --ion-color-dark-rgb: 244,245,248;
- --ion-color-dark-contrast: #000000;
- --ion-color-dark-contrast-rgb: 0,0,0;
- --ion-color-dark-shade: #d7d8da;
- --ion-color-dark-tint: #f5f6f9;
-
- --ion-color-medium: #989aa2;
- --ion-color-medium-rgb: 152,154,162;
- --ion-color-medium-contrast: #000000;
- --ion-color-medium-contrast-rgb: 0,0,0;
- --ion-color-medium-shade: #86888f;
- --ion-color-medium-tint: #a2a4ab;
-
- --ion-color-light: #222428;
- --ion-color-light-rgb: 34,36,40;
- --ion-color-light-contrast: #ffffff;
- --ion-color-light-contrast-rgb: 255,255,255;
- --ion-color-light-shade: #1e2023;
- --ion-color-light-tint: #383a3e;
- }
-
- /*
- * iOS Dark Theme
- * -------------------------------------------
- */
-
- .ios body {
- --ion-background-color: #000000;
- --ion-background-color-rgb: 0,0,0;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255,255,255;
-
- --ion-color-step-50: #0d0d0d;
- --ion-color-step-100: #1a1a1a;
- --ion-color-step-150: #262626;
- --ion-color-step-200: #333333;
- --ion-color-step-250: #404040;
- --ion-color-step-300: #4d4d4d;
- --ion-color-step-350: #595959;
- --ion-color-step-400: #666666;
- --ion-color-step-450: #737373;
- --ion-color-step-500: #808080;
- --ion-color-step-550: #8c8c8c;
- --ion-color-step-600: #999999;
- --ion-color-step-650: #a6a6a6;
- --ion-color-step-700: #b3b3b3;
- --ion-color-step-750: #bfbfbf;
- --ion-color-step-800: #cccccc;
- --ion-color-step-850: #d9d9d9;
- --ion-color-step-900: #e6e6e6;
- --ion-color-step-950: #f2f2f2;
-
- --ion-item-background: #000000;
-
- --ion-card-background: #1c1c1d;
- }
-
- .ios ion-modal {
- --ion-background-color: var(--ion-color-step-100);
- --ion-toolbar-background: var(--ion-color-step-150);
- --ion-toolbar-border-color: var(--ion-color-step-250);
- }
-
-
- /*
- * Material Design Dark Theme
- * -------------------------------------------
- */
-
- .md body {
- --ion-background-color: #121212;
- --ion-background-color-rgb: 18,18,18;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255,255,255;
-
- --ion-border-color: #222222;
-
- --ion-color-step-50: #1e1e1e;
- --ion-color-step-100: #2a2a2a;
- --ion-color-step-150: #363636;
- --ion-color-step-200: #414141;
- --ion-color-step-250: #4d4d4d;
- --ion-color-step-300: #595959;
- --ion-color-step-350: #656565;
- --ion-color-step-400: #717171;
- --ion-color-step-450: #7d7d7d;
- --ion-color-step-500: #898989;
- --ion-color-step-550: #949494;
- --ion-color-step-600: #a0a0a0;
- --ion-color-step-650: #acacac;
- --ion-color-step-700: #b8b8b8;
- --ion-color-step-750: #c4c4c4;
- --ion-color-step-800: #d0d0d0;
- --ion-color-step-850: #dbdbdb;
- --ion-color-step-900: #e7e7e7;
- --ion-color-step-950: #f3f3f3;
-
- --ion-item-background: #1e1e1e;
-
- --ion-toolbar-background: #1f1f1f;
-
- --ion-tab-bar-background: #1f1f1f;
-
- --ion-card-background: #1e1e1e;
- }
-}
-
-ion-header,
-ion-toolbar {
-
- border-bottom: none !important;
- --border-color: white;
-}
-
-ion-title {
-
- --color: rgb(48, 48, 58);
-}
-
-ion-tab-bar {
-
- border-top: none;
-}
-
-ion-tab-button {
-
- --color: rgb(211, 211, 211);
- height: 2rem;
-}
-
-.tab-selected,
-ion-icon.search {
-
- color: rgb(88, 88, 88) !important;
-}
-
-.avatar {
-
- height: 3.5rem;
- width: 3.5rem;
-}
-
-.online {
-
- height: 20px;
- width: 20px;
- border-radius: 500px;
- border: 3px solid white;
- background-color: green;
- z-index: 9999;
- position: absolute;
- margin-left: 2.5rem;
- margin-top: 1.2rem;
-}
-
-.contact-details {
-
- margin-top: 0rem;
- margin-left: 1rem;
- margin-right: 1rem;
-}
-
-.stats {
-
- margin-top: -1rem;
- margin-right: 0.5rem;
-}
-
-.last-online {
-
- color: rgb(190, 190, 190);
- font-size: 0.9rem;
- margin-bottom: 0.5rem;
-}
-
-.stats ion-badge {
-
- margin: 0 !important;
- margin-top: -3rem !important;
- border-radius: 2px !important;
-}
-
-
-
-.contact-details h1 {
-
- font-size: 1.2rem;
-}
-
-.contact-details p {
-
- font-size: 0.8rem;
-}
-
-.message-item {
-
- padding-top: 1.5rem;
-}
-
-.profile-avatar {
-
- margin: 0 !important;
- padding: 0 !important;
- height: 2rem;
- width: 2rem;
- border-radius: 500px !important;
-}
-
-.profile-name {
-
- color:#c8c8c8;
- font-weight: 600 !important;
- font-size: 0.9rem !important;
- margin-left: 0.5rem;
-}
-
-.add-fab {
-
- opacity: 0.7;
-}
-
-/* */
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/NOTES.md b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/NOTES.md
deleted file mode 100644
index 32dfb37..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0129
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/CategorySlide.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/CategorySlide.tsx
deleted file mode 100644
index 0b189df..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/CategorySlide.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Link } from 'react-router-dom';
-
-export const CategorySlide = ({ name, path, image }) => (
- <>TODO: sorry but the ionic cannot provide ion-slide>
-);
-
-// import { IonSlide } from '@ionic/react';
-// export const CategorySlide = ({ name, path, image }) => (
-//
-//
-//
-// {name}
-//
-//
-// );
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/ProductCard.module.css b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/ProductCard.module.css
deleted file mode 100644
index 1373e81..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/ProductCard.module.css
+++ /dev/null
@@ -1,83 +0,0 @@
-.categoryPage ion-toolbar {
-
- --border-style: none;
-}
-
-.categoryCard {
-
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- align-items: center;
- /* min-height: 20rem !important; */
-}
-
-.productCardActions {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- width: 100%;
- margin-bottom: 1rem;
-}
-
-.productCardAction {
-
- font-size: 1.1rem;
-}
-
-.productCardHeader {
-
- min-height: 13rem;
- margin: 0 !important;
- padding: 0 !important;
- padding: 1rem !important;
-}
-
-.productCardHeader p {
-
- font-size: 0.8rem;
- padding: 0;
- margin: 0;
- margin-top: 0.75rem;
-}
-
-.categoryCardContent {
-
- display: flex;
- flex-direction: column;
-}
-
-.categoryCardContent ion-button {
-
- height: 1.5rem;
- font-size: 0.8rem;
-}
-
-.categoryCardContent p {
-
- font-size: 0.8rem;
- padding: 0;
- margin: 0;
-}
-
-.categoryCard img {
-
- /* border-radius: 5px; */
- /* padding: 1rem; */
-}
-
-.productPrice {
-
- display: flex;
- flex-direction: row;
-}
-
-.food {
-
- text-align: center;
- background-color: white;
- border: 5px solid var(--ion-background-color);
- border-radius: 30px;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/ProductCard.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/ProductCard.tsx
deleted file mode 100644
index 171be6e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/components/ProductCard.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import { IonButton, IonCard, IonCardContent, IonCardHeader, IonCol, IonIcon } from "@ionic/react";
-import { arrowRedoOutline, cart, cartOutline, heart, heartOutline } from "ionicons/icons";
-import { useEffect, useRef, useState } from "react";
-import { Link } from "react-router-dom";
-import { addToCart } from "../data/CartStore";
-import { addToFavourites, FavouritesStore } from "../data/FavouritesStore";
-import styles from "./ProductCard.module.css";
-
-const ProductCard = props => {
-
- const { product, category, index, cartRef } = props;
- const favourites = FavouritesStore.useState(s => s.product_ids);
-
- const productCartRef = useRef();
- const productFavouriteRef = useRef();
- const [ isFavourite, setIsFavourite ] = useState(false);
-
- useEffect(() => {
-
- const tempIsFavourite = favourites.find(f => f === `${ category.slug }/${ product.id }`);
- setIsFavourite(tempIsFavourite ? true : false);
- }, [props.product, favourites]);
-
- const addProductToFavourites = (e, categorySlug, productID) => {
-
- e.preventDefault();
- e.stopPropagation();
- addToFavourites(categorySlug, productID);
-
-
- productFavouriteRef.current.style.display = "";
- productFavouriteRef.current.classList.add("animate__fadeOutTopRight");
-
- setTimeout(() => {
- if (productCartRef.current) {
- productFavouriteRef.current.classList.remove("animate__fadeOutTopRight");
- productFavouriteRef.current.style.display = "none";
- }
- }, 500);
- }
-
- const addProductToCart = (e, categorySlug, productID) => {
-
- e.preventDefault();
- e.stopPropagation();
-
- productCartRef.current.style.display = "";
- productCartRef.current.classList.add("animate__fadeOutUp");
-
- setTimeout(() => {
-
- cartRef.current.classList.add("animate__tada");
- addToCart(categorySlug, productID);
-
- setTimeout(() => {
-
- cartRef.current.classList.remove("animate__tada");
- productCartRef.current.style.display = "none";
- }, 500);
- }, 500);
- }
-
- return (
-
-
-
- {/* */}
-
-
- addProductToFavourites(e, category.slug, product.id) } />
-
-
-
-
- { product.name }
-
-
-
-
-
-
- { product.price }
-
- addProductToCart(e, category.slug, product.id) }>
-
-
-
-
-
-
-
- {/* */}
-
- );
-}
-
-export default ProductCard;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/CartStore.js b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/CartStore.js
deleted file mode 100644
index 59eb7ac..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/CartStore.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Store } from "pullstate";
-
-export const CartStore = new Store({
-
- total: 0,
- product_ids: []
-});
-
-export const addToCart = (categorySlug, productID) => {
-
- CartStore.update(s => { s.product_ids = [ ...s.product_ids, `${ categorySlug }/${ parseInt(productID) }` ]; });
-}
-
-export const removeFromCart = productIndex => {
-
- CartStore.update(s => { s.product_ids.splice(productIndex, 1) });
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/FavouritesStore.js b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/FavouritesStore.js
deleted file mode 100644
index 53d6d22..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/FavouritesStore.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Store } from "pullstate";
-
-export const FavouritesStore = new Store({
-
- total: 0,
- product_ids: []
-});
-
-export const addToFavourites = (categorySlug, productID) => {
- FavouritesStore.update(s => {
- if (s.product_ids.find(id => id === `${ categorySlug }/${ parseInt(productID) }`)) {
- s.product_ids = s.product_ids.filter(id => id !== `${ categorySlug }/${ parseInt(productID) }`);
- } else {
- s.product_ids = [ ...s.product_ids, `${ categorySlug }/${ parseInt(productID) }` ];
- }
- });
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/ProductStore.js b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/ProductStore.js
deleted file mode 100644
index 86dbaf4..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/ProductStore.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { Store } from "pullstate";
-
-export const ProductStore = new Store({
-
- products: []
-});
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/fetcher.js b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/fetcher.js
deleted file mode 100644
index 358c2b7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/data/fetcher.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import { ProductStore } from "./ProductStore";
-
-export const fetchData = async () => {
-
- const json = ["new.json", "chicken.json", "veggie.json", "burgers.json", "sides.json", "drinks.json", "kids.json"];
-
- var products = [];
-
- json.forEach( async category => {
-
- products = await fetchProducts(category);
-
- products.forEach(product => {
-
- product.price = `£${ (Math.floor(Math.random() * (10 - 4 + 1))).toFixed(2) }`;
- });
-
- let categoryName = category.replace(".json", "");
- categoryName = categoryName.replaceAll("_", " ");
- categoryName = uppercaseWords(categoryName);
-
- const foodCategory = {
-
- name: categoryName,
- slug: category.replace(".json", ""),
- cover: products[1].image,
- products
- };
-
- ProductStore.update(s => { s.products = [ ...s.products, foodCategory ]; });
- });
-
- return products;
-}
-
-const fetchProducts = async category => {
-
- const response = await fetch(`categories/${ category }`);
- const data = await response.json();
-
- // Set a category id
- await data.forEach((d, i) => {
-
- d.id = i + 1;
- });
-
- return data;
-}
-
-const uppercaseWords = words => {
-
- words = words.toLowerCase()
- .split(' ')
- .map((s) => s.charAt(0).toUpperCase() + s.substring(1))
- .join(' ');
-
- return words;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/index.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/index.tsx
deleted file mode 100644
index 31b2b8b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/index.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-import Tab1 from './AppPages/Tab1';
-import Tab2 from './AppPages/Tab2';
-
-import './style.scss';
-import Home from './pages/Home';
-import FavouriteProducts from './pages/FavouriteProducts';
-import CartProducts from './pages/CartProducts';
-import CategoryProducts from './pages/CategoryProducts';
-import Product from './pages/Product';
-
-function DemoFastFoodApp() {
- return (
-
-
- {/*
-
-
-
-
-
-
- */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoFastFoodApp;
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/module.d.ts b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/module.d.ts
deleted file mode 100644
index 4af7be7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/module.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
-
-declare module '*.module.scss' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CartProducts.module.css b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CartProducts.module.css
deleted file mode 100644
index 851dbe1..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CartProducts.module.css
+++ /dev/null
@@ -1,37 +0,0 @@
-.cartCheckout {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- margin: 1rem;
-}
-
-.cartFooter {
-
- border-top: 2px solid rgb(200, 200, 200);
- background-color: white;
-}
-
-.cartCheckout ion-card-subtitle {
-
- font-size: 1.3rem;
-}
-
-.cartItem ion-avatar {
-
- height: 4rem;
- width: 4rem;
-}
-
-.cartSlider:not(:nth-child(1)) {
-
- border-top: 2px solid rgb(236, 236, 236);
-}
-
-.cartActions {
-
- display: flex;
- flex-direction: column;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CartProducts.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CartProducts.tsx
deleted file mode 100644
index c73a636..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CartProducts.tsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import { IonAvatar, IonBadge, IonButton, IonButtons, IonCardSubtitle, IonCol, IonContent, IonFooter, IonHeader, IonIcon, IonImg, IonItem, IonItemOption, IonItemOptions, IonItemSliding, IonLabel, IonList, IonNote, IonPage, IonRow, IonTitle, IonToolbar } from "@ionic/react";
-import { cart, checkmarkSharp, chevronBackOutline, trashOutline } from "ionicons/icons";
-import { useEffect, useRef, useState } from "react";
-import { CartStore, removeFromCart } from "../data/CartStore";
-import { ProductStore } from "../data/ProductStore";
-
-import styles from "./CartProducts.module.css";
-
-const CartProducts = () => {
-
- const cartRef = useRef();
- const products = ProductStore.useState(s => s.products);
- const shopCart = CartStore.useState(s => s.product_ids);
- const [ cartProducts, setCartProducts ] = useState([]);
- const [ amountLoaded, setAmountLoaded ] = useState(6);
-
- const [ total, setTotal ] = useState(0);
-
- useEffect(() => {
-
- const getCartProducts = () => {
-
- setCartProducts([]);
- setTotal(0);
-
- shopCart.forEach(product => {
-
- var favouriteParts = product.split("/");
- var categorySlug = favouriteParts[0];
- var productID = favouriteParts[1];
-
- const tempCategory = products.filter(p => p.slug === categorySlug)[0];
- const tempProduct = tempCategory.products.filter(p => parseInt(p.id) === parseInt(productID))[0];
-
- const tempCartProduct = {
-
- category: tempCategory,
- product: tempProduct
- };
-
- setTotal(prevTotal => prevTotal + parseInt(tempProduct.price.replace("£", "")));
- setCartProducts(prevSearchResults => [ ...prevSearchResults, tempCartProduct ]);
- });
- }
-
- getCartProducts();
- }, [ shopCart ]);
-
- const fetchMore = async (e) => {
-
- // Increment the amount loaded by 6 for the next iteration
- setAmountLoaded(prevAmount => (prevAmount + 6));
- e.target.complete();
- }
-
- const removeProductFromCart = async (index) => {
-
- removeFromCart(index);
- }
-
- return (
-
-
-
-
-
-
- Categories
-
-
- Cart
-
-
-
- { shopCart.length }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { cartProducts && cartProducts.length } { (cartProducts.length > 1 || cartProducts.length === 0) ? " foods" : " food" } found
-
-
-
-
- { cartProducts && cartProducts.map((product, index) => {
-
- if ((index <= amountLoaded)) {
- return (
-
-
-
-
-
-
-
- { product.category.name }
- { product.product.name }
-
-
-
- { product.product.price }
-
-
-
-
- removeProductFromCart(index) }>
-
-
-
-
- );
- }
- })}
-
-
-
-
-
- £{ total.toFixed(2) }
-
-
- Checkout
-
-
-
-
- );
-}
-
-export default CartProducts;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CategoryProducts.module.css b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CategoryProducts.module.css
deleted file mode 100644
index c0d5021..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CategoryProducts.module.css
+++ /dev/null
@@ -1,69 +0,0 @@
-.categoryPage ion-toolbar {
-
- --border-style: none;
-}
-
-.foodResults {
-
- color: black;
-}
-
-.chickenResults {
-
- color: white;
-}
-
-.burgers {
-
- --ion-background-color: #7dd5ff;
- --ion-toolbar-background: #7dd5ff;
- --ion-text-color: black;
- --ion-item-background: white !important;
-}
-
-.sides {
-
- --ion-background-color: #ffd87d;
- --ion-toolbar-background: #ffd87d;
- --ion-text-color: black !important;
- --ion-item-background: white !important;
-}
-
-.chicken {
-
- --ion-background-color: #6477fe;
- --ion-toolbar-background: #6477fe;
- /* --ion-text-color: white; */
- --ion-item-background: white !important;
- --ion-toolbar-color: white;
-}
-
-.drinks {
-
- --ion-background-color: #fda9f3;
- --ion-toolbar-background: #fda9f3;
- /* --ion-text-color: white; */
- --ion-item-background: white !important;
-}
-
-.veggie {
-
- --ion-background-color: #9fef79;
- --ion-toolbar-background: #9fef79;
- /* --ion-text-color: white !important; */
- --ion-item-background: white !important;
-}
-
-.kids {
-
- --ion-background-color: #dc9afe;
- --ion-toolbar-background: #dc9afe;
- /* --ion-text-color: white; */
- --ion-item-background: white !important;
-}
-
-.search {
-
- --background: rgb(240, 240, 240);
- --color: black;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CategoryProducts.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CategoryProducts.tsx
deleted file mode 100644
index af4bf51..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/CategoryProducts.tsx
+++ /dev/null
@@ -1,107 +0,0 @@
-import { IonBadge, IonButton, IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonInfiniteScroll, IonInfiniteScrollContent, IonNote, IonPage, IonRow, IonSearchbar, IonTitle, IonToolbar } from "@ionic/react";
-import { cart, chevronBackOutline, searchOutline } from "ionicons/icons";
-import { useEffect, useRef, useState } from "react";
-import { useParams } from "react-router"
-import ProductCard from "../components/ProductCard";
-
-import { CartStore } from "../data/CartStore";
-import { ProductStore } from "../data/ProductStore";
-
-import styles from "./CategoryProducts.module.css";
-
-const CategoryProducts = () => {
-
- const params = useParams();
- const cartRef = useRef();
- const products = ProductStore.useState(s => s.products);
- const shopCart = CartStore.useState(s => s.product_ids);
- const [ category, setCategory ] = useState({});
- const [ searchResults, setsearchResults ] = useState([]);
- const [ amountLoaded, setAmountLoaded ] = useState(6);
-
- useEffect(() => {
-
- const categorySlug = params.slug;
- const tempCategory = products.filter(p => p.slug === categorySlug)[0];
- setCategory(tempCategory);
- setsearchResults(tempCategory.products);
- }, [ params.slug ]);
-
- const fetchMore = async (e) => {
-
- // Increment the amount loaded by 6 for the next iteration
- setAmountLoaded(prevAmount => (prevAmount + 6));
- e.target.complete();
- }
-
- const search = async e => {
-
- const searchVal = e.target.value;
-
- if (searchVal !== "") {
-
- const tempResults = category.products.filter(p => p.name.toLowerCase().includes(searchVal.toLowerCase()));
- setsearchResults(tempResults);
- } else {
-
- setsearchResults(category.products);
- }
- }
-
- return (
-
-
-
-
-
-
- Categories
-
-
- { category && category.name }
-
-
-
- { shopCart.length }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { searchResults && searchResults.length } { (searchResults.length > 1 || searchResults.length === 0) ? " foods" : " food" } found
-
-
-
-
- { searchResults && searchResults.map((product, index) => {
-
- if ((index <= amountLoaded) && product.image) {
- return (
-
- );
- }
- })}
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default CategoryProducts;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/FavouriteProducts.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/FavouriteProducts.tsx
deleted file mode 100644
index f6c2a1e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/FavouriteProducts.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import { IonBadge, IonButton, IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonInfiniteScroll, IonInfiniteScrollContent, IonNote, IonPage, IonRow, IonTitle, IonToolbar } from "@ionic/react";
-import { cart, chevronBackOutline } from "ionicons/icons";
-import { useEffect, useRef, useState } from "react";
-import ProductCard from "../components/ProductCard";
-import { CartStore } from "../data/CartStore";
-import { FavouritesStore } from "../data/FavouritesStore";
-import { ProductStore } from "../data/ProductStore";
-
-import styles from "./CategoryProducts.module.css";
-
-const FavouriteProducts = () => {
-
- const cartRef = useRef();
- const products = ProductStore.useState(s => s.products);
- const favourites = FavouritesStore.useState(s => s.product_ids);
- const shopCart = CartStore.useState(s => s.product_ids);
- const [ searchResults, setSearchResults ] = useState([]);
- const [ amountLoaded, setAmountLoaded ] = useState(6);
-
- useEffect(() => {
-
- const getFavourites = () => {
-
- setSearchResults([]);
-
- favourites.forEach(favourite => {
-
- var favouriteParts = favourite.split("/");
- var categorySlug = favouriteParts[0];
- var productID = favouriteParts[1];
-
- const tempCategory = products.filter(p => p.slug === categorySlug)[0];
- const tempProduct = tempCategory.products.filter(p => parseInt(p.id) === parseInt(productID))[0];
-
- const tempFavourite = {
-
- category: tempCategory,
- product: tempProduct
- };
-
- setSearchResults(prevSearchResults => [ ...prevSearchResults, tempFavourite ]);
- });
- }
-
- getFavourites();
- }, [ favourites ]);
-
- const fetchMore = async (e) => {
-
- // Increment the amount loaded by 6 for the next iteration
- setAmountLoaded(prevAmount => (prevAmount + 6));
- e.target.complete();
- }
-
- return (
-
-
-
-
-
-
- Categories
-
-
- Favourites
-
-
-
- { shopCart.length }
-
-
-
-
-
-
-
-
-
-
-
-
-
- { searchResults && searchResults.length } { (searchResults.length > 1 || searchResults.length === 0) ? " favourites" : " favourite" } found
-
-
-
-
- { searchResults && searchResults.map((product, index) => {
-
- if ((index <= amountLoaded)) {
- return (
-
- );
- }
- })}
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default FavouriteProducts;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Home.module.scss
deleted file mode 100644
index 24a4522..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Home.module.scss
+++ /dev/null
@@ -1,137 +0,0 @@
-.homePage ion-toolbar {
-
- --border-style: none;
-}
-
-.logo {
-
- margin-top: 0.25rem;
- color: var(--ion-color-primary);
-}
-
-.categoryCard,
-.categoryCardContent {
-
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- align-items: center;
-}
-
-.categoryCardContent ion-button {
-
- height: 1.5rem;
- font-size: 0.8rem;
-}
-
-.categoryCardContent {
-
- background-color: rgb(238, 238, 238);
-}
-
-.categoryCardContent ion-card-subtitle {
-
- /* color: rgb(78, 78, 78); */
-}
-
-.categoryCard img {
-
- /* border-radius: 5px; */
- padding: 1rem;
-}
-
-.categorySlider {
-
- margin-top: 1rem;
-
- ion-slide {
-
- width: 60%;
- margin-right: 10px;
- margin-left: 10px;
-
- display: flex;
- flex-direction: column;
- justify-content: center;
-
- img {
-
- border-radius: 22px;
- }
- }
-}
-
-.categorySquares {
-
- ion-row {
-
- .categorySquare {
-
- height: 4.5rem;
- text-align: center;
- display: flex;
- justify-content: center;
- align-content: center;
- align-items: center;
- border-radius: 22px;
-
- h4 {
-
- text-align: center;
- }
- }
-
- .categorySquare:nth-child(1) {
-
- background-color: rgb(105, 62, 5);
- color: white;
- }
-
- .categorySquare:nth-child(2) {
-
- background-color: rgb(83, 185, 0);
- color: white;
- }
-
- .categorySquare:nth-child(3) {
-
- background-color: rgb(255, 240, 24);
- }
- }
-}
-
-.orderSection {
-
- padding: 2rem;
- background-color: rgb(206, 41, 0);
- color: white;
- border-radius: 22px;
- margin: 5px;
-
- h4 {
-
- margin-left: 1.5rem;
- }
-}
-
-.offerSection {
-
- padding: 2rem;
- background-color: #ffd146;
- color: black;
- border-radius: 22px;
- margin: 5px;
-
- h4,
- ion-card-subtitle {
-
- margin-left: 1.5rem;
- }
-
- ion-card-subtitle {
-
- color: rgb(255, 255, 255);
- font-weight: 800;
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Home.tsx
deleted file mode 100644
index e4d306a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Home.tsx
+++ /dev/null
@@ -1,140 +0,0 @@
-import { useState } from 'react';
-import {
- IonBadge,
- IonButton,
- IonButtons,
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- // IonSlide,
- // IonSlides,
- IonTitle,
- IonToolbar,
- useIonRouter,
- useIonViewDidEnter,
- useIonViewWillLeave,
-} from '@ionic/react';
-
-import styles from './Home.module.scss';
-import { cart, chevronBackOutline, heart } from 'ionicons/icons';
-
-import { ProductStore } from '../data/ProductStore';
-import { FavouritesStore } from '../data/FavouritesStore';
-import { CartStore } from '../data/CartStore';
-import { Link } from 'react-router-dom';
-import { CategorySlide } from '../components/CategorySlide';
-
-const Home = () => {
- const products = ProductStore.useState((s) => s.products);
- const favourites = FavouritesStore.useState((s) => s.product_ids);
- const shopCart = CartStore.useState((s) => s.product_ids);
-
- useIonViewWillLeave(() => {
- document.querySelector('#slider').stopAutoplay();
- });
-
- useIonViewDidEnter(() => {
- document.querySelector('#slider') && document.querySelector('#slider').startAutoplay();
- document.querySelector('#slider') && document.querySelector('#slider').update();
- });
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Popular
-
- {/*
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
- */}
-
- handleBackClick()}>
-
-
-
-
-
- Ionic Food
-
-
-
- {favourites.length}
-
-
-
-
- {shopCart.length}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kids eat free on any orders over £20.00
- Valid until July →
-
-
-
-
-
-
- Let's eat
-
-
-
- {/*
-
-
-
-
-
-
-
-
- */}
-
-
-
-
-
-
-
-
- Order for a collection or get a local delivery
-
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Product.module.css b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Product.module.css
deleted file mode 100644
index 253b7ed..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Product.module.css
+++ /dev/null
@@ -1,66 +0,0 @@
-.categoryPage ion-toolbar {
-
- --border-style: none;
-}
-
-.categoryCard {
-
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- align-items: center;
- text-align: center;
-}
-
-.productCardActions {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- width: 100%;
- margin-bottom: 1rem;
-}
-
-.productCardAction {
-
- font-size: 1.1rem;
-}
-
-.productCardHeader {
-
- min-height: 17rem;
-}
-
-.productCardHeader p {
-
- font-size: 1.2rem;
- padding: 0;
- margin: 0;
- margin-top: 0.75rem;
-}
-
-.categoryCardContent {
-
- display: flex;
- flex-direction: column;
- text-align: center;
-}
-
-.categoryCardContent ion-button {
-
- font-size: 0.8rem;
-}
-
-.categoryCardContent p {
-
- font-size: 1.5rem;
- padding: 0;
- margin: 0;
-}
-
-.productPrice {
-
- display: flex;
- flex-direction: row;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Product.tsx b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Product.tsx
deleted file mode 100644
index 18eeda6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/pages/Product.tsx
+++ /dev/null
@@ -1,153 +0,0 @@
-import { IonBadge, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonPage, IonRow, IonTitle, IonToolbar } from "@ionic/react";
-import { arrowRedoOutline, cart, cartOutline, chevronBackOutline, heart, heartOutline } from "ionicons/icons";
-import { useEffect, useRef, useState } from "react";
-import { useParams } from "react-router"
-import ProductCard from "../components/ProductCard";
-import { addToCart, CartStore } from "../data/CartStore";
-import { addToFavourites, FavouritesStore } from "../data/FavouritesStore";
-import { ProductStore } from "../data/ProductStore";
-
-import styles from "./Product.module.css";
-
-const Product = () => {
-
- const params = useParams();
- const cartRef = useRef();
- const products = ProductStore.useState(s => s.products);
- const favourites = FavouritesStore.useState(s => s.product_ids);
- const [ isFavourite, setIsFavourite ] = useState(false);
- const shopCart = CartStore.useState(s => s.product_ids);
- const [ product, setProduct ] = useState({});
- const [ category, setCategory ] = useState({});
-
- useEffect(() => {
-
- const categorySlug = params.slug;
- const productID = params.id;
- const tempCategory = products.filter(p => p.slug === categorySlug)[0];
- const tempProduct = tempCategory.products.filter(p => parseInt(p.id) === parseInt(productID))[0];
-
- const tempIsFavourite = favourites.find(f => f === `${ categorySlug }/${ productID }`);
-
- setIsFavourite(tempIsFavourite);
- setCategory(tempCategory);
- setProduct(tempProduct);
- }, [ params.slug, params.id ]);
-
- useEffect(() => {
-
- const tempIsFavourite = favourites.find(f => f === `${ category.slug }/${ product.id }`);
- setIsFavourite(tempIsFavourite ? true : false);
- }, [favourites, product]);
-
- const addProductToFavourites = (e, categorySlug, productID) => {
-
- e.preventDefault();
- addToFavourites(categorySlug, productID);
-
-
- document.getElementById(`placeholder_favourite_product_${ categorySlug }_${ productID }`).style.display = "";
- document.getElementById(`placeholder_favourite_product_${ categorySlug }_${ productID }`).classList.add("animate__fadeOutTopRight");
- }
-
- const addProductToCart = (e, categorySlug, productID) => {
-
- e.preventDefault();
-
- document.getElementById(`placeholder_cart_${ categorySlug }_${ productID }`).style.display = "";
- document.getElementById(`placeholder_cart_${ categorySlug }_${ productID }`).classList.add("animate__fadeOutUp");
-
- setTimeout(() => {
-
- cartRef.current.classList.add("animate__tada");
- addToCart(categorySlug, productID);
-
- setTimeout(() => {
- cartRef.current.classList.remove("animate__tada");
- }, 500);
- }, 500);
- }
-
- return (
-
-
-
-
-
-
- { category.name }
-
-
-
- View Food
-
-
-
- { shopCart.length }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- addProductToFavourites(e, category.slug, product.id) } />
-
-
-
-
- { product.name }
- { product.nutrition }
-
-
-
-
-
-
- { product.price }
-
- addProductToCart(e, category.slug, product.id) }>
- Add to Cart
-
-
-
-
-
-
-
-
-
-
-
- Similar foods...
-
-
-
-
- { (category && category.products) && category.products.map((similar, index) => {
-
- if ((similar.id !== product.id) && product.image && index < 4) {
-
- return (
-
-
- );
- }
- })}
-
-
-
-
- );
-}
-
-export default Product;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/style.scss b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/theme/variables.css b/03_source/mobile.trunk/src/pages/DemoFastFoodApp/theme/variables.css
deleted file mode 100644
index 86f1b29..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFastFoodApp/theme/variables.css
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
-/** Ionic CSS Variables **/
-:root {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
-
- --ion-toolbar-color: black;
- --ion-grid-column-padding: 0rem;
- /* --ion-toolbar-background: var(--ion-color-warning); */
-}
-
-.non-link {
-
- text-decoration: none;
- color: unset;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/NOTES.md b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/NOTES.md
deleted file mode 100644
index 9b48ea3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0130
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/components/ExploreContainer.scss b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/components/ExploreContainer.scss
deleted file mode 100644
index 11ea3ba..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/components/ExploreContainer.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-.floating-tab-bar {
- .container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
- }
-
- .container strong {
- font-size: 20px;
- line-height: 26px;
- }
-
- .container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
- }
-
- .container a {
- text-decoration: none;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/components/ExploreContainer.tsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/components/ExploreContainer.tsx
deleted file mode 100644
index 759cc76..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/components/ExploreContainer.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import './ExploreContainer.scss';
-
-const ExploreContainer = ({ name }) => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/index.tsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/index.tsx
deleted file mode 100644
index 71a067d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/index.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { IonIcon, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cogOutline, homeOutline, listOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-import Tab1 from './pages/Tab1';
-import Tab2 from './pages/Tab2';
-import Tab3 from './pages/Tab3';
-
-import './theme/style.scss';
-import './theme/floating-tab-bar.scss';
-
-function DemoFloatingTabs() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoFloatingTabs;
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab1.css b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab1.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab1.tsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab1.tsx
deleted file mode 100644
index c328244..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab1.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab1.css';
-import React from 'react';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Tab1 = (): React.JSX.Element => {
- const router = useIonRouter();
-
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Floating Tab Bar
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Floating Tab Bar
-
-
-
-
-
- );
-};
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab2.css b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab2.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab2.tsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab2.tsx
deleted file mode 100644
index 048ff80..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab2.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab2.css';
-
-const Tab2 = (): React.JSX.Element => {
- return (
-
-
-
- Floating Tab Bar
-
-
-
-
-
- Floating Tab Bar
-
-
-
-
-
- );
-};
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab3.css b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab3.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab3.tsx b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab3.tsx
deleted file mode 100644
index 54cfd9e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/pages/Tab3.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab3.css';
-
-const Tab3 = (): React.JSX.Element => {
- return (
-
-
-
- Floating Tab Bar
-
-
-
-
-
- Floating Tab Bar
-
-
-
-
-
- );
-};
-
-export default Tab3;
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/theme/floating-tab-bar.scss b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/theme/floating-tab-bar.scss
deleted file mode 100644
index 9533ab9..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/theme/floating-tab-bar.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-.demo-floating-tabs {
- * {
- --ion-background-color: white;
- --ion-tab-bar-color: rgb(92, 123, 207);
- --ion-tab-bar-color-selected: rgb(255, 255, 255);
- }
-
- ion-tab-bar {
- --background: rgb(44, 83, 192);
- box-shadow: 0px 1px 12px rgba(0, 0, 0, 0.4);
- border-radius: 16px !important;
-
- height: 50px;
- width: 90%;
- padding-top: 5px;
- padding-bottom: 5px;
-
- bottom: 20px;
- position: relative;
- margin: 0 auto !important;
- border-top: none;
- }
-
- ion-tab-button {
- border-radius: 16px !important;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/theme/style.scss b/03_source/mobile.trunk/src/pages/DemoFloatingTabs/theme/style.scss
deleted file mode 100644
index d202499..0000000
--- a/03_source/mobile.trunk/src/pages/DemoFloatingTabs/theme/style.scss
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/
-*/
-
-/** Ionic CSS Variables **/
-
-.floating-tab-bar {
- * {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/NOTES.md b/03_source/mobile.trunk/src/pages/DemoInstagramClone/NOTES.md
deleted file mode 100644
index 8afd210..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0131
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/ExploreContainer.css b/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/ExploreContainer.css
deleted file mode 100644
index e99f514..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/ExploreContainer.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.container strong {
- font-size: 20px;
- line-height: 26px;
-}
-
-.container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
-}
-
-.container a {
- text-decoration: none;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/ExploreContainer.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/ExploreContainer.tsx
deleted file mode 100644
index 396477f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/ExploreContainer.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import './ExploreContainer.css';
-
-const ExploreContainer = ({ name }): React.JSX.Element => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Feed.module.scss b/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Feed.module.scss
deleted file mode 100644
index 4854d16..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Feed.module.scss
+++ /dev/null
@@ -1,221 +0,0 @@
-.postsContainer {
-
- margin-top: 1.5rem;
- margin-bottom: 1.5rem;
-}
-
-.postContainer {
-
- display: flex;
- flex-direction: column;
- margin-top: 1rem;
-}
-
-.postProfile {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- padding-right: 0.75rem;
- padding-left: 0.75rem;
-}
-
-.postProfile ion-router-link {
-
- display: flex !important;
- flex-direction: row !important;
-}
-
-.postProfileInfo ion-avatar {
-
- height: 2.2rem;
- width: 2.2rem;
-}
-
-.postProfileInfo p {
-
- margin: 0;
- padding: 0;
- margin-left: 0.5rem;
- font-weight: 500;
- font-size: 0.9rem;
- color: black;
-}
-
-.postProfileInfo {
-
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- align-content: center;
-}
-
-.postImage {
-
- border-top: 1px solid rgb(216, 216, 216);
- margin-top: 0.5rem;
- height: 20rem;
- width: 100%;
-}
-
-.postImageLike {
-
- font-size: 10rem;
- color: rgb(231, 231, 231);
- position: absolute;
- left: 32vmin;
- margin-top: 20vmin;
- display: none;
-}
-
-.postActionsContainer {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- padding-right: 0.75rem;
- padding-left: 0.75rem;
- margin-top: 0.5rem;
-}
-
-.postActions {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
-}
-
-.postActions ion-icon,
-.postBookmark ion-icon {
-
- font-size: 1.5rem;
-}
-
-.postActions ion-icon:not(:first-child) {
-
- padding-left: 0.7rem;
-}
-
-.postLikesContainer {
-
- padding-left: 0.75rem;
- margin-top: 0.5rem;
-}
-
-.postLikesContainer p {
-
- margin: 0;
- padding: 0;
- font-weight: 200 !important;
- font-size: 0.8rem;
-}
-
-.postLikedName {
-
- font-weight: 600;
-}
-
-.postCaption {
-
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- margin-top: 0.3rem;
-}
-
-.postCaption p {
-
- margin: 0;
- padding: 0;
- font-weight: 200 !important;
- font-size: 0.8rem;
-}
-
-.postName {
-
- color: black !important;
- font-weight: 600 !important;
-}
-
-.postName ion-router-link {
-
- color: black;
-}
-
-.postComments {
-
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- margin-top: 0.5rem;
-}
-
-.postComments p {
-
- margin: 0;
- padding: 0;
- color:rgb(175, 175, 175);
- font-size: 0.8rem;
-}
-
-.postAddComment {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-
-.postAddCommentProfile {
-
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- align-items: center;
- margin-top: 0.5rem;
-}
-
-.postAddCommentProfile ion-avatar {
-
- height: 1.9rem;
- width: 1.9rem;
-}
-
-.postAddCommentProfile p {
-
- padding-left: 0.75rem;
- font-size: 0.8rem;
- color: rgb(175, 175, 175);
-}
-
-.postAddCommentActions {
-
-
-}
-
-.postAddCommentActions ion-icon {
-
- padding-left: 0.5rem;
-}
-
-.postTime {
-
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- margin-top: 0rem;
-}
-
-.postTime p {
-
- margin: 0;
- padding: 0;
- color: rgb(175, 175, 175);
- font-size: 0.6rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Feed.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Feed.tsx
deleted file mode 100644
index dbcfeff..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Feed.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-import { IonAvatar, IonIcon, IonRouterLink } from '@ionic/react';
-import {
- addCircleOutline,
- bookmarkOutline,
- chatbubbleOutline,
- ellipsisVertical,
- heart,
- heartOutline,
- paperPlaneOutline,
-} from 'ionicons/icons';
-import { likePost } from '../pages/PostStore';
-import { ProfilesStore } from '../pages/ProfilesStore';
-import { ProfileStore } from '../pages/ProfileStore';
-import styles from './Feed.module.scss';
-
-const Feed = (props): React.JSX.Element => {
- const { posts } = props;
- const profile = ProfileStore.useState((s) => s.profile);
- const profiles = ProfilesStore.useState((s) => s.profiles);
-
- const addLike = (event, postID, liked) => {
- likePost(event, postID, liked);
- };
-
- return (
-
- {posts.map((post, index) => {
- const postProfile = profiles.filter((p) => p.id === post.profile_id)[0];
-
- return (
-
-
-
-
-
-
-
-
-
-
- {postProfile.username}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- addLike(e, post.id, post.liked)}
- />
-
-
-
-
-
-
-
-
-
-
-
- Liked by alanmontgomery and{' '}
- 2 others
-
-
-
-
-
-
-
- {postProfile.username}
-
- {' '}
- {post.caption}
-
-
-
-
-
View all {post.comments.length} comments
-
-
-
-
-
-
-
-
Add a comment...
-
-
-
-
-
-
-
-
-
-
- );
- })}
-
- );
-};
-
-export default Feed;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Stories.module.scss b/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Stories.module.scss
deleted file mode 100644
index aeb99cb..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Stories.module.scss
+++ /dev/null
@@ -1,98 +0,0 @@
-$border: linear-gradient(to bottom, #d82b7e, #f57939);
-
-.stories {
-
- height: fit-content;
- margin-top: -0.7rem;
-}
-
-.storiesContainer {
-
- overflow-x: scroll;
- overflow-y: hidden;
- -webkit-overflow-scrolling: touch;
- display: flex;
- flex-direction: row;
- width: 100%;
-}
-
-.storiesContainer::-webkit-scrollbar {
-
- display: none;
-}
-
-.story,
-.yourStory {
-
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- align-content: center;
- margin: 0 auto;
- width: 4rem !important;
- margin-left: 1rem;
-}
-
-.story:first-child,
-.yourStory:first-child {
-
- margin-left: 0.75rem;
-}
-
-.story p,
-.yourStory p {
-
- text-align: center;
- margin: 0;
- padding: 0;
- margin-top: 0.2rem;
- color: rgb(95, 95, 95);
- font-size: 0.7rem;
- font-weight: 400;
- width: 120%;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- position: relative;
- margin-top: 5rem;
-}
-
-.story img,
-.yourStory img {
-
- height: 3.5rem !important;
- width: 3.5rem !important;
- position: absolute;
- border-radius: 500px;
- background: $border;
- padding: 0.1rem;
-}
-
-.yourStory img {
-
- background:rgb(214, 214, 214);
-}
-
-.storyAdd {
-
- position: absolute;
- color: white;
- background-color: var(--ion-color-primary);
- width: 1rem;
- height: 1rem;
- text-align: center;
- margin: 0 auto;
- display: flex;
- flex-direction: row;
- align-items: center;
- align-content: center;
- justify-content: center;
- border-radius: 500px;
- border: 2px solid white;
-
- bottom: 20px;
- right: 0;
- padding: 0.5rem;
- font-size: 0.9rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Stories.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Stories.tsx
deleted file mode 100644
index c902b30..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/components/Stories.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { IonCol, IonRouterLink, IonRow } from '@ionic/react';
-import styles from './Stories.module.scss';
-
-const Stories = (props): React.JSX.Element => {
- const { profiles } = props;
-
- return (
-
-
- {profiles.map((story, index) => {
- return (
-
-
- {index === 0 && +
}
-
-
- {index === 0 ? 'Your story' : story.username}
-
-
- );
- })}
-
-
- );
-};
-
-export default Stories;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/index.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/index.tsx
deleted file mode 100644
index ab4b29b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/index.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { bagOutline, cloudOutline, home, playCircleOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import './style.scss';
-import Home from './pages/Home';
-import Tab2 from './pages/Tab2';
-import Tab3 from './pages/Tab3';
-
-import './theme/variables.scss';
-import { ProfileStore } from './pages/ProfileStore';
-import Profile from './pages/Profile';
-import MyProfile from './pages/MyProfile';
-
-function DemoInstagramClone() {
- const profile = ProfileStore.useState((s) => s.profile);
-
- return (
-
-
- {/*
-
-
-
-
-
-
-
-
-
- */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
-
-
- Dashboard
-
-
-
- Search
-
- */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoInstagramClone;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Home.module.scss
deleted file mode 100644
index 48a1bdb..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Home.module.scss
+++ /dev/null
@@ -1,198 +0,0 @@
-.postsContainer {
-
- margin-top: 1.5rem;
- margin-bottom: 1.5rem;
-}
-
-.postContainer {
-
- display: flex;
- flex-direction: column;
- margin-top: 1rem;
-}
-
-.postProfile {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- padding-right: 0.75rem;
- padding-left: 0.75rem;
-}
-
-.postProfileInfo ion-avatar {
-
- height: 2.2rem;
- width: 2.2rem;
-}
-
-.postProfileInfo p {
-
- margin: 0;
- padding: 0;
- margin-left: 0.5rem;
- font-weight: 500;
- font-size: 0.9rem;
-}
-
-.postProfileInfo {
-
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- align-content: center;
-}
-
-.postImage {
-
- border-top: 1px solid rgb(216, 216, 216);
- margin-top: 0.5rem;
- height: 20rem;
- width: 100%;
-}
-
-.postActionsContainer {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- padding-right: 0.75rem;
- padding-left: 0.75rem;
- margin-top: 0.5rem;
-}
-
-.postActions {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
-}
-
-.postActions ion-icon,
-.postBookmark ion-icon {
-
- font-size: 1.5rem;
-}
-
-.postActions ion-icon:not(:first-child) {
-
- padding-left: 0.7rem;
-}
-
-.postLikesContainer {
-
- padding-left: 0.75rem;
- margin-top: 0.5rem;
-}
-
-.postLikesContainer p {
-
- margin: 0;
- padding: 0;
- font-weight: 200 !important;
- font-size: 0.8rem;
-}
-
-.postLikedName {
-
- font-weight: 600;
-}
-
-.postCaption {
-
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- margin-top: 0.3rem;
-}
-
-.postCaption p {
-
- margin: 0;
- padding: 0;
- font-weight: 200 !important;
- font-size: 0.8rem;
-}
-
-.postName {
-
- font-weight: 600 !important;
-}
-
-.postComments {
-
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- margin-top: 0.5rem;
-}
-
-.postComments p {
-
- margin: 0;
- padding: 0;
- color:rgb(175, 175, 175);
- font-size: 0.8rem;
-}
-
-.postAddComment {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-
-.postAddCommentProfile {
-
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- align-items: center;
- margin-top: 0.5rem;
-}
-
-.postAddCommentProfile ion-avatar {
-
- height: 1.9rem;
- width: 1.9rem;
-}
-
-.postAddCommentProfile p {
-
- padding-left: 0.75rem;
- font-size: 0.8rem;
- color: rgb(175, 175, 175);
-}
-
-.postAddCommentActions {
-
-
-}
-
-.postAddCommentActions ion-icon {
-
- padding-left: 0.5rem;
-}
-
-.postTime {
-
- padding-left: 0.75rem;
- padding-right: 0.75rem;
- margin-top: 0rem;
-}
-
-.postTime p {
-
- margin: 0;
- padding: 0;
- color: rgb(175, 175, 175);
- font-size: 0.6rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Home.tsx
deleted file mode 100644
index 64f15f8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Home.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import {
- addCircleOutline,
- chevronBackOutline,
- heartOutline,
- paperPlaneOutline,
-} from 'ionicons/icons';
-import Feed from '../components/Feed';
-import Stories from '../components/Stories';
-import { PostStore } from './PostStore';
-import { ProfilesStore } from './ProfilesStore';
-
-const Home = (): React.JSX.Element => {
- const profiles = ProfilesStore.useState((s) => s.profiles);
- const posts = PostStore.useState((s) => s.posts);
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/MyProfile.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/MyProfile.tsx
deleted file mode 100644
index f643088..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/MyProfile.tsx
+++ /dev/null
@@ -1,160 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonToolbar,
- useIonViewWillEnter,
-} from '@ionic/react';
-import {
- addCircleOutline,
- bookmarksOutline,
- chevronDown,
- gridOutline,
- menuOutline,
-} from 'ionicons/icons';
-import { useState } from 'react';
-import styles from './Profile.module.scss';
-
-import { ProfilesStore } from './ProfilesStore';
-import { ProfileStore } from './ProfileStore';
-
-const MyProfile = (): React.JSX.Element => {
- const currentProfile = ProfileStore.useState((s) => s.profile);
- const profiles = ProfilesStore.useState((s) => s.profiles);
- const [profile, setProfile] = useState(false);
-
- useIonViewWillEnter(() => {
- const profileID = currentProfile.id;
- const tempProfile = profiles.filter((p) => parseInt(p.id) === parseInt(profileID))[0];
- setProfile(tempProfile);
- });
-
- return (
-
-
-
-
-
- {profile.username}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {profile.posts && profile.posts.length}
-
- Posts
-
-
-
- {profile.followers}
- Followers
-
-
-
- {profile.following}
- Following
-
-
-
-
-
-
-
-
- {profile.firstname} {profile.surname}
-
- {profile.title}
- {profile.bio}
-
- {profile.link}
-
-
-
-
-
-
-
- Edit Profile
-
-
-
-
-
- Promotions
-
-
-
-
-
- Insights
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {profile.posts &&
- profile.posts.map((post, index) => {
- return (
-
-
-
- );
- })}
-
-
-
- );
-};
-
-export default MyProfile;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/PostStore.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/PostStore.tsx
deleted file mode 100644
index 441b84b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/PostStore.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import { Store } from 'pullstate';
-
-export const PostStore = new Store({
- posts: [
- {
- id: 1,
- image: 'https://ionic.io/img/ioniconf/ioniconf-open-graph.png',
- caption: 'Ioniconf 2021! Register Now!',
- likes: 73,
- liked: false,
- profile_id: 6,
- time: '1 hour ago',
- comments: [
- {
- profile_id: 3,
- comment: 'Test',
- },
- ],
- },
-
- {
- id: 2,
- image:
- 'https://creativetacos.com/wp-content/uploads/2019/08/Free-Chipper-Personal-Finance-App-Kit.jpg',
- caption: 'Ionic React Hub! UI Components, Templates, Clones and more!',
- likes: 73,
- liked: true,
- profile_id: 1,
- time: '1 hour ago',
- comments: [
- {
- profile_id: 3,
- comment: 'Test',
- },
- {
- profile_id: 3,
- comment: 'Test',
- },
- {
- profile_id: 3,
- comment: 'Test',
- },
- ],
- },
-
- {
- id: 3,
- image: 'https://cdn.buttercms.com/AIcP6e8FRx6fgsKa7bvy',
- caption: 'Join the first ever Ionic Event!',
- likes: 73,
- liked: false,
- profile_id: 4,
- time: '2 hours ago',
- comments: [
- {
- profile_id: 1,
- comment: 'Test',
- },
- {
- profile_id: 2,
- comment: 'Test',
- },
- ],
- },
-
- {
- id: 4,
- image: 'https://ionicframework.com/img/meta/ionic-framework-og.png',
- caption: 'Build cross platform mobile apps with the Ionic Framework!',
- likes: 73,
- liked: false,
- profile_id: 2,
- time: '3 hours ago',
- comments: [
- {
- profile_id: 1,
- comment: 'Test',
- },
- {
- profile_id: 2,
- comment: 'Test',
- },
- ],
- },
- ],
-});
-
-export const likePost = (event, postID, liked) => {
- event.target.classList.add('animate__heartBeat');
-
- if (!liked) {
- document.getElementById(`postLike_${postID}`).style.display = 'inline';
- }
-
- setTimeout(() => {
- event.target.classList.remove('animate__heartBeat');
- document.getElementById(`postLike_${postID}`).style.display = 'none';
- }, 850);
-
- PostStore.update((s) => {
- s.posts.find((p, index) =>
- parseInt(p.id) === parseInt(postID) ? (s.posts[index].liked = liked ? false : true) : false
- );
- });
-
- if (liked) {
- PostStore.update((s) => {
- s.posts.find((p, index) =>
- parseInt(p.id) === parseInt(postID)
- ? (s.posts[index].likes = s.posts[index].likes++)
- : false
- );
- });
- } else {
- PostStore.update((s) => {
- s.posts.find((p, index) =>
- parseInt(p.id) === parseInt(postID)
- ? (s.posts[index].likes = s.posts[index].likes--)
- : false
- );
- });
- }
-};
-
-export const addPost = (newPost) => {
- PostStore.update((s) => {
- s.posts = [...s.posts, newPost];
- });
-};
-
-export const addCommentToPost = (newComment, postID) => {
- PostStore.update((s) => {
- s.posts.find((p, index) =>
- parseInt(p.id) === parseInt(postID)
- ? (s.posts[index].comments = [...s.posts[index].comments, newComment])
- : false
- );
- });
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Profile.module.scss b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Profile.module.scss
deleted file mode 100644
index c749657..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Profile.module.scss
+++ /dev/null
@@ -1,100 +0,0 @@
-.username {
-
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- align-items: center;
- font-weight: 600;
-}
-
-.username ion-icon {
-
- font-size: 0.8rem;
- margin-left: 0.3rem;
-}
-
-.label {
-
- color: black;
- font-size: 0.7rem;
- font-weight: 500;
- font-family: Arial, Helvetica, sans-serif !important;
- text-transform: lowercase;
-}
-
-.label::first-letter {
-
- text-transform: uppercase;
-}
-
-.value {
-
- font-size: 1rem;
-}
-
-.profileAvatar {
-
- border-radius: 500px;
- width: 5.5rem;
- height: auto;
-}
-
-.profileInfo {
-
- display: flex;
- flex-direction: column;
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-
-.profileInfo p,
-.profileInfo a {
-
- // padding: 0.1rem 0 0.1rem 0;
- margin: 0;
- font-size: 0.9rem;
-}
-
-.profileUsername {
-
- font-weight: 600;
-}
-
-.profileTitle {
-
- color: rgb(136, 136, 136);
-}
-
-.profileLink {
-
- color: rgb(22, 60, 131);
- text-decoration: none;
-}
-
-.profileActions ion-button {
-
- height: 2.3rem;
- --border-radius: 5px;
- font-weight: 600;
-}
-
-.lightButton {
-
- --color: rgb(65, 65, 65);
- --color-activated: rgb(65, 65, 65);
- --background-hover: white;
- --background-focused: white;
- --background-activated: white;
- --border-color: rgb(231, 231, 231);
- --border-width: 2px;
- font-size: 0.8rem;
-}
-
-.postCol {
-
- --ion-grid-column-padding: 0rem;
- padding: 0.1rem;
- padding-bottom: 0.01rem !important;
- padding-top: 0.01rem !important;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Profile.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Profile.tsx
deleted file mode 100644
index aa07b55..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Profile.tsx
+++ /dev/null
@@ -1,183 +0,0 @@
-import {
- IonBackButton,
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonToolbar,
- useIonViewWillEnter,
-} from '@ionic/react';
-import {
- addCircleOutline,
- arrowBackOutline,
- bookmarksOutline,
- chevronDown,
- ellipsisVertical,
- gridOutline,
- menuOutline,
- personOutline,
-} from 'ionicons/icons';
-import { useState } from 'react';
-import { useParams } from 'react-router';
-import styles from './Profile.module.scss';
-
-import { ProfilesStore } from './ProfilesStore';
-import { ProfileStore } from './ProfileStore';
-
-const Profile = (): React.JSX.Element => {
- const params = useParams();
- const profiles = ProfilesStore.useState((s) => s.profiles);
- const currentProfile = ProfileStore.useState((s) => s.profile);
- const [profile, setProfile] = useState(false);
-
- useIonViewWillEnter(() => {
- const profileID = params.id;
- const tempProfile = profiles.filter((p) => parseInt(p.id) === parseInt(profileID))[0];
- setProfile(tempProfile);
- });
-
- return (
-
-
-
-
- {profile.id === currentProfile.id ? (
-
- {profile.username}
-
-
- ) : (
- <>
-
-
- {profile.username}
-
- >
- )}
-
-
-
- {profile.id === currentProfile.id ? (
- <>
-
-
-
-
-
-
- >
- ) : (
-
-
-
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {profile.posts && profile.posts.length}
-
- Posts
-
-
-
- {profile.followers}
- Followers
-
-
-
- {profile.following}
- Following
-
-
-
-
-
-
-
-
- {profile.firstname} {profile.surname}
-
- {profile.title}
- {profile.bio}
-
- {profile.link}
-
-
-
-
-
-
-
- Follow
-
-
-
-
-
- Message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {profile.posts &&
- profile.posts.map((post, index) => {
- return (
-
-
-
- );
- })}
-
-
-
- );
-};
-
-export default Profile;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/ProfileStore.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/ProfileStore.tsx
deleted file mode 100644
index 42f4d58..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/ProfileStore.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Store } from 'pullstate';
-
-export const ProfileStore = new Store({
- profile: {
- id: 1,
- firstname: 'Alan',
- surname: 'Montgomery',
- avatar: '/assets/alan.jpg',
- followers: 0,
- following: 0,
- },
- posts: [],
- feed: [],
-});
-
-export const addProfilePost = (newPost) => {
- ProfileStore.update((s) => {
- s.posts = [...s.posts, newPost];
- });
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/ProfilesStore.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/ProfilesStore.tsx
deleted file mode 100644
index 63813c5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/ProfilesStore.tsx
+++ /dev/null
@@ -1,172 +0,0 @@
-import { Store } from 'pullstate';
-
-export const ProfilesStore = new Store({
- profiles: [
- {
- id: 1,
- firstname: 'Alan',
- surname: 'Montgomery',
- username: 'alanmontgomery',
- title: 'Mobile Team Lead',
- bio: 'Full Stack 🤓 Mobile Team Lead/Senior React Dev',
- link: 'alanmontgomery.co.uk',
- avatar: '/assets/alan.jpg',
- followers: '1,470',
- following: '230',
- posts: [
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- ],
- },
- {
- id: 2,
- firstname: 'Max',
- surname: 'Lynch',
- username: 'maxlynch',
- title: 'CEO Ionic',
- bio: 'Co-founder/CEO @ionicframework. Created @capacitorjs. Gamer. @ManUtd fan.',
- link: 'maxlynch.com',
- avatar: 'https://pbs.twimg.com/profile_images/1318970727173885953/bln98FNj_400x400.jpg',
- followers: '21.1K',
- following: '1,200',
- posts: [{}, {}, {}, {}, {}, {}, {}, {}, {}],
- },
- {
- id: 3,
- firstname: 'Ben',
- surname: 'Sperry',
- username: 'bensperry',
- title: 'CDO Ionic',
- bio: 'Co-founder / CDO @ionicframework. Creator of @ionicons. Product designer. Pixel junkie. Forest explorer.',
- link: 'bensperry.com',
- avatar: 'https://pbs.twimg.com/profile_images/1328390491126308864/jHHgl5Dm_400x400.jpg',
- followers: '800',
- following: '700',
- posts: [{}, {}, {}, {}, {}, {}, {}, {}, {}],
- },
- {
- id: 4,
- firstname: 'Matt',
- surname: 'Netkow',
- username: 'mattnetkow',
- title: 'Head of Product Marketing',
- bio: 'I help web developers build cross-platform Web Native apps. @IonicFramework: Head of Product Marketing',
- link: 'webnative.tech',
- avatar: 'https://pbs.twimg.com/profile_images/1323383930150621187/GKc0nVzi_400x400.jpg',
- followers: '1,200',
- following: '900',
- posts: [{}, {}, {}, {}, {}, {}, {}, {}, {}],
- },
- {
- id: 5,
- firstname: 'Liam',
- surname: 'DeBeasi',
- username: 'liamdebeasi',
- title: 'Software Engineer',
- bio: 'Software Engineer at @ionicframework',
- link: 'liamdebeasi.com',
- avatar: 'https://pbs.twimg.com/profile_images/1105953692669366273/ZNK4lRAJ_400x400.jpg',
- followers: '871',
- following: '510',
- posts: [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}],
- },
- {
- id: 6,
- firstname: 'Mike',
- surname: 'Hartington',
- username: 'mikehartington',
- title: 'Senior Dev Rel',
- bio: 'Google Developer Expert. Mediocre at best. he/him. npx mhartington',
- link: 'mhartington.io',
- avatar: 'https://pbs.twimg.com/profile_images/1084993841898446849/DJ8XtR6L_400x400.jpg',
- followers: '12.3K',
- following: '2,200',
- posts: [
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- {},
- ],
- },
- {
- id: 7,
- firstname: 'Adam',
- surname: 'Bradley',
- username: 'adambradley',
- title: 'Director of Technology',
- bio: 'Proud dad, husband, veteran & dogs best friend. Typos are my own',
- link: 'ionicframework.com',
- avatar: 'https://pbs.twimg.com/profile_images/909075942320025600/hfYqicUk_400x400.jpg',
- followers: '613',
- following: '571',
- posts: [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}],
- },
- {
- id: 8,
- firstname: 'Brody',
- surname: 'Kidd',
- username: 'brodykidd',
- title: 'Enterprise Account Manager',
- bio: 'Enterprise Account Manager | @ionicframework | @getcapacitor | @stenciljs',
- link: 'ionicframework.com',
- avatar: 'https://pbs.twimg.com/profile_images/477539679567228928/JObyaUW__400x400.jpeg',
- followers: '677',
- following: '219',
- posts: [{}, {}, {}, {}, {}, {}, {}],
- },
- ],
-});
-
-export const addProfilePost = (newPost) => {
- ProfilesStore.update((s) => {
- s.posts = [...s.posts, newPost];
- });
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab1.css b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab1.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab2.css b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab2.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab2.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab2.tsx
deleted file mode 100644
index a46ce0c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab2.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab2.css';
-
-const Tab2 = (): React.JSX.Element => {
- return (
-
-
-
- Tab 2
-
-
-
-
-
- Tab 2
-
-
-
-
-
- );
-};
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab3.css b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab3.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab3.tsx b/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab3.tsx
deleted file mode 100644
index 094a323..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/pages/Tab3.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab3.css';
-
-const Tab3 = (): React.JSX.Element => {
- return (
-
-
-
- Tab 3
-
-
-
-
-
- Tab 3
-
-
-
-
-
- );
-};
-
-export default Tab3;
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/style.scss b/03_source/mobile.trunk/src/pages/DemoInstagramClone/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoInstagramClone/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoInstagramClone/theme/variables.scss
deleted file mode 100644
index 64b2b41..0000000
--- a/03_source/mobile.trunk/src/pages/DemoInstagramClone/theme/variables.scss
+++ /dev/null
@@ -1,126 +0,0 @@
-.demo-instagram-clone {
- /* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
- * {
- font-family: Arial, Helvetica, sans-serif !important;
- scroll-behavior: smooth;
- }
-
- ::-webkit-scrollbar,
- ::-webkit-scrollbar-thumb {
- width: 0px;
- }
-
- /** Ionic CSS Variables **/
- :root {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-
- :root {
- --ion-toolbar-background: white;
- --ion-tab-bar-color: black;
- --ion-tab-bar-color-selected: black;
- --ion-tab-bar-border-color: rgb(235, 235, 235);
- }
-
- ion-tab-button ion-icon {
- font-size: 1.6rem;
- }
-
- ion-tab-button img {
- border-radius: 500px;
- height: 1.8rem;
- border: 1px solid black;
- }
-
- ion-tab-bar {
- height: 3rem;
- }
-
- ion-toolbar {
- --border-style: none;
- --padding-start: 1rem;
- --padding-end: 1rem;
- --padding-top: 0.5rem;
- }
-
- ion-toolbar ion-icon {
- font-weight: 900 !important;
- font-size: 1.6rem;
- }
-
- ion-toolbar ion-button:not(:last-child) {
- padding-right: 0.3rem;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/NOTES.md b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/NOTES.md
deleted file mode 100644
index f7a8f29..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0132
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Board/BoardItem.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Board/BoardItem.tsx
deleted file mode 100644
index 1882c7b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Board/BoardItem.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { IonBadge, IonIcon, IonItem, IonLabel, IonReorder } from '@ionic/react';
-import { arrowBackOutline, arrowForwardOutline } from 'ionicons/icons';
-
-import styles from '../../pages/Kanban.module.scss';
-
-export const BoardItem = ({
- id,
- item,
- index,
- type,
- moveToggled,
- handleMove,
-}): React.JSX.Element => (
-
-
-
-
-
-
{item.name}
-
-
- {type.name}
-
-
- {item.summary}
-
-
-
- {item.labels.map((label, index2) => {
- return (
-
- {label}
-
-
- );
- })}
-
-
-
- {id !== 1 && moveToggled && (
-
handleMove(e, 'Left', id, id - 1, item.id)}
- >
-
-
- )}
-
- {id !== 3 && moveToggled && (
-
handleMove(e, 'Right', id, id + 1, item.id)}
- >
-
-
- )}
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Board/ListItem.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Board/ListItem.tsx
deleted file mode 100644
index 26d895d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Board/ListItem.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { IonIcon, IonItem, IonLabel, IonReorder } from '@ionic/react';
-
-import styles from '../../pages/Kanban.module.scss';
-
-export const ListItem = ({ id, item, index, type, moveToggled, handleMove }): React.JSX.Element => (
-
-
-
-
- {item.name}
- {item.summary}
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Menu.css b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Menu.css
deleted file mode 100644
index 0ca47a2..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Menu.css
+++ /dev/null
@@ -1,113 +0,0 @@
-ion-menu ion-content {
- --background: var(--ion-item-background, var(--ion-background-color, #fff));
-}
-
-ion-menu.md ion-content {
- --padding-start: 8px;
- --padding-end: 8px;
- --padding-top: 20px;
- --padding-bottom: 20px;
-}
-
-ion-menu.md ion-list {
- padding: 20px 0;
-}
-
-ion-menu.md ion-note {
- margin-bottom: 30px;
-}
-
-ion-menu.md ion-list-header, ion-menu.md ion-note {
- padding-left: 10px;
-}
-
-ion-menu.md ion-list#inbox-list {
- border-bottom: 1px solid var(--ion-color-step-150, #d7d8da);
-}
-
-ion-menu.md ion-list#inbox-list ion-list-header {
- font-size: 22px;
- font-weight: 600;
- min-height: 20px;
-}
-
-ion-menu.md ion-list#labels-list ion-list-header {
- font-size: 16px;
- margin-bottom: 18px;
- color: #757575;
- min-height: 26px;
-}
-
-ion-menu.md ion-item {
- --padding-start: 10px;
- --padding-end: 10px;
- border-radius: 4px;
-}
-
-ion-menu.md ion-item.selected {
- --background: rgba(var(--ion-color-primary-rgb), 0.14);
-}
-
-ion-menu.md ion-item.selected ion-icon {
- color: var(--ion-color-primary);
-}
-
-ion-menu.md ion-item ion-icon {
- color: #616e7e;
-}
-
-ion-menu.md ion-item ion-label {
- font-weight: 500;
-}
-
-ion-menu.ios ion-content {
- --padding-bottom: 20px;
-}
-
-ion-menu.ios ion-list {
- padding: 20px 0 0 0;
-}
-
-ion-menu.ios ion-note {
- line-height: 24px;
- margin-bottom: 20px;
-}
-
-ion-menu.ios ion-item {
- --padding-start: 16px;
- --padding-end: 16px;
- --min-height: 50px;
-}
-
-ion-menu.ios ion-item ion-icon {
- font-size: 24px;
- color: #73849a;
-}
-
-ion-menu.ios ion-item .selected ion-icon {
- color: var(--ion-color-primary);
-}
-
-ion-menu.ios ion-list#labels-list ion-list-header {
- margin-bottom: 8px;
-}
-
-ion-menu.ios ion-list-header,
-ion-menu.ios ion-note {
- padding-left: 16px;
- padding-right: 16px;
-}
-
-ion-menu.ios ion-note {
- margin-bottom: 8px;
-}
-
-ion-note {
- display: inline-block;
- font-size: 16px;
- color: var(--ion-color-medium-shade);
-}
-
-ion-item.selected {
- --color: var(--ion-color-primary);
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Menu.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Menu.tsx
deleted file mode 100644
index 7400d03..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/components/Menu.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-import {
- IonContent,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonListHeader,
- IonMenu,
- IonMenuToggle,
- IonNote,
-} from '@ionic/react';
-
-import { useLocation } from 'react-router-dom';
-import {
- addOutline,
- addSharp,
- barChartOutline,
- barChartSharp,
- bookmarkOutline,
- listOutline,
- listSharp,
-} from 'ionicons/icons';
-import './Menu.css';
-
-import { SettingsStore } from '../store';
-import { handleViewChange } from '../store/SettingsStore';
-
-const appPages = [
- {
- title: 'Add Item',
- url: '/page/add/0',
- iosIcon: addOutline,
- mdIcon: addSharp,
- },
-];
-
-const actions = [
- {
- title: 'Board View',
- slug: 'Board',
- url: false,
- onClick: () => handleViewChange('Board'),
- iosIcon: barChartOutline,
- mdIcon: barChartSharp,
- },
- {
- title: 'List View',
- slug: 'List',
- url: false,
- onClick: () => handleViewChange('List'),
- iosIcon: listOutline,
- mdIcon: listSharp,
- },
-];
-
-const Menu = (): React.JSX.Element => {
- const location = useLocation();
- const view = SettingsStore.useState((s) => s.view);
-
- return (
-
-
-
- Welcome back
- Ionic Kanban Board
- {appPages.map((appPage, index) => {
- return (
-
-
-
- {appPage.title}
-
-
- );
- })}
-
-
-
- Toggle View
- View items in list or board view
-
- {actions.map((action, index) => {
- return (
-
-
-
- {action.title}
-
-
- );
- })}
-
-
-
- );
-};
-
-export default Menu;
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/index.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/index.tsx
deleted file mode 100644
index b69b165..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/index.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import {
- IonIcon,
- IonLabel,
- IonRouterOutlet,
- IonSplitPane,
- IonTabBar,
- IonTabButton,
- IonTabs,
-} from '@ionic/react';
-
-import { cloudOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-// import './style.scss';
-import './theme/variables.scss';
-import Menu from './components/Menu';
-import Add from './pages/Add';
-import Kanban from './pages/Kanban';
-
-function DemoKanbanBoard() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoKanbanBoard;
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Add.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Add.tsx
deleted file mode 100644
index fd2b994..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Add.tsx
+++ /dev/null
@@ -1,152 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonInput,
- IonItem,
- IonLabel,
- IonPage,
- IonSelect,
- IonSelectOption,
- IonTextarea,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { checkmarkSharp, chevronBackSharp } from 'ionicons/icons';
-import { useState } from 'react';
-import { useParams } from 'react-router';
-import { SettingsStore } from '../store';
-import { addItem } from '../store/SettingsStore';
-
-const Add = (): React.JSX.Element => {
- const categories = SettingsStore.useState((s) => s.categories);
- const types = SettingsStore.useState((s) => s.types);
- const router = useIonRouter();
- const { category_id = false } = useParams();
-
- const useFormInput = (initialValue = '') => {
- const [value, setValue] = useState(initialValue);
-
- const onChange = (e) => {
- setValue(e.target.value);
- };
-
- return {
- value,
- onIonChange: onChange,
- };
- };
-
- const formFields = [
- {
- fields: {
- type: 'text',
- id: 'name',
- placeholder: 'Enter a name...',
- },
- state: useFormInput(),
- label: 'Name',
- options: false,
- },
- {
- fields: {
- type: 'select',
- id: 'category_id',
- placeholder: 'Select a category',
- },
- state: useFormInput(parseInt(category_id)),
- label: 'Category',
- options: categories,
- },
- {
- fields: {
- type: 'select',
- id: 'type_id',
- placeholder: 'Select a type...',
- },
- state: useFormInput(),
- label: 'Type',
- options: types,
- },
- {
- fields: {
- type: 'textarea',
- id: 'summary',
- placeholder: 'Enter a summary...',
- },
- state: useFormInput(),
- label: 'Summary',
- options: false,
- },
- ];
-
- const add = () => {
- const data = [];
-
- formFields.forEach((field) => {
- data[field.fields.id] = field.state.value;
- });
-
- addItem(data);
- router.goBack();
- };
-
- return (
-
-
-
-
- router.goBack()}>
-
-
-
- Add Item
-
-
-
-
-
-
- Add Item
-
-
-
- {formFields.map((formField, index) => {
- const { state, fields, label, options } = formField;
-
- return (
-
- {label}
-
- {fields.type === 'text' && }
- {fields.type === 'textarea' && }
- {fields.type === 'select' && (
-
- {options.map((option) => {
- const optionName = option.name.charAt(0).toUpperCase() + option.name.slice(1);
-
- return (
-
- {optionName}
-
- );
- })}
-
- )}
-
- );
- })}
-
-
-
- Save
-
-
-
- );
-};
-
-export default Add;
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Kanban.module.scss b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Kanban.module.scss
deleted file mode 100644
index b444de1..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Kanban.module.scss
+++ /dev/null
@@ -1,180 +0,0 @@
-.categorySlide {
- display: flex;
- flex-direction: column;
-}
-
-@media only screen and (min-width: 768px) {
- .categorySlide {
- width: 33%;
- }
-
- .categoryName {
- margin-top: 1rem;
- width: 92.6% !important;
- }
-}
-
-.categoryName {
- background-color: #3273ec;
- color: white;
- width: 100%;
- padding: 1rem;
- font-size: 1.3rem;
- margin-bottom: -0.75rem;
-}
-
-.categoryNameList {
- background-color: #3273ec;
- color: white;
- width: 100%;
- padding: 1rem;
- font-size: 1.3rem;
-}
-
-.kanbanItemList {
- margin: 0rem !important;
- border-radius: 0 !important;
- border: none !important;
- border-bottom: 1px solid rgb(221, 221, 221) !important;
-}
-
-.kanbanItem,
-.kanbanItemList {
- padding: 1.5rem;
- border: 1px solid rgb(221, 221, 221);
- border-radius: 5px;
- background-color: white;
- --background: white;
-
- .itemTitle {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-content: center;
- align-items: center;
- margin-bottom: 1rem;
-
- .itemType {
- font-size: 0.75rem;
-
- ion-icon {
- font-size: 0.75rem;
- padding: 0 !important;
- }
- }
-
- h3 {
- color: black;
- font-weight: 450;
- }
- }
-
- .itemTitleList {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-content: center;
- align-items: center;
- margin-bottom: 0rem;
-
- ion-card-subtitle {
- color: black;
- margin-top: 0.25rem;
- font-size: 0.6rem;
- }
- }
-
- .itemList {
- display: flex !important;
- flex-direction: row !important;
- align-content: center;
- justify-content: space-between;
- align-items: center;
-
- ion-icon {
- font-size: 2rem;
- padding-left: 0.5rem;
- }
- }
-
- .itemType,
- .itemTypeList {
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- justify-content: space-between;
- width: fit-content;
- }
-
- .itemTypeList {
- margin-right: 0.3rem;
- }
-
- .itemLabels {
- margin-top: 1rem;
- }
-
- .itemLabelsList {
- margin-top: 0.2rem;
-
- ion-badge {
- font-size: 0.5rem;
- }
- }
-
- .itemActions {
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- align-items: center;
- margin-top: 1rem;
-
- div {
- width: 5rem;
- background-color: rgb(238, 238, 238);
- color: rgb(204, 204, 204);
- margin-left: 0.2rem;
- margin-right: 0.2rem;
-
- padding: 0.5rem;
- border-radius: 5px;
- }
-
- .moveRight {
- text-align: right;
- }
-
- .moveLeft {
- text-align: left;
- }
- }
-}
-
-.itemAdd {
- display: flex;
- flex-direction: row;
- align-content: center;
- justify-content: center;
- align-items: center;
- padding: 1rem;
- width: 91.6% !important;
- background-color: rgb(241, 241, 241);
- color: rgb(179, 179, 179);
- border: 2px dashed rgb(216, 216, 216);
- border-radius: 5px;
- font-size: 1.5rem;
- margin-bottom: 2rem;
- margin-top: 1rem;
-}
-
-.kanbanItem {
- margin: 0 !important;
- margin-top: 1rem !important;
- --padding: 0 !important;
-}
-
-.listReorder {
- padding: 0 !important;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Kanban.tsx b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Kanban.tsx
deleted file mode 100644
index 0d56362..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/pages/Kanban.tsx
+++ /dev/null
@@ -1,158 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonContent,
- IonHeader,
- IonIcon,
- IonMenuButton,
- IonPage,
- IonReorder,
- IonReorderGroup,
- // TODO: fix missing ionslide in new ionic
- // IonSlide,
- // IonSlides,
- IonTitle,
- IonToolbar,
- useIonViewDidEnter,
-} from '@ionic/react';
-import { addOutline, copyOutline, createOutline } from 'ionicons/icons';
-import React, { useEffect, useState } from 'react';
-import { Link } from 'react-router-dom';
-import { BoardItem } from '../components/Board/BoardItem';
-import { ListItem } from '../components/Board/ListItem';
-import { SettingsStore } from '../store';
-
-import styles from './Kanban.module.scss';
-
-const Kanban = (): React.JSX.Element => {
- return <>// TODO: fix missing ionslide in new ionic>;
- const view = SettingsStore.useState((s) => s.view);
- const categories = SettingsStore.useState((s) => s.categories);
- const types = SettingsStore.useState((s) => s.types);
- const items = SettingsStore.useState((s) => s.items);
-
- const [moveToggled, setMoveToggled] = useState(view === 'Board' ? true : false);
- const [categoryItems, setCategoryItems] = useState([]);
-
- useEffect(() => {
- setCategoryItems(items);
- }, [items]);
-
- const handleReorder = (e) => {
- // In a real world, production app
- // In here we could re-arrange and sort array of items
- // To be in sync with our state or simply save the new main array
-
- e.detail.complete();
- };
-
- const handleMove = (e, direction, fromCategoryID, toCategoryID, itemID) => {
- const fromIndex = categoryItems.findIndex((c) => c.id === fromCategoryID);
- const toIndex = categoryItems.findIndex((c) => c.id === toCategoryID);
-
- const tempCategoryItems = [...categoryItems];
- const itemIndex = categoryItems[fromIndex].items.findIndex((i) => i.id === itemID);
- const itemElement = document.querySelector(`#item_${fromCategoryID}_${itemIndex}`);
-
- const tempItem = { ...categoryItems[fromIndex].items[itemIndex] };
- tempCategoryItems[toIndex].items.push(tempItem);
-
- itemElement.classList.add(`animate__slideOut${direction}`);
-
- setTimeout(() => {
- itemElement.classList.remove(`animate__slideOut${direction}`);
- tempCategoryItems[fromIndex].items.splice(itemIndex, 1);
- setCategoryItems(tempCategoryItems);
- }, 700);
- };
-
- useIonViewDidEnter(() => {
- document.querySelector('#slider') && document.querySelector('#slider').update();
- });
-
- return (
-
-
-
-
-
-
- {view} View
- {view === 'Board' && (
-
- setMoveToggled(!moveToggled)}>
-
-
-
- )}
-
-
-
-
-
-
- {view} View
-
-
-
-
- {categoryItems.map(({ items, id }, index) => {
- const name = categories.filter((c) => c.id === id)[0].name;
-
- return (
-
-
- {name} ({items.length})
-
-
-
- {items.map((item, index) => {
- const type = types.filter((t) => t.id === item.typeID)[0];
-
- return (
-
- {view === 'Board' && (
-
- )}
- {view === 'List' && (
-
- )}
-
- );
- })}
-
-
-
-
-
-
- );
- })}
-
-
-
- );
-};
-
-export default Kanban;
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/store/SettingsStore.ts b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/store/SettingsStore.ts
deleted file mode 100644
index 93cd3a6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/store/SettingsStore.ts
+++ /dev/null
@@ -1,164 +0,0 @@
-import { arrowUpOutline, bugOutline, flashOutline, keyOutline } from 'ionicons/icons';
-import { Store } from 'pullstate';
-
-const SettingsStore = new Store({
- view: 'Board',
- filter: '',
- types: [
- {
- id: 1,
- name: 'bug',
- color: '#ec1111',
- icon: bugOutline,
- },
- {
- id: 2,
- name: 'improvement',
- color: '#0bbe28',
- icon: arrowUpOutline,
- },
- {
- id: 3,
- name: 'enhancement',
- color: '#680bbe',
- icon: flashOutline,
- },
- {
- id: 4,
- name: 'task',
- color: '#0b7ebe',
- icon: keyOutline,
- },
- ],
- categories: [
- { id: 1, name: 'To Do' },
- { id: 2, name: 'In Progress' },
- { id: 3, name: 'Done' },
- ],
- items: [
- {
- id: 1,
- items: [
- {
- id: 1,
- name: 'Adding projects',
- summary: 'Give users the option to add projects and add items to projects',
- labels: ['CSS', 'Design', 'Framework'],
- typeID: 3,
- },
- {
- id: 2,
- name: 'Add filter by labels',
- summary:
- 'Add the option to filter items by labels on the board to give the user more control',
- labels: ['Filtering', 'Labels'],
- typeID: 2,
- },
- {
- id: 3,
- name: "Can't move items after add",
- summary:
- 'When the user adds a new item, for some reason, it breaks the ability to move items across categories',
- labels: ['Move', 'Array', 'Object', 'Broke'],
- typeID: 1,
- },
- {
- id: 4,
- name: 'Hook a database up',
- summary: 'Link app to a database like MongoDB or Firebase for sync and save',
- labels: ['Database', 'MongoDB', 'Firebase'],
- typeID: 4,
- },
- {
- id: 5,
- name: 'Add a remove option',
- summary: 'Allow the user to remove items from list and board views',
- labels: ['Remove', 'Delete', 'Item'],
- typeID: 1,
- },
- ],
- },
- {
- id: 2,
- items: [
- {
- id: 1,
- name: 'Add a list view',
- summary: 'Allow users to view items on boards in a list view',
- labels: ['Kanban', 'List', 'View'],
- typeID: 3,
- },
- {
- id: 2,
- name: 'Write some fake tickets',
- summary: 'Fill out this app with some fake, real looking tickets',
- labels: ['Tickets', 'Todo', 'Items'],
- typeID: 4,
- },
- ],
- },
- {
- id: 3,
- items: [
- {
- id: 1,
- name: 'Fix bug with IonSlide',
- summary: 'When navigating to the add screen, and coming back, the slides are stuck',
- labels: ['Ionic', 'Slides', 'Stuck'],
- typeID: 1,
- },
- {
- id: 2,
- name: 'Add slick features',
- summary:
- 'Add the ability to move cards or items from one category to another, still using IonSlides and IonReorder',
- labels: ['Ionic', 'IonSlides', 'IonReorder'],
- typeID: 2,
- },
- {
- id: 3,
- name: 'Drag and drop items',
- summary:
- 'Give the user the ability to drag and drop items while still maintaining click functionality and propagation within the item itself',
- labels: ['DND', 'Drag', 'Drop', 'Main feature'],
- typeID: 4,
- },
- ],
- },
- ],
-});
-
-export default SettingsStore;
-
-export const addItem = (item) => {
- console.log(item);
-
- SettingsStore.update((s) => {
- const tempItems = [...s.items];
- const itemCategoryIndex = tempItems.findIndex(
- (t) => parseInt(t.id) === parseInt(item.category_id)
- );
-
- console.log({ itemCategoryIndex });
-
- tempItems[itemCategoryIndex].items.push({
- name: item.name,
- summary: item.summary,
- typeID: item.type_id,
- labels: ['test', 'test1', 'test2', 'test3'],
- });
-
- s.items = tempItems;
- });
-};
-
-// export const removeFromCart = coffeeIndex => {
-
-// SettingsStore.update(s => { s.coffee_ids.splice(coffeeIndex, 1) });
-// }
-
-export const handleViewChange = (view) => {
- SettingsStore.update((s) => {
- s.view = view;
- });
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/store/index.ts b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/store/index.ts
deleted file mode 100644
index 358de05..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/store/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-
-export { default as SettingsStore } from "./SettingsStore";
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/style.scss b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoKanbanBoard/theme/variables.scss
deleted file mode 100644
index 11fac0c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoKanbanBoard/theme/variables.scss
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/
-*/
-
-.demo-kanban-board {
- /** Ionic CSS Variables **/
- * {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-
- :root {
- --ion-background-color: rgb(241, 241, 241);
- }
-
- ion-badge {
- border-radius: 5px;
- }
-
- ion-item.input {
- --background: #ffffff !important;
- --color: rgb(53, 53, 53) !important;
- margin: 1rem;
- border-radius: 5px;
- }
-
- ion-reorder-group {
- padding: 1rem;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoList/NOTES.md b/03_source/mobile.trunk/src/pages/DemoList/NOTES.md
deleted file mode 100644
index 9b91446..0000000
--- a/03_source/mobile.trunk/src/pages/DemoList/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0133
diff --git a/03_source/mobile.trunk/src/pages/DemoList/TestContent.tsx b/03_source/mobile.trunk/src/pages/DemoList/TestContent.tsx
deleted file mode 100644
index 39fd43b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoList/TestContent.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { format } from 'date-fns';
-
-export const TestContent = {
- eventDate: format(new Date(), 'yyyy-MM-dd'),
- title: 'helloworld',
- price: 123,
- currency: 'HKD',
- duration_m: 480,
- ageBottom: 12,
- ageTop: 48,
- location: 'Hong Kong Island',
- avatar: 'https://www.ionics.io/img/ionic-logo.png',
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoList/index.tsx b/03_source/mobile.trunk/src/pages/DemoList/index.tsx
deleted file mode 100644
index a0444f6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoList/index.tsx
+++ /dev/null
@@ -1,861 +0,0 @@
-// REQ0054/user-setting
-//
-// PURPOSE:
-// - Provides functionality view user profile
-//
-// RULES:
-// - T.B.A.
-//
-import React, { useEffect, useRef, useState } from 'react';
-import {
- IonHeader,
- IonToolbar,
- IonTitle,
- IonContent,
- IonPage,
- IonButtons,
- IonMenuButton,
- IonGrid,
- IonRow,
- IonCol,
- useIonRouter,
- IonButton,
- IonIcon,
- IonPopover,
- IonAvatar,
- IonImg,
- IonItem,
- IonLabel,
- IonList,
- IonModal,
- IonSearchbar,
- useIonModal,
- IonInput,
- IonNote,
- IonText,
-} from '@ionic/react';
-import SpeakerItem from '../../components/SpeakerItem';
-import { Speaker } from '../../models/Speaker';
-import { Session } from '../../models/Schedule';
-import { connect } from '../../data/connect';
-import * as selectors from '../../data/selectors';
-import '../SpeakerList.scss';
-import { getEvents } from '../../api/getEvents';
-import { format } from 'date-fns';
-import { Event } from './types';
-import {
- alertCircleOutline,
- alertOutline,
- apps,
- appsOutline,
- book,
- bookOutline,
- brushOutline,
- calculatorOutline,
- car,
- cart,
- cartOutline,
- cashOutline,
- chatbubbleEllipses,
- chatbubbleEllipsesOutline,
- chatbubbleOutline,
- chevronBackOutline,
- chevronForward,
- chevronForwardOutline,
- cloudOutline,
- codeSlashOutline,
- codeWorkingOutline,
- colorPaletteOutline,
- createOutline,
- document,
- documentTextOutline,
- filmOutline,
- flashOutline,
- gift,
- giftOutline,
- globeSharp,
- gridOutline,
- heart,
- imageOutline,
- imagesOutline,
- keyOutline,
- languageOutline,
- layers,
- layersOutline,
- list,
- listCircle,
- listOutline,
- logInOutline,
- logoFacebook,
- mapOutline,
- menuOutline,
- paperPlaneOutline,
- people,
- person,
- personCircleOutline,
- personOutline,
- pizzaOutline,
- qrCodeOutline,
- refreshOutline,
- restaurant,
- restaurantOutline,
- settingsOutline,
- shareSocialOutline,
- statsChart,
- sunny,
- swapHorizontal,
- trashOutline,
- walkOutline,
-} from 'ionicons/icons';
-import AboutPopover from '../../components/AboutPopover';
-import { OverlayEventDetail } from '@ionic/react/dist/types/components/react-component-lib/interfaces';
-import PATHS from '../../PATHS';
-import { logoutUser, setAccessToken, setIsLoggedIn } from '../../data/user/user.actions';
-
-interface OwnProps {}
-
-interface StateProps {
- speakers: Speaker[];
- speakerSessions: { [key: string]: Session[] };
-}
-
-interface DispatchProps {
- logoutUser: typeof logoutUser;
- setAccessToken: typeof setAccessToken;
- setIsLoggedIn: typeof setIsLoggedIn;
-}
-
-interface SettingsProps extends OwnProps, StateProps, DispatchProps {}
-
-const DemoList: React.FC = ({
- speakers,
- speakerSessions,
- logoutUser,
- setAccessToken,
- setIsLoggedIn,
-}) => {
- const [events, setEvents] = useState([]);
- const [showPopover, setShowPopover] = useState(false);
- const [popoverEvent, setPopoverEvent] = useState();
- const modal = useRef(null);
-
- const router = useIonRouter();
-
- useEffect(() => {
- getEvents().then(({ data }) => {
- console.log({ data });
- setEvents(data);
- });
- }, []);
-
- function handleBackButtonClick() {
- router.goBack();
- }
-
- function handleLanguageClick() {
- router.push(PATHS.CHANGE_LANGUAGE);
- }
-
- function handleNotImplementedClick() {
- router.push(PATHS.NOT_IMPLEMENTED);
- }
-
- function handleDemoPageClick() {
- router.push(PATHS.DEMO_PAGE);
- }
-
- function handleServiceAgreementClick() {
- router.push(PATHS.SERVICE_AGREEMENT);
- }
-
- function handlePrivacyAgreementClick() {
- router.push(PATHS.PRIVACY_AGREEMENT);
- }
-
- const [showLogoutConfirmModal, setShowLogoutConfirmModal] = useState(false);
- function handleConfirmLogoutClick() {
- setShowLogoutConfirmModal(true);
- }
-
- function handleLogoutClick() {
- setAccessToken();
- setIsLoggedIn(false);
-
- router.push('/tabs', 'forward', 'replace');
-
- setShowLogoutConfirmModal(false);
- }
- function handleLogoutCancel() {
- setShowLogoutConfirmModal(false);
- }
-
- function handleDemoReactShopClick() {
- router.push(PATHS.DEMO_REACT_SHOP);
- }
-
- return (
-
-
-
-
- {/* */}
- handleBackButtonClick()}>
-
-
-
-
-
-
- Setting
-
-
-
-
-
-
-
- Setting
-
-
-
-
- router.push(PATHS.DEMO_WEATHER_APP_UI)}>
-
- Weather App
-
-
-
-
-
- router.push(PATHS.DEMO_2FA_EXAMPLE, 'forward')}>
-
-
- Demo 2FA Example{' '}
- layout only, not functioning
-
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_THEME_SWITCHER, 'forward')}
- >
-
- Demo React Theme Switcher
-
-
-
-
-
- router.push(PATHS.DEMO_SKELETON_TEXT, 'forward')}>
-
- Demo Skeleton Text
-
-
-
-
-
- router.push(PATHS.DEMO_STICKY_BOTTOM_SHEET_EXAMPLE, 'forward')}
- >
-
- Demo Sticky Bottom Sheet Example
-
-
-
-
-
- router.push(PATHS.DEMO_STORAGE_EXAMPLE, 'forward')}>
-
-
- Demo Storage Example{' '}
- (need fix, message cannot display)
-
-
-
-
-
-
- router.push(PATHS.DEMO_SWIPERJS_TUTORIAL, 'forward')}
- >
-
- Demo SwiperJS Tutorial
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_DRAWING_CANVAS, 'forward')}
- >
-
- Demo React Drawing Canvas
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_HOOK_FORM_EXAMPLE, 'forward')}
- >
-
- Demo React Hook Form Example
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_ITEM_LIST, 'forward')}>
-
- Demo React Item List
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_LIFECYCLES, 'forward')}
- >
-
- Demo React Lifecycles
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_LOGIN, 'forward')}>
-
-
- Demo React Login (missing back button)
-
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_MARVEL_APP, 'forward')}
- >
-
- Demo React Marvel App
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_MOVIE_APP_WITH_ALGOLIA, 'forward')}
- >
-
- Demo React Movie App with Algolia
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_NOTES, 'forward')}>
-
-
- Demo React Notes{' '}
- TODO: need update IonSlide
-
-
-
-
-
-
- router.push(PATHS.DEMO_FACEBOOK_CLONE, 'forward')}>
-
- Demo Facebook Clone
-
-
-
-
-
- router.push(PATHS.DEMO_FAST_FOOD_APP, 'forward')}>
-
-
- Demo Fast Food App ion-slide outstanding
-
-
-
-
-
-
- router.push(PATHS.DEMO_FLOATING_TABS, 'forward')}>
-
- Demo Floating Tabs
-
-
-
-
-
- router.push(PATHS.DEMO_INSTAGRAM_CLONE, 'forward')}>
-
- Demo Instagram Clone
-
-
-
-
-
- router.push(PATHS.DEMO_KANBAN_BOARD, 'forward')}>
-
-
- Demo Kanban Board{' '}
- // TODO: fix missing ionslide in new ionic
-
-
-
-
-
-
- router.push(PATHS.DEMO_ORDERING_APP, 'forward')}>
-
-
- Demo Ordering App outstanding css
-
-
-
-
-
-
- router.push(PATHS.DEMO_PROFILE_EXAMPLE, 'forward')}>
-
- Demo Profile Example
-
-
-
-
-
- router.push(PATHS.DEMO_PULLSTATE_TUTORIAL, 'forward')}
- >
-
- Demo Pullstate Tutorial
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_ADD_TO_CART, 'forward')}
- >
-
- Demo React Add to Cart
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_CALCULATOR, 'forward')}
- >
-
-
- Demo React Calculator css need fix
-
-
-
-
-
-
- router.push(PATHS.DEMO_ACCORDION_TUTORIAL, 'forward')}
- >
-
- Demo Accordion Tutorial
-
-
-
-
-
- router.push(PATHS.DEMO_BANKING_UI, 'forward')}>
-
-
- Demo Banking UI{' '}
- (in the middle, style outstanding)
-
-
-
-
-
-
- router.push(PATHS.DEMO_CAPACITOR_GOOGLE_MAPS_TUTORIAL, 'forward')}
- >
-
-
- Demo Capacitor Google Maps Tutorial{' '}
- need a google map api key
-
-
-
-
-
-
- router.push(PATHS.DEMO_COLOR_TUTORIAL, 'forward')}>
-
- Demo Color Tutorial
-
-
-
-
-
- router.push(PATHS.DEMO_ECOMMERCE_EXAMPLE, 'forward')}
- >
-
-
- Demo Ecommerce Example{' '}
- (fetch data not available at remote site)
-
-
-
-
-
- {/*
-
- router.push(paths.DEMO_REACT_WHATSAPP_CLONE, 'forward')}>
-
-
- Demo React WhatsApp Clone (need to resolve path problem)
-
-
-
-
- */}
-
-
- router.push(PATHS.DEMO_REACT_POLL_APP, 'forward')}>
-
-
- Demo React Poll App{' '}
- (css temporary broken, ignored)
-
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_SWITCH_TABS, 'forward')}
- >
-
-
- Demo React Switch Tabs{' '}
- (hardcoded back button)
-
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_OVERLAY_HOOKS, 'forward')}
- >
-
- Demo React Overlay Hooks
-
-
-
-
-
- router.push(PATHS.DEMO_PINTEREST_FLOATING_TAB_BAR, 'forward')}
- >
-
-
- Demo Pinterest Floating Tab Bar{' '}
- (css not work well)
-
-
-
-
-
-
- router.push(PATHS.DEMO_RESTAURANT_FINDER, 'forward')}
- >
-
-
- Demo Restaurant Finder{' '}
- need server for map showing
-
-
-
-
-
-
- handleDemoReactShopClick()}>
-
- Demo React Shop
-
-
-
-
-
- {
- router.push(PATHS.DEMO_CLUB_HOUSE, 'forward');
- }}
- >
-
- Demo Club house
-
-
-
-
-
- {
- router.push(PATHS.DEMO_SCORE_BOARD, 'forward');
- }}
- >
-
-
- Demo Score Board
- (IonCard problem)
-
-
-
-
-
-
- router.push(PATHS.DEMO_QUOTE_APP, 'forward')}>
-
- Demo Quote App
-
-
-
-
-
- router.push(PATHS.DEMO_QR_SCANNER, 'forward')}>
-
- Demo Qr scanner
-
-
-
-
-
- router.push(PATHS.DEMO_SHOP_APP_UI, 'forward')}>
-
- Demo Shop App UI
-
-
-
-
-
- router.push(PATHS.DEMO_DICTIONARY_APP, 'forward')}>
-
- Demo Dictionary App
-
-
-
-
-
- router.push(PATHS.DEMO_RECIPE_APP, 'forward')}>
-
- Demo Recipe App
-
-
-
-
-
- router.push(PATHS.DEMO_SLIDING_PROFILE, 'forward')}>
-
- Demo Sliding Profile
-
-
-
-
-
- router.push(PATHS.DEMO_QUIZ_APP, 'forward')}>
-
- Demo Quiz App
-
-
-
-
-
- router.push(PATHS.DEMO_BLOG_POST_UI, 'forward')}>
-
- Demo Blog Post UI
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_TRAVEL_APP, 'forward')}
- >
-
-
- Demo React Travel App (on hold)
-
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_PROFILE_DASHBOARD_UI, 'forward')}
- >
-
- Demo React Profile Dashboard UI
-
-
-
-
- {/* TODO: */}
-
-
- router.push(PATHS.DEMO_REACT_QR_CODE, 'forward')}>
-
-
- Demo React QR Code need update
-
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_QUOTES, 'forward')}>
-
- Demo React Quotes
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_SHOP_UI, 'forward')}>
-
-
- Demo React Shop UI lower priority
-
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_TABS_MENUS_CUSTOM, 'forward')}
- >
-
- Demo React Tabs Menus Custom
-
-
-
-
-
- router.push(PATHS.DEMO_REACT_ONBOARDING_UI, 'forward')}
- >
-
-
- Demo React Onboarding UI{' '}
- TODO: update IonSlide
-
-
-
-
-
-
- {/* REQ0058/logout */}
-
-
-
-
-
-
-
- Logout
-
-
- Unable to receive notifications after logging out
-
-
-
-
- Cancel
-
-
- Logout
-
-
-
-
-
-
- );
-};
-
-export default connect({
- mapStateToProps: (state) => ({
- speakers: selectors.getSpeakers(state),
- speakerSessions: selectors.getSpeakerSessions(state),
- }),
- mapDispatchToProps: {
- logoutUser,
- setAccessToken,
- setIsLoggedIn,
- },
- component: React.memo(DemoList),
-});
diff --git a/03_source/mobile.trunk/src/pages/DemoList/style.scss b/03_source/mobile.trunk/src/pages/DemoList/style.scss
deleted file mode 100644
index 5fae6e3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoList/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoList/types.ts b/03_source/mobile.trunk/src/pages/DemoList/types.ts
deleted file mode 100644
index 2f4577f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoList/types.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export interface Event {
- eventDate: Date;
- joinMembers: undefined;
- title: string;
- price: number;
- currency: string;
- duration_m: number;
- ageBottom: number;
- ageTop: number;
- location: string;
- avatar: string;
- //
- id: string;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/NOTES.md b/03_source/mobile.trunk/src/pages/DemoOrderingApp/NOTES.md
deleted file mode 100644
index c026b37..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0134
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCard.module.css b/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCard.module.css
deleted file mode 100644
index 41919a3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCard.module.css
+++ /dev/null
@@ -1,54 +0,0 @@
-.coffeeCard {
-
- padding: 0.8rem;
- border-radius: 20px;
-}
-
-.coffeeCard img {
-
- border-radius: 20px;
- height: 10rem;
- width: 100%;
-}
-
-.coffeeCard ion-card-title {
-
- margin-top: 1rem;
- font-size: 1rem;
-}
-
-.coffeePrice {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- margin-top: -0.2rem;
-}
-
-.coffeeAddButton {
-
- color: var(--ion-color-main) !important;
- margin-top: 0.5rem;
-}
-
-.coffeeCardLong img {
-
- border-radius: 20px;
- height: 5rem !important;
- width: 100%;
-}
-
-.coffeeCardLongDetails {
-
- margin-left: 1rem;
- margin-top: -0.7rem;
-}
-
-.coffeeCardLongDetails p {
-
- font-size: 0.8rem;
- margin: 0;
- margin-top: 0.2rem;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCard.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCard.tsx
deleted file mode 100644
index 358b630..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCard.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import { IonCard, IonCardSubtitle, IonCardTitle, IonCol } from '@ionic/react';
-import { ArrowRightSquare } from 'react-iconly';
-
-import styles from './CoffeeCard.module.css';
-
-const CoffeeCard = (props) => {
- const { coffee } = props;
-
- return (
-
-
-
- {coffee.name}
- {coffee.summary}
-
-
-
- );
-};
-
-export default CoffeeCard;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCardOffer.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCardOffer.tsx
deleted file mode 100644
index d98c46a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/CoffeeCardOffer.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { IonCard, IonCardSubtitle, IonCardTitle, IonCol, IonRow } from "@ionic/react";
-import { Plus } from "react-iconly";
-
-import styles from "./CoffeeCard.module.css";
-
-const CoffeeCardOffer = props => {
-
- const { offer } = props;
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{ offer.title }
-
{ offer.description }
-
-
-
-
-
-
- );
-}
-
-export default CoffeeCardOffer;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/Tabs.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/Tabs.tsx
deleted file mode 100644
index 2f8443e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/Tabs.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from 'react';
-import { IonIcon, IonLabel, IonTabBar, IonTabButton, IonTabs, IonRouterOutlet } from '@ionic/react';
-import { Redirect, Route } from 'react-router-dom';
-
-import { Home, Bag, Heart2, Notification } from 'react-iconly';
-import Homepage from '../pages/Home';
-import Favourites from '../pages/Favourites';
-import Cart from '../pages/Cart';
-
-const Tabs = (props) => {
- return (
-
-
- }
- />
- } />
- }
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Tabs;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/ViewCoffeeCard.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/ViewCoffeeCard.tsx
deleted file mode 100644
index 5c035ce..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/components/ViewCoffeeCard.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import { IonButton, IonCard, IonCardSubtitle, IonCardTitle, IonCol, IonRow } from '@ionic/react';
-
-import { useRef } from 'react';
-import { Bag } from 'react-iconly';
-import { addToCart } from '../store/CartStore';
-import '../pages/Home.scss';
-
-const ViewCoffeeCard = (props) => {
- const { coffee, cartRef } = props;
- const coffeeCartRef = useRef();
-
- const addCoffeeToCart = (e, coffeeID) => {
- e.preventDefault();
- e.stopPropagation();
-
- coffeeCartRef.current.style.display = '';
- coffeeCartRef.current.classList.add('animate__fadeOutUp');
-
- setTimeout(() => {
- cartRef.current.classList.add('animate__tada');
- addToCart(coffeeID);
-
- setTimeout(() => {
- cartRef.current.classList.remove('animate__tada');
- coffeeCartRef.current.style.display = 'none';
- }, 500);
- }, 500);
- };
-
- return (
-
-
-
-
- {coffee.name}
- {coffee.summary}
-
-
-
-
- Description
- {coffee.description}
-
-
-
-
- View →
-
-
-
-
- addCoffeeToCart(e, coffee.id)}>
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default ViewCoffeeCard;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/index.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/index.tsx
deleted file mode 100644
index d5213c5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/index.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import './theme/variables.scss';
-
-import Tabs from './components/Tabs';
-import Homepage from './pages/Home';
-import ViewCoffee from './pages/ViewCoffee';
-import ViewCoffees from './pages/ViewCoffees';
-import React from 'react';
-
-function DemoOrderingApp(): React.JSX.Element {
- return (
-
-
- } />
- }
- />
- }
- />
- }
- />
-
-
-
-
-
- );
-}
-
-export default DemoOrderingApp;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/module.d.ts b/03_source/mobile.trunk/src/pages/DemoOrderingApp/module.d.ts
deleted file mode 100644
index d774364..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/module.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Cart.module.css b/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Cart.module.css
deleted file mode 100644
index 427e2f6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Cart.module.css
+++ /dev/null
@@ -1,39 +0,0 @@
-.cartCheckout {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- margin: 1rem;
-}
-
-.cartFooter {
- border-top: 2px solid #141a22;
- background-color: var(--ion-background-color);
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.cartCheckout ion-card-subtitle {
- font-size: 1.3rem;
- color: white !important;
-}
-
-.cartItem {
- padding: 1rem;
-}
-
-.cartItem img {
- height: 3rem;
- width: 3rem;
- border-radius: 10px;
-}
-
-.cartSlider:not(:nth-child(1)) {
- border-top: 2px solid var(--ion-background-color);
-}
-
-.cartActions {
- display: flex;
- flex-direction: column;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Cart.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Cart.tsx
deleted file mode 100644
index a9342fc..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Cart.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonCardSubtitle,
- IonCol,
- IonContent,
- IonFooter,
- IonHeader,
- IonItem,
- IonItemOption,
- IonItemOptions,
- IonItemSliding,
- IonLabel,
- IonList,
- IonNote,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { Delete, TickSquare } from 'react-iconly';
-import { useEffect, useState } from 'react';
-import { CartStore, CoffeeStore } from '../store';
-import { removeFromCart } from '../store/CartStore';
-import { getCartCoffees, getCoffees } from '../store/Selectors';
-
-import styles from './Cart.module.css';
-
-const Cart = (): React.JSX.Element => {
- const coffees = CoffeeStore.useState(getCoffees);
- const cart = CartStore.useState(getCartCoffees);
-
- const [cartProducts, setCartProducts] = useState([]);
- const [amountLoaded, setAmountLoaded] = useState(6);
- const [total, setTotal] = useState(0);
-
- useEffect(() => {
- const getCartProducts = () => {
- setCartProducts([]);
- setTotal(0);
-
- cart.forEach((coffee) => {
- var coffeeID = coffee;
- const tempCoffee = coffees.filter((p) => parseInt(p.id) === parseInt(coffeeID))[0];
-
- setTotal((prevTotal) => prevTotal + parseFloat(tempCoffee.price));
- setCartProducts((prevSearchResults) => [...prevSearchResults, tempCoffee]);
- });
- };
-
- getCartProducts();
- }, [cart]);
-
- const fetchMore = async (e) => {
- // Increment the amount loaded by 6 for the next iteration
- setAmountLoaded((prevAmount) => prevAmount + 6);
- e.target.complete();
- };
-
- const removeProductFromCart = async (index) => {
- removeFromCart(index);
- };
-
- return (
-
-
-
- Checkout
-
-
-
-
-
-
-
- {cartProducts && cartProducts.length}{' '}
- {cartProducts.length > 1 || cartProducts.length === 0 ? ' coffees' : ' coffee'} found
-
-
-
-
-
- {cartProducts &&
- cartProducts.map((coffee, index) => {
- if (index <= amountLoaded) {
- return (
-
-
-
-
- {coffee.name}
-
-
-
- ${coffee.price}
-
-
-
-
- removeProductFromCart(index)}
- >
-
-
-
-
- );
- }
- })}
-
-
-
-
-
- ${total.toFixed(2)}
-
-
-
- Checkout
-
-
-
-
- );
-};
-
-export default Cart;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Favourites.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Favourites.tsx
deleted file mode 100644
index cc74788..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Favourites.tsx
+++ /dev/null
@@ -1,113 +0,0 @@
-import {
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonInfiniteScroll,
- IonInfiniteScrollContent,
- IonNote,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { Bag } from 'react-iconly';
-import { useEffect, useRef, useState } from 'react';
-import ViewCoffeeCard from '../components/ViewCoffeeCard';
-import { CartStore, CoffeeStore, FavouriteStore } from '../store';
-import { getCartCoffees, getCoffees, getFavouriteCoffees } from '../store/Selectors';
-import './Home.scss';
-
-const Favourites = (): React.JSX.Element => {
- const cartRef = useRef(null);
- const router = useIonRouter();
-
- const coffees = CoffeeStore.useState(getCoffees);
- const favourites = FavouriteStore.useState(getFavouriteCoffees);
- const cart = CartStore.useState(getCartCoffees);
-
- const [searchResults, setSearchResults] = useState([]);
- const [amountLoaded, setAmountLoaded] = useState(6);
-
- useEffect(() => {
- const getFavourites = () => {
- setSearchResults([]);
-
- favourites.forEach((favourite) => {
- var coffeeID = favourite;
- const tempCoffee = coffees.filter((c) => parseInt(c.id) === parseInt(coffeeID))[0];
- setSearchResults((prevSearchResults) => [...prevSearchResults, tempCoffee]);
- });
- };
-
- getFavourites();
- }, [favourites]);
-
- const fetchMore = async (e) => {
- // Increment the amount loaded by 6 for the next iteration
- setAmountLoaded((prevAmount) => prevAmount + 6);
- e.target.complete();
- };
-
- return (
-
-
-
- Favourites
-
-
- router.goBack()}
- >
- 0 ? 'yellow-icon' : 'gray-icon'} />
-
-
-
-
-
-
-
-
-
-
- {searchResults && searchResults.length}{' '}
- {searchResults.length > 1 || searchResults.length === 0
- ? ' favourites'
- : ' favourite'}{' '}
- found
-
-
-
-
-
- {searchResults &&
- searchResults.map((coffee, index) => {
- if (index <= amountLoaded) {
- return (
-
- );
- }
- })}
-
-
-
-
-
-
-
-
- );
-};
-
-export default Favourites;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Home.scss b/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Home.scss
deleted file mode 100644
index a9fa354..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Home.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-.demo-ordering-app {
- .main-heading {
- font-size: 2.3rem;
- font-weight: 700;
- }
-
- .heading {
- letter-spacing: -0.05rem;
- margin-left: 1rem;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Home.tsx
deleted file mode 100644
index c5c018b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/Home.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRouterLink,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { chevronBackOutline, searchSharp } from 'ionicons/icons';
-import { Category, Filter } from 'react-iconly';
-import CoffeeCard from '../components/CoffeeCard';
-import CoffeeCardOffer from '../components/CoffeeCardOffer';
-
-import { CoffeeStore, CoffeeOfferStore } from '../store';
-import { getCoffees, getOffers } from '../store/Selectors';
-import './Home.scss';
-
-const Homepage = (): React.JSX.Element => {
- const router = useIonRouter();
- const coffees = CoffeeStore.useState(getCoffees);
- const offers = CoffeeOfferStore.useState(getOffers);
-
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Ionic Coffee
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Find the best coffee near you
-
-
-
-
-
-
-
-
- router.push('/coffees/true')}
- searchIcon={searchSharp}
- placeholder="Try 'Caramel Latte'"
- />
-
-
-
-
- Popular
-
-
-
-
-
-
-
- {coffees.map((coffee) => {
- if (coffee.id <= 2) {
- return ;
- }
- })}
-
-
-
-
- Special Offers
-
-
-
- {offers.map((offer) => {
- return ;
- })}
-
-
-
- );
-};
-
-export default Homepage;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffee.module.css b/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffee.module.css
deleted file mode 100644
index f472b46..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffee.module.css
+++ /dev/null
@@ -1,50 +0,0 @@
-.checkout {
-
- border-top: 2px solid #141a22;
- background-color: var(--ion-background-color);
- padding-bottom: 1rem;
-}
-
-.checkoutDetails {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- margin-left: 2rem;
- margin-right: 1rem;
- margin-top: 0.5rem;
- margin-bottom: 0.5rem;
-}
-
-.checkoutDetails ion-button {
-
- width: 60%;
- --border-radius: 10px;
- height: 3.5rem;
-}
-
-.priceDetails {
-
- /* margin-left: 2rem; */
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- align-items: center;
-}
-
-.priceDetails h4 {
-
- margin: 0;
- padding: 0;
- color: white !important;
-}
-
-.extra {
-
- margin-top: 0.3rem;
- padding: 0.75rem;
- color: #475464;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffee.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffee.tsx
deleted file mode 100644
index 93c9dd5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffee.tsx
+++ /dev/null
@@ -1,208 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonButtons,
- IonCard,
- IonCardSubtitle,
- IonCol,
- IonContent,
- IonFooter,
- IonGrid,
- IonHeader,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { useEffect, useRef, useState } from 'react';
-import { Bag, Heart, CaretLeft, InfoSquare } from 'react-iconly';
-import { useParams } from 'react-router';
-import { CoffeeSizeStore, CoffeeStore, FavouriteStore } from '../store';
-import { addToCart } from '../store/CartStore';
-import { addToFavourites } from '../store/FavouriteStore';
-import { getCoffee, getCoffeeSizes, getFavouriteCoffees } from '../store/Selectors';
-import './Home.scss';
-
-import styles from './ViewCoffee.module.css';
-
-const ViewCoffee = (props): React.JSX.Element => {
- const router = useIonRouter();
- const params = useParams();
- const coffee = CoffeeStore.useState(getCoffee(params.id));
- const favourites = FavouriteStore.useState(getFavouriteCoffees);
- const coffeeSizes = CoffeeSizeStore.useState(getCoffeeSizes);
- const [selectedSize, setSelectedSize] = useState(false);
-
- const favouriteRef = useRef();
- const coffeeCartRef = useRef();
- const [isFavourite, setIsFavourite] = useState(false);
-
- const getPrice = () =>
- coffee.prices.filter((p) => parseInt(p.size_id) === parseInt(selectedSize))[0].price;
-
- useEffect(() => {
- const coffeeID = params.id;
- const tempIsFavourite = favourites.find((f) => parseInt(f) === parseInt(coffeeID));
-
- setIsFavourite(tempIsFavourite);
- }, [params.id, favourites]);
-
- const addCoffeeToFavourites = (e, coffeeID) => {
- e.preventDefault();
- addToFavourites(coffeeID);
-
- favouriteRef.current.classList.add('animate__tada');
-
- setTimeout(() => {
- favouriteRef.current.classList.remove('animate__tada');
- }, 700);
- };
-
- const addCoffeeToCart = (e, coffeeID) => {
- e.preventDefault();
- e.stopPropagation();
-
- coffeeCartRef.current.style.display = '';
- coffeeCartRef.current.classList.add('animate__fadeOutUp');
-
- setTimeout(() => {
- addToCart(coffeeID);
-
- setTimeout(() => {
- coffeeCartRef.current.style.display = 'none';
- }, 500);
- }, 500);
- };
-
- return (
-
-
-
-
- router.goBack()}>
-
-
-
-
- {coffee.name}
-
-
- addCoffeeToFavourites(e, coffee.id)}
- >
-
-
-
-
-
-
-
-
-
-
-
- {coffee.name}
- {coffee.summary}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Description
- {coffee.description}
-
-
-
-
-
-
- Extras included
-
-
-
- {coffee.extras.map((extra, index) => {
- return (
-
- {extra}
-
- );
- })}
-
-
-
-
-
-
-
- Pick your size
-
-
- {coffeeSizes.map((size) => {
- return (
-
- setSelectedSize(size.id)}
- expand="block"
- color={size.id === selectedSize ? 'main' : 'custom-light'}
- fill={size.id === selectedSize ? 'outline' : 'solid'}
- >
- {size.name}
-
-
- );
- })}
-
-
-
-
-
-
-
-
-
- Price
-
${selectedSize ? getPrice() : '0.00'}
-
-
addCoffeeToCart(e, coffee.id)}
- disabled={!selectedSize}
- expand="block"
- color="main"
- >
- Add to cart
-
-
-
-
-
-
-
-
- );
-};
-
-export default ViewCoffee;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffees.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffees.tsx
deleted file mode 100644
index 2bc79e0..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/pages/ViewCoffees.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonButtons,
- IonCardSubtitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
- useIonRouter,
- useIonViewDidEnter,
-} from '@ionic/react';
-import { searchSharp } from 'ionicons/icons';
-import { useRef, useState } from 'react';
-import { Bag, CaretLeft } from 'react-iconly';
-import { useParams } from 'react-router';
-import ViewCoffeeCard from '../components/ViewCoffeeCard';
-import { CartStore, CoffeeStore } from '../store';
-import { getCoffees, getCartCoffees } from '../store/Selectors';
-import './Home.scss';
-
-const ViewCoffees = (props): React.JSX.Element => {
- const router = useIonRouter();
- const params = useParams();
- const coffees = CoffeeStore.useState(getCoffees);
- const cart = CartStore.useState(getCartCoffees);
- const [results, setResults] = useState(coffees);
-
- const cartRef = useRef();
- const searchRef = useRef();
-
- useIonViewDidEnter(() => {
- if (params.from_search) {
- setTimeout(() => {
- searchRef.current.setFocus();
- }, 500);
- }
- });
-
- const search = (e) => {
- const searchTerm = e.currentTarget.value;
-
- if (searchTerm !== '') {
- const searchTermLower = searchTerm.toLowerCase();
-
- const newResults = coffees.filter((e) => e.name.toLowerCase().includes(searchTermLower));
- setResults(newResults);
- } else {
- setResults(coffees);
- }
- };
-
- return (
-
-
-
-
- router.goBack()}>
-
-
-
-
- Full Range
-
-
- router.push('/tabs/cart')}
- >
- 0 ? 'yellow-icon' : 'gray-icon'} />
-
-
-
-
-
-
-
-
-
-
- View Full Range
- Our range of succulent coffee
-
-
-
-
-
-
-
-
- search(e)}
- id="searchbar"
- ref={searchRef}
- searchIcon={searchSharp}
- placeholder="Try 'Cappuccino'"
- />
-
-
-
- {results.map((coffee) => {
- return ;
- })}
-
-
-
- );
-};
-
-export default ViewCoffees;
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CartStore.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CartStore.tsx
deleted file mode 100644
index 0cf4601..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CartStore.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Store } from "pullstate";
-
-const CartStore = new Store({
-
- total: 0,
- coffee_ids: []
-});
-
-export default CartStore;
-
-export const addToCart = (coffeeID) => {
-
- CartStore.update(s => { s.coffee_ids = [ ...s.coffee_ids, `${ parseInt(coffeeID) }` ]; });
-}
-
-export const removeFromCart = coffeeIndex => {
-
- CartStore.update(s => { s.coffee_ids.splice(coffeeIndex, 1) });
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeOfferStore.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeOfferStore.tsx
deleted file mode 100644
index 9132461..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeOfferStore.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Store } from 'pullstate';
-
-const CoffeeOfferStore = new Store({
-
- offers: [
- {
- id: 1,
- title: "Buy one get one free!",
- description: "Any time you buy a coffee using your loyalty card scheme, you can get one free",
- image: "https://images.pexels.com/photos/861090/pexels-photo-861090.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"
- }
- ]
-});
-
-export default CoffeeOfferStore;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeSizeStore.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeSizeStore.tsx
deleted file mode 100644
index d965a27..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeSizeStore.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { Store } from 'pullstate';
-
-const CoffeeSizeStore = new Store({
-
- sizes: [
- {
- id: 1,
- name: "Small"
- },
- {
- id: 2,
- name: "Medium",
- },
- {
- id: 3,
- name: "Large"
- }
- ]
-});
-
-export default CoffeeSizeStore;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeStore.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeStore.tsx
deleted file mode 100644
index 3b8cd3e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/CoffeeStore.tsx
+++ /dev/null
@@ -1,101 +0,0 @@
-import { Store } from 'pullstate';
-
-const CoffeeStore = new Store({
-
- coffees: [
- {
- id: 1,
- name: "Cappuccino",
- summary: "With Milk",
- extras: [ "milk" ],
- description: "This is a beautiful cup of cappuccino, complimented with semi-skimmed milk. Comes in three different sizes.",
- price: "3.20",
- prices: [
- {
- size_id: 1,
- price: "3.20"
- },
- {
- size_id: 2,
- price: "3.90"
- },
- {
- size_id: 3,
- price: "4.20"
- }
- ],
- image: "https://images.pexels.com/photos/1170659/pexels-photo-1170659.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"
- },
- {
- id: 2,
- name: "Lattè",
- summary: "With Caramel",
- extras: [ "caramel" ],
- description: "This is a beautiful cup of lattè, complimented with sweet caramel. Comes in three different sizes.",
- price: "5.10",
- prices: [
- {
- size_id: 1,
- price: "4.35"
- },
- {
- size_id: 2,
- price: "4.85"
- },
- {
- size_id: 3,
- price: "5.10"
- }
- ],
- image: "https://images.pexels.com/photos/2067399/pexels-photo-2067399.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"
- },
- {
- id: 3,
- name: "Espresso",
- summary: "With 2 shots",
- extras: [ "2 shots" ],
- description: "This is a beautiful cup of espresso, complimented with 2 shots. Comes in three different sizes.",
- price: "6.20",
- prices: [
- {
- size_id: 1,
- price: "6.20"
- },
- {
- size_id: 2,
- price: "6.80"
- },
- {
- size_id: 3,
- price: "7.10"
- }
- ],
- image: "https://images.pexels.com/photos/302894/pexels-photo-302894.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"
- },
- {
- id: 4,
- name: "Americano",
- summary: "With Milk",
- extras: [ "Milk" ],
- description: "This is a beautiful cup of Americano, complimented with full fat milk. Comes in three different sizes.",
- price: "5.35",
- prices: [
- {
- size_id: 1,
- price: "5.35"
- },
- {
- size_id: 2,
- price: "5.70"
- },
- {
- size_id: 3,
- price: "6.50"
- }
- ],
- image: "https://images.pexels.com/photos/6207297/pexels-photo-6207297.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"
- }
- ]
-});
-
-export default CoffeeStore;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/FavouriteStore.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/FavouriteStore.tsx
deleted file mode 100644
index 177a0bc..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/FavouriteStore.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { Store } from "pullstate";
-
-const FavouriteStore = new Store({
-
- total: 0,
- coffee_ids: []
-});
-
-export default FavouriteStore;
-
-export const addToFavourites = (coffeeID) => {
-
- FavouriteStore.update(s => {
-
- if (s.coffee_ids.find(id => id === parseInt(coffeeID))) {
- s.coffee_ids = s.coffee_ids.filter(id => id !== parseInt(coffeeID));
- } else {
- s.coffee_ids = [ ...s.coffee_ids, parseInt(coffeeID) ];
- }
- });
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/Selectors.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/Selectors.tsx
deleted file mode 100644
index ef89efe..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/Selectors.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { createSelector } from 'reselect';
-
-const getState = (state) => state;
-
-// General getters
-export const getCoffees = createSelector(getState, (state) => state.coffees);
-export const getOffers = createSelector(getState, (state) => state.offers);
-export const getCoffeeSizes = createSelector(getState, (state) => state.sizes);
-export const getCartCoffees = createSelector(getState, (state) => state.coffee_ids);
-export const getFavouriteCoffees = createSelector(getState, (state) => state.coffee_ids);
-
-// More specific getters
-export const getCoffee = (id) =>
- createSelector(
- getState,
- (state) => state.coffees.filter((c) => parseInt(c.id) === parseInt(id))[0]
- );
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/index.tsx b/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/index.tsx
deleted file mode 100644
index d52e3f5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/store/index.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-export { default as CoffeeStore } from "./CoffeeStore";
-export { default as CoffeeSizeStore } from "./CoffeeSizeStore";
-export { default as CoffeeOfferStore } from "./CoffeeOfferStore";
-export { default as CartStore } from "./CartStore";
-export { default as FavouriteStore } from "./FavouriteStore";
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoOrderingApp/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoOrderingApp/theme/variables.scss
deleted file mode 100644
index 1325221..0000000
--- a/03_source/mobile.trunk/src/pages/DemoOrderingApp/theme/variables.scss
+++ /dev/null
@@ -1,278 +0,0 @@
-.demo-ordering-app {
- /* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
- /** Ionic CSS Variables **/
- :root {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
-
- /** custom **/
- --ion-color-main: rgb(221, 174, 21);
- --ion-color-main-rgb: 221, 174, 21;
- --ion-color-main-contrast: rgb(0, 0, 0);
- --ion-color-main-contrast-rgb: 0, 0, 0;
- --ion-color-main-shade: rgb(179, 142, 22);
- --ion-color-main-tint: rgb(233, 195, 71);
-
- /** custom light **/
- --ion-color-custom-light: #141a22;
- --ion-color-custom-light-contrast: #ffffff;
- --ion-color-custom-light-shade: #12171d;
- --ion-color-custom-light-tint: #232c38;
- }
-
- .ion-color-main {
- --ion-color-base: var(--ion-color-main);
- --ion-color-base-rgb: var(--ion-color-main-rgb);
- --ion-color-contrast: var(--ion-color-main-contrast);
- --ion-color-contrast-rgb: var(--ion-color-main-contrast-rgb);
- --ion-color-shade: var(--ion-color-main-shade);
- --ion-color-tint: var(--ion-color-main-tint);
- }
-
- .ion-color-custom-light {
- --ion-color-base: var(--ion-color-custom-light);
- --ion-color-contrast: var(--ion-color-custom-light-contrast);
- --ion-color-shade: var(--ion-color-custom-light-shade);
- --ion-color-tint: var(--ion-color-custom-light-tint);
- }
-
- :root {
- --main-orange-color: #d17842;
-
- --ion-background-color: #0e1016;
- --ion-background-color-rgb: 0, 0, 0;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
- --ion-item-background: #141a22;
-
- --ion-card-background: #141a22;
- --ion-tab-bar-color: #4d5053;
- --ion-tab-bar-background: #0e1016;
- --ion-tab-bar-color-selected: rgb(221, 174, 21);
-
- /* --ion-toolbar-color: white; */
- --ion-toolbar-background: #0e1016;
- --ion-toolbar-border-color: #0e1016;
- --ion-tab-bar-border-color: #0e1016;
- --ion-grid-column-padding: 0;
- }
-
- .app-icon {
- color: rgb(221, 174, 21);
- }
-
- ion-toolbar {
- --padding-start: 1rem;
- --padding-end: 1rem;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- }
-
- .inner-toolbar {
- --padding-top: 0rem !important;
- --padding-bottom: 0rem !important;
- }
-
- .button-container-img img {
- height: 2.3rem;
- border-radius: 10px;
- }
-
- .gray-icon {
- color: var(--ion-tab-bar-color);
- background-color: #1b2025;
- }
-
- .yellow-icon {
- color: var(--ion-color-main);
- background-color: #1b2025;
- }
-
- .button-container {
- background-color: #1b2025;
- border: 2px solid #1d232a;
- padding: 0.5rem;
- border-radius: 13px;
-
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- justify-content: center;
- }
-
- .button-container-img {
- background-color: #1b2025;
- border: 2px solid #1d232a;
- padding: 0.2rem;
- border-radius: 13px;
-
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- justify-content: center;
- }
-
- ion-card {
- padding: 0.8rem;
- border-radius: 20px;
- }
-
- .coffee-card img {
- border-radius: 20px;
- height: 10rem;
- width: 100%;
- }
-
- .coffee-card-long img {
- border-radius: 20px;
- height: 5rem !important;
- width: 100%;
- }
-
- .coffee-card-long-details {
- margin-left: 1rem;
- margin-top: -0.7rem;
- }
-
- .coffee-card-long-details p {
- font-size: 0.8rem;
- margin: 0;
- margin-top: 0.2rem;
- }
-
- .coffee-card ion-card-title {
- margin-top: 1rem;
- font-size: 1rem;
- }
-
- .coffee-card .coffee-price {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- margin-top: -0.2rem;
- }
-
- .coffee-card .coffee-price .add-button {
- color: var(--main-orange-color) !important;
- margin-top: 0.5rem;
- }
-
- .coffee-card .coffee-price .add-button svg {
- color: white !important;
- }
-
- .outer-heading {
- margin-bottom: -1.3rem;
- margin-left: 0.5rem;
- margin-right: 1.3rem;
- }
- /*
-.searchbar-input {
-
- padding: 1.5rem !important;
-}
-
-.searchbar-search-icon {
-
- margin-top: 0.3rem;
- margin-right: 3rem;
- padding-right: 3rem;
-} */
- /*
-ion-tab-bar {
-
- bottom: 20px;
- position: relative;
- box-shadow: 0px 0px 1.5px rgba(255, 255, 255, 0.2);
- border-radius: 16px;
-width: 92%;
-border-top: none;
-margin: 0 auto;
-height: 55px;
-}
-
-ion-tab-button {
- --padding-bottom: 8px;
- --padding-top: 8px;
-} */
-
- .custom-margin-left {
- margin-left: 0.2rem;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab1.css b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab1.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab1.jsx
deleted file mode 100644
index 62e718a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-
-import './Tab1.css';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Tab1 = () => {
- const router = useIonRouter();
-
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Tab 1
- {/* */}
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Tab 1
-
-
-
-
-
- );
-};
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab2.css b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab2.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab2.jsx
deleted file mode 100644
index f09edf4..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab2.css';
-
-const Tab2 = () => {
- return (
-
-
-
- Tab 2
-
-
-
-
-
- Tab 2
-
-
-
-
-
- );
-};
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab3.css b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab3.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab3.jsx b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab3.jsx
deleted file mode 100644
index 903b1a0..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab3.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab3.css';
-
-const Tab3 = () => {
- return (
-
-
-
- Tab 3
-
-
-
-
-
- Tab 3
-
-
-
-
-
- );
-};
-
-export default Tab3;
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab4.jsx b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab4.jsx
deleted file mode 100644
index 9cb5fa3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/AppPages/Tab4.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import ExploreContainer from '../components/ExploreContainer';
-import './Tab3.css';
-
-const Tab4 = () => {
- return (
-
-
-
- Tab 3
-
-
-
-
-
- Tab 4
-
-
-
-
-
- );
-};
-
-export default Tab4;
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/NOTES.md b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/NOTES.md
deleted file mode 100644
index 41d58b8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0135
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/components/ExploreContainer.css b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/components/ExploreContainer.css
deleted file mode 100644
index e99f514..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/components/ExploreContainer.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.container strong {
- font-size: 20px;
- line-height: 26px;
-}
-
-.container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
-}
-
-.container a {
- text-decoration: none;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/components/ExploreContainer.jsx b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/components/ExploreContainer.jsx
deleted file mode 100644
index 093861b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/components/ExploreContainer.jsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import './ExploreContainer.css';
-
-const ExploreContainer = ({ name }) => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/custom-tab-bar.scss b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/custom-tab-bar.scss
deleted file mode 100644
index 1aa74fb..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/custom-tab-bar.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-.custom-tab-bar {
- * {
- /* --ion-background-color: white; */
- --ion-tab-bar-color: var(--tab-color);
- --ion-tab-bar-color-selected: var(--tab-color-selected);
- }
-
- ion-tab-bar {
- --background: var(--tab-background);
- box-shadow: 0px 1px 8px rgba(0, 0, 0, 0.4);
- border-radius: 50px !important;
-
- height: 50px;
- width: 50%;
- padding-top: 5px;
- padding-bottom: 5px;
- padding-left: 10px;
- padding-right: 10px;
-
- bottom: 20px;
- position: relative;
- margin: 0 auto !important;
- border-top: none;
- }
-
- ion-tab-button {
- border-radius: 16px !important;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/index.tsx b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/index.tsx
deleted file mode 100644
index 6ccb3e7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/index.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { chatbubble, cloudOutline, home, person, search, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-import Tab1 from './AppPages/Tab1';
-import Tab2 from './AppPages/Tab2';
-import Tab3 from './AppPages/Tab3';
-import Tab4 from './AppPages/Tab4';
-
-import './style.scss';
-import './custom-tab-bar.scss';
-
-function DemoPinterestFloatingTabBar() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoPinterestFloatingTabBar;
diff --git a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/style.scss b/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/style.scss
deleted file mode 100644
index fae1253..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPinterestFloatingTabBar/style.scss
+++ /dev/null
@@ -1,253 +0,0 @@
-/* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
-/** Ionic CSS Variables **/
-.demo-pinterest-floating-tab-bar {
- * {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-
- @media (prefers-color-scheme: dark) {
- /*
- * Dark Colors
- * -------------------------------------------
- */
-
- body {
- --ion-color-primary: #428cff;
- --ion-color-primary-rgb: 66, 140, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3a7be0;
- --ion-color-primary-tint: #5598ff;
-
- --ion-color-secondary: #50c8ff;
- --ion-color-secondary-rgb: 80, 200, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #46b0e0;
- --ion-color-secondary-tint: #62ceff;
-
- --ion-color-tertiary: #6a64ff;
- --ion-color-tertiary-rgb: 106, 100, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #5d58e0;
- --ion-color-tertiary-tint: #7974ff;
-
- --ion-color-success: #2fdf75;
- --ion-color-success-rgb: 47, 223, 117;
- --ion-color-success-contrast: #000000;
- --ion-color-success-contrast-rgb: 0, 0, 0;
- --ion-color-success-shade: #29c467;
- --ion-color-success-tint: #44e283;
-
- --ion-color-warning: #ffd534;
- --ion-color-warning-rgb: 255, 213, 52;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0bb2e;
- --ion-color-warning-tint: #ffd948;
-
- --ion-color-danger: #ff4961;
- --ion-color-danger-rgb: 255, 73, 97;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #e04055;
- --ion-color-danger-tint: #ff5b71;
-
- --ion-color-dark: #f4f5f8;
- --ion-color-dark-rgb: 244, 245, 248;
- --ion-color-dark-contrast: #000000;
- --ion-color-dark-contrast-rgb: 0, 0, 0;
- --ion-color-dark-shade: #d7d8da;
- --ion-color-dark-tint: #f5f6f9;
-
- --ion-color-medium: #989aa2;
- --ion-color-medium-rgb: 152, 154, 162;
- --ion-color-medium-contrast: #000000;
- --ion-color-medium-contrast-rgb: 0, 0, 0;
- --ion-color-medium-shade: #86888f;
- --ion-color-medium-tint: #a2a4ab;
-
- --ion-color-light: #222428;
- --ion-color-light-rgb: 34, 36, 40;
- --ion-color-light-contrast: #ffffff;
- --ion-color-light-contrast-rgb: 255, 255, 255;
- --ion-color-light-shade: #1e2023;
- --ion-color-light-tint: #383a3e;
- }
-
- /*
- * iOS Dark Theme
- * -------------------------------------------
- */
-
- .ios body {
- --ion-background-color: #000000;
- --ion-background-color-rgb: 0, 0, 0;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-color-step-50: #0d0d0d;
- --ion-color-step-100: #1a1a1a;
- --ion-color-step-150: #262626;
- --ion-color-step-200: #333333;
- --ion-color-step-250: #404040;
- --ion-color-step-300: #4d4d4d;
- --ion-color-step-350: #595959;
- --ion-color-step-400: #666666;
- --ion-color-step-450: #737373;
- --ion-color-step-500: #808080;
- --ion-color-step-550: #8c8c8c;
- --ion-color-step-600: #999999;
- --ion-color-step-650: #a6a6a6;
- --ion-color-step-700: #b3b3b3;
- --ion-color-step-750: #bfbfbf;
- --ion-color-step-800: #cccccc;
- --ion-color-step-850: #d9d9d9;
- --ion-color-step-900: #e6e6e6;
- --ion-color-step-950: #f2f2f2;
-
- --ion-item-background: #000000;
-
- --ion-card-background: #1c1c1d;
- }
-
- .ios ion-modal {
- --ion-background-color: var(--ion-color-step-100);
- --ion-toolbar-background: var(--ion-color-step-150);
- --ion-toolbar-border-color: var(--ion-color-step-250);
- }
-
- /*
- * Material Design Dark Theme
- * -------------------------------------------
- */
-
- .md body {
- --ion-background-color: #121212;
- --ion-background-color-rgb: 18, 18, 18;
-
- --ion-text-color: #ffffff;
- --ion-text-color-rgb: 255, 255, 255;
-
- --ion-border-color: #222222;
-
- --ion-color-step-50: #1e1e1e;
- --ion-color-step-100: #2a2a2a;
- --ion-color-step-150: #363636;
- --ion-color-step-200: #414141;
- --ion-color-step-250: #4d4d4d;
- --ion-color-step-300: #595959;
- --ion-color-step-350: #656565;
- --ion-color-step-400: #717171;
- --ion-color-step-450: #7d7d7d;
- --ion-color-step-500: #898989;
- --ion-color-step-550: #949494;
- --ion-color-step-600: #a0a0a0;
- --ion-color-step-650: #acacac;
- --ion-color-step-700: #b8b8b8;
- --ion-color-step-750: #c4c4c4;
- --ion-color-step-800: #d0d0d0;
- --ion-color-step-850: #dbdbdb;
- --ion-color-step-900: #e7e7e7;
- --ion-color-step-950: #f3f3f3;
-
- --ion-item-background: #1e1e1e;
-
- --ion-toolbar-background: #1f1f1f;
-
- --ion-tab-bar-background: #1f1f1f;
-
- --ion-card-background: #1e1e1e;
- }
- }
-
- :root {
- /* Custom tab bar */
- --tab-background: rgb(251, 251, 251);
- --tab-color: rgb(153, 153, 153);
- --tab-color-selected: black;
- }
-
- @media (prefers-color-scheme: dark) {
- :root {
- /* Custom tab bar */
- --tab-background: rgb(53, 53, 53);
- --tab-color: rgb(83, 83, 83);
- --tab-color-selected: white;
- }
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/NOTES.md b/03_source/mobile.trunk/src/pages/DemoProfileExample/NOTES.md
deleted file mode 100644
index ab323e8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0136
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Figure.module.scss b/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Figure.module.scss
deleted file mode 100644
index 48ef851..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Figure.module.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-.figure {
- padding: 1rem;
-}
-
-.figure h6 {
- font-size: 1.5rem;
- font-weight: 200;
-}
-
-.figure p {
- color: rgb(255, 255, 255);
- font-size: 0.9rem;
- font-weight: 200;
-}
-
-.figure:nth-child(1) {
- background-color: rgb(157, 163, 141);
-}
-
-.figure:nth-child(2) {
- background-color: rgb(150, 155, 138);
-}
-
-.figure:nth-child(3) {
- background-color: rgb(135, 143, 120);
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Figure.tsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Figure.tsx
deleted file mode 100644
index 57c6f2b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Figure.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import { IonCol } from '@ionic/react';
-import styles from './Figure.module.scss';
-
-export const Figure = (props): React.JSX.Element => (
-
- {props.count}
- {props.title}
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Post.module.scss b/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Post.module.scss
deleted file mode 100644
index 3b81ae7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Post.module.scss
+++ /dev/null
@@ -1,55 +0,0 @@
-.post {
- border-bottom: 1px solid rgb(219, 219, 219);
- padding-top: 1rem;
- padding-bottom: 0.2rem;
-
- p {
- font-size: 0.9rem;
- padding: 0 !important;
- margin: 0 !important;
- }
-
- .postText {
- color: rgb(107, 112, 97);
- }
-}
-
-.postAvatar {
- height: 3.5rem;
- width: 3.5rem;
- margin-right: 1rem;
- border: 3px solid rgba(218, 223, 208, 1);
-}
-
-.postInfo {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- padding-right: 1rem;
- color: rgb(190, 190, 190);
-}
-
-.postReactions {
- display: flex;
- justify-content: space-between;
- padding-right: 1rem;
- margin-top: 0.5rem;
- color: rgb(107, 112, 97);
-
- .postReaction {
- display: flex;
- align-items: center;
- justify-content: space-between;
- font-size: 0.9rem;
-
- ion-icon {
- margin-right: 0.5rem;
- }
-
- p {
- padding: 0;
- margin: 0;
- font-size: 0.8rem;
- }
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Post.tsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Post.tsx
deleted file mode 100644
index 406e1dd..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/components/Post.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { IonAvatar, IonIcon, IonItem, IonLabel } from '@ionic/react';
-import { chatbubbleOutline, heart, heartOutline, shareSocialOutline } from 'ionicons/icons';
-import styles from './Post.module.scss';
-
-export const Post = (props): React.JSX.Element => (
-
-
-
-
-
-
-
-
{props.post.date}
-
@93alan
-
- {props.post.text}
-
-
-
-
-
{props.post.comments}
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/index.tsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/index.tsx
deleted file mode 100644
index 392e5a6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/index.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import './style.scss';
-import Home from './pages/Home';
-
-function DemoProfileExample(): React.JSX.Element {
- return (
-
-
-
-
-
-
-
-
-
- {/*
-
-
-
- Dashboard
-
-
-
- Search
-
-
- */}
-
- );
-}
-
-export default DemoProfileExample;
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoProfileExample/pages/Home.module.scss
deleted file mode 100644
index 5db20c8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/pages/Home.module.scss
+++ /dev/null
@@ -1,90 +0,0 @@
-$main-color: rgb(143, 149, 130);
-
-.page {
- ion-toolbar {
- --background: rgb(143, 149, 130) !important;
- --color: white;
- --border-style: none;
- margin: 0 !important;
- }
-}
-
-.top {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- align-content: center;
- background-color: rgb(143, 149, 130);
- color: white;
- padding-bottom: 1rem;
-}
-
-.figures {
- text-align: center;
- background-color: rgb(143, 149, 130);
- color: white;
-
- p,
- h6 {
- padding: 0;
- margin: 0;
- }
-}
-
-.profileHeader {
- ion-card-subtitle,
- ion-card-title {
- --color: white;
- }
-
- ion-card-title {
- font-size: 1.3rem;
- }
-
- ion-card-subtitle {
- --color: rgb(202, 211, 189);
- }
-}
-
-.avatar {
- width: 7rem;
- height: 7rem;
- border: 5px solid rgba(218, 223, 208, 0.4);
-}
-
-.avatarUpload {
- display: flex;
- flex-direction: row;
- justify-content: center;
-
- background-color: rgb(255, 255, 255);
- border: 3px solid rgba(218, 223, 208, 0.4);
- color: rgb(80, 80, 80);
- position: absolute;
- padding: 0.3rem;
- font-size: 1.1rem;
- border-radius: 500px;
- margin-top: -2.2rem;
- margin-left: 5rem;
-}
-
-.postActions {
- display: flex;
- flex-direction: row;
- align-content: center;
- align-items: center;
- justify-content: space-between;
- padding: 0.2rem;
- padding-left: 1.3rem;
- padding-right: 1.3rem;
- color: rgb(149, 149, 149);
- font-size: 0.9rem;
- border-bottom: 1px solid rgba(218, 223, 208, 1);
-
- background-color: rgba(218, 223, 208, 0.4);
-
- ion-icon {
- font-size: 1.2rem;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoProfileExample/pages/Home.tsx
deleted file mode 100644
index d565f0a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/pages/Home.tsx
+++ /dev/null
@@ -1,130 +0,0 @@
-import {
- IonAvatar,
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonList,
- IonPage,
- IonRow,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import styles from './Home.module.scss';
-import {
- arrowBackOutline,
- cameraOutline,
- chevronBackOutline,
- filterOutline,
- menuOutline,
-} from 'ionicons/icons';
-import { Figure } from '../components/Figure';
-import { Post } from '../components/Post';
-
-const Home = (): React.JSX.Element => {
- const posts = [
- {
- date: 'Mar 30',
- text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
- comments: 13,
- likes: 49,
- liked: true,
- },
- {
- date: 'Mar 28',
- text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
- comments: 1,
- likes: 9,
- },
- {
- date: 'Mar 25',
- text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
- comments: 119,
- likes: 483,
- },
- {
- date: 'Mar 23',
- text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
- comments: 27,
- likes: 78,
- },
- ];
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Alan Montgomery
- Mobile Team Lead
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {posts.map((post, index) => {
- return ;
- })}
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/style.scss b/03_source/mobile.trunk/src/pages/DemoProfileExample/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoProfileExample/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoProfileExample/theme/variables.scss
deleted file mode 100644
index 1a2dbc3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoProfileExample/theme/variables.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-.demo-profile-example {
- /* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
- /** Ionic CSS Variables **/
- :root {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/NOTES.md b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/NOTES.md
deleted file mode 100644
index d94875f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0137
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/components/Person.tsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/components/Person.tsx
deleted file mode 100644
index 2edc34d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/components/Person.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { IonAvatar, IonButton, IonItem, IonLabel } from '@ionic/react';
-import { toggleFollowing } from '../store/PeopleStore';
-
-export const Person = ({ person }): React.JSX.Element => {
- return (
-
-
-
-
-
- {person.name}
- {person.title}
-
-
- toggleFollowing(person.id)}
- >
- {person.following ? 'Following' : 'Follow'}
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/data/index.js b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/data/index.js
deleted file mode 100644
index 9e1fff8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/data/index.js
+++ /dev/null
@@ -1,45 +0,0 @@
-export const people = [
-
- {
- id: 1,
- name: "Alan Montgomery",
- title: "Mobile Team Lead",
- avatar: "https://pbs.twimg.com/profile_images/1420489989163524096/GwHdYSky_400x400.jpg",
- following: false
- },
- {
- id: 2,
- name: "Max Lynch",
- title: "CEO | Co Founder",
- avatar: "https://pbs.twimg.com/profile_images/1318970727173885953/bln98FNj_400x400.jpg",
- following: false
- },
- {
- id: 3,
- name: "Mike Hartington",
- title: "Senior Dev Rel",
- avatar: "https://pbs.twimg.com/profile_images/1084993841898446849/DJ8XtR6L_400x400.jpg",
- following: false
- },
- {
- id: 4,
- name: "Matt Netkow",
- title: "Head of Product Marketing",
- avatar: "https://pbs.twimg.com/profile_images/1323383930150621187/GKc0nVzi_400x400.jpg",
- following: false
- },
- {
- id: 5,
- name: "Ben Sperry",
- title: "CDO | Co Founder",
- avatar: "https://pbs.twimg.com/profile_images/1407747959345795072/McJb-RvC_400x400.jpg",
- following: false
- },
- {
- id: 6,
- name: "Liam DeBeasi",
- title: "Software Engineer",
- avatar: "https://pbs.twimg.com/profile_images/1105953692669366273/ZNK4lRAJ_400x400.jpg",
- following: false
- }
-];
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/index.tsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/index.tsx
deleted file mode 100644
index f5313e3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/index.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { list, people } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import './style.scss';
-import Tab1 from './pages/Tab1';
-import Tab2 from './pages/Tab2';
-
-function DemoPullstateTutorial() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- {/* */}
-
-
-
- List
-
-
-
- Following
-
-
-
- );
-}
-
-export default DemoPullstateTutorial;
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab1.css b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab1.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab1.tsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab1.tsx
deleted file mode 100644
index 98513db..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab1.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { PeopleStore } from '../store';
-import { Person } from '../components/Person';
-import './Tab1.css';
-import { useStoreState } from 'pullstate';
-import { getPeople } from '../store/Selectors';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Tab1 = (): React.JSX.Element => {
- const people = useStoreState(PeopleStore, getPeople);
-
- console.log(people);
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- List of People
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- List of People
-
-
- handleBackClick()}>
-
-
-
-
-
-
- {people.map((person, index) => {
- return ;
- })}
-
-
- );
-};
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab2.css b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab2.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab2.tsx b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab2.tsx
deleted file mode 100644
index 7a95a49..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/pages/Tab2.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react';
-import { useStoreState } from 'pullstate';
-import { Person } from '../components/Person';
-import { PeopleStore } from '../store';
-import { getFollowing } from '../store/Selectors';
-import './Tab2.css';
-import React from 'react';
-
-const Tab2 = (): React.JSX.Element => {
- const people = useStoreState(PeopleStore, getFollowing);
-
- return (
-
-
-
- Following
-
-
-
-
-
- Following
-
-
-
- {people.map((person, index) => {
- return ;
- })}
-
-
- );
-};
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/PeopleStore.js b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/PeopleStore.js
deleted file mode 100644
index e80c158..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/PeopleStore.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Store } from "pullstate";
-
-import { people } from "../data";
-
-const PeopleStore = new Store({
-
- people: people
-});
-
-export const toggleFollowing = personId => {
-
- PeopleStore.update(s => {
-
- const personIndex = s.people.findIndex(person => person.id === personId);
- s.people[personIndex].following = !s.people[personIndex].following;
- });
-}
-
-export default PeopleStore;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/Selectors.js b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/Selectors.js
deleted file mode 100644
index 1c3bdc6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/Selectors.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { createSelector } from "reselect";
-
-const getState = state => state;
-
-// Gets
-export const getPeople = createSelector(getState, state => state.people);
-export const getFollowing = createSelector(getState, state => state.people.filter(person => person.following));
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/index.js b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/index.js
deleted file mode 100644
index 9beff78..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/store/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as PeopleStore } from "./PeopleStore";
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/style.scss b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/theme/variables.scss
deleted file mode 100644
index 8606e9f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoPullstateTutorial/theme/variables.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-.demo-pullstate-tutorial {
- /* Ionic Variables and Theming. For more info, please see:
-http://ionicframework.com/docs/theming/ */
-
- /** Ionic CSS Variables **/
- :root {
- /** primary **/
- --ion-color-primary: #3880ff;
- --ion-color-primary-rgb: 56, 128, 255;
- --ion-color-primary-contrast: #ffffff;
- --ion-color-primary-contrast-rgb: 255, 255, 255;
- --ion-color-primary-shade: #3171e0;
- --ion-color-primary-tint: #4c8dff;
-
- /** secondary **/
- --ion-color-secondary: #3dc2ff;
- --ion-color-secondary-rgb: 61, 194, 255;
- --ion-color-secondary-contrast: #ffffff;
- --ion-color-secondary-contrast-rgb: 255, 255, 255;
- --ion-color-secondary-shade: #36abe0;
- --ion-color-secondary-tint: #50c8ff;
-
- /** tertiary **/
- --ion-color-tertiary: #5260ff;
- --ion-color-tertiary-rgb: 82, 96, 255;
- --ion-color-tertiary-contrast: #ffffff;
- --ion-color-tertiary-contrast-rgb: 255, 255, 255;
- --ion-color-tertiary-shade: #4854e0;
- --ion-color-tertiary-tint: #6370ff;
-
- /** success **/
- --ion-color-success: #2dd36f;
- --ion-color-success-rgb: 45, 211, 111;
- --ion-color-success-contrast: #ffffff;
- --ion-color-success-contrast-rgb: 255, 255, 255;
- --ion-color-success-shade: #28ba62;
- --ion-color-success-tint: #42d77d;
-
- /** warning **/
- --ion-color-warning: #ffc409;
- --ion-color-warning-rgb: 255, 196, 9;
- --ion-color-warning-contrast: #000000;
- --ion-color-warning-contrast-rgb: 0, 0, 0;
- --ion-color-warning-shade: #e0ac08;
- --ion-color-warning-tint: #ffca22;
-
- /** danger **/
- --ion-color-danger: #eb445a;
- --ion-color-danger-rgb: 235, 68, 90;
- --ion-color-danger-contrast: #ffffff;
- --ion-color-danger-contrast-rgb: 255, 255, 255;
- --ion-color-danger-shade: #cf3c4f;
- --ion-color-danger-tint: #ed576b;
-
- /** dark **/
- --ion-color-dark: #222428;
- --ion-color-dark-rgb: 34, 36, 40;
- --ion-color-dark-contrast: #ffffff;
- --ion-color-dark-contrast-rgb: 255, 255, 255;
- --ion-color-dark-shade: #1e2023;
- --ion-color-dark-tint: #383a3e;
-
- /** medium **/
- --ion-color-medium: #92949c;
- --ion-color-medium-rgb: 146, 148, 156;
- --ion-color-medium-contrast: #ffffff;
- --ion-color-medium-contrast-rgb: 255, 255, 255;
- --ion-color-medium-shade: #808289;
- --ion-color-medium-tint: #9d9fa6;
-
- /** light **/
- --ion-color-light: #f4f5f8;
- --ion-color-light-rgb: 244, 245, 248;
- --ion-color-light-contrast: #000000;
- --ion-color-light-contrast-rgb: 0, 0, 0;
- --ion-color-light-shade: #d7d8da;
- --ion-color-light-tint: #f5f6f9;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/AppPages/Tab1.jsx
deleted file mode 100644
index aaad468..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import {
- getPlatforms,
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonModal,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useRef, useState } from 'react';
-import { SkeletonDashboard } from '../components/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../components/CurrentWeather';
-import { useStoreState } from 'pullstate';
-import { QRStore } from '../store';
-import { getCodes } from '../store/Selectors';
-import useSound from 'use-sound';
-import openSound from '../sounds/open.wav';
-import { QRCodeScannedModal } from '../components/QRCodeScannedModal';
-import { QRWebModal } from '../components/QRWebModal';
-import { NoQRCodes } from '../components/NoQRCodes';
-import { CustomFab } from '../components/CustomFab.jsx';
-
-function Tab1() {
- const pageRef = useRef(null);
- const codes = useStoreState(QRStore, getCodes);
- const [play] = useSound(openSound);
-
- const [QRData, setQRData] = useState(false);
-
- const handleScan = (data) => {
- if (data) {
- setQRData(data);
- play();
- handleSuccess(data);
- }
- };
-
- const handleError = (err) => {
- console.error(err);
- };
-
- const start = async () => {
- const platforms = getPlatforms();
- const isWeb =
- platforms.includes('desktop') || platforms.includes('mobileweb') || platforms.includes('pwa');
-
- if (!isWeb) {
- // const data = await BarcodeScanner.scan();
-
- // if (data) {
- // handleSuccess(data);
- // }
- const result = await CapacitorBarcodeScanner.scanBarcode({
- hint: CapacitorBarcodeScannerTypeHint.ALL,
- scanInstructions: 'Please scan a barcode',
- scanButton: true,
- scanText: 'Scan',
- cameraDirection: CapacitorBarcodeScannerCameraDirection.BACK,
- scanOrientation: CapacitorBarcodeScannerScanOrientation.ADAPTIVE,
- android: {
- scanningLibrary: CapacitorBarcodeScannerAndroidScanningLibrary.ZXING,
- },
- });
- handleSuccess(result.ScanResult);
- } else {
- presentWebModal({
- presentingElement: pageRef.current,
- });
- }
- };
-
- const handleSuccess = (data) => {
- setQRData(data);
- console.log(data);
- dismissWebModal();
-
- play();
- present({
- presentingElement: pageRef.current,
- });
- };
-
- const [present, dismiss] = useIonModal(QRCodeScannedModal, {
- dismiss: () => dismiss(),
- code: QRData,
- set: () => setQRData(),
- scan: () => start(),
- });
-
- const [presentWebModal, dismissWebModal] = useIonModal(QRWebModal, {
- dismiss: () => dismissWebModal(),
- set: () => setQRData(),
- scan: handleScan,
- error: handleError,
- });
-
- const router = useIonRouter();
- function handleBackButtonClick() {
- router.goBack();
- }
-
- return (
-
-
-
- QR Codes
-
- handleBackButtonClick()}
- >
-
-
-
-
-
-
-
- QR Codes
-
-
-
- {codes.length < 1 && }
- {codes.length > 0 && }
-
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/AppPages/Tab2.jsx
deleted file mode 100644
index 216544f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../components/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/NOTES.md b/03_source/mobile.trunk/src/pages/DemoQrScanner/NOTES.md
deleted file mode 100644
index e77ff3c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0138
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CustomFab.jsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CustomFab.jsx
deleted file mode 100644
index 2e19fe8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/CustomFab.jsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { IonFab, IonFabButton, IonFabList, IonIcon } from '@ionic/react';
-import { addOutline, cameraOutline, qrCodeOutline } from 'ionicons/icons';
-
-export const CustomFab = ({ start }) => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/NoQRCodes.jsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/components/NoQRCodes.jsx
deleted file mode 100644
index 08e6bd3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/NoQRCodes.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { IonCol, IonRow, IonText } from '@ionic/react';
-
-export const NoQRCodes = () => (
-
-
- It looks like you don't have any QR codes stored.
-
-
-
- Click the button in the bottom right to scan a code or
- generate a code.
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/QRCodeScannedModal.jsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/components/QRCodeScannedModal.jsx
deleted file mode 100644
index 21f2c58..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/QRCodeScannedModal.jsx
+++ /dev/null
@@ -1,106 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCard,
- IonCardContent,
- IonCardHeader,
- IonCardTitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonNote,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonToast,
-} from '@ionic/react';
-import QRCode from 'react-qr-code';
-import { addQRCode } from '../store/QRStore';
-
-import useSound from 'use-sound';
-import closeSound from '../sounds/close.wav';
-import { reloadOutline } from 'ionicons/icons';
-
-export const QRCodeScannedModal = ({ dismiss, code, set, scan }) => {
- const [play] = useSound(closeSound);
- const [showToast] = useIonToast();
-
- const handleDismiss = () => {
- dismiss();
- play();
- };
-
- const handleScanAgain = () => {
- handleDismiss();
-
- setTimeout(() => {
- scan();
- }, 10);
- };
-
- const handleAdd = async () => {
- addQRCode(code.text ? code.text : code, true);
- showToast({
- header: 'Success!',
- message: 'QR Code stored successfully.',
- duration: 3000,
- color: 'primary',
- });
-
- handleDismiss();
- };
-
- return (
-
-
-
- View QR Code
-
- Close
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QR Code data
- This is what the code represents
-
-
- {code.text ? code.text : code}
-
-
-
-
-
-
-
-
-
- Scan again
-
-
-
-
- Store →
-
-
-
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/QRWebModal.jsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/components/QRWebModal.jsx
deleted file mode 100644
index 8d1775d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/QRWebModal.jsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-// import QrReader from "react-qr-reader";
-
-export const QRWebModal = ({ dismiss, set, scan, error }) => {
- return (
-
-
-
- Scan QR Code
-
- Close
-
-
-
-
-
-
-
-
- {/*
-
- */}
-
-
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/components/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/components/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/index.tsx b/03_source/mobile.trunk/src/pages/DemoQrScanner/index.tsx
deleted file mode 100644
index 9afe772..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/index.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { IonIcon, IonLabel, IonRouterOutlet, IonTabBar, IonTabButton, IonTabs } from '@ionic/react';
-
-import { cloudOutline, searchOutline } from 'ionicons/icons';
-import { Route, Redirect } from 'react-router';
-
-import Tab1 from './AppPages/Tab1';
-import Tab2 from './AppPages/Tab2';
-
-function DemoQrScanner() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- {/* */}
-
-
-
- Dashboard
-
-
-
- Search
-
-
-
- );
-}
-
-export default DemoQrScanner;
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/sounds/close.wav b/03_source/mobile.trunk/src/pages/DemoQrScanner/sounds/close.wav
deleted file mode 100644
index 7ca4e4e..0000000
Binary files a/03_source/mobile.trunk/src/pages/DemoQrScanner/sounds/close.wav and /dev/null differ
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/sounds/open.wav b/03_source/mobile.trunk/src/pages/DemoQrScanner/sounds/open.wav
deleted file mode 100644
index 78c8254..0000000
Binary files a/03_source/mobile.trunk/src/pages/DemoQrScanner/sounds/open.wav and /dev/null differ
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/store/QRStore.js b/03_source/mobile.trunk/src/pages/DemoQrScanner/store/QRStore.js
deleted file mode 100644
index 2878652..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/store/QRStore.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Store } from 'pullstate';
-
-const QRStore = new Store({
- codes: [],
-});
-
-export default QRStore;
-
-export const addQRCode = (data, scanned = false) => {
- QRStore.update((s) => {
- s.codes = [...s.codes, { id: new Date(), data, scanned }];
- });
-};
-
-export const removeQRCode = (id) => {
- QRStore.update((s) => {
- s.codes = s.codes.filter((code) => code.id !== id);
- });
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/store/Selectors.js b/03_source/mobile.trunk/src/pages/DemoQrScanner/store/Selectors.js
deleted file mode 100644
index d74c840..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/store/Selectors.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { createSelector } from 'reselect';
-
-const getState = (state) => state;
-
-// General getters
-export const getCodes = createSelector(getState, (state) => state.codes);
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/store/index.js b/03_source/mobile.trunk/src/pages/DemoQrScanner/store/index.js
deleted file mode 100644
index 18573c9..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/store/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as QRStore } from './QRStore';
diff --git a/03_source/mobile.trunk/src/pages/DemoQrScanner/style.scss b/03_source/mobile.trunk/src/pages/DemoQrScanner/style.scss
deleted file mode 100644
index 37c1e1a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQrScanner/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Home.jsx b/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Home.jsx
deleted file mode 100644
index 75349e2..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Home.jsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonActionSheet,
-} from '@ionic/react';
-import styles from './Home.module.scss';
-
-import { informationCircleOutline } from 'ionicons/icons';
-
-const Home = () => {
- const [show, hide] = useIonActionSheet();
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- Start Playing
-
-
-
- show({
- buttons: [{ text: 'Close' }],
- header: 'How to play',
- subHeader:
- 'Pick a category and difficulty, then proceed to answer each question. You will gain a score by getting an answer right and you will also be indicated whether your answer was correct or incorrect. Have fun!',
- })
- }
- >
- How to play
-
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Home.module.scss
deleted file mode 100644
index d0bd1ef..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Home.module.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-.title {
-
- height: 10rem;
- margin-top: 30%;
-}
-
-.buttons {
-
- position: absolute;
- bottom: 3rem;
- width: 100%;
-}
-
-.playButton {
-
- height: 4rem;
- --border-radius: 500px;
- width: fit-content;
- --padding-start: 5rem;
- --padding-end: 5rem;
- margin: 0 auto;
-}
-
-.helpButton {
-
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-content: center;
- text-align: center;
- width: fit-content;
- margin: 0 auto;
- margin-top: 3rem;
- opacity: 70%;
- --border-radius: 10rem !important;
- --padding-end: 1.25rem;
-
- ion-icon {
-
- margin-top: 0.2rem;
- margin-right: 0.5rem;
- }
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Questions.jsx b/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Questions.jsx
deleted file mode 100644
index 12b3461..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Questions.jsx
+++ /dev/null
@@ -1,193 +0,0 @@
-import {
- IonBadge,
- IonButton,
- IonCard,
- IonCardContent,
- IonCardHeader,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonNote,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
- useIonViewDidEnter,
-} from '@ionic/react';
-
-import styles from './Quiz.module.scss';
-import { useStoreState } from 'pullstate';
-import { SettingsStore } from '../store';
-import {
- getCategories,
- getChosenCategory,
- getChosenDifficulty,
- getDifficulties,
-} from '../store/Selectors';
-import { Category, Difficulty } from '../components/Settings';
-
-import { useState } from 'react';
-import { useEffect } from 'react';
-import { fetchQuestions } from '../questions';
-
-// Import Swiper React components
-import { Swiper, SwiperSlide } from 'swiper/react';
-
-// Import Swiper styles
-// import 'swiper/swiper.scss';
-import 'swiper/css';
-
-import { useRef } from 'react';
-import { updateChosenCategory, updateChosenDifficulty } from '../store/SettingsStore';
-import { Answer } from '../components/Answer';
-import { CompletedCard } from '../components/CompletedCard';
-import { QuizStats } from '../components/QuizStats';
-
-const Questions = () => {
- const mainContainerRef = useRef(null);
- const completionContainerRef = useRef(null);
- const swiperRef = useRef(null);
-
- const router = useIonRouter();
- const chosenCategory = useStoreState(SettingsStore, getChosenCategory);
- const chosenDifficulty = useStoreState(SettingsStore, getChosenDifficulty);
-
- const [currentQuestion, setCurrentQuestion] = useState(1);
- const [score, setScore] = useState(0);
- const [completed, setCompleted] = useState(false);
-
- const [questions, setQuestions] = useState(false);
- const [slideSpace, setSlideSpace] = useState(0);
-
- useEffect(() => {
- const getQuestions = async () => {
- const fetchedQuestions = await fetchQuestions(chosenCategory, chosenDifficulty);
- setQuestions(fetchedQuestions);
- };
-
- getQuestions();
- }, []);
-
- useIonViewDidEnter(() => {
- setSlideSpace(40);
- });
-
- const handleAnswerClick = (event, answer, question) => {
- const isCorrect = question.correct_answers[`${answer}_correct`] === 'true';
-
- if (isCorrect) {
- event.target.setAttribute('color', 'success');
- } else {
- event.target.setAttribute('color', 'danger');
- }
-
- setTimeout(() => {
- isCorrect && setScore((score) => score + 1);
- event.target.setAttribute('color', 'light');
- swiperRef.current.swiper.slideNext();
- checkIfComplete();
- }, 1000);
- };
-
- const checkIfComplete = () => {
- if (currentQuestion === questions.length) {
- // Quiz has finished
- // Hide Slides and show completion screen
- mainContainerRef.current.classList.add('animate__zoomOutDown');
-
- setTimeout(() => {
- setCompleted(true);
- completionContainerRef.current.classList.add('animate__zoomInUp');
- }, 1000);
- }
- };
-
- return (
-
-
-
-
-
-
-
-
-
- {!completed && (
-
-
-
-
-
-
- setCurrentQuestion(e.activeIndex + 1)}
- >
- {questions &&
- questions.map((question, index) => {
- return (
-
-
-
- {question.category}
- {question.tags.length > 0 && (
- {question.tags[0].name}
- )}
-
- {question.question}
-
-
-
-
- {Object.keys(question.answers).map((answer, index) => {
- if (question.answers[answer] !== null) {
- return (
-
- );
- }
- })}
-
-
-
- );
- })}
-
-
-
-
-
- )}
-
- {completed && (
-
- )}
-
-
- );
-};
-
-export default Questions;
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Quiz.jsx b/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Quiz.jsx
deleted file mode 100644
index 987de42..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Quiz.jsx
+++ /dev/null
@@ -1,153 +0,0 @@
-import {
- IonButton,
- IonCard,
- IonCardContent,
- IonCardHeader,
- IonCardSubtitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
- useIonToast,
-} from '@ionic/react';
-
-import styles from './Quiz.module.scss';
-import { useStoreState } from 'pullstate';
-import { SettingsStore } from '../store';
-import {
- getCategories,
- getChosenCategory,
- getChosenDifficulty,
- getDifficulties,
-} from '../store/Selectors';
-import { Category, Difficulty } from '../components/Settings';
-
-const Quiz = () => {
- const router = useIonRouter();
- const categories = useStoreState(SettingsStore, getCategories);
- const difficulties = useStoreState(SettingsStore, getDifficulties);
-
- const chosenCategory = useStoreState(SettingsStore, getChosenCategory);
- const chosenDifficulty = useStoreState(SettingsStore, getChosenDifficulty);
-
- const [show, hide] = useIonToast();
-
- const startQuiz = async () => {
- if (chosenCategory && chosenDifficulty) {
- const chosenCategoryElement = document.getElementById(`categoryButton_${chosenCategory}`);
- const chosenDifficultyElement = document.getElementById(
- `difficultyButton_${chosenDifficulty}`
- );
-
- const categoriesCardElement = document.getElementById('categoriesCard');
- const difficultiesCardElement = document.getElementById('difficultiesCard');
-
- chosenCategoryElement.classList.add('ontop');
- chosenDifficultyElement.classList.add('ontop');
-
- chosenCategoryElement.classList.add('animate__heartBeat');
- chosenDifficultyElement.classList.add('animate__heartBeat');
-
- setTimeout(() => {
- chosenCategoryElement.classList.remove('animate__heartBeat');
- chosenDifficultyElement.classList.remove('animate__heartBeat');
- chosenCategoryElement.classList.remove('ontop');
- chosenDifficultyElement.classList.remove('ontop');
- }, 1000);
-
- setTimeout(() => {
- categoriesCardElement.classList.add('animate__slideOutRight');
- difficultiesCardElement.classList.add('animate__slideOutLeft');
-
- setTimeout(() => {
- categoriesCardElement.classList.remove('animate__slideOutRight');
- difficultiesCardElement.classList.remove('animate__slideOutLeft');
- }, 1000);
- }, 1100);
-
- setTimeout(() => {
- router.push('/questions');
- }, 1700);
- } else {
- show({
- header: 'Hang on there!',
- message: 'You must choose a category and difficulty!',
- duration: 3000,
- color: 'warning',
- });
- }
- };
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Choose a category
-
-
-
-
- {categories.map((category, index) => {
- const chosen = category.value === chosenCategory;
-
- return ;
- })}
-
-
-
-
-
-
-
-
-
-
- Choose a difficulty
-
-
-
-
- {difficulties.map((difficulty, index) => {
- const chosen = difficulty.value === chosenDifficulty;
-
- return (
-
- );
- })}
-
-
-
-
-
-
-
-
-
- Start Quiz!
-
-
-
-
-
-
- );
-};
-
-export default Quiz;
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Quiz.module.scss b/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Quiz.module.scss
deleted file mode 100644
index babf39e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/AppPages/Quiz.module.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-.difficultyContainer {
-
- margin-top: -2rem !important;
-}
-
-.startButton {
-
- background-color: #994ec1;
- padding: 1.25rem;
- margin: 1rem;
- margin-top: -1rem;
- border-radius: 5px;
- text-align: center;
- color: white;
- border: 2px solid #632485;
-}
-
-.questionTitle {
-
- font-size: 1rem;
-}
-
-.answerButton {
-
- height: fit-content;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
-}
-
-.mainGrid {
-
- // margin-top: -2rem;
-}
-
-.mainRow {
-
- margin-top: -2rem;
-}
-
-.emoji {
-
- font-size: 4rem;
- padding: 0;
- margin: 0;
- padding-top: 1rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/NOTES.md b/03_source/mobile.trunk/src/pages/DemoQuizApp/NOTES.md
deleted file mode 100644
index c8efd35..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0139
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Answer.jsx b/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Answer.jsx
deleted file mode 100644
index b18c318..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Answer.jsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { IonButton, IonCol, IonRow } from '@ionic/react';
-import styles from './Quiz.module.scss';
-
-export const Answer = ({ answer, handleAnswerClick, question }) => (
-
-
- handleAnswerClick(e, answer, question)}
- expand="block"
- color="light"
- className={`ion-text-wrap ${styles.answerButton}`}
- >
- {question.answers[answer]}
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/CompletedCard.jsx b/03_source/mobile.trunk/src/pages/DemoQuizApp/components/CompletedCard.jsx
deleted file mode 100644
index 0be18ca..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/CompletedCard.jsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import {
- IonButton,
- IonCard,
- IonCardContent,
- IonCardHeader,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonNote,
- IonRow,
- useIonRouter,
-} from '@ionic/react';
-import styles from './Quiz.module.scss';
-import { updateChosenCategory, updateChosenDifficulty } from '../store/SettingsStore';
-
-export const CompletedCard = ({ completionContainerRef, score, questionsLength }) => {
- const router = useIonRouter();
-
- const playAgain = () => {
- updateChosenCategory(false);
- updateChosenDifficulty(false);
- router.push('/');
- };
-
- return (
-
-
-
-
-
- Congratulations
- Quiz Complete!
- 🎉
-
-
-
- You scored
-
-
- {score}/{questionsLength}
-
-
-
- Play Again!
-
-
-
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Quiz.module.scss b/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Quiz.module.scss
deleted file mode 100644
index babf39e..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Quiz.module.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-.difficultyContainer {
-
- margin-top: -2rem !important;
-}
-
-.startButton {
-
- background-color: #994ec1;
- padding: 1.25rem;
- margin: 1rem;
- margin-top: -1rem;
- border-radius: 5px;
- text-align: center;
- color: white;
- border: 2px solid #632485;
-}
-
-.questionTitle {
-
- font-size: 1rem;
-}
-
-.answerButton {
-
- height: fit-content;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
-}
-
-.mainGrid {
-
- // margin-top: -2rem;
-}
-
-.mainRow {
-
- margin-top: -2rem;
-}
-
-.emoji {
-
- font-size: 4rem;
- padding: 0;
- margin: 0;
- padding-top: 1rem;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/QuizStats.jsx b/03_source/mobile.trunk/src/pages/DemoQuizApp/components/QuizStats.jsx
deleted file mode 100644
index 137e292..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/QuizStats.jsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { IonCard, IonCardContent, IonCardSubtitle, IonCol, IonItem, IonLabel, IonNote, IonRow } from "@ionic/react";
-
-export const QuizStats = ({ chosenCategory, chosenDifficulty, currentQuestion, questionsLength, score }) => (
-
-
-
-
-
- { chosenCategory } | { chosenDifficulty }
-
-
- Question
- { currentQuestion } / { questionsLength }
-
-
-
- Score
- { score }
-
-
-
-
-
-
-);
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Settings.jsx b/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Settings.jsx
deleted file mode 100644
index 6ea398c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Settings.jsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { IonCol } from "@ionic/react";
-import { updateChosenCategory, updateChosenDifficulty } from "../store/SettingsStore";
-import styles from "./Settings.module.scss";
-
-export const Category = ({ label, value, set, chosen }) => (
-
- updateChosenCategory(value) }>
- { label }
-
-);
-
-export const Difficulty = ({ label, value, set, chosen }) => (
-
- updateChosenDifficulty(value) }>
- { label }
-
-);
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Settings.module.scss b/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Settings.module.scss
deleted file mode 100644
index 1aeadf8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/components/Settings.module.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-.category {
-
- height: 4rem;
- border: 5px solid rgb(255, 255, 255);
- background-color: #994ec1;
- color: white;
- border-radius: 10px;
- text-align: center;
- justify-content: center;
- align-content: center;
- display: flex;
- align-items: center;
- font-weight: 700;
-}
-
-.chosen {
-
- border: 2px solid #3a1d49;
- font-weight: 700;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/index.tsx b/03_source/mobile.trunk/src/pages/DemoQuizApp/index.tsx
deleted file mode 100644
index 6138886..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/index.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import Home from './AppPages/Home';
-import Quiz from './AppPages/Quiz';
-import Questions from './AppPages/Questions';
-
-import './style.scss';
-
-function DemoQuizApp() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoQuizApp;
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/questions/index.js b/03_source/mobile.trunk/src/pages/DemoQuizApp/questions/index.js
deleted file mode 100644
index 000eeba..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/questions/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const API_URL = 'https://quizapi.io/api/v1/questions';
-const API_KEY = 'B27jnk1wmfEOQ42FtmrgBogiNTLLhOArJj29y24a';
-
-export const fetchQuestions = async (category, difficulty) => {
- const response = await fetch(
- `${API_URL}?apiKey=${API_KEY}&category=${category}&difficulty=${difficulty}&limit=10`
- );
- const questions = await response.json();
-
- return questions;
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/store/Selectors.js b/03_source/mobile.trunk/src/pages/DemoQuizApp/store/Selectors.js
deleted file mode 100644
index 1e6b3dd..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/store/Selectors.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { createSelector } from "reselect";
-
-const getState = state => state;
-
-// Getters
-export const getCategories = createSelector(getState, state => state.categories);
-export const getDifficulties = createSelector(getState, state => state.difficulties);
-
-export const getChosenCategory = createSelector(getState, state => state.chosenCategory);
-export const getChosenDifficulty = createSelector(getState, state => state.chosenDifficulty);
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/store/SettingsStore.js b/03_source/mobile.trunk/src/pages/DemoQuizApp/store/SettingsStore.js
deleted file mode 100644
index cb35422..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/store/SettingsStore.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import { Store } from "pullstate";
-
-const SettingsStore = new Store({
-
- categories: [
- {
- label: "Code",
- value: "code",
- },
- {
- label: "Linux",
- value: "linux"
- },
- {
- label: "Dev Ops",
- value: "devops"
- },
- {
- label: "Authentication",
- value: "authentication"
- },
- {
- label: "Bash",
- value: "bash"
- },
- {
- label: "SQL",
- value: "sql"
- }
- ],
- difficulties: [
- {
- label: "Easy",
- value: "easy"
- },
- {
- label: "Medium",
- value: "medium"
- },
- {
- label: "Hard",
- value: "hard"
- }
- ],
-
- chosenCategory: false,
- chosenDifficulty: false
-});
-
-export default SettingsStore;
-
-export const updateChosenCategory = category => {
-
- SettingsStore.update(s => { s.chosenCategory = category });
-}
-
-export const updateChosenDifficulty = difficulty => {
-
- SettingsStore.update(s => { s.chosenDifficulty = difficulty });
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/store/index.js b/03_source/mobile.trunk/src/pages/DemoQuizApp/store/index.js
deleted file mode 100644
index b85ef88..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuizApp/store/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as SettingsStore } from "./SettingsStore";
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuizApp/style.scss b/03_source/mobile.trunk/src/pages/DemoQuizApp/style.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Home.jsx b/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Home.jsx
deleted file mode 100644
index 3769f25..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Home.jsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import {
- IonButtons,
- IonContent,
- IonGrid,
- IonHeader,
- IonInfiniteScroll,
- IonInfiniteScrollContent,
- IonList,
- IonMenuButton,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useStoreState } from 'pullstate';
-import { useState } from 'react';
-import { QuoteItem } from '../components/QuoteItem';
-import { QuoteStore } from '../store';
-import { getQuotes } from '../store/Selectors';
-
-const Home = () => {
- const quotes = useStoreState(QuoteStore, getQuotes);
- const [amountLoaded, setAmountLoaded] = useState(20);
-
- const fetchMore = async (e) => {
- setAmountLoaded((amountLoaded) => amountLoaded + 20);
- e.target.complete();
- };
-
- return (
-
-
-
-
-
-
- Home
-
-
-
-
-
-
- Home
-
-
-
-
- {/* TODO: the source of the quote is already broken */}
- the source broken
-
-
-
- {quotes.map((quote, index) => {
- if (index <= amountLoaded && quote.author) {
- return ;
- } else return '';
- })}
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Quote.jsx b/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Quote.jsx
deleted file mode 100644
index 4efb394..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Quote.jsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { IonBackButton, IonButton, IonButtons, IonCard, IonCardContent, IonCol, IonContent, IonHeader, IonIcon, IonImg, IonPage, IonRow, IonTitle, IonToolbar, useIonToast } from '@ionic/react';
-import { bookmarkOutline, checkmarkOutline, copyOutline } from 'ionicons/icons';
-import { useStoreState } from 'pullstate';
-import { useEffect, useState } from 'react';
-import { useParams } from 'react-router';
-import { QuoteStore } from '../store';
-import { addSavedQuote, removeSavedQuote } from '../store/QuoteStore';
-import { getQuote, getSavedQuotes } from '../store/Selectors';
-
-import { Clipboard } from '@capacitor/clipboard';
-
-const Quote = () => {
-
- const { id } = useParams();
- const quote = useStoreState(QuoteStore, getQuote(id));
- const saved = useStoreState(QuoteStore, getSavedQuotes);
- const [ bookmarked, setBookmarked ] = useState(false);
-
- const [ present ] = useIonToast();
-
- useEffect(() => {
-
- setBookmarked(saved.includes(parseInt(id)));
- }, [ saved, id ]);
-
- const copyQuote = async () => {
-
- await Clipboard.write({
-
- string: quote.text
- });
-
- present({
-
- header: "Success",
- message: "Quote copied to clipboard!",
- duration: 2500,
- color: "primary"
- });
- }
-
- return (
-
-
-
-
-
-
- Quote
-
-
-
-
-
-
- Quote
-
-
-
-
-
-
- { quote.text }
- - { quote.author }
-
-
-
-
- bookmarked ? removeSavedQuote(quote.id) : addSavedQuote(quote.id) }>
-
- { bookmarked ? "Bookmarked" : "Save as Bookmark" }
-
-
-
-
-
-
- Copy Quote
-
-
-
-
-
-
- );
-};
-
-export default Quote;
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Saved.jsx b/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Saved.jsx
deleted file mode 100644
index 171c2a8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/AppPages/Saved.jsx
+++ /dev/null
@@ -1,74 +0,0 @@
-import { IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonInfiniteScroll, IonInfiniteScrollContent, IonList, IonMenuButton, IonPage, IonRow, IonTitle, IonToolbar } from '@ionic/react';
-import { useStoreState } from 'pullstate';
-import { useState } from 'react';
-import { QuoteItem } from '../components/QuoteItem';
-import { QuoteStore } from '../store';
-import { getQuotes, getSavedQuotes } from '../store/Selectors';
-
-const Saved = () => {
-
- const quotes = useStoreState(QuoteStore, getQuotes);
- const saved = useStoreState(QuoteStore, getSavedQuotes);
- const [ amountLoaded, setAmountLoaded ] = useState(20);
-
- const fetchMore = async e => {
-
- setAmountLoaded(amountLoaded => amountLoaded + 20);
- e.target.complete();
- }
-
- return (
-
-
-
-
-
-
- Bookmarks
-
-
-
-
-
-
- Bookmarks
-
-
-
-
- { quotes.length > 0 &&
-
-
-
- { quotes.map((quote, index) => {
-
- if ((index <= amountLoaded) && saved.includes(parseInt(quote.id))) {
- return (
-
-
- );
- } else return "";
- })}
-
-
-
-
-
-
-
- }
-
- { quotes.length < 1 &&
-
-
- You haven't saved any bookmarks yet.
-
-
- }
-
-
-
- );
-};
-
-export default Saved;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/NOTES.md b/03_source/mobile.trunk/src/pages/DemoQuoteApp/NOTES.md
deleted file mode 100644
index bc5c8ee..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0140
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/Menu.css b/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/Menu.css
deleted file mode 100644
index 0ca47a2..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/Menu.css
+++ /dev/null
@@ -1,113 +0,0 @@
-ion-menu ion-content {
- --background: var(--ion-item-background, var(--ion-background-color, #fff));
-}
-
-ion-menu.md ion-content {
- --padding-start: 8px;
- --padding-end: 8px;
- --padding-top: 20px;
- --padding-bottom: 20px;
-}
-
-ion-menu.md ion-list {
- padding: 20px 0;
-}
-
-ion-menu.md ion-note {
- margin-bottom: 30px;
-}
-
-ion-menu.md ion-list-header, ion-menu.md ion-note {
- padding-left: 10px;
-}
-
-ion-menu.md ion-list#inbox-list {
- border-bottom: 1px solid var(--ion-color-step-150, #d7d8da);
-}
-
-ion-menu.md ion-list#inbox-list ion-list-header {
- font-size: 22px;
- font-weight: 600;
- min-height: 20px;
-}
-
-ion-menu.md ion-list#labels-list ion-list-header {
- font-size: 16px;
- margin-bottom: 18px;
- color: #757575;
- min-height: 26px;
-}
-
-ion-menu.md ion-item {
- --padding-start: 10px;
- --padding-end: 10px;
- border-radius: 4px;
-}
-
-ion-menu.md ion-item.selected {
- --background: rgba(var(--ion-color-primary-rgb), 0.14);
-}
-
-ion-menu.md ion-item.selected ion-icon {
- color: var(--ion-color-primary);
-}
-
-ion-menu.md ion-item ion-icon {
- color: #616e7e;
-}
-
-ion-menu.md ion-item ion-label {
- font-weight: 500;
-}
-
-ion-menu.ios ion-content {
- --padding-bottom: 20px;
-}
-
-ion-menu.ios ion-list {
- padding: 20px 0 0 0;
-}
-
-ion-menu.ios ion-note {
- line-height: 24px;
- margin-bottom: 20px;
-}
-
-ion-menu.ios ion-item {
- --padding-start: 16px;
- --padding-end: 16px;
- --min-height: 50px;
-}
-
-ion-menu.ios ion-item ion-icon {
- font-size: 24px;
- color: #73849a;
-}
-
-ion-menu.ios ion-item .selected ion-icon {
- color: var(--ion-color-primary);
-}
-
-ion-menu.ios ion-list#labels-list ion-list-header {
- margin-bottom: 8px;
-}
-
-ion-menu.ios ion-list-header,
-ion-menu.ios ion-note {
- padding-left: 16px;
- padding-right: 16px;
-}
-
-ion-menu.ios ion-note {
- margin-bottom: 8px;
-}
-
-ion-note {
- display: inline-block;
- font-size: 16px;
- color: var(--ion-color-medium-shade);
-}
-
-ion-item.selected {
- --color: var(--ion-color-primary);
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/Menu.jsx b/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/Menu.jsx
deleted file mode 100644
index c42c9e3..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/Menu.jsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import {
- IonContent,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonListHeader,
- IonMenu,
- IonMenuToggle,
- IonNote,
-} from '@ionic/react';
-
-import { useLocation } from 'react-router-dom';
-import { bookmarkOutline, bookmarkSharp, homeOutline, homeSharp } from 'ionicons/icons';
-import './Menu.css';
-import { useStoreState } from 'pullstate';
-import { QuoteStore } from '../store';
-import { getSavedQuotes } from '../store/Selectors';
-
-const Menu = () => {
-
- const location = useLocation();
- const saved = useStoreState(QuoteStore, getSavedQuotes);
-
- const appPages = [
- {
- title: 'Home',
- url: '/home',
- iosIcon: homeOutline,
- mdIcon: homeSharp
- },
- {
- title: `Bookmarks (${ saved.length })`,
- url: '/saved',
- iosIcon: bookmarkOutline,
- mdIcon: bookmarkSharp
- }
- ];
-
- return (
-
-
-
- Ionic Quotes
- hey there!
- {appPages.map((appPage, index) => {
- return (
-
-
-
- {appPage.title}
-
-
- );
- })}
-
-
-
- );
-};
-
-export default Menu;
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/QuoteItem.jsx b/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/QuoteItem.jsx
deleted file mode 100644
index 85c516f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/QuoteItem.jsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { IonCol, IonItem, IonLabel } from "@ionic/react";
-import styles from "./QuoteItem.module.css";
-
-export const QuoteItem = ({ quote }) => {
-
- return (
-
-
-
-
- { quote.text }
- { quote.author }
-
-
-
- );
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/QuoteItem.module.css b/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/QuoteItem.module.css
deleted file mode 100644
index 8baadf6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/components/QuoteItem.module.css
+++ /dev/null
@@ -1,21 +0,0 @@
-.quoteItem {
-
- --quote-item-background: rgb(49, 117, 226);
-
- border: 2px solid rgb(154, 204, 245);
- border-radius: 10px;
- --background: var(--quote-item-background);
- background: var(--quote-item-background);
- color: white;
- padding: 1rem;
-}
-
-.quoteText p {
-
- color: rgb(25, 51, 93);
-}
-
-.quoteText h1:hover {
-
- color: white;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/index.tsx b/03_source/mobile.trunk/src/pages/DemoQuoteApp/index.tsx
deleted file mode 100644
index 765c40a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/index.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { Route, Redirect } from 'react-router';
-//
-import Quote from './AppPages/Quote';
-import Saved from './AppPages/Saved';
-import Home from './AppPages/Home';
-//
-const DemoQuoteApp = () => {
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-};
-
-export default DemoQuoteApp;
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/QuoteStore.js b/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/QuoteStore.js
deleted file mode 100644
index 6740d86..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/QuoteStore.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Store } from "pullstate";
-
-const QuoteStore = new Store({
-
- quotes: [],
- saved: []
-});
-
-export default QuoteStore;
-
-export const addSavedQuote = id => {
-
- QuoteStore.update(s => { s.saved = [ ...s.saved, id ] });
-}
-
-export const removeSavedQuote = id => {
-
- QuoteStore.update(s => { s.saved = s.saved.filter(savedId => parseInt(savedId) !== parseInt(id)) });
-}
-
-export const fetchQuotes = async () => {
-
- const response = await fetch("https://type.fit/api/quotes");
- const data = await response.json();
-
- await data.filter((quote, index) => {
-
- quote.id = (Date.now() + index);
- quote.image = `https://source.unsplash.com/random/1200x400?sig=${ quote.id }`;
- });
-
- QuoteStore.update(s => { s.quotes = data });
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/Selectors.js b/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/Selectors.js
deleted file mode 100644
index a86119c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/Selectors.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { createSelector } from 'reselect';
-
-const getState = state => state;
-
-// General getters
-export const getQuotes = createSelector(getState, state => state.quotes);
-export const getSavedQuotes = createSelector(getState, state => state.saved);
-
-// Specific getters
-export const getQuote = id => createSelector(getState, state => state.quotes.filter(q => parseInt(q.id) === parseInt(id))[0]);
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/index.js b/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/index.js
deleted file mode 100644
index 573f0a4..0000000
--- a/03_source/mobile.trunk/src/pages/DemoQuoteApp/store/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as QuoteStore } from "./QuoteStore";
diff --git a/03_source/mobile.trunk/src/pages/DemoQuoteApp/style.scss b/03_source/mobile.trunk/src/pages/DemoQuoteApp/style.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/NOTES.md b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/NOTES.md
deleted file mode 100644
index 18c63ae..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0141
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 950c702..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/DemoReactAddToCart/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 455cec6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/AddToCartButton.module.css b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/AddToCartButton.module.css
deleted file mode 100644
index 3af5d30..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/AddToCartButton.module.css
+++ /dev/null
@@ -1,14 +0,0 @@
-.buttonContainer {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- align-items: center;
-}
-
-.button {
- --padding-top: 1.75rem;
- --padding-bottom: 1.75rem;
- --padding-start: 1.75rem;
- --padding-end: 1.75rem;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/AddToCartButton.tsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/AddToCartButton.tsx
deleted file mode 100644
index 82a1789..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/AddToCartButton.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { CreateAnimation, IonButton, IonIcon } from '@ionic/react';
-import React, { useRef, useState } from 'react';
-
-import styles from './AddToCartButton.module.css';
-import { cartOutline } from 'ionicons/icons';
-
-const AddToCartButton = ({
- icon = true,
- color = 'primary',
- customOnClick = null,
-}): React.JSX.Element => {
- const iconRef = useRef(null);
- const [hidden, setHidden] = useState(true);
-
- const floatStyle = {
- display: hidden ? 'none' : '',
- position: 'absolute',
- };
-
- const floatGrowAnimation = {
- property: 'transform',
- fromValue: 'translateY(0) scale(1)',
- toValue: 'translateY(-55px) scale(1.2)',
- };
-
- const colorAnimation = {
- property: 'color',
- fromValue: 'white',
- toValue: `var(--ion-color-${color}`,
- };
-
- const mainAnimation = {
- duration: 700,
- iterations: '1',
- fromTo: [floatGrowAnimation, colorAnimation],
- easing: 'cubic-bezier(0.25, 0.7, 0.25, 0.7)',
- };
-
- const handleClick = async () => {
- setHidden(false);
- await iconRef.current.animation.play();
- setHidden(true);
- customOnClick && customOnClick();
- };
-
- return (
-
-
- {!icon && 'Add to cart'}
- {icon && }
-
-
-
-
-
-
- );
-};
-
-export default AddToCartButton;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/Product.module.css b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/Product.module.css
deleted file mode 100644
index fa0f815..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/Product.module.css
+++ /dev/null
@@ -1,19 +0,0 @@
-.priceContainer {
-
- display: flex;
- flex-direction: row;
- align-content: center;
- justify-content: space-between;
- align-items: center;
-}
-
-.price {
-
- margin-top: 0.7rem;
- border: 1px solid var(--ion-color-primary);
- color: var(--ion-color-primary);
- width: fit-content;
- padding: 1rem;
- border-radius: 10px;
- font-weight: 600;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/Product.tsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/Product.tsx
deleted file mode 100644
index 272efcb..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/components/Product.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardHeader,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonRow,
- IonText,
-} from '@ionic/react';
-import AddToCartButton from './AddToCartButton';
-
-import styles from './Product.module.css';
-
-const Product = ({ product }): React.JSX.Element => {
- const handleAdd = (product) => {
- console.log(`Product added: ${product.name}`);
- console.log({ product });
-
- // Do something
- // Update Main Cart
- // Global State Stuff
- // API Call
- // etc etc
- };
-
- return (
-
-
- {product.name}
- {product.description}
-
-
-
-
-
-
-
-
-
-
- Product Features
- {product.features.map((feature, index) => {
- return {feature}
;
- })}
-
-
-
-
-
- {product.price}
- handleAdd(product)} />
-
-
-
-
- );
-};
-
-export default Product;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/index.tsx
deleted file mode 100644
index c0009af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/index.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import './theme/variables.scss';
-import Home from './pages/Home';
-
-function DemoReactAddToCart() {
- return (
-
-
- {/*
-
-
-
-
-
-
- */}
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoReactAddToCart;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/module.d.ts b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/module.d.ts
deleted file mode 100644
index d774364..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/module.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/Home.css b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/Home.css
deleted file mode 100644
index 2877bc5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/Home.css
+++ /dev/null
@@ -1,19 +0,0 @@
-.price-container {
-
- display: flex;
- flex-direction: row;
- align-content: center;
- justify-content: space-between;
- align-items: center;
-}
-
-.price {
-
- margin-top: 0.7rem;
- border: 1px solid var(--ion-color-primary);
- color: var(--ion-color-primary);
- width: fit-content;
- padding: 1rem;
- border-radius: 10px;
- font-weight: 600;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/Home.tsx
deleted file mode 100644
index 50ee6ee..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/Home.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import './Home.css';
-import Product from '../components/Product';
-import { products } from './products';
-import React from 'react';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Home = (): React.JSX.Element => {
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
- return (
-
-
-
- Add To Cart Animation
-
-
- handleBackClick()}>
-
-
-
-
-
-
- {products.map((product) => {
- return ;
- })}
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/products.ts b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/products.ts
deleted file mode 100644
index 8dbab04..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/pages/products.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-export const products = [
- {
- id: 1,
- name: 'Macbook Pro',
- description: "13.3' (2020) - M1, 256 GB SSD, Space Grey",
- price: '£1,199',
- image: '/assets/DemoReactAddToCart/macbook.jpeg',
- features: [
- 'macOS 11.0 Big Sur',
- 'Apple M1 chip',
- 'RAM: 8 GB / Storage: 256 GB SSD',
- 'Retina display',
- 'Battery life: Up to 20 hours',
- ],
- },
- {
- id: 2,
- name: 'SONY A7',
- description: 'SONY a7 III Mirrorless Camera - Black',
- price: '£1,699',
- image: '/assets/DemoReactAddToCart/camera.jpeg',
- features: [
- '24.2 megapixels',
- 'Full-frame 35 mm / 35.6 x 23.8 mm CMOS sensor',
- 'Built-in WiFi / Bluetooth / NFC',
- "3' tiltable LCD touchscreen",
- '10 fps in continuous shooting mode',
- ],
- },
- {
- id: 3,
- name: 'HISENSE 55',
- description: "55' Smart 4K Ultra HD HDR LED TV",
- price: '£429',
- image: '/assets/DemoReactAddToCart/tv.jpeg',
- features: [
- 'Picture quality: 1600 PCI',
- 'HDR: HDR10 / Hybrid Log-Gamma (HLG)',
- 'Catch-up TV & 4K streaming',
- 'Freeview HD with Freeview Play',
- 'HDMI 2.0 x 3',
- ],
- },
-];
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/style.scss b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/style.scss
deleted file mode 100644
index e5ac297..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/style.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-#about-page {
- ion-toolbar {
- position: absolute;
-
- top: 0;
- left: 0;
- right: 0;
-
- --background: transparent;
- --color: white;
- }
-
- ion-toolbar ion-back-button,
- ion-toolbar ion-button,
- ion-toolbar ion-menu-button {
- --color: white;
- }
-
- .about-header {
- position: relative;
-
- width: 100%;
- height: 30%;
- }
-
- .about-header .about-image {
- position: absolute;
-
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-
- background-position: center;
- background-size: cover;
- background-repeat: no-repeat;
-
- opacity: 0;
-
- transition: opacity 500ms ease-in-out;
- }
-
- .about-header .madison {
- background-image: url('/assets/DemoReactAddToCart/WeatherDemo/img/about/madison.jpg');
- }
-
- .about-header .austin {
- background-image: url('/assets/DemoReactAddToCart/WeatherDemo/img/about/austin.jpg');
- }
-
- .about-header .chicago {
- background-image: url('/assets/DemoReactAddToCart/WeatherDemo/img/about/chicago.jpg');
- }
-
- .about-header .seattle {
- background-image: url('/assets/DemoReactAddToCart/WeatherDemo/img/about/seattle.jpg');
- }
-
- .about-info {
- position: relative;
- margin-top: -10px;
- border-radius: 10px;
- background: var(--ion-background-color, #fff);
- z-index: 2; // display rounded border above header image
- }
-
- .about-info h3 {
- margin-top: 0;
- }
-
- .about-info ion-list {
- padding-top: 0;
- }
-
- .about-info p {
- line-height: 130%;
-
- color: var(--ion-color-dark);
- }
-
- .about-info ion-icon {
- margin-inline-end: 32px;
- }
-
- /*
- * iOS Only
- */
-
- .ios .about-info {
- --ion-padding: 19px;
- }
-
- .ios .about-info h3 {
- font-weight: 700;
- }
-}
-
-#date-input-popover {
- --offset-y: -var(--ion-safe-area-bottom);
-
- --max-width: 90%;
- --width: 336px;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactAddToCart/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoReactAddToCart/theme/variables.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/NOTES.md b/03_source/mobile.trunk/src/pages/DemoReactCalculator/NOTES.md
deleted file mode 100644
index c8b12fa..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0142
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/Button.module.scss b/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/Button.module.scss
deleted file mode 100644
index d4adbd4..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/Button.module.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-.demo-react-calculator {
- .button,
- .specialButton {
- margin: 0.2rem;
- padding: 1.5rem;
- margin: 0.2rem;
- border-radius: 15px;
- font-size: 1.5rem;
- }
-
- .button {
- color: rgb(255, 255, 255);
- background-color: rgb(58, 58, 58);
- }
-
- .specialButton {
- color: rgb(255, 255, 255);
- background-color: var(--blue-color);
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/Button.tsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/Button.tsx
deleted file mode 100644
index 398d37b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/Button.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { IonCol } from '@ionic/react';
-import styles from './Button.module.scss';
-
-const Button = (props): React.JSX.Element => {
- const { value, special, clickEvent } = props;
-
- return (
- clickEvent(e, value)}
- >
- {value === '/' ? <>÷> : value === '*' ? <>×> : value}
-
- );
-};
-
-export default Button;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/ButtonRow.module.scss b/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/ButtonRow.module.scss
deleted file mode 100644
index 216fb37..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/ButtonRow.module.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-.demo-react-calculator {
- .buttonRow {
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/ButtonRow.tsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/ButtonRow.tsx
deleted file mode 100644
index 375c87f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/components/ButtonRow.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import { IonRow } from '@ionic/react';
-import styles from './ButtonRow.module.scss';
-import React from 'react';
-
-const ButtonRow = (props): React.JSX.Element => {
- return {props.children} ;
-};
-
-export default ButtonRow;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/index.tsx
deleted file mode 100644
index ee886a6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/index.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import './theme/variables.scss';
-import React from 'react';
-import Home from './pages/Home';
-
-function DemoReactCalculator(): React.JSX.Element {
- return (
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoReactCalculator;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/module.d.ts b/03_source/mobile.trunk/src/pages/DemoReactCalculator/module.d.ts
deleted file mode 100644
index 77bc4ab..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/module.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
-declare module '*.module.scss' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoReactCalculator/pages/Home.module.scss
deleted file mode 100644
index a9d7f48..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/pages/Home.module.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-.calculatorContainer {
- padding-bottom: 2.5rem;
- background-color: white;
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.sumContainer {
- display: flex;
- flex-direction: column;
- align-content: center;
- align-items: flex-end;
- padding-right: 2rem;
- margin-top: 2rem;
-
- background-color: rgba(99, 158, 226, 0.1);
- padding: 2rem;
- padding-top: 4rem;
- padding-bottom: 4rem;
-}
-
-.sumContainer h1,
-.sumContainer h4,
-.sumContainer p {
- margin: 0;
- padding: 0;
-}
-
-.sumContainer h1 {
- font-size: 4rem;
-}
-
-.sumContainer p {
- font-size: 2rem;
- color: rgb(163, 163, 163);
-}
-
-.sumContainer h4 {
- color: rgb(197, 197, 197);
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoReactCalculator/pages/Home.tsx
deleted file mode 100644
index e6e8e02..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/pages/Home.tsx
+++ /dev/null
@@ -1,127 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonFooter,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import React, { useEffect, useState } from 'react';
-import Button from '../components/Button';
-import ButtonRow from '../components/ButtonRow';
-import styles from './Home.module.scss';
-
-import {
- checkmarkOutline,
- chevronBackOutline,
- chevronDownCircleOutline,
- closeOutline,
- heart,
- languageOutline,
- menuOutline,
-} from 'ionicons/icons';
-
-import { buttons } from '../utils/Buttons';
-
-const Home = (): React.JSX.Element => {
- const [showTitle, setShowTitle] = useState('_______');
- const [sum, setSum] = useState('0');
- const [sumHistory, setSumHistory] = useState('Ionic Calculator');
-
- const handleClick = (e, operator) => {
- const tempSumHistory = sumHistory.replace('Ionic Calculator', '');
-
- if (operator === '=') {
- calculate();
- } else if (operator === 'C') {
- reset();
- } else if (operator === 'Del') {
- backspace();
- } else {
- setSumHistory(tempSumHistory + operator);
-
- e.target.classList.add('animate__headShake');
-
- setTimeout(() => {
- e.target.classList.remove('animate__headShake');
- }, 500);
- }
- };
-
- useEffect(() => {
- calculate();
- }, [sumHistory]);
-
- const calculate = () => {
- try {
- // eslint-disable-next-line no-eval
- setSum(eval(sumHistory).length > 5 ? eval(sumHistory).toFixed(4) : eval(sumHistory));
- setShowTitle('Ionic Calculator');
- } catch (e) {}
- };
-
- const reset = () => {
- setSumHistory('Ionic Calculator');
- setSum('0');
- setShowTitle('_______');
- };
-
- const backspace = () => {
- const tempSum = sumHistory.substr(0, sumHistory.length - 1);
- setSumHistory(tempSum);
- };
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
- return (
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
- {showTitle &&
{showTitle} }
-
{sumHistory}
-
- {sum.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')}
-
-
-
-
-
-
- {buttons.map((buttonRow, index) => {
- return (
-
- {buttonRow.map((button) => {
- return (
-
- );
- })}
-
- );
- })}
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoReactCalculator/theme/variables.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactCalculator/utils/Buttons.ts b/03_source/mobile.trunk/src/pages/DemoReactCalculator/utils/Buttons.ts
deleted file mode 100644
index 564d0e6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactCalculator/utils/Buttons.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-export const buttons = [
- [
- { value: 'C', special: true },
- { value: '(', special: true },
- { value: ')', special: true },
- { value: '+', special: true },
- ],
- [
- { value: '7', special: false },
- { value: '8', special: false },
- { value: '9', special: false },
- { value: '-', special: true },
- ],
- [
- { value: '4', special: false },
- { value: '5', special: false },
- { value: '6', special: false },
- { value: '*', special: true },
- ],
- [
- { value: '1', special: false },
- { value: '2', special: false },
- { value: '3', special: false },
- { value: '/', special: true },
- ],
- [
- { value: 'Del', special: true },
- { value: '0', special: false },
- { value: '.', special: false },
- { value: '=', special: true },
- ],
-];
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/NOTES.md b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/NOTES.md
deleted file mode 100644
index de2d24a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0143
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/components/ExploreContainer.scss b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/components/ExploreContainer.scss
deleted file mode 100644
index 11d2f90..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/components/ExploreContainer.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-.container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.container strong {
- font-size: 20px;
- line-height: 26px;
-}
-
-.container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
-}
-
-.container a {
- text-decoration: none;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/components/ExploreContainer.tsx b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/components/ExploreContainer.tsx
deleted file mode 100644
index ba6ab8c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/components/ExploreContainer.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import './ExploreContainer.scss';
-
-interface ContainerProps {}
-
-const ExploreContainer: React.FC = () => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/index.tsx
deleted file mode 100644
index cb105e1..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/index.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import Home from './pages/Home';
-
-function DemoReactDrawingCanvas() {
- return (
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoReactDrawingCanvas;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/module.d.ts b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/module.d.ts
deleted file mode 100644
index 4af7be7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/module.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
-
-declare module '*.module.scss' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/pages/Home.module.scss
deleted file mode 100644
index cb14cb5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/pages/Home.module.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.canvasOptions {
- position: absolute;
- z-index: 99999;
- width: 100%;
- background-color: white !important;
- border-bottom: 1px solid rgb(230, 230, 230);
-}
-
-.fixed {
- position: fixed;
- background-color: white;
- border-bottom: 1px solid rgb(204, 204, 204);
-}
-
-.picker {
- width: 100% !important;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/pages/Home.tsx
deleted file mode 100644
index 6f0a46f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/pages/Home.tsx
+++ /dev/null
@@ -1,114 +0,0 @@
-import {
- IonIcon,
- IonItem,
- IonLabel,
- IonInput,
- IonButton,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- Platform,
- IonButtons,
- useIonRouter,
-} from '@ionic/react';
-import { arrowUndoOutline, brushOutline, chevronBackOutline, closeOutline } from 'ionicons/icons';
-import React, { useState } from 'react';
-import styles from './Home.module.scss';
-
-import CanvasDraw from 'react-canvas-draw';
-import { SwatchesPicker } from 'react-color';
-
-const Home = (): React.JSX.Element => {
- var canvasRef = '';
- const [brushColor, setBrushColor] = useState('#000000');
- const [brushSize, setBrushSize] = useState(5);
- const [showColorPicker, setShowColorPicker] = useState(false);
-
- const handleColorChange = (colorValue) => {
- setBrushColor(colorValue.hex);
- };
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- Ionic Drawing Canvas
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
-
-
- setShowColorPicker(!showColorPicker)}
- >
-
-
-
- {showColorPicker && (
-
- )}
-
-
- {!showColorPicker && (
- <>
-
-
- Size
- setBrushSize(parseInt(e.target.value))}
- />
-
-
-
-
- canvasRef.undo()}>
-
-
-
-
-
- canvasRef.clear()}>
-
-
-
- >
- )}
-
-
-
- (canvasRef = canvasDraw)}
- />
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoReactDrawingCanvas/theme/variables.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/NOTES.md b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/NOTES.md
deleted file mode 100644
index 8093ba4..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0144
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/index.tsx
deleted file mode 100644
index 88d41f2..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/index.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import './style.scss';
-import Home from './pages/Home';
-
-function DemoReactHookFormExample() {
- return (
-
-
-
-
-
-
-
-
-
- {/*
-
-
-
- Dashboard
-
-
-
- Search
-
-
- */}
-
- );
-}
-
-export default DemoReactHookFormExample;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/module.d.ts b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/module.d.ts
deleted file mode 100644
index 4af7be7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/module.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
-
-declare module '*.module.scss' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/pages/Home.scss b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/pages/Home.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/pages/Home.tsx
deleted file mode 100644
index 340bb48..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/pages/Home.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonContent,
- IonHeader,
- IonIcon,
- IonInput,
- IonItem,
- IonLabel,
- IonPage,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import './Home.scss';
-import { useForm } from 'react-hook-form';
-
-import { alertCircleOutline, chevronBackOutline } from 'ionicons/icons';
-import React from 'react';
-
-const Home = (): React.JSX.Element => {
- const {
- register,
- handleSubmit,
- formState: { errors },
- } = useForm({
- mode: 'onTouched',
- reValidateMode: 'onChange',
- });
-
- const fields = [
- {
- label: 'Firstname',
- required: true,
- requiredOptions: {
- maxLength: 10,
- },
- props: {
- name: 'firstname',
- type: 'text',
- placeholder: 'Enter a username',
- },
- },
-
- {
- label: 'Age',
- required: true,
- requiredOptions: {
- min: 18,
- max: 99,
- },
- props: {
- name: 'age',
- type: 'number',
- inputmode: 'numeric',
- placeholder: 'Enter your age',
- },
- },
- ];
-
- console.log(errors);
-
- const onSubmit = (data) => {
- console.log(data);
- };
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- React Hook Form
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- React Hook Form
-
-
-
-
- An example using React Hook Form
-
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/style.scss b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/style.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoReactHookFormExample/theme/variables.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoReactItemList/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoReactItemList/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/NOTES.md b/03_source/mobile.trunk/src/pages/DemoReactItemList/NOTES.md
deleted file mode 100644
index 90a8851..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0145
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/components/ExploreContainer.css b/03_source/mobile.trunk/src/pages/DemoReactItemList/components/ExploreContainer.css
deleted file mode 100644
index e99f514..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/components/ExploreContainer.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.container strong {
- font-size: 20px;
- line-height: 26px;
-}
-
-.container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
-}
-
-.container a {
- text-decoration: none;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/components/ExploreContainer.js b/03_source/mobile.trunk/src/pages/DemoReactItemList/components/ExploreContainer.js
deleted file mode 100644
index 4f60628..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/components/ExploreContainer.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import './ExploreContainer.css';
-
-const ExploreContainer = () => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactItemList/index.tsx
deleted file mode 100644
index 3fabe7c..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/index.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import './theme/variables.scss';
-import Home from './pages/Home';
-import Movies from './pages/Movies';
-
-function DemoReactItemList() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
-
-
-
- Dashboard
-
-
-
- Search
-
-
- */}
-
- );
-}
-
-export default DemoReactItemList;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/module.d.ts b/03_source/mobile.trunk/src/pages/DemoReactItemList/module.d.ts
deleted file mode 100644
index 4af7be7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/module.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
-
-declare module '*.module.scss' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Home.module.scss
deleted file mode 100644
index bbd295d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Home.module.scss
+++ /dev/null
@@ -1,127 +0,0 @@
-.page {
- ion-header {
- background-color: #5a55ca;
- }
-
- ion-toolbar {
- --border-style: none;
- --background: #5a55ca;
- --color: white;
- --min-height: 8rem;
-
- // --stripe: #645fd1;
- --stripe: #5a55ca;
- --bg: #645fd1;
- --background: transparent;
- background:
- linear-gradient(135deg, var(--bg) 25%, transparent 25%) -50px 0,
- linear-gradient(225deg, var(--bg) 25%, transparent 25%) -50px 0,
- linear-gradient(315deg, var(--bg) 25%, transparent 25%),
- linear-gradient(45deg, var(--bg) 25%, transparent 25%);
- background-size: 100px 100px;
- background-color: var(--stripe);
-
- ion-button {
- font-size: 1.2rem;
- font-weight: 800;
- }
- }
-
- ion-content {
- --background: #5a55ca;
- overflow: hidden;
- }
-
- ion-card-subtitle {
- padding-left: 1.2rem;
- margin-top: 1.9rem;
- padding-bottom: 0.3rem;
- --color: white;
- }
-
- .results {
- --color: #5a55ca;
- }
-
- ion-searchbar {
- --border-radius: 10px;
- --background: white;
- --color: black;
- min-height: 5rem;
- padding: 1rem;
- padding-top: 0;
- margin-top: -1rem;
- }
-
- ion-list {
- background-color: #e7edfb;
- }
-
- ion-footer {
- background-color: #e7edfb;
- padding: 1rem;
-
- ion-button {
- --background: #5a55ca;
- --background-focused: #6f6bbb;
- --background-activated: #6f6bbb;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- --padding-start: 0.75rem;
- --padding-end: 0.75rem;
- height: 3.5rem;
- font-weight: 700;
- }
- }
-}
-
-.mainContent {
- background-color: #e7edfb;
- height: 100%;
- width: 100%;
- overflow: scroll !important;
- border-top-left-radius: 30px;
- border-top-right-radius: 30px;
-}
-
-.employeeItem {
- --border-radius: 10px;
- --padding-start: 1rem;
- --padding-end: 1rem;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- padding: 1rem;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- min-height: 5rem;
-
- img {
- width: 3rem;
- border-radius: 10px;
- border: 2px solid #e7edfb;
- }
-
- ion-label {
- padding-left: 1.2rem;
-
- h2 {
- font-weight: 600;
- letter-spacing: -0.02rem;
- }
-
- p {
- letter-spacing: -0.03rem;
- }
- }
-
- ion-button {
- --background: #5a55ca;
- --background-focused: #6f6bbb;
- --background-activated: #6f6bbb;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- --padding-start: 0.75rem;
- --padding-end: 0.75rem;
- margin-top: -0.2rem;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Home.tsx
deleted file mode 100644
index f631a9a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Home.tsx
+++ /dev/null
@@ -1,152 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonContent,
- IonFooter,
- IonHeader,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonPage,
- IonSearchbar,
- IonToolbar,
-} from '@ionic/react';
-import { chevronBack, chevronForward, trashOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-import styles from './Home.module.scss';
-
-const Home = () => {
- const [employees, setEmployees] = useState([
- {
- id: 1,
- name: 'Alan Montgomery',
- title: 'Mobile Team Lead',
- avatar: 'https://pbs.twimg.com/profile_images/1383061489469292548/5dhsPd4j_400x400.jpg',
- },
- {
- id: 2,
- name: 'Max Lynch',
- title: 'CEO | Co Founder',
- avatar: 'https://pbs.twimg.com/profile_images/1318970727173885953/bln98FNj_400x400.jpg',
- },
- {
- id: 3,
- name: 'Mike Hartington',
- title: 'Senior Dev Rel',
- avatar: 'https://pbs.twimg.com/profile_images/1084993841898446849/DJ8XtR6L_400x400.jpg',
- },
- {
- id: 4,
- name: 'Matt Netkow',
- title: 'Head of Product Marketing',
- avatar: 'https://pbs.twimg.com/profile_images/1323383930150621187/GKc0nVzi_400x400.jpg',
- },
- {
- id: 5,
- name: 'Ben Sperry',
- title: 'CDO | Co Founder',
- avatar: 'https://pbs.twimg.com/profile_images/1328390491126308864/jHHgl5Dm_400x400.jpg',
- },
- {
- id: 6,
- name: 'Liam DeBeasi',
- title: 'Software Engineer',
- avatar: 'https://pbs.twimg.com/profile_images/1105953692669366273/ZNK4lRAJ_400x400.jpg',
- },
- ]);
-
- const [results, setResults] = useState(employees);
-
- const remove = (id) => {
- document.getElementById(`employeeItem_${id}`).classList.add('animate__slideOutRight');
-
- setTimeout(() => {
- const tempEmployees = [...employees];
- const newEmployees = tempEmployees.filter((e) => parseInt(e.id) !== parseInt(id));
- setResults(newEmployees);
- setEmployees(newEmployees);
- }, 700);
- };
-
- const search = (e) => {
- const searchTerm = e.currentTarget.value;
-
- if (searchTerm !== '') {
- const searchTermLower = searchTerm.toLowerCase();
-
- const newResults = employees.filter((e) => e.name.toLowerCase().includes(searchTermLower));
- setResults(newResults);
- } else {
- setResults(employees);
- }
- };
-
- return (
-
-
-
-
-
-
- Employee List
-
-
-
-
-
- Movies
-
-
-
-
-
-
-
-
-
- {results.length} {results.legnth === 1 ? 'employee' : 'employees'} found
-
-
search(e)}
- onKeyPress={(e) => search(e)}
- placeholder="Search..."
- icon={search}
- slot="end"
- />
-
-
- {results.map((employee, index) => {
- return (
-
-
-
-
- {employee.name}
- {employee.title}
-
-
- remove(employee.id)}>
-
-
-
- );
- })}
-
-
-
-
-
- Add new employee
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Movies.tsx b/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Movies.tsx
deleted file mode 100644
index 28946b2..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/pages/Movies.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-import { IonButton, IonButtons, IonCardSubtitle, IonContent, IonFooter, IonHeader, IonIcon, IonInfiniteScroll, IonInfiniteScrollContent, IonItem, IonLabel, IonList, IonPage, IonRow, IonSearchbar, IonToolbar } from '@ionic/react';
-import { chevronBack, trashOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-import styles from './Home.module.scss';
-
-const Movies = () => {
-
- const [ movies, setMovies ] = useState([]);
- const [ currentPage, setCurrentPage ] = useState(1);
- const [ searchTerm, setSearchTerm ] = useState("");
- const [ totalResults, setTotalResults ] = useState(0);
-
- const search = (e) => {
-
- const searchTermVal = e.currentTarget.value;
-
- if (searchTermVal !== "") {
-
- const searchTermLower = searchTermVal.toLowerCase();
- searchData(searchTermLower);
- setSearchTerm(searchTermLower);
- } else {
-
- getData(true, 1);
- setSearchTerm("");
- setCurrentPage(1);
- }
- }
-
- const searchData = async (searchTermVal, page = 1) => {
-
- const imageBaseURL = "https://image.tmdb.org/t/p/w200";
- const response = await fetch(`https://api.themoviedb.org/3/search/movie?api_key=24600637ab41d89f6dd63b4c52e8b14e&query=${ searchTermVal }&page=${ page }`);
- const data = await response.json();
-
- data.results.forEach(movie => {
-
- var imageURL = "";
-
- if (movie.poster_path !== null) {
-
- imageURL = `${ imageBaseURL }${ movie.poster_path }`;
- } else {
-
- imageURL = "https://critics.io/img/movies/poster-placeholder.png";
- }
-
- movie.image = imageURL;
- });
-
- console.log("in more");
- console.log(data.results);
-
- setTotalResults(data.total_results);
- page === 1 ? setMovies(data.results) : setMovies([ ...movies, ...data.results ]);
- }
-
- const getData = async (initialFetch = true, page = 1) => {
-
- if (initialFetch) {
-
- console.log("initial fetch of movies");
- }
- const imageBaseURL = "https://image.tmdb.org/t/p/w200";
- const response = await fetch(`https://api.themoviedb.org/3/movie/popular?api_key=24600637ab41d89f6dd63b4c52e8b14e&page=${ page }`);
- const data = await response.json();
-
- data.results.forEach(movie => {
-
- var imageURL = "";
-
- if (movie.poster_path !== null) {
-
- imageURL = `${ imageBaseURL }${ movie.poster_path }`;
- } else {
-
- imageURL = "https://critics.io/img/movies/poster-placeholder.png";
- }
-
- movie.image = imageURL;
- });
-
- console.log(data);
-
- setTotalResults(data.total_results);
- initialFetch ? setMovies(data.results) : setMovies([ ...movies, ...data.results ]);
- }
-
- useEffect(() => {
-
- getData();
- }, []);
-
- const fetchMore = async e => {
-
- console.log("in more");
- const newPage = currentPage + 1;
- await setCurrentPage(newPage);
-
- searchTerm === "" ? getData(false, newPage) : searchData(searchTerm, newPage);
- e.target.complete();
- }
-
- return (
-
-
-
-
-
-
-
- Movie List
-
-
-
-
- { totalResults } { (totalResults === 1) ? "movie" : "movies" } found
- search(e) } onKeyPress={ e => search(e) } placeholder="Search..." icon={ search } slot="end" />
-
-
-
-
-
-
- { movies.map((movie, index) => {
-
- return (
-
-
-
-
-
- { movie.title }
- { movie.overview }
-
-
- );
- })}
-
-
-
-
-
-
-
-
-
- Add a Movie
-
-
- );
-};
-
-export default Movies;
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/react-app-env.d.ts b/03_source/mobile.trunk/src/pages/DemoReactItemList/react-app-env.d.ts
deleted file mode 100644
index 6431bc5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactItemList/react-app-env.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/03_source/mobile.trunk/src/pages/DemoReactItemList/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoReactItemList/theme/variables.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/NOTES.md b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/NOTES.md
deleted file mode 100644
index e992a2d..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0146
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/ExploreContainer.css b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/ExploreContainer.css
deleted file mode 100644
index e99f514..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/ExploreContainer.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.container {
- text-align: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.container strong {
- font-size: 20px;
- line-height: 26px;
-}
-
-.container p {
- font-size: 16px;
- line-height: 22px;
- color: #8c8c8c;
- margin: 0;
-}
-
-.container a {
- text-decoration: none;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/ExploreContainer.tsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/ExploreContainer.tsx
deleted file mode 100644
index 354df7b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/ExploreContainer.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import './ExploreContainer.css';
-
-interface ContainerProps {
- name: string;
-}
-
-const ExploreContainer: React.FC = ({ name }) => {
- return (
-
- );
-};
-
-export default ExploreContainer;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/Menu.css b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/Menu.css
deleted file mode 100644
index 0ca47a2..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/Menu.css
+++ /dev/null
@@ -1,113 +0,0 @@
-ion-menu ion-content {
- --background: var(--ion-item-background, var(--ion-background-color, #fff));
-}
-
-ion-menu.md ion-content {
- --padding-start: 8px;
- --padding-end: 8px;
- --padding-top: 20px;
- --padding-bottom: 20px;
-}
-
-ion-menu.md ion-list {
- padding: 20px 0;
-}
-
-ion-menu.md ion-note {
- margin-bottom: 30px;
-}
-
-ion-menu.md ion-list-header, ion-menu.md ion-note {
- padding-left: 10px;
-}
-
-ion-menu.md ion-list#inbox-list {
- border-bottom: 1px solid var(--ion-color-step-150, #d7d8da);
-}
-
-ion-menu.md ion-list#inbox-list ion-list-header {
- font-size: 22px;
- font-weight: 600;
- min-height: 20px;
-}
-
-ion-menu.md ion-list#labels-list ion-list-header {
- font-size: 16px;
- margin-bottom: 18px;
- color: #757575;
- min-height: 26px;
-}
-
-ion-menu.md ion-item {
- --padding-start: 10px;
- --padding-end: 10px;
- border-radius: 4px;
-}
-
-ion-menu.md ion-item.selected {
- --background: rgba(var(--ion-color-primary-rgb), 0.14);
-}
-
-ion-menu.md ion-item.selected ion-icon {
- color: var(--ion-color-primary);
-}
-
-ion-menu.md ion-item ion-icon {
- color: #616e7e;
-}
-
-ion-menu.md ion-item ion-label {
- font-weight: 500;
-}
-
-ion-menu.ios ion-content {
- --padding-bottom: 20px;
-}
-
-ion-menu.ios ion-list {
- padding: 20px 0 0 0;
-}
-
-ion-menu.ios ion-note {
- line-height: 24px;
- margin-bottom: 20px;
-}
-
-ion-menu.ios ion-item {
- --padding-start: 16px;
- --padding-end: 16px;
- --min-height: 50px;
-}
-
-ion-menu.ios ion-item ion-icon {
- font-size: 24px;
- color: #73849a;
-}
-
-ion-menu.ios ion-item .selected ion-icon {
- color: var(--ion-color-primary);
-}
-
-ion-menu.ios ion-list#labels-list ion-list-header {
- margin-bottom: 8px;
-}
-
-ion-menu.ios ion-list-header,
-ion-menu.ios ion-note {
- padding-left: 16px;
- padding-right: 16px;
-}
-
-ion-menu.ios ion-note {
- margin-bottom: 8px;
-}
-
-ion-note {
- display: inline-block;
- font-size: 16px;
- color: var(--ion-color-medium-shade);
-}
-
-ion-item.selected {
- --color: var(--ion-color-primary);
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/Menu.tsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/Menu.tsx
deleted file mode 100644
index 7024a26..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/components/Menu.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-import {
- IonContent,
- IonIcon,
- IonItem,
- IonLabel,
- IonList,
- IonListHeader,
- IonMenu,
- IonMenuToggle,
- IonNote,
-} from '@ionic/react';
-
-import { useLocation } from 'react-router-dom';
-import { archiveOutline, archiveSharp, bookmarkOutline, heartOutline, heartSharp, mailOutline, mailSharp, paperPlaneOutline, paperPlaneSharp, trashOutline, trashSharp, warningOutline, warningSharp } from 'ionicons/icons';
-import './Menu.css';
-
-interface AppPage {
- url: string;
- iosIcon: string;
- mdIcon: string;
- title: string;
-}
-
-const appPages: AppPage[] = [
- {
- title: 'Inbox',
- url: '/page/Inbox',
- iosIcon: mailOutline,
- mdIcon: mailSharp
- },
- {
- title: 'Outbox',
- url: '/page/Outbox',
- iosIcon: paperPlaneOutline,
- mdIcon: paperPlaneSharp
- },
- {
- title: 'Favorites',
- url: '/page/Favorites',
- iosIcon: heartOutline,
- mdIcon: heartSharp
- },
- {
- title: 'Archived',
- url: '/page/Archived',
- iosIcon: archiveOutline,
- mdIcon: archiveSharp
- },
- {
- title: 'Trash',
- url: '/page/Trash',
- iosIcon: trashOutline,
- mdIcon: trashSharp
- },
- {
- title: 'Spam',
- url: '/page/Spam',
- iosIcon: warningOutline,
- mdIcon: warningSharp
- }
-];
-
-const labels = ['Family', 'Friends', 'Notes', 'Work', 'Travel', 'Reminders'];
-
-const Menu: React.FC = () => {
- const location = useLocation();
-
- return (
-
-
-
- Inbox
- hi@ionicframework.com
- {appPages.map((appPage, index) => {
- return (
-
-
-
- {appPage.title}
-
-
- );
- })}
-
-
-
- Labels
- {labels.map((label, index) => (
-
-
- {label}
-
- ))}
-
-
-
- );
-};
-
-export default Menu;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/index.tsx
deleted file mode 100644
index f11c471..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import Page from './pages/Page';
-import Page2 from './pages/Page2';
-
-function DemoReactLifecycles() {
- return (
-
-
- {/*
-
-
-
-
-
-
- */}
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
-
-
-
- Dashboard
-
-
-
- Search
-
-
- */}
-
- );
-}
-
-export default DemoReactLifecycles;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/pages/Page.css b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/pages/Page.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/pages/Page.tsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/pages/Page.tsx
deleted file mode 100644
index 00ae96f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/pages/Page.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonMenuButton,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-import { useParams } from 'react-router';
-import ExploreContainer from '../components/ExploreContainer';
-import './Page.css';
-import { chevronBackOutline } from 'ionicons/icons';
-
-const Page: React.FC = () => {
- const { name } = useParams<{ name: string }>();
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
- return (
-
-
-
-
-
-
- {name}
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
-
- {name}
-
-
-
-
-
-
- Navigate to Page 2
-
-
-
-
-
- );
-};
-
-export default Page;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/pages/Page2.tsx b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/pages/Page2.tsx
deleted file mode 100644
index 721aca5..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/pages/Page2.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { IonBackButton, IonButtons, IonContent, IonHeader, IonMenuButton, IonPage, IonTitle, IonToolbar, useIonViewDidEnter, useIonViewDidLeave, useIonViewWillEnter, useIonViewWillLeave } from '@ionic/react';
-import { useEffect } from 'react';
-import { useParams } from 'react-router';
-import ExploreContainer from '../components/ExploreContainer';
-import './Page.css';
-
-const Page2: React.FC = () => {
-
- const { name } = useParams<{ name: string; }>();
-
- useEffect(() => {
-
- console.log("In useEffect");
-
- return () => {
-
- console.log("In useEffect cleanup");
- }
- }, []);
-
- useIonViewWillEnter(() => {
-
- console.log("In useIonViewWillEnter");
- });
-
- useIonViewDidEnter(() => {
-
- console.log("In useIonViewDidEnter");
- });
-
- useIonViewWillLeave(() => {
-
- console.log("In useIonViewWillLeave");
- });
-
- useIonViewDidLeave(() => {
-
- console.log("In useIonViewDidLeave");
- });
-
- return (
-
-
-
-
-
-
- {name}
-
-
-
-
-
-
- {name}
-
-
-
-
-
- );
-};
-
-export default Page2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/style.scss b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/style.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLifecycles/theme/variables.css b/03_source/mobile.trunk/src/pages/DemoReactLifecycles/theme/variables.css
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/NOTES.md b/03_source/mobile.trunk/src/pages/DemoReactLogin/NOTES.md
deleted file mode 100644
index 81cd9b6..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0147
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/components/Action.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/components/Action.tsx
deleted file mode 100644
index 2ef32b7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/components/Action.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { IonCol, IonRouterLink, IonRow } from '@ionic/react';
-
-interface ActionProps {
- message: string;
- text: string;
- link: string;
-}
-
-export const Action = (props: ActionProps): React.JSX.Element => (
-
-
-
- {props.message}
-
- {' '}
- {props.text} →
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/components/CustomField.module.scss b/03_source/mobile.trunk/src/pages/DemoReactLogin/components/CustomField.module.scss
deleted file mode 100644
index ec37f17..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/components/CustomField.module.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-.field:not(:last-child) {
- margin-bottom: 1rem !important;
-}
-
-.field {
- ion-label {
- padding-left: 0.2rem;
- padding-right: 0.5rem;
- color: #d3a6c7;
- display: flex;
- justify-content: space-between;
- align-content: center;
- align-items: center;
-
- p {
- color: rgb(236, 149, 35);
- }
- }
-}
-.customInput {
- --background: #834e76;
- --padding-bottom: 1rem;
- --padding-top: 1rem;
- --padding-start: 1rem;
- --padding-end: 1rem;
- border-radius: 10px;
- margin-top: 0.25rem;
- transition: all 0.2s linear;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/components/CustomField.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/components/CustomField.tsx
deleted file mode 100644
index de5a628..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/components/CustomField.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { IonInput, IonLabel } from '@ionic/react';
-import styles from './CustomField.module.scss';
-
-interface FieldType {
- id: string;
- label: string;
- input: {
- props: any;
- state: any;
- };
-}
-
-interface ErrorType {
- id: string;
- message: string;
-}
-
-interface CustomFieldProps {
- field: FieldType;
- errors?: ErrorType[];
-}
-
-const CustomField = ({ field, errors }: CustomFieldProps): React.JSX.Element => {
- const error = errors && errors.filter((e) => e.id === field.id)[0];
- const errorMessage = error && errors.filter((e) => e.id === field.id)[0].message;
-
- return (
-
-
- {field.label}
- {error && {errorMessage}
}
-
-
-
- );
-};
-
-export default CustomField;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/components/Wave.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/components/Wave.tsx
deleted file mode 100644
index 6e7c821..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/components/Wave.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-export const Wave = (): React.JSX.Element => (
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/data/fields.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/data/fields.tsx
deleted file mode 100644
index 62f7eac..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/data/fields.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { useFormInput } from "./utils";
-
-export const useSignupFields = () => {
-
- return [
- {
- id: "name",
- label: "Name",
- required: true,
- input: {
-
- props: {
-
- type: "text",
- placeholder: "Joe Bloggs"
- },
- state: useFormInput("")
- }
- },
- {
- id: "email",
- label: "Email",
- required: true,
- input: {
-
- props: {
-
- type: "email",
- placeholder: "joe@bloggs.com"
- },
- state: useFormInput("")
- }
- },
- {
- id: "password",
- label: "Password",
- required: true,
- input: {
-
- props: {
-
- type: "password",
- placeholder: "*********"
- },
- state: useFormInput("")
- }
- }
- ];
-}
-
-export const useLoginFields = () => {
-
- return [
-
- {
- id: "email",
- label: "Email",
- required: true,
- input: {
-
- props: {
- type: "email",
- placeholder: "joe@bloggs.com"
- },
- state: useFormInput("")
- }
- },
- {
- id: "password",
- label: "Password",
- required: true,
- input: {
-
- props: {
- type: "password",
- placeholder: "*******"
- },
- state: useFormInput("")
- }
- }
- ];
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/data/utils.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/data/utils.tsx
deleted file mode 100644
index 10a39dd..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/data/utils.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { useState } from "react";
-
-export const useFormInput = (initialValue = "") => {
-
- const [ value, setValue ] = useState(initialValue);
-
- const handleChange = async e => {
-
- const tempValue = await e.currentTarget.value;
- setValue(tempValue);
- }
-
- return {
-
- value,
- reset: (newValue) => setValue(newValue),
- onIonChange: handleChange,
- onKeyUp: handleChange
- };
-}
-
-export const validateForm = fields => {
-
- let errors = [];
-
- fields.forEach(field => {
-
- if (field.required) {
-
- const fieldValue = field.input.state.value;
-
- if (fieldValue === "") {
-
- const error = {
-
- id: field.id,
- message: `Please check your ${ field.id }`,
- };
-
- errors.push(error);
- }
- }
- });
-
- return errors;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/index.tsx
deleted file mode 100644
index 3c4c4dc..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/index.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-import './theme/variables.scss';
-
-import Home from './pages/Home';
-import Login from './pages/Login';
-import Signup from './pages/Signup';
-
-function DemoReactLogin() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
-
-
-
- Dashboard
-
-
-
- Search
-
-
- */}
-
- );
-}
-
-export default DemoReactLogin;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/module.d.ts b/03_source/mobile.trunk/src/pages/DemoReactLogin/module.d.ts
deleted file mode 100644
index 4af7be7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/module.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-declare module '*.module.css' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
-
-declare module '*.module.scss' {
- const classes: { readonly [key: string]: string };
- export default classes;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Home.module.scss b/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Home.module.scss
deleted file mode 100644
index e600dab..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Home.module.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-.homePage {
- ion-header {
- ion-img {
- border-bottom: 3px solid rgb(236, 149, 35);
- }
- }
-
- ion-footer {
- background-color: #7c3b6a;
- color: white;
- }
-}
-
-.getStarted {
- height: 100%;
- background-color: #ffffff;
- background-image:
- radial-gradient(#b8b8b8 1px, transparent 1px), radial-gradient(#b8b8b8 1px, #ffffff 1px);
- background-size: 40px 40px;
- background-position:
- 0 0,
- 20px 20px;
-
- ion-card-title {
- color: black !important;
- letter-spacing: -0.08rem;
- font-weight: 900 !important;
- }
-}
-
-.heading {
- margin-top: 7rem;
-}
-
-.getStartedButton {
- font-size: 1.2rem;
- margin-top: 1rem;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Home.tsx
deleted file mode 100644
index e1329e8..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Home.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import {
- IonButton,
- IonCardTitle,
- IonCol,
- IonContent,
- IonFooter,
- IonGrid,
- IonHeader,
- IonImg,
- IonPage,
- IonRouterLink,
- IonRow,
- IonToolbar,
-} from '@ionic/react';
-import { Action } from '../components/Action';
-import styles from './Home.module.scss';
-
-const Home = (): React.JSX.Element => {
- return (
-
-
- {/* */}
-
- {/* */}
-
-
-
-
-
-
-
- Join millions of other people discovering their creative side
-
-
-
-
-
-
-
-
- Get started →
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Login.module.scss b/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Login.module.scss
deleted file mode 100644
index 344e511..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Login.module.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.loginPage {
- ion-toolbar {
- --border-style: none;
- --border-color: transparent;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- --padding-start: 1rem;
- --padding-end: 1rem;
- }
-}
-
-.headingText {
- h5 {
- margin-top: 0.2rem;
- color: #d3a6c7;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Login.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Login.tsx
deleted file mode 100644
index bcde778..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Login.tsx
+++ /dev/null
@@ -1,112 +0,0 @@
-import {
- IonBackButton,
- IonButton,
- IonButtons,
- IonCardTitle,
- IonCol,
- IonContent,
- IonFooter,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRouterLink,
- IonRow,
- IonToolbar,
-} from '@ionic/react';
-import styles from './Login.module.scss';
-
-import { arrowBack, shapesOutline } from 'ionicons/icons';
-import CustomField from '../components/CustomField';
-import { useLoginFields } from '../data/fields';
-import { Action } from '../components/Action';
-import { Wave } from '../components/Wave';
-import { useEffect, useState } from 'react';
-import { validateForm } from '../data/utils';
-import { useParams } from 'react-router';
-
-interface FieldType {
- id: string;
- label: string;
- input: {
- props: any;
- state: any;
- };
-}
-
-interface ErrorType {
- id: string;
- message: string;
-}
-
-const Login = (): React.JSX.Element => {
- const params = useParams();
-
- const fields: FieldType[] = useLoginFields();
- const [errors, setErrors] = useState(false);
-
- const login = (): void => {
- const errors = validateForm(fields);
- setErrors(errors);
-
- if (!errors.length) {
- // Submit your form here
- }
- };
-
- useEffect(() => {
- return () => {
- fields.forEach((field) => field.input.state.reset(''));
- setErrors(false);
- };
- }, [params]);
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Log in
- Welcome back, hope you're doing well
-
-
-
-
-
- {fields.map((field) => {
- return ;
- })}
-
-
- Login
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Login;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Signup.module.scss b/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Signup.module.scss
deleted file mode 100644
index 0b1f4a7..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Signup.module.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-.signupPage {
- ion-toolbar {
- --border-style: none;
- --border-color: transparent;
- --padding-top: 1rem;
- --padding-bottom: 1rem;
- --padding-start: 1rem;
- --padding-end: 1rem;
- }
-}
-
-.headingText {
- h5 {
- margin-top: 0.2rem;
- color: #d3a6c7;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Signup.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Signup.tsx
deleted file mode 100644
index f607d69..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/pages/Signup.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-import {
- IonBackButton,
- IonButton,
- IonButtons,
- IonCardTitle,
- IonCol,
- IonContent,
- IonFooter,
- IonGrid,
- IonHeader,
- IonIcon,
- IonPage,
- IonRouterLink,
- IonRow,
- IonToolbar,
-} from '@ionic/react';
-import styles from './Signup.module.scss';
-
-import { arrowBack, shapesOutline } from 'ionicons/icons';
-import CustomField from '../components/CustomField';
-import { useSignupFields } from '../data/fields';
-import { Action } from '../components/Action';
-import { Wave } from '../components/Wave';
-import { useEffect, useState } from 'react';
-import { validateForm } from '../data/utils';
-import { useParams } from 'react-router';
-
-interface FieldType {
- id: string;
- label: string;
- input: {
- props: any;
- state: any;
- };
-}
-
-interface ErrorType {
- id: string;
- message: string;
-}
-
-const Signup = (): React.JSX.Element => {
- const params = useParams();
- const fields: FieldType[] = useSignupFields();
- const [errors, setErrors] = useState(false);
-
- const createAccount = (): void => {
- const errors = validateForm(fields);
- setErrors(errors);
-
- if (!errors.length) {
- // Submit your form here
- }
- };
-
- useEffect(() => {
- return () => {
- fields.forEach((field) => field.input.state.reset(''));
- setErrors(false);
- };
- }, [params]);
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sign up
- Lets get to know each other
-
-
-
-
-
- {fields.map((field) => {
- return ;
- })}
-
-
- Create account
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default Signup;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/store/AccountStore.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/store/AccountStore.tsx
deleted file mode 100644
index acfc099..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/store/AccountStore.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Store } from "pullstate";
-
-const AccountStore = new Store({
-
- logged_in: false,
- coffee_ids: []
-});
-
-export default AccountStore;
-
-// export const addToCart = (coffeeID) => {
-
-// CartStore.update(s => { s.coffee_ids = [ ...s.coffee_ids, `${ parseInt(coffeeID) }` ]; });
-// }
-
-// export const removeFromCart = coffeeIndex => {
-
-// CartStore.update(s => { s.coffee_ids.splice(coffeeIndex, 1) });
-// }
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/store/Selectors.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/store/Selectors.tsx
deleted file mode 100644
index f6cd2f9..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/store/Selectors.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { createSelector } from 'reselect';
-
-const getState = state => state;
-
-// General getters
-// export const getCoffees = createSelector(getState, state => state.coffees);
-// export const getOffers = createSelector(getState, state => state.offers);
-// export const getCoffeeSizes = createSelector(getState, state => state.sizes);
-// export const getCartCoffees = createSelector(getState, state => state.coffee_ids);
-// export const getFavouriteCoffees = createSelector(getState, state => state.coffee_ids);
-
-// // More specific getters
-// export const getCoffee = id => createSelector(getState, state => state.coffees.filter(c => parseInt(c.id) === parseInt(id))[0]);
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/store/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactLogin/store/index.tsx
deleted file mode 100644
index d8e5a9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactLogin/store/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export { default as AccountStore } from "./AccountStore";
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/style.scss b/03_source/mobile.trunk/src/pages/DemoReactLogin/style.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactLogin/theme/variables.scss b/03_source/mobile.trunk/src/pages/DemoReactLogin/theme/variables.scss
deleted file mode 100644
index e69de29..0000000
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/AppPages/Tab1.jsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/AppPages/Tab1.jsx
deleted file mode 100644
index a24d76a..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/AppPages/Tab1.jsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import {
- IonButton,
- IonButtons,
- IonCol,
- IonContent,
- IonHeader,
- IonIcon,
- IonPage,
- IonRow,
- IonTitle,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import { Geolocation } from '@capacitor/geolocation';
-import { useEffect, useState } from 'react';
-import { SkeletonDashboard } from '../TestComponents/SkeletonDashboard';
-import { chevronBackOutline, refreshOutline } from 'ionicons/icons';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab1() {
- const router = useIonRouter();
-
- const [currentWeather, setCurrentWeather] = useState(false);
-
- useEffect(() => {
- getCurrentPosition();
- }, []);
-
- const getCurrentPosition = async () => {
- setCurrentWeather(false);
- const coordinates = await Geolocation.getCurrentPosition();
- getAddress(coordinates.coords);
- };
-
- const getAddress = async (coords) => {
- const query = `${coords.latitude},${coords.longitude}`;
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${query}`
- );
-
- const data = await response.json();
- console.log(data);
- setCurrentWeather(data);
- };
-
- // const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
- My Weather
-
-
- getCurrentPosition()}>
-
-
-
-
-
- handleBackClick()}>
-
-
-
-
-
-
-
-
- Dashboard
-
-
-
-
-
- Here's your location based weather
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export default Tab1;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/AppPages/Tab2.jsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/AppPages/Tab2.jsx
deleted file mode 100644
index c258179..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/AppPages/Tab2.jsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import {
- IonButton,
- IonCol,
- IonContent,
- IonHeader,
- IonPage,
- IonRow,
- IonSearchbar,
- IonTitle,
- IonToolbar,
-} from '@ionic/react';
-import { useState } from 'react';
-import { CurrentWeather } from '../TestComponents/CurrentWeather';
-
-function Tab2() {
- const [search, setSearch] = useState('');
- const [currentWeather, setCurrentWeather] = useState(false);
-
- const performSearch = async () => {
- getAddress(search);
- };
-
- const getAddress = async (city) => {
- const response = await fetch(
- `https://api.weatherapi.com/v1/current.json?key=f93eb660b2424258bf5155016210712&q=${city}&aqi=no`
- );
- const data = await response.json();
-
- if (data && data.current && data.location) {
- setCurrentWeather(data);
- }
- };
-
- return (
-
-
-
- Search
-
-
-
-
-
- Search
-
-
-
-
-
- setSearch(e.target.value)}
- />
-
-
-
-
- Search
-
-
-
-
-
- {currentWeather ? (
-
- ) : (
-
Your search result will appear here
- )}
-
-
-
- );
-}
-
-export default Tab2;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/NOTES.md b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/NOTES.md
deleted file mode 100644
index 0ca1541..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/NOTES.md
+++ /dev/null
@@ -1 +0,0 @@
-# REQ0148
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/CurrentWeather/WeatherProperty.tsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/CurrentWeather/WeatherProperty.tsx
deleted file mode 100644
index 52949af..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/CurrentWeather/WeatherProperty.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import { IonCardSubtitle, IonCol, IonIcon, IonNote, IonRow } from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-import { useEffect, useState } from 'react';
-
-export const WeatherProperty = ({ type, currentWeather }: { type: any; currentWeather: any }) => {
- const [property, setProperty] = useState(false);
-
- const properties = {
- wind: {
- isIcon: false,
- icon: '/assets/WeatherDemo/wind.png',
- alt: 'wind',
- label: 'Wind',
- value: `${currentWeather.current.wind_mph}mph`,
- },
- feelsLike: {
- isIcon: true,
- icon: thermometerOutline,
- alt: 'feels like',
- label: 'Feels like',
- value: `${currentWeather.current.feelslike_c}°C`,
- },
- indexUV: {
- isIcon: true,
- icon: sunnyOutline,
- alt: 'index uv',
- label: 'Index UV',
- value: currentWeather.current.uv,
- },
- pressure: {
- isIcon: true,
- icon: pulseOutline,
- alt: 'pressure',
- label: 'Pressure',
- value: `${currentWeather.current.pressure_mb} mbar`,
- },
- };
-
- useEffect(() => {
- setProperty(properties[type]);
- }, [type]);
-
- return (
-
-
-
- {!property.isIcon && (
-
- )}
- {property.isIcon && (
-
- )}
-
-
-
- {property.label}
- {property.value}
-
-
-
- );
-};
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/CurrentWeather/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/CurrentWeather/index.tsx
deleted file mode 100644
index ceb4332..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/CurrentWeather/index.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { IonCard, IonCardContent, IonGrid, IonRow, IonText, IonCardTitle } from '@ionic/react';
-import { WeatherProperty } from './WeatherProperty';
-
-export const CurrentWeather = ({ currentWeather }: { currentWeather: any }) => (
-
-
-
-
-
- {currentWeather.location.region},{' '}
- {currentWeather.location.country}
-
-
-
-
-
-
-
- {currentWeather.current.condition.text}
-
-
-
- {new Date(currentWeather.location.localtime).toDateString()}
-
-
-
-
- {currentWeather.current.temp_c}℃
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/SkeletonDashboard/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/SkeletonDashboard/index.tsx
deleted file mode 100644
index 234fb9b..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/TestComponents/SkeletonDashboard/index.tsx
+++ /dev/null
@@ -1,117 +0,0 @@
-import {
- IonCard,
- IonCardContent,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonGrid,
- IonIcon,
- IonNote,
- IonRow,
- IonSkeletonText,
- IonText,
- IonThumbnail,
-} from '@ionic/react';
-import { pulseOutline, sunnyOutline, thermometerOutline } from 'ionicons/icons';
-
-export const SkeletonDashboard = () => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wind
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Feels like
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Index UV
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pressure
-
-
-
-
-
-
-
-
-
-
-
-);
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/components/CharacterItem.module.scss b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/components/CharacterItem.module.scss
deleted file mode 100644
index 19c374f..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/components/CharacterItem.module.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-.characterContainer {
-
- position: relative;
- text-align: center;
- color: white;
-}
-
-ion-item {
- --padding-start: 0;
- --inner-padding-end: 0;
-}
-
-ion-label {
- margin-top: 12px;
- margin-bottom: 12px;
-}
-
-.characterNameContainer {
-
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- position: absolute;
- z-index: 99999;
- background-color: rgba(0, 0, 0, 0.7);
- bottom: 0;
- width: 100%;
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.characterNameContainer ion-icon {
-
- margin-top: 0.1rem;
-}
-
-.characterNameContainer ion-label {
-
- font-size: 1rem;
- font-weight: 500;
-}
\ No newline at end of file
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/components/CharacterItem.tsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/components/CharacterItem.tsx
deleted file mode 100644
index e884132..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/components/CharacterItem.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { IonCol, IonIcon, IonImg, IonItem, IonLabel, IonSkeletonText } from "@ionic/react";
-import { chevronForwardOutline } from "ionicons/icons";
-import { Character } from "../../types";
-import styles from "./CharacterItem.module.scss";
-
-interface Props {
- details: Character;
- load?: boolean;
- grid?: boolean;
-}
-
-const CharacterItem = (props: Props): React.JSX.Element => {
-
- const { details, load = false, grid = true } = props;
- const loadAmount = 20;
-
- if (!load) {
- return (
-
-
-
-
-
- { details.name }
-
-
-
-
- );
- } else {
-
- return (
-
- <>
- { Array.from({length: loadAmount }, (item, index) => {
-
- return (
-
-
-
-
-
- );
- })}
- >
- );
- }
-}
-
-export default CharacterItem;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/index.tsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/index.tsx
deleted file mode 100644
index fd4f0e2..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/index.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { IonRouterOutlet, IonTabs } from '@ionic/react';
-
-import { Route, Redirect } from 'react-router';
-
-// import Tab1 from './AppPages/Tab1';
-// import Tab2 from './AppPages/Tab2';
-
-import './theme/variables.scss';
-import Home from './pages/Home';
-import ViewCharacter from './pages/ViewCharacter';
-import Info from './pages/Info';
-
-function DemoReactMarvelApp() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default DemoReactMarvelApp;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Home.scss b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Home.scss
deleted file mode 100644
index e7fd6ce..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Home.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-.demo-react-marvel-app {
- .character-container {
- position: relative;
- text-align: center;
- color: white;
- }
- .character-name-container {
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- align-content: center;
- position: absolute;
- z-index: 99999;
- background-color: rgba(0, 0, 0, 0.7);
- bottom: 0;
- width: 100%;
- padding-left: 1rem;
- padding-right: 1rem;
- }
-
- .character-name-container ion-icon {
- margin-top: 0.5rem;
- }
-
- .character-name-container ion-label {
- font-size: 1rem;
- font-weight: 500;
- }
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Home.tsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Home.tsx
deleted file mode 100644
index 795d440..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Home.tsx
+++ /dev/null
@@ -1,208 +0,0 @@
-import { useEffect, useState } from 'react';
-import {
- IonButton,
- IonButtons,
- IonContent,
- IonHeader,
- IonIcon,
- IonInfiniteScroll,
- IonInfiniteScrollContent,
- IonPage,
- IonRow,
- IonTitle,
- IonToast,
- IonToolbar,
- useIonRouter,
-} from '@ionic/react';
-
-import './Home.scss';
-import {
- addOutline,
- chevronBackOutline,
- expandOutline,
- gridOutline,
- informationCircleOutline,
- searchOutline,
-} from 'ionicons/icons';
-import CharacterItem from '../components/CharacterItem';
-
-const Home = (): React.JSX.Element => {
- const [grid, setGrid] = useState(true);
- const [characters, setCharacters] = useState([]);
- const [amountLoaded, setAmountLoaded] = useState(20);
- const [showToast, setShowToast] = useState<{ show: boolean; message: string }>({
- show: false,
- message: '',
- });
-
- useEffect(() => {
- const buttInstall = document.getElementById('buttInstall');
- window.addEventListener('beforeinstallprompt', (event) => {
- console.log('👍', 'beforeinstallprompt', event);
-
- // Save the event so it can be triggered later.
- window.deferredPrompt = event;
- buttInstall.classList.toggle('hidden', false);
- });
-
- window.addEventListener('appinstalled', (event) => {
- console.log('👍', 'appinstalled', event);
- // Clear the deferredPrompt so it can be garbage collected
- window.deferredPrompt = null;
- });
- }, []);
-
- useEffect(() => {
- const getCharacters = async () => {
- const response = await fetch(
- 'https://gateway.marvel.com/v1/public/characters?ts=alan12345&apikey=e5103c9197bf5466f65433de29139bf9&hash=13b1d704e92de2a50ae29777722bdd75&limit=20&orderBy=-modified'
- );
- const data = await response.json();
-
- const results = data.data.results;
- setCharacters(results);
- };
-
- getCharacters();
- }, []);
-
- const fetchMore = async (e) => {
- // Fetch more characters
- // How?
- // Lets limit it by 20, and offset it by the amount loaded already
- // E.g. 20, 40, 60 just like pagination :)
- // Get the response into json
- const response = await fetch(
- `https://gateway.marvel.com/v1/public/characters?ts=alan12345&apikey=e5103c9197bf5466f65433de29139bf9&hash=13b1d704e92de2a50ae29777722bdd75&limit=20&offset=${amountLoaded}&orderBy=-modified`
- );
- const data = await response.json();
- const results = data.data.results;
-
- // Set the characters by adding the new results to the current
- // Increment the amount loaded by 20 for the next iteration
- // Complete the scroll action
- setCharacters((prevResults) => [...prevResults, ...results]);
- setAmountLoaded((prevAmount) => prevAmount + 20);
- e.target.complete();
- };
-
- const addToHomeScreen = async () => {
- const buttInstall = document.getElementById('buttInstall');
-
- console.log('👍', 'buttInstall-clicked');
- const promptEvent = window.deferredPrompt;
-
- if (!promptEvent) {
- // The deferred prompt isn't available.
- return;
- }
-
- // Show the install prompt.
- promptEvent.prompt();
-
- // Log the result
- const result = await promptEvent.userChoice;
- console.log('👍', 'userChoice', result);
-
- // Reset the deferred prompt variable, since
- // prompt() can only be called once.
- window.deferredPrompt = null;
-
- // Hide the install button.
- buttInstall.classList.toggle('hidden', true);
- };
-
- const router = useIonRouter();
- function handleBackClick() {
- router.goBack();
- }
-
- return (
-
-
-
-
- handleBackClick()}>
-
-
-
-
- Marvel Characters
-
-
-
-
-
-
-
-
- setShowToast({
- show: true,
- message: 'We could easily add a search button here to search characters.',
- })
- }
- >
-
-
-
- addToHomeScreen()}
- >
-
- Install App
-
-
- setGrid((grid) => !grid)}>
-
-
-
-
-
-
-
-
- Marvel Characters
-
-
-
-
- {characters.length > 0 ? (
- characters.map((character, index) => {
- if (!character.thumbnail.path.includes('image_not_available')) {
- return ;
- } else {
- return null;
- }
- })
- ) : (
-
- )}
-
-
-
-
-
-
-
- setShowToast({ show: false, message: '' })}
- message={showToast.message}
- duration={3500}
- color="danger"
- />
-
- );
-};
-
-export default Home;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Info.tsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Info.tsx
deleted file mode 100644
index 44e5afb..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/Info.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import { IonBackButton, IonButton, IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonImg, IonItem, IonLabel, IonPage, IonRow, IonSkeletonText, IonTitle, IonToolbar } from '@ionic/react';
-import { arrowRedoOutline, heartOutline } from 'ionicons/icons';
-import styles from "./ViewCharacter.module.scss";
-
-interface Profile {
- name: string;
- bio: string;
- avatar: string;
- codeLink: string;
- links: Array<{
- name: string;
- url: string;
- }>;
-}
-
-const Info = (): React.JSX.Element => {
-
- const profile = {
-
- name: "Alan Montgomery",
- bio: "My name is Alan. I’m a Mobile Team Lead and Senior Developer and have built numerous production, real world mobile apps for local government authorities. I have a real passion and love for sharing my knowledge and expertise with developers wanting to learn and get better at using certain technologies.",
- avatar: "/assets/alan.jpg",
- codeLink: "https://github.com/alanmontgomery/ionic-react-marvel-app",
- links: [
- {
- name: "Twitter",
- url: "https://twitter.com/93alan"
- }
- ],
- }
- return (
-
-
-
-
-
-
-
- { navigator.platform.match(/iPhone|iPod|iPad/) && { profile.name } }
-
-
-
-
- { profile ?
- (
- <>
-
-
-
- { profile.name }
-
-
-
-
-
-
-
- { profile.bio }
-
-
-
-
-
-
-
-
- Lets connect on Twitter
-
-
-
-
-
-
-
-
-
-
- Source code for this app
-
-
-
-
-
-
- >
- )
- :
-
- }
-
-
- );
-}
-
-export default Info;
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/ViewCharacter.module.scss b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/ViewCharacter.module.scss
deleted file mode 100644
index cf5db86..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/ViewCharacter.module.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-.characterContainer {
- position: relative;
- text-align: center;
- color: white;
-}
-
-ion-item {
- --padding-start: 0;
- --inner-padding-end: 0;
-}
-
-ion-label {
- margin-top: 12px;
- margin-bottom: 12px;
-}
-
-.characterNameContainer {
- display: flex;
- flex-direction: row;
- justify-content: center;
- position: absolute;
- z-index: 99999;
- background-color: rgba(0, 0, 0, 0.7);
- bottom: 0;
- width: 100%;
-}
-
-.characterNameContainer ion-label {
- font-size: 1rem !important;
- font-weight: 500;
-}
-
-.characterStats {
- text-align: center;
- margin-top: 1.5rem;
- margin-bottom: 1.5rem;
-}
-
-.characterStat {
- background-color: var(--ion-color-primary);
- padding: 1rem;
-}
-
-.characterStat ion-card-title {
- font-size: 1rem;
- --color: white;
-}
-
-.characterStat ion-card-subtitle {
- font-size: 1rem;
- --color: white;
-}
diff --git a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/ViewCharacter.tsx b/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/ViewCharacter.tsx
deleted file mode 100644
index 3fb8156..0000000
--- a/03_source/mobile.trunk/src/pages/DemoReactMarvelApp/pages/ViewCharacter.tsx
+++ /dev/null
@@ -1,298 +0,0 @@
-import { useState } from 'react';
-import {
- IonBackButton,
- IonButton,
- IonButtons,
- IonCardSubtitle,
- IonCardTitle,
- IonCol,
- IonContent,
- IonGrid,
- IonHeader,
- IonIcon,
- IonImg,
- IonItem,
- IonLabel,
- IonPage,
- IonRow,
- IonSkeletonText,
- IonTitle,
- IonToast,
- IonToolbar,
- useIonViewWillEnter,
-} from '@ionic/react';
-import { arrowRedoOutline, heartOutline } from 'ionicons/icons';
-import { useParams } from 'react-router';
-
-import styles from './ViewCharacter.module.scss';
-
-interface Comic {
- id: string;
- name: string;
- image: string;
-}
-
-interface Character {
- id: string;
- name: string;
- description: string;
- thumbnail: {
- path: string;
- extension: string;
- };
- comics: {
- available: number;
- items: Array<{
- name: string;
- resourceURI: string;
- }>;
- };
- stories: {
- available: number;
- };
- series: {
- available: number;
- };
- urls: Array<{
- type: string;
- url: string;
- }>;
-}
-
-const ViewCharacter = (): React.JSX.Element => {
- const [character, setCharacter] = useState();
- const [characterComics, setCharacterComics] = useState([]);
- const [showToast, setShowToast] = useState<{ show: boolean; message: string }>({
- show: false,
- message: '',
- });
- const params = useParams();
-
- const getComic = async (comicID: string): Promise => {
- var comicImageURL = false;
- const response = await fetch(
- `https://gateway.marvel.com/v1/public/comics/${comicID}?ts=alan12345&apikey=e5103c9197bf5466f65433de29139bf9&hash=13b1d704e92de2a50ae29777722bdd75`
- );
- const data = await response.json();
-
- if (data) {
- if (data.data) {
- if (data.data.results.length > 0) {
- comicImageURL =
- data.data.results[0].thumbnail.path +
- '/portrait_incredible.' +
- data.data.results[0].thumbnail.extension;
- }
- }
- }
-
- return comicImageURL;
- };
-
- const parseComics = async (result: Character): Promise => {
- const comics = result.comics.items;
-
- await comics.forEach(async (comic) => {
- const name = comic.name;
- const link = comic.resourceURI;
-
- const linkParts = link.split('/');
- const id = linkParts[linkParts.length - 1];
- const image = await getComic(id);
-
- setCharacterComics((current) => [
- ...current,
- {
- id,
- name,
- image,
- },
- ]);
- });
- };
-
- useIonViewWillEnter(async () => {
- const response = await fetch(
- `https://gateway.marvel.com/v1/public/characters/${params.id}?ts=alan12345&apikey=e5103c9197bf5466f65433de29139bf9&hash=13b1d704e92de2a50ae29777722bdd75`
- );
- const data = await response.json();
-
- if (data) {
- if (data.data) {
- if (data.data.results) {
- const result = data.data.results[0];
- setCharacter(result);
- parseComics(result);
- }
- }
- }
- });
-
- return (
-
-
-
-
-
-
-
- {navigator.platform.match(/iPhone|iPod|iPad/) && (
- {character && character.name}
- )}
-
-
-
- setShowToast({
- show: true,
- message:
- "We could easily add a 'like' button here to add a character to favourites.",
- })
- }
- >
-
-
-
-
-
-
-
- {character ? (
- <>
- {navigator.platform.match(/iPhone|iPod|iPad/) ? (
-
-
-
-
-
-