├── .vscode
└── settings.json
├── CONTRIBUTING.md
├── LICENSE
├── README.md
└── projects
└── ionic-starter
├── .dockerignore
├── .editorconfig
├── .eslintrc
├── .eslintrc.json
├── .firebaserc
├── .gitignore
├── .prettierignore
├── .prettierrc
├── .stylelintignore
├── .stylelintrc.json
├── DockerFile
├── angular.json
├── browserslist
├── build.json
├── capacitor.config.json
├── e2e
├── src
│ ├── app.e2e-spec.ts
│ └── app.po.ts
└── tsconfig.json
├── firebase.config.ts
├── firebase.json
├── ionic-starter.jks
├── ionic.config.json
├── jest.config.js
├── karma.conf.js
├── package.json
├── src
├── app
│ ├── app-routing.module.ts
│ ├── app.component.html
│ ├── app.component.scss
│ ├── app.component.spec.ts
│ ├── app.component.ts
│ ├── app.module.ts
│ ├── explore-container
│ │ ├── explore-container.component.html
│ │ ├── explore-container.component.scss
│ │ ├── explore-container.component.spec.ts
│ │ ├── explore-container.component.ts
│ │ └── explore-container.module.ts
│ ├── tab1
│ │ ├── tab1-routing.module.ts
│ │ ├── tab1.module.ts
│ │ ├── tab1.page.html
│ │ ├── tab1.page.scss
│ │ ├── tab1.page.spec.ts
│ │ └── tab1.page.ts
│ ├── tab2
│ │ ├── tab2-routing.module.ts
│ │ ├── tab2.module.ts
│ │ ├── tab2.page.html
│ │ ├── tab2.page.scss
│ │ ├── tab2.page.spec.ts
│ │ └── tab2.page.ts
│ ├── tab3
│ │ ├── tab3-routing.module.ts
│ │ ├── tab3.module.ts
│ │ ├── tab3.page.html
│ │ ├── tab3.page.scss
│ │ ├── tab3.page.spec.ts
│ │ └── tab3.page.ts
│ ├── tab4
│ │ ├── tab4-routing.module.ts
│ │ ├── tab4.module.ts
│ │ ├── tab4.page.html
│ │ ├── tab4.page.scss
│ │ ├── tab4.page.spec.ts
│ │ └── tab4.page.ts
│ └── tabs
│ │ ├── tabs-routing.module.ts
│ │ ├── tabs.module.ts
│ │ ├── tabs.page.html
│ │ ├── tabs.page.scss
│ │ ├── tabs.page.spec.ts
│ │ └── tabs.page.ts
├── assets
│ ├── icon
│ │ └── favicon.png
│ ├── icons
│ │ ├── icon-128x128.png
│ │ ├── icon-144x144.png
│ │ ├── icon-152x152.png
│ │ ├── icon-192x192.png
│ │ ├── icon-384x384.png
│ │ ├── icon-512x512.png
│ │ ├── icon-72x72.png
│ │ └── icon-96x96.png
│ ├── img
│ │ ├── bg-home.jpg
│ │ └── current-ui-app.png
│ └── shapes.svg
├── environments
│ ├── environment.hmr.ts
│ ├── environment.model.ts
│ ├── environment.prod.ts
│ ├── environment.qa.ts
│ └── environment.ts
├── global.scss
├── index.html
├── main.ts
├── manifest.webmanifest
├── ngsw-config.json
├── polyfills.ts
├── test.ts
├── theme
│ └── variables.scss
└── zone-flags.ts
├── tailwind.config.js
├── tsconfig.app.json
├── tsconfig.app.prod.json
├── tsconfig.json
├── tsconfig.spec.json
└── tslint.json
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.tabSize": 4,
3 | "css.validate": false,
4 | "editor.quickSuggestions": {
5 | "strings": true
6 | },
7 | "tailwindCSS.includeLanguages": {
8 | "plaintext": "html"
9 | },
10 | "tailwindCSS.emmetCompletions": true
11 | }
12 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | #Contributing
2 | ============
3 | Si estás aquí es porque muy posiblemente tienes deseos de contribuir, y ciertamente estamos necesitados de ayuda, así que eres bienvenido.
4 |
5 | Seguir esta guía nos indica que respetas el tiempo de los desarrolladores que trabajan activamente en este proyecto, por lo que también respetaremos tus requerimientos y canalizaremos tus pull requests de la mejor forma posible.
6 |
7 | ## ¿Qué necesitamos?
8 | - Proveer documentación y mejorar la que ya exista.
9 | - Escribir tutoriales
10 | - Avisar sobre cualquier bug y ayudar con el seguimiento.
11 | - Mejoras para los componentes (código)
12 | - Nuevos componentes (más código)
13 |
14 | Todas esas son formas de contribuir con lo que hacemos. Así que si tienes una idea para ayudar a mejorar el proyecto, es bienvenida.
15 |
16 | ## Cómo hacer un Commit
17 |
18 | Si el proyecto al que contribuyes tiene una guía sobre cómo hacer commits, síguela. De lo contrario, dejamos como referencia la [Guía de Estilos de Mensajes de Commit ](https://udacity.github.io/git-styleguide/) que utiliza [Udacity](https://www.udacity.com/).
19 |
20 | Ejemplo de mensaje commit:
21 |
22 | > feat: Mejoras de desempeño en carga (el mensaje tiene menos de 50 caracteres)
23 | >
24 | > Cuerpo del mensaje para dar un poco más de detalles acerca de
25 | > las mejoras o arreglos. Como se explicita en la guía, los tipos
26 | > de mensajes pueden ser feat, fix, docs, style, refactor, test, chore (ó config).
27 | >
28 | > Como pie de página se pone el número del Issue (sistema de tickets) que se está arreglando
29 | > y otros Issues que puedan estar relacionados.
30 |
31 | Una cosa más sobre los mensajes; siempre escribe tus commits en tiempo presente, es decir, lo que hace el código aplicado (no lo que hacía antes)_Your commit message should describe what the commit, when applied, does to the code – not what you did to the code.
32 |
33 | ## Cómo hacer un Pull Request
34 |
35 | Cada proyecto ha de tener sus propias instrucciones, así que leelas y síguelas.
36 |
37 | - Crea un fork personal del proyecto en Github.
38 | - Clona el fork en tu ambiente local. Tu repositorio remoto en Github se llamará `origin`.
39 | - Agrega el repositorio original como un remoto llamado `upstream`.
40 | - Asegurate de hacer mantener tu repositorio local actualizado con el repositorio original.
41 | - Crea un nuevo branch sobre el cual vas a trabajar. Si existe `develop` haz el branch de ahí, sino a partir de `master` o `main`.
42 | - Implementa tu mejora o arreglo.
43 | - Comenta adecuadamente tu código.
44 | - Si el proyecto tiene guía de estilo, síguela (implementa Clean Code)
45 | - Corre los tests, si los hay.
46 | - Escribe nuevos tests para tus mejoras y arregla los que se dañen.
47 | - Agrega o adecúa la documentación según sea necesario.
48 | - Empuja (push) tus cambios desde tu branch a tu fork en Github, el remoto `origin`.
49 | - Desde tu fork abre un pull request en el branch correspondiente. Apunta al branch `develop` del proyecto, si lo hay, sino apunta a `master` o `main`.
50 | - …
51 | - Si quien mantiene el repo solicita algun cambio, simplemente hazle push a tu branch, ya que el Pull Request se acutlizará automáticamente.
52 | - Una vez que el PR haya sido aprobado y mezclado, podrás halar (hacer pull) los cambios desde `upstream` hacia tu repositorio local y borrar el branch que creaste para trabajar el cambio.
53 |
54 |
55 | Si tienes alguna sugerencia para esta guía, haznosla saber.
56 |
57 | Happy Coding!
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Ionic Dominicana
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Ionic Starter por @ionic-dominicana 🌴💚🈁
3 |
4 | # ⚡️ Cross-Platform Apps con JS/Web para 🇩🇴 con 💪 ⚡️
5 |
6 | Este baseline de Ionic supone que ya puede lanzar proyectos móviles con todos los poderes activos! Con un espacio de trabajo de Angular aprobado por los documentos oficiales de Angular. :)
7 |
8 | 
9 |
10 | Antes que nada, échese una miradilla táctica con Capacitor Platform:
11 |
12 | ✅ [The Native Bridge for Cross-Platform Web Apps](https://capacitor.ionicframework.com/)
13 |
14 | Invoca SDKs sobre iOS, Android, Electron, y la Web con un sólo código base. Optimizado para Aplicaciones de Ionic Framework como esta, o uso con cualquier framework de aplicación web. ;) ¡Eso es Capacitor! Y como dicen en las películas de los 90s: "Esto apenas es el principio del fin". 😎
15 |
16 | ## TO DO
17 | ✅ Estructura mono-repo básica
18 |
19 | ✅ Últimas versiones de paquetes para Ionic 5.31 + Angular 11.2,
20 |
21 | ✅ Reglas básicas del Linter,
22 |
23 | ✅ Reglas básicas del Prettier,
24 |
25 | ✅ Firebase integrado,
26 |
27 | ✅ Configuración básica de Firebase,
28 |
29 | ✅ Configuración básica de Docker,
30 |
31 | ✅ Archivos Specs de Angular como sintaxis legada, actualizada con buenas prácticas,
32 |
33 | ✅ Script para ejecución de HMR,
34 |
35 | ✅ State Management (AKITA, obviamente 😇),
36 |
37 | ✅ Archivos "environment" extendidos para todos (/dev /qa /prod), incluyendo valores por defecto de firebase,
38 |
39 | ✅ Scripts de compilación para plataformas Android y iOS,
40 |
41 | ✅ Scripts de generación de certificado Android,
42 |
43 | ✅ Scripts de ejecución para plataformas Android y iOS,
44 |
45 | ✅ Scripts para configuración de plataformas,
46 |
47 | ✅ Scripts para revisión de estilos y análisis de archivos TS/ES,
48 |
49 | ✅ ESLint integrado que reemplaza a TSLint en proyectos Angular
50 |
51 | ✅ BONUS: Prettier formatter integrado para complementar a ESLint y habilitado cuando ejecute ESLint, limpiar su código o en su pipeline de CI
52 |
53 | ✅ Archivos y configuraciones de fábrica (CLI) formateados y limpios con últimas reglas del ESLint/Prettier
54 |
55 | ✅ Integración de Tailwind para utilidades y componentes en CSS,
56 |
57 | 🔲 Incluir utilidades comunes de Javascript basado en helpers y servicios,
58 |
59 | 🔲 Login Page base,
60 |
61 | 🔲 Autenticación incluida con JWT,
62 |
63 | 🔲 Lógica de sesión base en interceptores,
64 |
65 | 🔲 Control de autenticación y autorización,
66 |
67 | 🔲 Integrar NX para cumplir con el concepto arquitectónico mono-repositorio completo.
68 |
69 | ## Getting Started
70 |
71 | ### Instalar / Actualizar
72 |
73 | **✏️ Ejecutando la aplicación por primera vez:**
74 |
75 | Antes que nada, recordar que debe acceder a la raíz del proyecto con el siguiente comando:
76 | ```
77 | cd projects/ionic-starter
78 | ```
79 |
80 | 1er) Paso (instalar todos los paquetes/dependencias de node.js):
81 | ```
82 | npm install && npm install -g @ionic/cli@latest
83 | ```
84 |
85 | 2do) Paso (compilar en modo /development antes de ejecutar):
86 | ```
87 | npm run build:mobile
88 | ```
89 |
90 | 3er) Paso (ejecutar la aplicación en el navegador en modo /development):
91 | ```
92 | npm run start:mobile
93 | ```
94 |
95 | 4to) Ejecutar la aplicación en un dispositivo iOS:
96 | ```
97 | npm run start:ios:live
98 | ```
99 |
100 | Dispositivo Android:
101 | ```
102 | npm run start:android:live
103 | ```
104 |
105 |
106 | 💖 Estado actual del UI: 💖
107 |
108 |
109 |
110 |
115 |
116 |
117 |
118 | ## Supports
119 |
120 | ![Capacitor Supports][capacitor-support]
121 |
122 |
123 |
124 | [capacitor-support]: https://capacitor.ionicframework.com/assets/img/supported-env.png "Capacitor Supports"
125 |
126 |
127 |
128 | ## Contributing
129 |
130 |
131 |
132 | Contribuir para Ionic Dominicana puede implicar escribir TypeScript, Swift, Java/Kotlin y/o Markdown dependiendo del componente en el que esté trabajando. ¡Estamos buscando inmensa ayuda en cualquiera de estas áreas para forjar este proyecto para la Madre de Todas las Tierras 🌴!
133 |
134 |
135 |
136 | Por favor, lea la guía [Contributing](.github/CONTRIBUTING.md) para obtener más información.
137 |
138 |
139 |
140 |
141 |
146 |
147 |
148 |
--------------------------------------------------------------------------------
/projects/ionic-starter/.dockerignore:
--------------------------------------------------------------------------------
1 | git
2 | .github
3 | .vscode
4 | coverage
5 |
6 | # OS generated files #
7 | .DS_Store
8 | ehthumbs.db
9 | Icon?
10 | Thumbs.db
11 |
12 | # node Files #
13 | node_modules
14 | npm-debug.log
15 | npm-debug.log.*
16 |
17 | # Typing #
18 | src/typings/tsd
19 | typings
20 | tsd_typings
21 |
22 | # dist #
23 | dist
24 | .awcache
25 | .webpack.json
26 | compiled
27 | dll
28 |
29 | # IDE #
30 | .idea
31 | *.swp
32 |
33 | # angular #
34 | *.ngfactory.ts
35 | *.css.shim.ts
36 | *.ngsummary.json
37 | *.shim.ngstyle.ts
--------------------------------------------------------------------------------
/projects/ionic-starter/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = tabs
7 | indent_size = 4
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/projects/ionic-starter/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "parser": "@typescript-eslint/parser",
4 | "parserOptions": {
5 | "project": "./tsconfig.json"
6 | },
7 | "env": {
8 | "node": true
9 | },
10 | "ignorePatterns": ["**/*.ts"],
11 | "plugins": ["@typescript-eslint"],
12 | "extends": [],
13 | "rules": {
14 | "@typescript-eslint/explicit-module-boundary-types": "off"
15 | },
16 | "overrides": []
17 | }
18 |
--------------------------------------------------------------------------------
/projects/ionic-starter/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "ignorePatterns": [""],
4 | "overrides": [
5 | {
6 | "files": ["*.ts"],
7 | "parserOptions": {
8 | "project": ["tsconfig.json", "e2e/tsconfig.json"],
9 | "createDefaultProgram": true,
10 | "ecmaVersion": 2020, // allows for the parsing of modern ECMAScript features
11 | "sourceType": "module" // allows for the use of imports
12 | },
13 | "extends": [
14 | "plugin:@angular-eslint/recommended",
15 | "plugin:@angular-eslint/template/process-inline-templates",
16 | "eslint:recommended",
17 | "plugin:@typescript-eslint/recommended",
18 | "plugin:@typescript-eslint/recommended-requiring-type-checking",
19 | "prettier/@typescript-eslint",
20 | "plugin:prettier/recommended"
21 | ],
22 | "rules": {
23 | "@angular-eslint/component-class-suffix": [
24 | "error",
25 | {
26 | "suffixes": ["Component", "Page"]
27 | }
28 | ],
29 | "@angular-eslint/component-selector": [
30 | "error",
31 | {
32 | "type": "element",
33 | "prefix": "app",
34 | "style": "kebab-case"
35 | }
36 | ],
37 | "@angular-eslint/directive-selector": [
38 | "error",
39 | {
40 | "type": "attribute",
41 | "prefix": "app",
42 | "style": "camelCase"
43 | }
44 | ],
45 | "@typescript-eslint/explicit-member-accessibility": [
46 | "off",
47 | {
48 | "accessibility": "explicit"
49 | }
50 | ],
51 | "@typescript-eslint/no-inferrable-types": [
52 | "off",
53 | {
54 | "ignoreParameters": true
55 | }
56 | ],
57 | "@typescript-eslint/no-explicit-any": "off",
58 | "@typescript-eslint/no-unsafe-assignment": "off",
59 | "@typescript-eslint/no-unsafe-member-access": "off",
60 | "@typescript-eslint/no-unsafe-call": "off",
61 | "@typescript-eslint/no-floating-promises": "off",
62 | "arrow-parens": ["off", "always"],
63 | "id-blacklist": "off",
64 | "id-match": "off",
65 | "import/order": "off",
66 | "max-len": [
67 | "error",
68 | {
69 | "code": 200
70 | }
71 | ],
72 | "no-underscore-dangle": "off",
73 | "one-var": ["off", "never"]
74 | }
75 | },
76 | {
77 | "files": ["*.html"],
78 | "extends": [
79 | "plugin:@angular-eslint/template/recommended"
80 | ],
81 | "rules": {
82 | "@angular-eslint/component-selector": [
83 | "error",
84 | {
85 | "type": "element",
86 | "prefix": "app",
87 | "style": "kebab-case"
88 | }
89 | ],
90 | "@angular-eslint/directive-selector": [
91 | "error",
92 | {
93 | "type": "attribute",
94 | "prefix": "app",
95 | "style": "camelCase"
96 | }
97 | ]
98 | }
99 | },
100 | {
101 | "files": ["*.html"],
102 | "extends": [
103 | "plugin:@angular-eslint/template/recommended",
104 | "prettier/@typescript-eslint",
105 | "plugin:prettier/recommended"
106 | ],
107 | "rules": {}
108 | }
109 | ]
110 | }
111 |
--------------------------------------------------------------------------------
/projects/ionic-starter/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "targets": {
3 | "ionic-starter": {
4 | "hosting": {
5 | "ionic-starter-mobile": [
6 | "ionic-starter"
7 | ]
8 | }
9 | },
10 | "ionic-starter": {
11 | "hosting": {
12 | "app": [
13 | "ionic-starter-mobile"
14 | ]
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/projects/ionic-starter/.gitignore:
--------------------------------------------------------------------------------
1 | # Specifies intentionally untracked files to ignore when using Git
2 | # http://git-scm.com/docs/gitignore
3 |
4 | # [ionic default] temp files
5 | *~
6 | *.sw[mnpcod]
7 | .tmp
8 | *.tmp
9 | *.tmp.*
10 | *.sublime-project
11 | *.sublime-workspace
12 | UserInterfaceState.xcuserstate
13 | $RECYCLE.BIN/
14 |
15 | # compiled output
16 | /.idea
17 | /.ionic
18 | /.sass-cache
19 | /.sourcemaps
20 | /.versions
21 | /.vscode
22 | /coverage
23 | /dist
24 | /node_modules
25 | /platforms
26 | /plugins
27 | /www
28 | /tmp
29 | /out-tsc
30 |
31 | # platforms builds (e.g.: android or ios)
32 | /android
33 | /ios
34 |
35 | # Only exists if Bazel was run
36 | /bazel-out
37 |
38 | # dependencies
39 | /node_modules
40 | /client/bower_components
41 | /legacy-project/client/bower_components
42 | /legacy-project/node_modules
43 |
44 | # profiling files
45 | chrome-profiler-events*.json
46 | speed-measure-plugin*.json
47 |
48 | # IDEs and editors
49 | .project
50 | .classpath
51 | .c9/
52 | *.launch
53 | .settings/
54 |
55 | # IDE - VSCode
56 | .vscode/*
57 | !.vscode/settings.json
58 | !.vscode/tasks.json
59 | !.vscode/launch.json
60 | !.vscode/extensions.json
61 | .history/*
62 | .jsbeautifyrc
63 |
64 | # misc
65 | /connect.lock
66 | /coverage
67 | /libpeerconnection.log
68 | npm-debug.log
69 | yarn-error.log
70 | testem.log
71 | /typings
72 | package-lock.json
73 |
74 | # System Files
75 | .DS_Store
76 | Thumbs.db
77 |
78 | # logs
79 | logs
80 | log.txt
81 | npm-debug.log*
82 | *.log
83 | /legacy-project/_SYNCAPP
84 |
85 | # runtime data
86 | pids
87 | *.pid
88 | *.seed
89 |
90 | # compiled output
91 | /tmp
92 | /out-tsc
93 | /legacy-project/build
94 |
95 | # dist
96 | /output
97 | /public/__build__/
98 | /src/*/__build__/
99 | /__build__/**
100 | /.awcache
101 | .webpack.json
102 | /compiled/
103 | dll/
104 |
105 | # typing #
106 | /src/typings/tsd/
107 | /typings/
108 | /tsd_typings/
109 |
110 | # e2e
111 | /e2e/*.js
112 | /e2e/*.map
113 |
114 | # doc #
115 | /doc/
116 | /documentation/
117 |
118 | # compiled binary addons (http://nodejs.org/api/addons.html)
119 | build/Release
120 |
121 | # users environment variables
122 | .lock-wscript
123 | /.vs/slnx.sqlite
124 | /.vs/ionic-starter/v16/Server/sqlite3/storage.ide-shm
125 | /.vs/ionic-starter/v16/Server/sqlite3/storage.ide-wal
126 |
--------------------------------------------------------------------------------
/projects/ionic-starter/.prettierignore:
--------------------------------------------------------------------------------
1 | # Add files here to ignore them from prettier formatting
2 |
3 | /dist
4 | /coverage
5 |
6 | **/xplat/*/.xplatframework
7 |
8 | # custom files
9 | *.html
--------------------------------------------------------------------------------
/projects/ionic-starter/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 4,
3 | "useTabs": false,
4 | "singleQuote": false,
5 | "endOfLine": "auto"
6 | }
7 |
--------------------------------------------------------------------------------
/projects/ionic-starter/.stylelintignore:
--------------------------------------------------------------------------------
1 | /**/*.js
2 | www/**/*.scss
3 | ios/**/*.scss
4 | android/**/*.scss
5 |
--------------------------------------------------------------------------------
/projects/ionic-starter/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "stylelint-config-standard",
3 | "rules": {
4 | "indentation": 4,
5 | "number-leading-zero": null,
6 | "at-rule-no-unknown": [
7 | true,
8 | {
9 | "ignoreAtRules": ["extend", "include", "mixin"]
10 | }
11 | ],
12 | "comment-empty-line-before": ["always", {
13 | "except": ["first-nested"]
14 | }],
15 | "custom-property-empty-line-before": ["never", {
16 | "ignore": ["after-comment", "first-nested", "inside-single-line-block"]
17 | }
18 | ],
19 | "declaration-empty-line-before": "never",
20 | "length-zero-no-unit": null,
21 | "selector-pseudo-element-colon-notation": "single",
22 | "selector-type-no-unknown": [true, {
23 | "ignore": ["custom-elements", "default-namespace"]
24 | }
25 | ],
26 | "rule-empty-line-before": ["always-multi-line", {
27 | "ignore": ["first-nested", "inside-block", "after-comment"]
28 | }],
29 | "font-family-no-missing-generic-family-keyword": [true, {
30 | "ignoreFontFamilies": [
31 | "core-custom-icon"
32 | ]
33 | }]
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/projects/ionic-starter/DockerFile:
--------------------------------------------------------------------------------
1 | # Usage (given build times depend on machine):
2 | #
3 | # Build SMALL image (no cache; ~20MB, time for build=rebuild = ~360s):
4 | # docker build --squash="true" -t tn-website .
5 | #
6 | # Build FAST (rebuild) image (cache; >280MB, build time ~360s, rebuild time ~80s):
7 | # docker build -t tn-website .
8 | #
9 | # Clean (remove intermidiet images):
10 | # docker rmi -f $(docker images -f "dangling=true" -q)
11 | #
12 | # Run image (on localhost:8080):
13 | # docker run --name tn-website -p 8080:80 tn-website &
14 | #
15 | # Run image as virtual host (read more: https://github.com/jwilder/nginx-proxy):
16 | # docker run -e VIRTUAL_HOST=tn-website.your-domain.com --name tn-website tn-website &
17 |
18 | FROM nginx:1.13.0-alpine
19 |
20 | # install console and node
21 | RUN apk add --no-cache bash=4.3.46-r5 &&\
22 | apk add --no-cache openssl=1.0.2k-r0 &&\
23 | apk add --no-cache nodejs
24 |
25 | # install npm ( in separate dir due to docker cache)
26 | ADD package.json /tmp/npm_inst/package.json
27 | RUN cd /tmp/npm_inst &&\
28 | npm install &&\
29 | mkdir -p /tmp/app &&\
30 | mv /tmp/npm_inst/node_modules /tmp/app/
31 |
32 | # build and publish application
33 | ADD . /tmp/app
34 | RUN cd /tmp/app &&\
35 | npm run build:aot &&\
36 | mv ./dist/* /usr/share/nginx/html/
37 |
38 | # clean
39 | RUN rm -Rf /tmp/npm_inst &&\
40 | rm -Rf /tmp/app &&\
41 | rm -Rf /root/.npm &&\
42 | apk del nodejs
43 |
44 | # this is for virtual host purposes
45 | EXPOSE 80
--------------------------------------------------------------------------------
/projects/ionic-starter/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "defaultProject": "app",
5 | "newProjectRoot": "projects",
6 | "projects": {
7 | "app": {
8 | "root": "",
9 | "sourceRoot": "src",
10 | "projectType": "application",
11 | "prefix": "app",
12 | "schematics": {},
13 | "architect": {
14 | "build": {
15 | "builder": "@angular-devkit/build-angular:browser",
16 | "options": {
17 | "outputPath": "www",
18 | "index": "src/index.html",
19 | "main": "src/main.ts",
20 | "polyfills": "src/polyfills.ts",
21 | "tsConfig": "tsconfig.app.json",
22 | "assets": [
23 | {
24 | "glob": "**/*",
25 | "input": "src/assets",
26 | "output": "assets"
27 | },
28 | {
29 | "glob": "**/*.svg",
30 | "input": "node_modules/ionicons/dist/ionicons/svg",
31 | "output": "./svg"
32 | },
33 | "src/manifest.webmanifest"
34 | ],
35 | "styles": [
36 | {
37 | "input": "src/theme/variables.scss"
38 | },
39 | {
40 | "input": "src/global.scss"
41 | },
42 | {
43 | "input": "node_modules/tailwindcss/dist/base.min.css"
44 | },
45 | {
46 | "input": "node_modules/tailwindcss/dist/components.min.css"
47 | },
48 | {
49 | "input": "node_modules/tailwindcss/dist/utilities.min.css"
50 | }
51 | ],
52 | "scripts": []
53 | },
54 | "configurations": {
55 | "hmr": {
56 | "fileReplacements": [
57 | {
58 | "replace": "src/environments/environment.ts",
59 | "with": "src/environments/environment.hmr.ts"
60 | }
61 | ],
62 | "serviceWorker": true,
63 | "ngswConfigPath": "src/ngsw-config.json"
64 | },
65 | "dev": {
66 | "fileReplacements": [
67 | {
68 | "replace": "src/environments/environment.ts",
69 | "with": "src/environments/environment.ts"
70 | }
71 | ],
72 | "serviceWorker": true,
73 | "ngswConfigPath": "src/ngsw-config.json"
74 | },
75 | "test": {
76 | "fileReplacements": [
77 | {
78 | "replace": "src/environments/environment.ts",
79 | "with": "src/environments/environment.qa.ts"
80 | }
81 | ],
82 | "serviceWorker": true,
83 | "ngswConfigPath": "src/ngsw-config.json"
84 | },
85 | "production": {
86 | "fileReplacements": [
87 | {
88 | "replace": "src/environments/environment.ts",
89 | "with": "src/environments/environment.prod.ts"
90 | }
91 | ],
92 | "optimization": true,
93 | "outputHashing": "all",
94 | "sourceMap": false,
95 | "namedChunks": false,
96 | "aot": true,
97 | "extractLicenses": true,
98 | "vendorChunk": false,
99 | "buildOptimizer": true,
100 | "budgets": [
101 | {
102 | "type": "initial",
103 | "maximumWarning": "2mb",
104 | "maximumError": "5mb"
105 | }
106 | ],
107 | "serviceWorker": true,
108 | "ngswConfigPath": "src/ngsw-config.json",
109 | "tsConfig": "tsconfig.app.prod.json"
110 | },
111 | "ci": {
112 | "progress": false
113 | }
114 | }
115 | },
116 | "serve": {
117 | "builder": "@angular-devkit/build-angular:dev-server",
118 | "options": {
119 | "browserTarget": "app:build"
120 | },
121 | "configurations": {
122 | "hmr": {
123 | "hmr": true,
124 | "browserTarget": "app:build:hmr"
125 | },
126 | "dev": {
127 | "hmr": false,
128 | "browserTarget": "app:build:dev"
129 | },
130 | "test": {
131 | "hmr": false,
132 | "browserTarget": "app:build:test"
133 | },
134 | "production": {
135 | "browserTarget": "app:build:production"
136 | },
137 | "ci": {
138 | "progress": false
139 | }
140 | }
141 | },
142 | "extract-i18n": {
143 | "builder": "@angular-devkit/build-angular:extract-i18n",
144 | "options": {
145 | "browserTarget": "app:build"
146 | }
147 | },
148 | "test": {
149 | "builder": "@angular-devkit/build-angular:karma",
150 | "options": {
151 | "main": "src/test.ts",
152 | "polyfills": "src/polyfills.ts",
153 | "tsConfig": "tsconfig.spec.json",
154 | "karmaConfig": "karma.conf.js",
155 | "styles": [],
156 | "scripts": [],
157 | "assets": [
158 | {
159 | "glob": "favicon.ico",
160 | "input": "src/",
161 | "output": "/"
162 | },
163 | {
164 | "glob": "**/*",
165 | "input": "src/assets",
166 | "output": "/assets"
167 | },
168 | "src/manifest.webmanifest"
169 | ]
170 | },
171 | "configurations": {
172 | "ci": {
173 | "progress": false,
174 | "watch": false
175 | }
176 | }
177 | },
178 | "lint": {
179 | "builder": "@angular-eslint/builder:lint",
180 | "options": {
181 | "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"]
182 | }
183 | },
184 | "e2e": {
185 | "builder": "@angular-devkit/build-angular:protractor",
186 | "options": {
187 | "protractorConfig": "e2e/protractor.conf.js",
188 | "devServerTarget": "app:serve"
189 | },
190 | "configurations": {
191 | "production": {
192 | "devServerTarget": "app:serve:production"
193 | },
194 | "ci": {
195 | "devServerTarget": "app:serve:ci"
196 | }
197 | }
198 | },
199 | "ionic-cordova-build": {
200 | "builder": "@ionic/angular-toolkit:cordova-build",
201 | "options": {
202 | "browserTarget": "app:build"
203 | },
204 | "configurations": {
205 | "production": {
206 | "browserTarget": "app:build:production"
207 | }
208 | }
209 | },
210 | "ionic-cordova-serve": {
211 | "builder": "@ionic/angular-toolkit:cordova-serve",
212 | "options": {
213 | "cordovaBuildTarget": "app:ionic-cordova-build",
214 | "devServerTarget": "app:serve"
215 | },
216 | "configurations": {
217 | "production": {
218 | "cordovaBuildTarget": "app:ionic-cordova-build:production",
219 | "devServerTarget": "app:serve:production"
220 | }
221 | }
222 | },
223 | "deploy": {
224 | "builder": "@angular/fire:deploy",
225 | "options": {}
226 | }
227 | }
228 | }
229 | },
230 | "cli": {
231 | "analytics": "891e7522-67dc-4f7e-a05c-24c37f064daf",
232 | "defaultCollection": "@datorama/akita"
233 | },
234 | "schematics": {
235 | "@ionic/angular-toolkit:component": {
236 | "styleext": "scss"
237 | },
238 | "@ionic/angular-toolkit:page": {
239 | "styleext": "scss"
240 | }
241 | }
242 | }
243 |
--------------------------------------------------------------------------------
/projects/ionic-starter/browserslist:
--------------------------------------------------------------------------------
1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 |
5 | # You can see what browsers were selected by your queries by running:
6 | # npx browserslist
7 |
8 | > 0.5%
9 | last 2 versions
10 | Firefox ESR
11 | not dead
12 | not IE 9-11 # For IE 9-11 support, remove 'not'.
13 |
--------------------------------------------------------------------------------
/projects/ionic-starter/build.json:
--------------------------------------------------------------------------------
1 | {
2 | "android": {
3 | "debug": {
4 | "keystore": "",
5 | "storePassword": "android",
6 | "alias": "",
7 | "password" : "",
8 | "keystoreType": ""
9 | },
10 | "release": {
11 | "keystore": "ionicstarter-keystore.jks",
12 | "storePassword": "ionicstarter2020",
13 | "alias": "ionicstarter-keystore",
14 | "password" : "ionicstarter2020",
15 | "keystoreType": ""
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/projects/ionic-starter/capacitor.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "appId": "io.ionic.starter",
3 | "appName": "ionic-starter",
4 | "bundledWebRuntime": false,
5 | "npmClient": "npm",
6 | "webDir": "www",
7 | "plugins": {
8 | "SplashScreen": {
9 | "launchShowDuration": 0
10 | }
11 | },
12 | "cordova": {}
13 | }
14 |
--------------------------------------------------------------------------------
/projects/ionic-starter/e2e/src/app.e2e-spec.ts:
--------------------------------------------------------------------------------
1 | import { AppPage } from "./app.po";
2 |
3 | describe("new App", () => {
4 | let page: AppPage;
5 |
6 | beforeEach(() => {
7 | page = new AppPage();
8 | });
9 |
10 | it("should display welcome message", () => {
11 | page.navigateTo();
12 | expect(page.getPageTitle()).toContain("Tab 1");
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/projects/ionic-starter/e2e/src/app.po.ts:
--------------------------------------------------------------------------------
1 | import { browser, by, element } from "protractor";
2 |
3 | export class AppPage {
4 | navigateTo(): any {
5 | return browser.get("/");
6 | }
7 |
8 | getPageTitle(): any {
9 | return element(by.css("ion-title")).getText();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/projects/ionic-starter/e2e/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/app",
5 | "module": "commonjs",
6 | "target": "es5",
7 | "types": [
8 | "jasmine",
9 | "jasminewd2",
10 | "node"
11 | ]
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/projects/ionic-starter/firebase.config.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Place here the configuration that Firebase provides
3 | * These values are for testing but it is an idea of how they are set! :)
4 | */
5 | export const FirebaseConfig = {
6 | apiKey: "a5BSpAIzaSyCp_aDXcGIe7grsWgy615fmxGr5Um",
7 | authDomain: "ionic-dominicana.firebaseapp.com",
8 | databaseURL: "https://ionic-dominicana.firebaseio.com",
9 | projectId: "ionic-dominicana",
10 | storageBucket: "ionic-dominicana.appspot.com",
11 | messagingSenderId: "534066313883",
12 | appId: "2:164063588333:web:11942912e9b69665dca329",
13 | measurementId: "G-XJKQN8KBY3"
14 | };
15 |
--------------------------------------------------------------------------------
/projects/ionic-starter/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": [
3 | {
4 | "target": "ionic-starter-mobile",
5 | "public": "www",
6 | "ignore": [
7 | "**/.*"
8 | ],
9 | "headers": [
10 | {
11 | "source": "*.[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].+(css|js)",
12 | "headers": [
13 | {
14 | "key": "Cache-Control",
15 | "value": "public,max-age=31536000,immutable"
16 | }
17 | ]
18 | }
19 | ],
20 | "rewrites": [
21 | {
22 | "source": "**",
23 | "destination": "/index.html"
24 | }
25 | ]
26 | },
27 | {
28 | "target": "app",
29 | "public": "www",
30 | "ignore": [
31 | "**/.*"
32 | ],
33 | "headers": [
34 | {
35 | "source": "*.[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f].+(css|js)",
36 | "headers": [
37 | {
38 | "key": "Cache-Control",
39 | "value": "public,max-age=31536000,immutable"
40 | }
41 | ]
42 | }
43 | ],
44 | "rewrites": [
45 | {
46 | "source": "**",
47 | "destination": "/index.html"
48 | }
49 | ]
50 | }
51 | ]
52 | }
53 |
--------------------------------------------------------------------------------
/projects/ionic-starter/ionic-starter.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/ionic-starter.jks
--------------------------------------------------------------------------------
/projects/ionic-starter/ionic.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ionic-starter",
3 | "integrations": {
4 | "capacitor": {}
5 | },
6 | "type": "angular"
7 | }
8 |
--------------------------------------------------------------------------------
/projects/ionic-starter/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/+(*.)+(spec|test).+(ts|js)?(x)"],
3 | transform: {
4 | "^.+\\.(ts|js|html)$": "ts-jest",
5 | },
6 | resolver: "@nrwl/jest/plugins/resolver",
7 | moduleFileExtensions: ["ts", "js", "html"],
8 | coverageReporters: ["html"],
9 | };
10 |
--------------------------------------------------------------------------------
/projects/ionic-starter/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration file, see link for more information
2 | // https://karma-runner.github.io/1.0/config/configuration-file.html
3 |
4 | module.exports = function (config) {
5 | config.set({
6 | basePath: "",
7 | frameworks: ["jasmine", "@angular-devkit/build-angular"],
8 | plugins: [
9 | require("karma-jasmine"),
10 | require("karma-chrome-launcher"),
11 | require("karma-jasmine-html-reporter"),
12 | require("karma-coverage-istanbul-reporter"),
13 | require("@angular-devkit/build-angular/plugins/karma")
14 | ],
15 | client: {
16 | clearContext: false, // leave Jasmine Spec Runner output visible in browser
17 | },
18 | coverageIstanbulReporter: {
19 | dir: require("path").join(__dirname, "../coverage"),
20 | reports: ["html", "lcovonly", "text-summary"],
21 | fixWebpackSourcePaths: true
22 | },
23 | reporters: ["progress", "kjhtml"],
24 | port: 9876,
25 | colors: true,
26 | logLevel: config.LOG_INFO,
27 | autoWatch: true,
28 | browsers: ["Chrome"],
29 | singleRun: false
30 | });
31 | };
32 |
--------------------------------------------------------------------------------
/projects/ionic-starter/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ionic-starter",
3 | "version": "1.0.0",
4 | "author": "1antares1 - Ionic Dominicana",
5 | "homepage": "https://github.com/ionic-dominicana/",
6 | "scripts": {
7 | "ng": "ng",
8 | "test": "ng test",
9 | "e2e": "ng e2e",
10 | "build": "ng build",
11 | "build:mobile": "ionic build --configuration dev",
12 | "build:mobile:test": "ionic build --configuration test --aot=true",
13 | "build:mobile:prod": "ionic build --configuration production --aot=true --release --buildConfig build.json",
14 | "build:mobile:dev:full": "npm run lint && ionic build --configuration dev --aot=true",
15 | "build:mobile:test:full": "npm run lint && ionic build --configuration test --aot=true",
16 | "build:mobile:prod:full": "npm run lint && ionic build --configuration production --aot=true --release --buildConfig build.json",
17 | "start:mobile": "ionic serve --configuration dev",
18 | "start:mobile:test": "ionic serve --configuration test",
19 | "start:mobile:ssl": "ionic serve --configuration dev --ssl=true",
20 | "start:mobile:hmr": "ionic serve --configuration hmr",
21 | "start:mobile:hmr:ssl": "ionic serve --configuration dev --ssl=true",
22 | "start:mobile:prod": "ionic serve --configuration production --aot=true --ssl=true",
23 | "start:android:live": "ionic capacitor run android -l --configuration dev",
24 | "start:android:live:external": "ionic capacitor run android -l --external --configuration dev",
25 | "start:android:live:test": "ionic capacitor run android -l --configuration test",
26 | "start:android:live:external:test": "ionic capacitor run android -l --external --configuration test",
27 | "start:android:live:prod": "ionic capacitor run android -l --configuration production",
28 | "start:android:live:external:prod": "ionic capacitor run android -l --external --configuration production",
29 | "start:ios:live": "ionic capacitor run ios -l --external --configuration dev",
30 | "start:ios:live:external": "ionic capacitor run ios -l --external --configuration dev",
31 | "start:ios:live:test": "ionic capacitor run ios -l --external --configuration test",
32 | "start:ios:live:external:test": "ionic capacitor run ios -l --external --configuration test",
33 | "start:ios:live:prod": "ionic capacitor run ios -l --external --configuration production",
34 | "start:ios:live:external:prod": "ionic capacitor run ios -l --external --configuration production",
35 | "start:mobile:server:pwa": "http-server -p 8080 -c-1 dist/apps/ionic-starter --configuration dev",
36 | "start:mobile:server:pwa:ssl": "http-server -p 8080 -c-1 dist/apps/ionic-starter --ssl --configuration dev",
37 | "cap:add:android": "npx cap add android",
38 | "cap:add:ios": "npx cap add ios",
39 | "cap:update:android": "npx cap update android",
40 | "cap:update:ios": "npx cap update ios",
41 | "cap:sync:android": "npx cap sync android",
42 | "cap:sync:ios": "npx cap sync ios",
43 | "cap:full:android": "npx cap add android && npx cap copy android && npx cap sync android && npm run platform:resources:build",
44 | "cap:full:ios": "npx cap add ios && npx cap copy ios && npx cap sync ios && npm run platform:resources:build",
45 | "cap:full:web": "npx cap copy web && npx cap sync web && npm run platform:resources:build",
46 | "cap:run:android": "npx cap copy android && npx cap sync android && npx cap open android",
47 | "cap:run:ios": "npx cap copy ios && npx cap sync ios && npx cap open ios",
48 | "cap:run:android:build": "npm run build:mobile && npx cap copy android && npx cap sync android && npx cap open android",
49 | "cap:run:android:build:test": "npm run build:mobile:test && npx cap copy android && npx cap sync android && npx cap open android",
50 | "cap:run:android:build:prod": "npm run build:mobile:prod && npx cap copy android && npx cap sync android && npx cap open android",
51 | "cap:run:ios:build": "npm run build:mobile && npx cap copy ios && npx cap sync ios && npx cap open ios",
52 | "cap:run:ios:build:test": "npm run build:mobile:test && npx cap copy ios && npx cap sync ios && npx cap open ios",
53 | "cap:run:ios:build:prod": "npm run build:mobile:prod && npx cap copy ios && npx cap sync ios && npx cap open ios",
54 | "platform:resources:build": "capacitor-resources -p android, ios && node resources.js",
55 | "lint": "tsc --noEmit && eslint . --ext js,ts,json --quiet --fix && npm run lint:styles",
56 | "lint:styles": "npx stylelint src/**/*.scss",
57 | "precache": "sw-precache --verbose --config=sw-precache-config.js",
58 | "postinstall": "ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points"
59 | },
60 | "private": true,
61 | "dependencies": {
62 | "@angular/common": "11.2.0",
63 | "@angular/core": "11.2.0",
64 | "@angular/fire": "6.1.4",
65 | "@angular/forms": "11.2.0",
66 | "@angular/platform-browser": "11.2.0",
67 | "@angular/platform-browser-dynamic": "11.2.0",
68 | "@angular/router": "11.2.0",
69 | "@angular/service-worker": "11.2.0",
70 | "@capacitor/android": "2.4.6",
71 | "@capacitor/core": "2.4.6",
72 | "@datorama/akita": "6.0.0",
73 | "@datorama/akita-ng-entity-service": "6.0.0",
74 | "@datorama/akita-ng-router-store": "6.0.0",
75 | "@ionic-native/core": "5.31.1",
76 | "@ionic-native/splash-screen": "5.31.1",
77 | "@ionic-native/status-bar": "5.31.1",
78 | "@ionic/angular": "5.5.4",
79 | "@tailwindcss/forms": "^0.2.1",
80 | "@tailwindcss/typography": "^0.4.0",
81 | "akita-ng-fire": "4.3.0",
82 | "firebase": "8.2",
83 | "rxjs": "6.6.3",
84 | "tslib": "2.1.0",
85 | "zone.js": "0.11.3"
86 | },
87 | "devDependencies": {
88 | "@angular-devkit/architect": "0.1101",
89 | "@angular-devkit/build-angular": "0.1101.4",
90 | "@angular-eslint/builder": "1.2.0",
91 | "@angular-eslint/eslint-plugin": "1.2.0",
92 | "@angular-eslint/eslint-plugin-template": "1.2.0",
93 | "@angular-eslint/schematics": "1.2.0",
94 | "@angular-eslint/template-parser": "1.2.0",
95 | "@angular/cli": "11.1.4",
96 | "@angular/compiler": "11.2.0",
97 | "@angular/compiler-cli": "11.2.0",
98 | "@angular/language-service": "11.2.0",
99 | "@capacitor/cli": "2.4.6",
100 | "@datorama/akita-ngdevtools": "6.0.0",
101 | "@ionic/angular-toolkit": "3.0.0",
102 | "@types/jasmine": "3.6.3",
103 | "@types/jasminewd2": "2.0.8",
104 | "@types/node": "14.14.25",
105 | "@typescript-eslint/eslint-plugin": "4.15.0",
106 | "@typescript-eslint/parser": "4.15.0",
107 | "codelyzer": "6.0.1",
108 | "eslint": "7.19.0",
109 | "eslint-config-prettier": "7.2.0",
110 | "eslint-plugin-import": "2.22.1",
111 | "eslint-plugin-jsdoc": "31.6.1",
112 | "eslint-plugin-prefer-arrow": "1.2.3",
113 | "eslint-plugin-prettier": "3.3.1",
114 | "firebase-tools": "9.3.0",
115 | "fuzzy": "0.1.3",
116 | "inquirer": "7.3.3",
117 | "inquirer-autocomplete-prompt": "1.3.0",
118 | "jasmine-core": "3.6.0",
119 | "jasmine-spec-reporter": "6.0.0",
120 | "karma": "6.1.0",
121 | "karma-chrome-launcher": "3.1.0",
122 | "karma-coverage-istanbul-reporter": "3.0.3",
123 | "karma-jasmine": "4.0.1",
124 | "karma-jasmine-html-reporter": "1.5.4",
125 | "ncu": "0.2.1",
126 | "open": "7.4.0",
127 | "prettier": "2.2.1",
128 | "prettier-eslint": "12.0.0",
129 | "protractor": "7.0.0",
130 | "stylelint": "13.10.0",
131 | "stylelint-config-standard": "20.0.0",
132 | "tailwindcss": "2.0.3",
133 | "ts-node": "9.1.1",
134 | "tslint": "6.1.0",
135 | "typescript": "4.1.5"
136 | },
137 | "description": "This Ionic baseline assumes that you can now launch mobile projects with all powers :)"
138 | }
139 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { PreloadAllModules, RouterModule, Routes } from "@angular/router";
3 |
4 | const routes: Routes = [
5 | {
6 | path: "",
7 | loadChildren: () =>
8 | import("./tabs/tabs.module").then((m) => m.TabsPageModule),
9 | },
10 | ];
11 | @NgModule({
12 | imports: [
13 | RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }),
14 | ],
15 | exports: [RouterModule],
16 | })
17 | export class AppRoutingModule {
18 | constructor() {
19 | // to do
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/app.component.scss:
--------------------------------------------------------------------------------
1 | /* Include all styles */
2 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
2 | import { TestBed, waitForAsync } from "@angular/core/testing";
3 |
4 | import { Platform } from "@ionic/angular";
5 | import { SplashScreen } from "@ionic-native/splash-screen/ngx";
6 | import { StatusBar } from "@ionic-native/status-bar/ngx";
7 |
8 | /**
9 | * Own
10 | */
11 | // components
12 | import { AppComponent } from "./app.component";
13 |
14 | describe("AppComponent", () => {
15 | let statusBarSpy: any;
16 | let splashScreenSpy: any;
17 | let platformReadySpy: any;
18 | let platformSpy: any;
19 |
20 | beforeEach(
21 | waitForAsync(async () => {
22 | statusBarSpy = jasmine.createSpyObj("StatusBar", ["styleDefault"]);
23 | splashScreenSpy = jasmine.createSpyObj("SplashScreen", ["hide"]);
24 | platformReadySpy = Promise.resolve();
25 | platformSpy = jasmine.createSpyObj("Platform", {
26 | ready: platformReadySpy,
27 | });
28 |
29 | await TestBed.configureTestingModule({
30 | declarations: [AppComponent],
31 | schemas: [CUSTOM_ELEMENTS_SCHEMA],
32 | providers: [
33 | { provide: StatusBar, useValue: statusBarSpy },
34 | { provide: SplashScreen, useValue: splashScreenSpy },
35 | { provide: Platform, useValue: platformSpy },
36 | ],
37 | }).compileComponents();
38 | })
39 | );
40 |
41 | it("should create the app", async () => {
42 | const fixture = TestBed.createComponent(AppComponent);
43 | const app = fixture.debugElement.componentInstance;
44 | await expect(app).toBeTruthy();
45 | });
46 |
47 | it("should initialize the app", async () => {
48 | TestBed.createComponent(AppComponent);
49 | await expect(platformSpy.ready).toHaveBeenCalled();
50 | await platformReadySpy;
51 | await expect(statusBarSpy.styleDefault).toHaveBeenCalled();
52 | await expect(splashScreenSpy.hide).toHaveBeenCalled();
53 | });
54 |
55 | // TODO: add more tests!
56 | });
57 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from "@angular/core";
2 |
3 | import { Platform } from "@ionic/angular";
4 | import { SplashScreen } from "@ionic-native/splash-screen/ngx";
5 | import { StatusBar } from "@ionic-native/status-bar/ngx";
6 |
7 | @Component({
8 | selector: "app-root",
9 | templateUrl: "app.component.html",
10 | styleUrls: ["app.component.scss"],
11 | })
12 | export class AppComponent {
13 | constructor(
14 | private platform: Platform,
15 | private splashScreen: SplashScreen,
16 | private statusBar: StatusBar
17 | ) {
18 | this.initializeApp();
19 | }
20 |
21 | public initializeApp(): void {
22 | this.platform.ready().then(() => {
23 | this.statusBar.styleDefault();
24 | this.splashScreen.hide();
25 | });
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { BrowserModule } from "@angular/platform-browser";
3 | import { RouteReuseStrategy } from "@angular/router";
4 | import { ServiceWorkerModule } from "@angular/service-worker";
5 |
6 | import { IonicModule, IonicRouteStrategy } from "@ionic/angular";
7 | import { SplashScreen } from "@ionic-native/splash-screen/ngx";
8 | import { StatusBar } from "@ionic-native/status-bar/ngx";
9 |
10 | import { NG_ENTITY_SERVICE_CONFIG } from "@datorama/akita-ng-entity-service";
11 | import { AkitaNgDevtools } from "@datorama/akita-ngdevtools";
12 | import { AkitaNgRouterStoreModule } from "@datorama/akita-ng-router-store";
13 |
14 | /**
15 | * Own
16 | */
17 | import { environment } from "../environments/environment";
18 |
19 | // modules
20 | import { AppRoutingModule } from "./app-routing.module";
21 |
22 | // components
23 | import { AppComponent } from "./app.component";
24 |
25 | @NgModule({
26 | declarations: [AppComponent],
27 | entryComponents: [],
28 | imports: [
29 | BrowserModule,
30 | IonicModule.forRoot(),
31 | AppRoutingModule,
32 | environment.production ? [] : AkitaNgDevtools.forRoot(),
33 | AkitaNgRouterStoreModule,
34 | ServiceWorkerModule.register("ngsw-worker.js", {
35 | enabled: environment.production,
36 | }),
37 | ],
38 | providers: [
39 | StatusBar,
40 | SplashScreen,
41 | { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
42 | {
43 | provide: NG_ENTITY_SERVICE_CONFIG,
44 | useValue: { baseUrl: "https://jsonplaceholder.typicode.com" },
45 | },
46 | ],
47 | bootstrap: [AppComponent],
48 | })
49 | export class AppModule {
50 | constructor() {
51 | // to do
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/explore-container/explore-container.component.html:
--------------------------------------------------------------------------------
1 |
2 |
{{ name }}
3 |
4 | Ir al proyecto
5 | GitHub
6 |
7 | O haz click al botón Tailwind! :)
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/explore-container/explore-container.component.scss:
--------------------------------------------------------------------------------
1 | #container {
2 | text-align: center;
3 | position: absolute;
4 | left: 0;
5 | right: 0;
6 | top: 50%;
7 | transform: translateY(-50%);
8 | }
9 |
10 | #container strong {
11 | font-size: 20px;
12 | line-height: 26px;
13 | }
14 |
15 | #container p {
16 | font-size: 16px;
17 | line-height: 22px;
18 | color: #8c8c8c;
19 | margin: 0;
20 | }
21 |
22 | #container a {
23 | text-decoration: none;
24 | }
25 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/explore-container/explore-container.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing";
2 | import { IonicModule } from "@ionic/angular";
3 |
4 | /**
5 | * Own
6 | */
7 | // components
8 | import { ExploreContainerComponent } from "./explore-container.component";
9 |
10 | describe("ExploreContainerComponent", () => {
11 | let component: ExploreContainerComponent;
12 | let fixture: ComponentFixture;
13 |
14 | beforeEach(
15 | waitForAsync(() => {
16 | TestBed.configureTestingModule({
17 | declarations: [ExploreContainerComponent],
18 | imports: [IonicModule.forRoot()],
19 | }).compileComponents();
20 |
21 | fixture = TestBed.createComponent(ExploreContainerComponent);
22 | component = fixture.componentInstance;
23 | fixture.detectChanges();
24 | })
25 | );
26 |
27 | it("should create", () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/explore-container/explore-container.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, Input, OnInit } from "@angular/core";
2 | import { Plugins } from "@capacitor/core";
3 |
4 | const { Browser } = Plugins;
5 |
6 | @Component({
7 | selector: "app-explore-container",
8 | templateUrl: "./explore-container.component.html",
9 | styleUrls: ["./explore-container.component.scss"],
10 | })
11 | export class ExploreContainerComponent {
12 |
13 | /**
14 | * DOM Props
15 | */
16 | @Input() public name: string;
17 |
18 | /**
19 | * Props
20 | */
21 | public projectUrl: string;
22 |
23 | constructor() {
24 | this.projectUrl = "https://github.com/1antares1/ionic-starter";
25 | }
26 |
27 | public async openPage(customUrl?: string): Promise {
28 | await Browser.open({ url: customUrl ?? this.projectUrl });
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/explore-container/explore-container.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { CommonModule } from "@angular/common";
3 | import { FormsModule } from "@angular/forms";
4 |
5 | import { IonicModule } from "@ionic/angular";
6 |
7 | /**
8 | * Own
9 | */
10 | // components
11 | import { ExploreContainerComponent } from "./explore-container.component";
12 |
13 | @NgModule({
14 | imports: [CommonModule, FormsModule, IonicModule],
15 | declarations: [ExploreContainerComponent],
16 | exports: [ExploreContainerComponent],
17 | })
18 | export class ExploreContainerComponentModule {
19 | constructor() {
20 | // to do
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab1/tab1-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { RouterModule, Routes } from "@angular/router";
3 |
4 | /**
5 | * Own
6 | */
7 | // pages
8 | import { Tab1Page } from "./tab1.page";
9 |
10 | const routes: Routes = [
11 | {
12 | path: "",
13 | component: Tab1Page,
14 | },
15 | ];
16 |
17 | @NgModule({
18 | imports: [RouterModule.forChild(routes)],
19 | exports: [RouterModule],
20 | })
21 | export class Tab1PageRoutingModule {
22 | constructor() {
23 | // to do
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab1/tab1.module.ts:
--------------------------------------------------------------------------------
1 | import { IonicModule } from "@ionic/angular";
2 | import { NgModule } from "@angular/core";
3 | import { CommonModule } from "@angular/common";
4 | import { FormsModule } from "@angular/forms";
5 |
6 | /**
7 | * Own
8 | */
9 | // modules
10 | import { Tab1PageRoutingModule } from "./tab1-routing.module";
11 | import { ExploreContainerComponentModule } from "../explore-container/explore-container.module";
12 |
13 | // pages
14 | import { Tab1Page } from "./tab1.page";
15 |
16 | @NgModule({
17 | imports: [
18 | IonicModule,
19 | CommonModule,
20 | FormsModule,
21 | ExploreContainerComponentModule,
22 | Tab1PageRoutingModule,
23 | ],
24 | declarations: [Tab1Page],
25 | })
26 | export class Tab1PageModule {
27 | constructor() {
28 | // to do
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab1/tab1.page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Inicio
4 |
5 |
6 |
7 |
8 |
9 |
10 | Inicio
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab1/tab1.page.scss:
--------------------------------------------------------------------------------
1 | ion-content {
2 | --background: transparent;
3 | }
4 |
5 | ion-content:before {
6 | content: "";
7 | background: url("/assets/img/bg-home.jpg") no-repeat center center / cover;
8 | display: block;
9 | position: fixed;
10 | width: 100%;
11 | height: 100%;
12 | left: 0;
13 | right: 0;
14 | z-index: -1;
15 | -webkit-filter: blur(5px);
16 | -moz-filter: blur(5px);
17 | -o-filter: blur(5px);
18 | -ms-filter: blur(5px);
19 | filter: blur(5px);
20 | }
21 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab1/tab1.page.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing";
2 | import { IonicModule } from "@ionic/angular";
3 | import { ExploreContainerComponentModule } from "../explore-container/explore-container.module";
4 |
5 | /**
6 | * Own
7 | */
8 | // pages
9 | import { Tab1Page } from "./tab1.page";
10 |
11 | describe("Tab1Page", () => {
12 | let component: Tab1Page;
13 | let fixture: ComponentFixture;
14 |
15 | beforeEach(
16 | waitForAsync(() => {
17 | TestBed.configureTestingModule({
18 | declarations: [Tab1Page],
19 | imports: [
20 | IonicModule.forRoot(),
21 | ExploreContainerComponentModule,
22 | ],
23 | }).compileComponents();
24 |
25 | fixture = TestBed.createComponent(Tab1Page);
26 | component = fixture.componentInstance;
27 | fixture.detectChanges();
28 | })
29 | );
30 |
31 | it("should create", () => {
32 | expect(component).toBeTruthy();
33 | });
34 | });
35 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab1/tab1.page.ts:
--------------------------------------------------------------------------------
1 | import { Component } from "@angular/core";
2 |
3 | @Component({
4 | selector: "app-tab1",
5 | templateUrl: "tab1.page.html",
6 | styleUrls: ["tab1.page.scss"],
7 | })
8 | export class Tab1Page {
9 | constructor() {
10 | // to do
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab2/tab2-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { RouterModule, Routes } from "@angular/router";
3 |
4 | /**
5 | * Own
6 | */
7 | // pages
8 | import { Tab2Page } from "./tab2.page";
9 |
10 | const routes: Routes = [
11 | {
12 | path: "",
13 | component: Tab2Page,
14 | },
15 | ];
16 |
17 | @NgModule({
18 | imports: [RouterModule.forChild(routes)],
19 | exports: [RouterModule],
20 | })
21 | export class Tab2PageRoutingModule {
22 | constructor() {
23 | // to do
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab2/tab2.module.ts:
--------------------------------------------------------------------------------
1 | import { IonicModule } from "@ionic/angular";
2 | import { NgModule } from "@angular/core";
3 | import { CommonModule } from "@angular/common";
4 | import { FormsModule } from "@angular/forms";
5 |
6 | /**
7 | * Own
8 | */
9 | // modules
10 | import { ExploreContainerComponentModule } from "../explore-container/explore-container.module";
11 |
12 | // pages
13 | import { Tab2Page } from "./tab2.page";
14 |
15 | import { Tab2PageRoutingModule } from "./tab2-routing.module";
16 |
17 | @NgModule({
18 | imports: [
19 | IonicModule,
20 | CommonModule,
21 | FormsModule,
22 | ExploreContainerComponentModule,
23 | Tab2PageRoutingModule,
24 | ],
25 | declarations: [Tab2Page],
26 | })
27 | export class Tab2PageModule {
28 | constructor() {
29 | // to do
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab2/tab2.page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Search
4 |
5 |
6 |
7 |
8 |
9 |
10 | Search
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab2/tab2.page.scss:
--------------------------------------------------------------------------------
1 | /* Include context styles here */
2 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab2/tab2.page.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing";
2 | import { IonicModule } from "@ionic/angular";
3 | import { ExploreContainerComponentModule } from "../explore-container/explore-container.module";
4 |
5 | import { Tab2Page } from "./tab2.page";
6 |
7 | describe("Tab2Page", () => {
8 | let component: Tab2Page;
9 | let fixture: ComponentFixture;
10 |
11 | beforeEach(
12 | waitForAsync(() => {
13 | TestBed.configureTestingModule({
14 | declarations: [Tab2Page],
15 | imports: [
16 | IonicModule.forRoot(),
17 | ExploreContainerComponentModule,
18 | ],
19 | }).compileComponents();
20 |
21 | fixture = TestBed.createComponent(Tab2Page);
22 | component = fixture.componentInstance;
23 | fixture.detectChanges();
24 | })
25 | );
26 |
27 | it("should create", () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab2/tab2.page.ts:
--------------------------------------------------------------------------------
1 | import { Component } from "@angular/core";
2 |
3 | @Component({
4 | selector: "app-tab2",
5 | templateUrl: "tab2.page.html",
6 | styleUrls: ["tab2.page.scss"],
7 | })
8 | export class Tab2Page {
9 | constructor() {
10 | // to do
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab3/tab3-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { RouterModule, Routes } from "@angular/router";
3 |
4 | /**
5 | * Own
6 | */
7 | // pages
8 | import { Tab3Page } from "./tab3.page";
9 |
10 | const routes: Routes = [
11 | {
12 | path: "",
13 | component: Tab3Page,
14 | },
15 | ];
16 |
17 | @NgModule({
18 | imports: [RouterModule.forChild(routes)],
19 | exports: [RouterModule],
20 | })
21 | export class Tab3PageRoutingModule {
22 | constructor() {
23 | // to do
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab3/tab3.module.ts:
--------------------------------------------------------------------------------
1 | import { IonicModule } from "@ionic/angular";
2 | import { RouterModule } from "@angular/router";
3 | import { NgModule } from "@angular/core";
4 | import { CommonModule } from "@angular/common";
5 | import { FormsModule } from "@angular/forms";
6 |
7 | /**
8 | * Own
9 | */
10 | // modules
11 | import { Tab3PageRoutingModule } from "./tab3-routing.module";
12 | import { ExploreContainerComponentModule } from "../explore-container/explore-container.module";
13 |
14 | // pages
15 | import { Tab3Page } from "./tab3.page";
16 |
17 | @NgModule({
18 | imports: [
19 | IonicModule,
20 | CommonModule,
21 | FormsModule,
22 | ExploreContainerComponentModule,
23 | RouterModule.forChild([{ path: "", component: Tab3Page }]),
24 | Tab3PageRoutingModule,
25 | ],
26 | declarations: [Tab3Page],
27 | })
28 | export class Tab3PageModule {
29 | constructor() {
30 | // to do
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab3/tab3.page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | GitHub
4 |
5 |
6 |
7 |
8 |
9 |
10 | GitHub
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab3/tab3.page.scss:
--------------------------------------------------------------------------------
1 | /* Include context styles here */
2 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab3/tab3.page.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing";
2 | import { IonicModule } from "@ionic/angular";
3 |
4 | /**
5 | * Own
6 | */
7 | // modules
8 | import { ExploreContainerComponentModule } from "../explore-container/explore-container.module";
9 |
10 | // pages
11 | import { Tab3Page } from "./tab3.page";
12 |
13 | describe("Tab3Page", () => {
14 | let component: Tab3Page;
15 | let fixture: ComponentFixture;
16 |
17 | beforeEach(
18 | waitForAsync(() => {
19 | TestBed.configureTestingModule({
20 | declarations: [Tab3Page],
21 | imports: [
22 | IonicModule.forRoot(),
23 | ExploreContainerComponentModule,
24 | ],
25 | }).compileComponents();
26 |
27 | fixture = TestBed.createComponent(Tab3Page);
28 | component = fixture.componentInstance;
29 | fixture.detectChanges();
30 | })
31 | );
32 |
33 | it("should create", () => {
34 | expect(component).toBeTruthy();
35 | });
36 | });
37 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab3/tab3.page.ts:
--------------------------------------------------------------------------------
1 | import { Component } from "@angular/core";
2 |
3 | @Component({
4 | selector: "app-tab3",
5 | templateUrl: "tab3.page.html",
6 | styleUrls: ["tab3.page.scss"],
7 | })
8 | export class Tab3Page {
9 | constructor() {
10 | // to do
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab4/tab4-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { RouterModule, Routes } from "@angular/router";
3 |
4 | /**
5 | * Own
6 | */
7 | // pages
8 | import { Tab4Page } from "./tab4.page";
9 |
10 | const routes: Routes = [
11 | {
12 | path: "",
13 | component: Tab4Page,
14 | },
15 | ];
16 |
17 | @NgModule({
18 | imports: [RouterModule.forChild(routes)],
19 | exports: [RouterModule],
20 | })
21 | export class Tab4PageRoutingModule {
22 | constructor() {
23 | // to do
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab4/tab4.module.ts:
--------------------------------------------------------------------------------
1 | import { IonicModule } from "@ionic/angular";
2 | import { RouterModule } from "@angular/router";
3 | import { NgModule } from "@angular/core";
4 | import { CommonModule } from "@angular/common";
5 | import { FormsModule } from "@angular/forms";
6 |
7 | /**
8 | * Own
9 | */
10 | // modules
11 | import { Tab4PageRoutingModule } from "./tab4-routing.module";
12 | import { ExploreContainerComponentModule } from "../explore-container/explore-container.module";
13 |
14 | // pages
15 | import { Tab4Page } from "./tab4.page";
16 |
17 | @NgModule({
18 | imports: [
19 | IonicModule,
20 | CommonModule,
21 | FormsModule,
22 | ExploreContainerComponentModule,
23 | RouterModule.forChild([{ path: "", component: Tab4Page }]),
24 | Tab4PageRoutingModule,
25 | ],
26 | declarations: [Tab4Page],
27 | })
28 | export class Tab4PageModule {
29 | constructor() {
30 | // to do
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab4/tab4.page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Profile
4 |
5 |
6 |
7 |
8 |
9 |
10 | Profile
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab4/tab4.page.scss:
--------------------------------------------------------------------------------
1 | /* Include context styles here */
2 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab4/tab4.page.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing";
2 | import { IonicModule } from "@ionic/angular";
3 |
4 | /**
5 | * Own
6 | */
7 | // modules
8 | import { ExploreContainerComponentModule } from "../explore-container/explore-container.module";
9 |
10 | // pages
11 | import { Tab4Page } from "./tab4.page";
12 |
13 | describe("Tab4Page", () => {
14 | let component: Tab4Page;
15 | let fixture: ComponentFixture;
16 |
17 | beforeEach(
18 | waitForAsync(() => {
19 | TestBed.configureTestingModule({
20 | declarations: [Tab4Page],
21 | imports: [
22 | IonicModule.forRoot(),
23 | ExploreContainerComponentModule,
24 | ],
25 | }).compileComponents();
26 |
27 | fixture = TestBed.createComponent(Tab4Page);
28 | component = fixture.componentInstance;
29 | fixture.detectChanges();
30 | })
31 | );
32 |
33 | it("should create", () => {
34 | expect(component).toBeTruthy();
35 | });
36 | });
37 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tab4/tab4.page.ts:
--------------------------------------------------------------------------------
1 | import { Component } from "@angular/core";
2 |
3 | @Component({
4 | selector: "app-tab4",
5 | templateUrl: "tab4.page.html",
6 | styleUrls: ["tab4.page.scss"],
7 | })
8 | export class Tab4Page {
9 | constructor() {
10 | // to do
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tabs/tabs-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from "@angular/core";
2 | import { RouterModule, Routes } from "@angular/router";
3 |
4 | /**
5 | * Own
6 | */
7 | // pages
8 | import { TabsPage } from "./tabs.page";
9 |
10 | const routes: Routes = [
11 | {
12 | path: "tabs",
13 | component: TabsPage,
14 | children: [
15 | {
16 | path: "tab1",
17 | loadChildren: () =>
18 | import("../tab1/tab1.module").then((m) => m.Tab1PageModule),
19 | },
20 | {
21 | path: "tab2",
22 | loadChildren: () =>
23 | import("../tab2/tab2.module").then((m) => m.Tab2PageModule),
24 | },
25 | {
26 | path: "tab3",
27 | loadChildren: () =>
28 | import("../tab3/tab3.module").then((m) => m.Tab3PageModule),
29 | },
30 | {
31 | path: "tab4",
32 | loadChildren: () =>
33 | import("../tab4/tab4.module").then((m) => m.Tab4PageModule),
34 | },
35 | {
36 | path: "",
37 | redirectTo: "/tabs/tab1",
38 | pathMatch: "full",
39 | },
40 | ],
41 | },
42 | {
43 | path: "",
44 | redirectTo: "/tabs/tab1",
45 | pathMatch: "full",
46 | },
47 | ];
48 |
49 | @NgModule({
50 | imports: [RouterModule.forChild(routes)],
51 | exports: [RouterModule],
52 | })
53 | export class TabsPageRoutingModule {
54 | constructor() {
55 | // to do
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tabs/tabs.module.ts:
--------------------------------------------------------------------------------
1 | import { IonicModule } from "@ionic/angular";
2 | import { NgModule } from "@angular/core";
3 | import { CommonModule } from "@angular/common";
4 | import { FormsModule } from "@angular/forms";
5 |
6 | /**
7 | * Own
8 | */
9 | // modules
10 | import { TabsPageRoutingModule } from "./tabs-routing.module";
11 |
12 | // pages
13 | import { TabsPage } from "./tabs.page";
14 |
15 | @NgModule({
16 | imports: [IonicModule, CommonModule, FormsModule, TabsPageRoutingModule],
17 | declarations: [TabsPage],
18 | })
19 | export class TabsPageModule {
20 | constructor() {
21 | // to do
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tabs/tabs.page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Inicio
6 |
7 |
8 |
9 |
10 | Buscar
11 |
12 |
13 |
14 |
15 | GitHub
16 |
17 |
18 |
19 |
20 | Mi Perfil
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tabs/tabs.page.scss:
--------------------------------------------------------------------------------
1 | ion-tab-bar {
2 | --background: #292929;
3 | }
4 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tabs/tabs.page.spec.ts:
--------------------------------------------------------------------------------
1 | import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
2 | import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing";
3 |
4 | /**
5 | * Own
6 | */
7 | // pages
8 | import { TabsPage } from "./tabs.page";
9 |
10 | describe("TabsPage", () => {
11 | let component: TabsPage;
12 | let fixture: ComponentFixture;
13 |
14 | beforeEach(
15 | waitForAsync(() => {
16 | TestBed.configureTestingModule({
17 | declarations: [TabsPage],
18 | schemas: [CUSTOM_ELEMENTS_SCHEMA],
19 | }).compileComponents();
20 | })
21 | );
22 |
23 | beforeEach(() => {
24 | fixture = TestBed.createComponent(TabsPage);
25 | component = fixture.componentInstance;
26 | fixture.detectChanges();
27 | });
28 |
29 | it("should create", () => {
30 | expect(component).toBeTruthy().then().catch();
31 | });
32 | });
33 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/app/tabs/tabs.page.ts:
--------------------------------------------------------------------------------
1 | import { Component } from "@angular/core";
2 |
3 | @Component({
4 | selector: "app-tabs",
5 | templateUrl: "tabs.page.html",
6 | styleUrls: ["tabs.page.scss"],
7 | })
8 | export class TabsPage {
9 | constructor() {
10 | // to do
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icon/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icon/favicon.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icons/icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icons/icon-128x128.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icons/icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icons/icon-144x144.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icons/icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icons/icon-152x152.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icons/icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icons/icon-192x192.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icons/icon-384x384.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icons/icon-384x384.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icons/icon-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icons/icon-512x512.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icons/icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icons/icon-72x72.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/icons/icon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/icons/icon-96x96.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/img/bg-home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/img/bg-home.jpg
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/img/current-ui-app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-dominicana/ionic-starter/70e924784f72ee8dc9b6083fd9143747a7bde31c/projects/ionic-starter/src/assets/img/current-ui-app.png
--------------------------------------------------------------------------------
/projects/ionic-starter/src/assets/shapes.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/environments/environment.hmr.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Own
3 | */
4 | import { Environment } from "./environment.model";
5 | import { FirebaseConfig } from "../../firebase.config";
6 |
7 | export const environment: Environment = {
8 | production: false,
9 | showDevModule: true,
10 | hmr: true,
11 | activeSecureStorage: false,
12 | firebase: FirebaseConfig,
13 | authPortalUrl: "",
14 | sessionExpirationMinutes: 300,
15 | sessionName: "",
16 | CLIENT_ID: "86f37f3b-943b-4ab2-ba62-bc6cfcd442f5",
17 | CLIENT_SECRET: "85394159-5670-452b-94c9-7411d5732487",
18 | CLIENT_CERTIFICATE: "",
19 | COMMON_BASE_SERVER_PATH: "https://ionicdominicana.com.do",
20 | COMMON_API_URL: "dev/api",
21 | COMMON_API_VERSION: "v1",
22 | COMMON_API_TARGET: "",
23 | CURRENT_LANGUAGE: "es",
24 | ENV_PROVIDERS: [],
25 | CUSTOMER_FEATURES_ENABLED: [
26 | "CORE",
27 | "CONTACT_INFO",
28 | "ONBOARDING",
29 | "DASHBOARD",
30 | "SIGNIN",
31 | ],
32 | };
33 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/environments/environment.model.ts:
--------------------------------------------------------------------------------
1 | export interface Environment {
2 | production: boolean;
3 | activeSecureStorage: boolean;
4 | authPortalUrl: string;
5 | sessionExpirationMinutes: number;
6 | sessionName: string;
7 | CLIENT_ID: string;
8 | CLIENT_SECRET: string;
9 | CLIENT_CERTIFICATE: string;
10 | COMMON_BASE_SERVER_PATH: string;
11 | COMMON_API_URL: string;
12 | COMMON_API_VERSION: string;
13 | COMMON_API_TARGET: string;
14 | CURRENT_LANGUAGE: string;
15 | ENV_PROVIDERS: any[];
16 | CUSTOMER_FEATURES_ENABLED?: string[];
17 | ADMIN_FEATURES_ENABLED?: string[];
18 | hmr?: boolean;
19 | showDevModule?: boolean;
20 | firebase?: any;
21 | }
22 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Own
3 | */
4 | import { Environment } from "./environment.model";
5 | import { FirebaseConfig } from "firebase.config";
6 |
7 | export const environment: Environment = {
8 | production: true,
9 | showDevModule: false,
10 | hmr: false,
11 | activeSecureStorage: true,
12 | firebase: FirebaseConfig,
13 | authPortalUrl: "",
14 | sessionExpirationMinutes: 300,
15 | sessionName: "",
16 | CLIENT_ID: "751d67a6-36eb-4880-ba86-ca36ac6c537f",
17 | CLIENT_SECRET: "c1c5a0e6-7d39-4a91-a6d1-6966721b920e",
18 | CLIENT_CERTIFICATE: "",
19 | COMMON_BASE_SERVER_PATH: "https://ionicdominicana.com.do",
20 | COMMON_API_URL: "latam/api",
21 | COMMON_API_VERSION: "v1",
22 | COMMON_API_TARGET: "",
23 | CURRENT_LANGUAGE: "es",
24 | ENV_PROVIDERS: [],
25 | CUSTOMER_FEATURES_ENABLED: [
26 | "CORE",
27 | "CONTACT_INFO",
28 | "ONBOARDING",
29 | "DASHBOARD",
30 | ],
31 | };
32 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/environments/environment.qa.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Own
3 | */
4 | import { Environment } from "./environment.model";
5 | import { FirebaseConfig } from "firebase.config";
6 |
7 | export const environment: Environment = {
8 | production: true,
9 | showDevModule: false,
10 | hmr: false,
11 | activeSecureStorage: true,
12 | firebase: FirebaseConfig,
13 | authPortalUrl: "",
14 | sessionExpirationMinutes: 300,
15 | sessionName: "",
16 | CLIENT_ID: "92301545-a297-4765-a89e-1b23a423143e",
17 | CLIENT_SECRET: "57153bcf-d1bc-43a4-8a8d-c96e594165aa",
18 | CLIENT_CERTIFICATE: "",
19 | COMMON_BASE_SERVER_PATH: "https://ionicdominicana.com.do",
20 | COMMON_API_URL: "test/api",
21 | COMMON_API_VERSION: "v1",
22 | COMMON_API_TARGET: "",
23 | CURRENT_LANGUAGE: "es",
24 | ENV_PROVIDERS: [],
25 | CUSTOMER_FEATURES_ENABLED: [
26 | "CORE",
27 | "CONTACT_INFO",
28 | "ONBOARDING",
29 | "DASHBOARD",
30 | ],
31 | };
32 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | // This file can be replaced during build by using the `fileReplacements` array.
2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
3 | // The list of file replacements can be found in `angular.json`.
4 |
5 | /**
6 | * Own
7 | */
8 | import { Environment } from "./environment.model";
9 | import { FirebaseConfig } from "../../firebase.config";
10 |
11 | export const environment: Environment = {
12 | production: false,
13 | showDevModule: true,
14 | hmr: false,
15 | activeSecureStorage: false,
16 | firebase: FirebaseConfig,
17 | authPortalUrl: "",
18 | sessionExpirationMinutes: 300,
19 | sessionName: "",
20 | CLIENT_ID: "86f37f3b-943b-4ab2-ba62-bc6cfcd442f5",
21 | CLIENT_SECRET: "85394159-5670-452b-94c9-7411d5732487",
22 | CLIENT_CERTIFICATE: "",
23 | COMMON_BASE_SERVER_PATH: "https://ionicdominicana.com.do",
24 | COMMON_API_URL: "dev/api",
25 | COMMON_API_VERSION: "v1",
26 | COMMON_API_TARGET: "",
27 | CURRENT_LANGUAGE: "es",
28 | ENV_PROVIDERS: [],
29 | CUSTOMER_FEATURES_ENABLED: [
30 | "CORE",
31 | "CONTACT_INFO",
32 | "ONBOARDING",
33 | "DASHBOARD",
34 | "SIGNIN",
35 | ],
36 | };
37 |
38 | /*
39 | * For easier debugging in development mode, you can import the following file
40 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
41 | *
42 | * This import should be commented out in production mode because it will have a negative impact
43 | * on performance if an error is thrown.
44 | */
45 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI.
46 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/global.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * App Global CSS
3 | * ----------------------------------------------------------------------------
4 | * Put style rules here that you want to apply globally. These styles are for
5 | * the entire app and not just one component. Additionally, this file can be
6 | * used as an entry point to import other CSS/Sass files to be included in the
7 | * output CSS.
8 | * For more information on global stylesheets, visit the documentation:
9 | * https://ionicframework.com/docs/layout/global-stylesheets
10 | */
11 |
12 | /* Core CSS required for Ionic components to work properly */
13 | @import "~@ionic/angular/css/core.css";
14 |
15 | /* Basic CSS for apps built with Ionic */
16 | @import "~@ionic/angular/css/normalize.css";
17 | @import "~@ionic/angular/css/structure.css";
18 | @import "~@ionic/angular/css/typography.css";
19 | @import "~@ionic/angular/css/display.css";
20 |
21 | /* Optional CSS utils that can be commented out */
22 | @import "~@ionic/angular/css/padding.css";
23 | @import "~@ionic/angular/css/float-elements.css";
24 | @import "~@ionic/angular/css/text-alignment.css";
25 | @import "~@ionic/angular/css/text-transformation.css";
26 | @import "~@ionic/angular/css/flex-utils.css";
27 |
28 | /* Tailwind files */
29 | @import "tailwindcss/base";
30 | @import "tailwindcss/components";
31 | @import "tailwindcss/utilities";
32 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Ionic Starter - By Ionic 🌴🇩🇴
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Please enable JavaScript to continue using this application.
25 |
26 |
27 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from "@angular/core";
2 | import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
3 |
4 | import { AppModule } from "./app/app.module";
5 | import { environment } from "./environments/environment";
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic()
12 | .bootstrapModule(AppModule)
13 | .catch((err) => console.log(err));
14 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app",
3 | "short_name": "app",
4 | "theme_color": "#1976d2",
5 | "background_color": "#fafafa",
6 | "display": "standalone",
7 | "scope": "./",
8 | "start_url": "./",
9 | "icons": [
10 | {
11 | "src": "assets/icons/icon-72x72.png",
12 | "sizes": "72x72",
13 | "type": "image/png",
14 | "purpose": "maskable any"
15 | },
16 | {
17 | "src": "assets/icons/icon-96x96.png",
18 | "sizes": "96x96",
19 | "type": "image/png",
20 | "purpose": "maskable any"
21 | },
22 | {
23 | "src": "assets/icons/icon-128x128.png",
24 | "sizes": "128x128",
25 | "type": "image/png",
26 | "purpose": "maskable any"
27 | },
28 | {
29 | "src": "assets/icons/icon-144x144.png",
30 | "sizes": "144x144",
31 | "type": "image/png",
32 | "purpose": "maskable any"
33 | },
34 | {
35 | "src": "assets/icons/icon-152x152.png",
36 | "sizes": "152x152",
37 | "type": "image/png",
38 | "purpose": "maskable any"
39 | },
40 | {
41 | "src": "assets/icons/icon-192x192.png",
42 | "sizes": "192x192",
43 | "type": "image/png",
44 | "purpose": "maskable any"
45 | },
46 | {
47 | "src": "assets/icons/icon-384x384.png",
48 | "sizes": "384x384",
49 | "type": "image/png",
50 | "purpose": "maskable any"
51 | },
52 | {
53 | "src": "assets/icons/icon-512x512.png",
54 | "sizes": "512x512",
55 | "type": "image/png",
56 | "purpose": "maskable any"
57 | }
58 | ]
59 | }
60 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/ngsw-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../node_modules/@angular/service-worker/config/schema.json",
3 | "index": "/index.html",
4 | "assetGroups": [
5 | {
6 | "name": "app",
7 | "installMode": "prefetch",
8 | "resources": {
9 | "files": [
10 | "/favicon.ico",
11 | "/index.html",
12 | "/manifest.webmanifest",
13 | "/*.css",
14 | "/*.js"
15 | ]
16 | }
17 | },
18 | {
19 | "name": "assets",
20 | "installMode": "lazy",
21 | "updateMode": "prefetch",
22 | "resources": {
23 | "files": [
24 | "/assets/**",
25 | "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
26 | ]
27 | }
28 | }
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/polyfills.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This file includes polyfills needed by Angular and is loaded before the app.
3 | * You can add your own extra polyfills to this file.
4 | *
5 | * This file is divided into 2 sections:
6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
8 | * file.
9 | *
10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
13 | *
14 | * Learn more in https://angular.io/guide/browser-support
15 | */
16 |
17 | /***************************************************************************************************
18 | * BROWSER POLYFILLS
19 | */
20 |
21 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */
22 | // import "classlist.js"; // Run `npm install --save classlist.js`.
23 |
24 | /**
25 | * Web Animations `@angular/platform-browser/animations`
26 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
27 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
28 | */
29 | // import "web-animations-js"; // Run `npm install --save web-animations-js`.
30 |
31 | /**
32 | * By default, zone.js will patch all possible macroTask and DomEvents
33 | * user can disable parts of macroTask/DomEvents patch by setting following flags
34 | * because those flags need to be set before `zone.js` being loaded, and webpack
35 | * will put import in the top of bundle, so user need to create a separate file
36 | * in this directory (for example: zone-flags.ts), and put the following flags
37 | * into that file, and then add the following code before importing zone.js.
38 | * import "./zone-flags.ts";
39 | *
40 | * The flags allowed in zone-flags.ts are listed here.
41 | *
42 | * The following flags will work for all browsers.
43 | *
44 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
45 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
46 | * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ["scroll", "mousemove"]; // disable patch specified eventNames
47 | *
48 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
49 | * with the following flag, it will bypass `zone.js` patch for IE/Edge
50 | *
51 | * (window as any).__Zone_enable_cross_context_check = true;
52 | *
53 | */
54 |
55 | import "./zone-flags";
56 |
57 | /***************************************************************************************************
58 | * Zone JS is required by default for Angular itself.
59 | */
60 |
61 | import "zone.js/dist/zone"; // Included with Angular CLI.
62 |
63 | /***************************************************************************************************
64 | * APPLICATION IMPORTS
65 | */
66 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/test.ts:
--------------------------------------------------------------------------------
1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2 |
3 | import "zone.js/dist/zone-testing";
4 | import { getTestBed } from "@angular/core/testing";
5 | import {
6 | BrowserDynamicTestingModule,
7 | platformBrowserDynamicTesting,
8 | } from "@angular/platform-browser-dynamic/testing";
9 |
10 | declare const require: any;
11 |
12 | // First, initialize the Angular testing environment.
13 | getTestBed().initTestEnvironment(
14 | BrowserDynamicTestingModule,
15 | platformBrowserDynamicTesting()
16 | );
17 | // Then we find all the tests.
18 | const context = require.context("./", true, /\.spec\.ts$/);
19 | // And load the modules.
20 | context.keys().map(context);
21 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/theme/variables.scss:
--------------------------------------------------------------------------------
1 | // Ionic Variables and Theming. For more info, please see:
2 | // http://ionicframework.com/docs/theming/
3 |
4 | /** Ionic CSS Variables **/
5 | :root {
6 | /** primary **/
7 | --ion-color-primary: #3880ff;
8 | --ion-color-primary-rgb: 56, 128, 255;
9 | --ion-color-primary-contrast: #fff;
10 | --ion-color-primary-contrast-rgb: 255, 255, 255;
11 | --ion-color-primary-shade: #3171e0;
12 | --ion-color-primary-tint: #4c8dff;
13 |
14 | /** secondary **/
15 | --ion-color-secondary: #3dc2ff;
16 | --ion-color-secondary-rgb: 61, 194, 255;
17 | --ion-color-secondary-contrast: #fff;
18 | --ion-color-secondary-contrast-rgb: 255, 255, 255;
19 | --ion-color-secondary-shade: #36abe0;
20 | --ion-color-secondary-tint: #50c8ff;
21 |
22 | /** tertiary **/
23 | --ion-color-tertiary: #5260ff;
24 | --ion-color-tertiary-rgb: 82, 96, 255;
25 | --ion-color-tertiary-contrast: #fff;
26 | --ion-color-tertiary-contrast-rgb: 255, 255, 255;
27 | --ion-color-tertiary-shade: #4854e0;
28 | --ion-color-tertiary-tint: #6370ff;
29 |
30 | /** success **/
31 | --ion-color-success: #2dd36f;
32 | --ion-color-success-rgb: 45, 211, 111;
33 | --ion-color-success-contrast: #fff;
34 | --ion-color-success-contrast-rgb: 255, 255, 255;
35 | --ion-color-success-shade: #28ba62;
36 | --ion-color-success-tint: #42d77d;
37 |
38 | /** warning **/
39 | --ion-color-warning: #ffc409;
40 | --ion-color-warning-rgb: 255, 196, 9;
41 | --ion-color-warning-contrast: #000;
42 | --ion-color-warning-contrast-rgb: 0, 0, 0;
43 | --ion-color-warning-shade: #e0ac08;
44 | --ion-color-warning-tint: #ffca22;
45 |
46 | /** danger **/
47 | --ion-color-danger: #eb445a;
48 | --ion-color-danger-rgb: 235, 68, 90;
49 | --ion-color-danger-contrast: #fff;
50 | --ion-color-danger-contrast-rgb: 255, 255, 255;
51 | --ion-color-danger-shade: #cf3c4f;
52 | --ion-color-danger-tint: #ed576b;
53 |
54 | /** dark **/
55 | --ion-color-dark: #222428;
56 | --ion-color-dark-rgb: 34, 36, 40;
57 | --ion-color-dark-contrast: #fff;
58 | --ion-color-dark-contrast-rgb: 255, 255, 255;
59 | --ion-color-dark-shade: #1e2023;
60 | --ion-color-dark-tint: #383a3e;
61 |
62 | /** medium **/
63 | --ion-color-medium: #92949c;
64 | --ion-color-medium-rgb: 146, 148, 156;
65 | --ion-color-medium-contrast: #fff;
66 | --ion-color-medium-contrast-rgb: 255, 255, 255;
67 | --ion-color-medium-shade: #808289;
68 | --ion-color-medium-tint: #9d9fa6;
69 |
70 | /** light **/
71 | --ion-color-light: #f4f5f8;
72 | --ion-color-light-rgb: 244, 245, 248;
73 | --ion-color-light-contrast: #000;
74 | --ion-color-light-contrast-rgb: 0, 0, 0;
75 | --ion-color-light-shade: #d7d8da;
76 | --ion-color-light-tint: #f5f6f9;
77 | }
78 |
79 | @media (prefers-color-scheme: dark) {
80 | /*
81 | * Dark Colors
82 | * -------------------------------------------
83 | */
84 |
85 | body {
86 | --ion-color-primary: #428cff;
87 | --ion-color-primary-rgb: 66, 140, 255;
88 | --ion-color-primary-contrast: #fff;
89 | --ion-color-primary-contrast-rgb: 255, 255, 255;
90 | --ion-color-primary-shade: #3a7be0;
91 | --ion-color-primary-tint: #5598ff;
92 | --ion-color-secondary: #50c8ff;
93 | --ion-color-secondary-rgb: 80, 200, 255;
94 | --ion-color-secondary-contrast: #fff;
95 | --ion-color-secondary-contrast-rgb: 255, 255, 255;
96 | --ion-color-secondary-shade: #46b0e0;
97 | --ion-color-secondary-tint: #62ceff;
98 | --ion-color-tertiary: #6a64ff;
99 | --ion-color-tertiary-rgb: 106, 100, 255;
100 | --ion-color-tertiary-contrast: #fff;
101 | --ion-color-tertiary-contrast-rgb: 255, 255, 255;
102 | --ion-color-tertiary-shade: #5d58e0;
103 | --ion-color-tertiary-tint: #7974ff;
104 | --ion-color-success: #2fdf75;
105 | --ion-color-success-rgb: 47, 223, 117;
106 | --ion-color-success-contrast: #000;
107 | --ion-color-success-contrast-rgb: 0, 0, 0;
108 | --ion-color-success-shade: #29c467;
109 | --ion-color-success-tint: #44e283;
110 | --ion-color-warning: #ffd534;
111 | --ion-color-warning-rgb: 255, 213, 52;
112 | --ion-color-warning-contrast: #000;
113 | --ion-color-warning-contrast-rgb: 0, 0, 0;
114 | --ion-color-warning-shade: #e0bb2e;
115 | --ion-color-warning-tint: #ffd948;
116 | --ion-color-danger: #ff4961;
117 | --ion-color-danger-rgb: 255, 73, 97;
118 | --ion-color-danger-contrast: #fff;
119 | --ion-color-danger-contrast-rgb: 255, 255, 255;
120 | --ion-color-danger-shade: #e04055;
121 | --ion-color-danger-tint: #ff5b71;
122 | --ion-color-dark: #f4f5f8;
123 | --ion-color-dark-rgb: 244, 245, 248;
124 | --ion-color-dark-contrast: #000;
125 | --ion-color-dark-contrast-rgb: 0, 0, 0;
126 | --ion-color-dark-shade: #d7d8da;
127 | --ion-color-dark-tint: #f5f6f9;
128 | --ion-color-medium: #989aa2;
129 | --ion-color-medium-rgb: 152, 154, 162;
130 | --ion-color-medium-contrast: #000;
131 | --ion-color-medium-contrast-rgb: 0, 0, 0;
132 | --ion-color-medium-shade: #86888f;
133 | --ion-color-medium-tint: #a2a4ab;
134 | --ion-color-light: #222428;
135 | --ion-color-light-rgb: 34, 36, 40;
136 | --ion-color-light-contrast: #fff;
137 | --ion-color-light-contrast-rgb: 255, 255, 255;
138 | --ion-color-light-shade: #1e2023;
139 | --ion-color-light-tint: #383a3e;
140 | }
141 |
142 | /*
143 | * iOS Dark Theme
144 | * -------------------------------------------
145 | */
146 |
147 | .ios body {
148 | --ion-background-color: #000;
149 | --ion-background-color-rgb: 0, 0, 0;
150 | --ion-text-color: #fff;
151 | --ion-text-color-rgb: 255, 255, 255;
152 | --ion-color-step-50: #0d0d0d;
153 | --ion-color-step-100: #1a1a1a;
154 | --ion-color-step-150: #262626;
155 | --ion-color-step-200: #333;
156 | --ion-color-step-250: #404040;
157 | --ion-color-step-300: #4d4d4d;
158 | --ion-color-step-350: #595959;
159 | --ion-color-step-400: #666;
160 | --ion-color-step-450: #737373;
161 | --ion-color-step-500: #808080;
162 | --ion-color-step-550: #8c8c8c;
163 | --ion-color-step-600: #999;
164 | --ion-color-step-650: #a6a6a6;
165 | --ion-color-step-700: #b3b3b3;
166 | --ion-color-step-750: #bfbfbf;
167 | --ion-color-step-800: #ccc;
168 | --ion-color-step-850: #d9d9d9;
169 | --ion-color-step-900: #e6e6e6;
170 | --ion-color-step-950: #f2f2f2;
171 | --ion-toolbar-background: #0d0d0d;
172 | --ion-item-background: #000;
173 | --ion-card-background: #1c1c1d;
174 | }
175 |
176 | /*
177 | * Material Design Dark Theme
178 | * -------------------------------------------
179 | */
180 |
181 | .md body {
182 | --ion-background-color: #121212;
183 | --ion-background-color-rgb: 18, 18, 18;
184 | --ion-text-color: #fff;
185 | --ion-text-color-rgb: 255, 255, 255;
186 | --ion-border-color: #222;
187 | --ion-color-step-50: #1e1e1e;
188 | --ion-color-step-100: #2a2a2a;
189 | --ion-color-step-150: #363636;
190 | --ion-color-step-200: #414141;
191 | --ion-color-step-250: #4d4d4d;
192 | --ion-color-step-300: #595959;
193 | --ion-color-step-350: #656565;
194 | --ion-color-step-400: #717171;
195 | --ion-color-step-450: #7d7d7d;
196 | --ion-color-step-500: #898989;
197 | --ion-color-step-550: #949494;
198 | --ion-color-step-600: #a0a0a0;
199 | --ion-color-step-650: #acacac;
200 | --ion-color-step-700: #b8b8b8;
201 | --ion-color-step-750: #c4c4c4;
202 | --ion-color-step-800: #d0d0d0;
203 | --ion-color-step-850: #dbdbdb;
204 | --ion-color-step-900: #e7e7e7;
205 | --ion-color-step-950: #f3f3f3;
206 | --ion-item-background: #1e1e1e;
207 | --ion-toolbar-background: #1f1f1f;
208 | --ion-tab-bar-background: #1f1f1f;
209 | --ion-card-background: #1e1e1e;
210 | }
211 | }
212 |
--------------------------------------------------------------------------------
/projects/ionic-starter/src/zone-flags.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Prevents Angular change detection from
3 | * running with certain Web Component callbacks
4 | */
5 | (window as any).__Zone_disable_customElements = true;
6 |
--------------------------------------------------------------------------------
/projects/ionic-starter/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | prefix: "",
3 | purge: {
4 | content: ["./src/**/*.{html,ts}"],
5 | },
6 | darkMode: "class", // or 'media' or 'class'
7 | theme: {
8 | extend: {},
9 | colors: {
10 | primary: {
11 | default: 'var(--ion-color-primary)',
12 | shade: 'var(--ion-color-primary-shade)',
13 | tint: 'var(--ion-color-primary-tint)',
14 | },
15 | secondary: {
16 | default: 'var(--ion-color-secondary)',
17 | shade: 'var(--ion-color-secondary-shade)',
18 | tint: 'var(--ion-color-secondary-tint)',
19 | },
20 | tertiary: {
21 | default: 'var(--ion-color-tertiary)',
22 | shade: 'var(--ion-color-tertiary-shade)',
23 | tint: 'var(--ion-color-tertiary-tint)',
24 | },
25 | light: {
26 | default: 'var(--ion-color-light)',
27 | shade: 'var(--ion-color-light-shade)',
28 | tint: 'var(--ion-color-light-tint)',
29 | },
30 | medium: {
31 | default: 'var(--ion-color-medium)',
32 | shade: 'var(--ion-color-medium-shade)',
33 | tint: 'var(--ion-color-medium-tint)',
34 | },
35 | dark: {
36 | default: 'var(--ion-color-dark)',
37 | shade: 'var(--ion-color-dark-shade)',
38 | tint: 'var(--ion-color-dark-tint)',
39 | },
40 | success: {
41 | default: 'var(--ion-color-success)',
42 | shade: 'var(--ion-color-success-shade)',
43 | tint: 'var(--ion-color-success-tint)',
44 | },
45 | warning: {
46 | default: 'var(--ion-color-warning)',
47 | shade: 'var(--ion-color-warning-shade)',
48 | tint: 'var(--ion-color-warning-tint)',
49 | },
50 | danger: {
51 | default: 'var(--ion-color-danger)',
52 | shade: 'var(--ion-color-danger-shade)',
53 | tint: 'var(--ion-color-danger-tint)',
54 | },
55 | step: {
56 | '50': 'var(--ion-color-step-50)',
57 | '100': 'var(--ion-color-step-100)',
58 | '150': 'var(--ion-color-step-150)',
59 | '200': 'var(--ion-color-step-200)',
60 | '250': 'var(--ion-color-step-250)',
61 | '300': 'var(--ion-color-step-300)',
62 | '350': 'var(--ion-color-step-350)',
63 | '400': 'var(--ion-color-step-400)',
64 | '450': 'var(--ion-color-step-450)',
65 | '500': 'var(--ion-color-step-500)',
66 | '550': 'var(--ion-color-step-550)',
67 | '600': 'var(--ion-color-step-600)',
68 | '650': 'var(--ion-color-step-650)',
69 | '700': 'var(--ion-color-step-700)',
70 | '750': 'var(--ion-color-step-750)',
71 | '800': 'var(--ion-color-step-800)',
72 | '850': 'var(--ion-color-step-850)',
73 | '900': 'var(--ion-color-step-900)',
74 | '950': 'var(--ion-color-step-950)',
75 | },
76 | },
77 | },
78 | variants: {
79 | extend: {},
80 | },
81 | plugins: [
82 | require("@tailwindcss/forms"),
83 | require("@tailwindcss/typography"),
84 | ],
85 | };
86 |
--------------------------------------------------------------------------------
/projects/ionic-starter/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/app",
5 | "types": []
6 | },
7 | "files": ["src/main.ts", "src/polyfills.ts"],
8 | "include": ["src/**/*.ts", "src/**/*.d.ts"],
9 | "exclude": ["src/**/*.spec.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/projects/ionic-starter/tsconfig.app.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.app.json",
3 | "angularCompilerOptions": {
4 | "strictTemplates": true
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/projects/ionic-starter/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "baseUrl": "./",
5 | "outDir": "./dist/out-tsc",
6 | "sourceMap": true,
7 | "declaration": false,
8 | "downlevelIteration": true,
9 | "experimentalDecorators": true,
10 | "module": "esnext",
11 | "moduleResolution": "node",
12 | "importHelpers": true,
13 | "target": "es2015",
14 | "lib": ["es2018", "dom"]
15 | },
16 | "angularCompilerOptions": {
17 | "fullTemplateTypeCheck": true,
18 | "strictInjectionParameters": true
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/projects/ionic-starter/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "./out-tsc/spec",
5 | "types": ["jasmine", "node"]
6 | },
7 | "files": ["src/test.ts", "src/polyfills.ts"],
8 | "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/projects/ionic-starter/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tslint:recommended",
3 | "rulesDirectory": ["codelyzer"],
4 | "rules": {
5 | "array-type": false,
6 | "arrow-parens": false,
7 | "deprecation": {
8 | "severity": "warn"
9 | },
10 | "import-blacklist": [true, "rxjs/Rx"],
11 | "interface-name": false,
12 | "max-classes-per-file": false,
13 | "max-line-length": [true, 200],
14 | "member-access": false,
15 | "member-ordering": [
16 | true,
17 | {
18 | "order": [
19 | "static-field",
20 | "instance-field",
21 | "static-method",
22 | "instance-method"
23 | ]
24 | }
25 | ],
26 | "no-consecutive-blank-lines": false,
27 | "no-console": [true, "debug", "time", "timeEnd", "trace"],
28 | "no-empty": false,
29 | "no-inferrable-types": [false, "ignore-params"],
30 | "typedef": [ true, "call-signature", "property-declaration"],
31 | "no-non-null-assertion": true,
32 | "no-redundant-jsdoc": true,
33 | "no-switch-case-fall-through": true,
34 | "no-var-requires": false,
35 | "object-literal-key-quotes": [true, "as-needed"],
36 | "object-literal-sort-keys": false,
37 | "ordered-imports": false,
38 | "quotemark": [true, "double"],
39 | "trailing-comma": false,
40 | "no-output-on-prefix": true,
41 | "no-inputs-metadata-property": true,
42 | "no-host-metadata-property": true,
43 | "no-input-rename": true,
44 | "no-output-rename": true,
45 | "use-lifecycle-interface": true,
46 | "use-pipe-transform-interface": true,
47 | "one-variable-per-declaration": false,
48 | "component-class-suffix": [true, "Component", "Page"],
49 | "directive-class-suffix": true,
50 | "directive-selector": [true, "attribute", "app", "camelCase"],
51 | "component-selector": [true, "element", "app", "kebab-case"],
52 | "contextual-lifecycle": true,
53 | "no-conflicting-lifecycle": true,
54 | "no-output-native": true,
55 | "no-outputs-metadata-property": true,
56 | "template-banana-in-box": true,
57 | "template-no-negated-async": true,
58 | "indent": [true, "spaces", 4],
59 | "variable-name": false
60 | }
61 | }
62 |
--------------------------------------------------------------------------------