├── README.md
├── frontend-angular-19
├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── angular.json
├── eslint.config.js
├── nginx.conf
├── package-lock.json
├── package.json
├── public
│ └── favicon.ico
├── server.js
├── src
│ ├── app
│ │ ├── app.component.css
│ │ ├── app.component.html
│ │ ├── app.component.spec.ts
│ │ ├── app.component.ts
│ │ ├── app.config.ts
│ │ ├── app.routes.ts
│ │ └── features
│ │ │ ├── about
│ │ │ ├── about.component.css
│ │ │ ├── about.component.html
│ │ │ ├── about.component.spec.ts
│ │ │ ├── about.component.ts
│ │ │ ├── about.config.ts
│ │ │ ├── about.routes.ts
│ │ │ ├── experience
│ │ │ │ ├── experience.component.css
│ │ │ │ ├── experience.component.html
│ │ │ │ ├── experience.component.spec.ts
│ │ │ │ └── experience.component.ts
│ │ │ └── skill
│ │ │ │ ├── skill.component.css
│ │ │ │ ├── skill.component.html
│ │ │ │ ├── skill.component.spec.ts
│ │ │ │ └── skill.component.ts
│ │ │ ├── contact
│ │ │ ├── contact.component.css
│ │ │ ├── contact.component.html
│ │ │ ├── contact.component.spec.ts
│ │ │ ├── contact.component.ts
│ │ │ ├── contact.config.ts
│ │ │ ├── contact.routes.ts
│ │ │ ├── mailing
│ │ │ │ ├── mailing.component.css
│ │ │ │ ├── mailing.component.html
│ │ │ │ ├── mailing.component.spec.ts
│ │ │ │ └── mailing.component.ts
│ │ │ ├── mapping
│ │ │ │ ├── mapping.component.css
│ │ │ │ ├── mapping.component.html
│ │ │ │ ├── mapping.component.spec.ts
│ │ │ │ └── mapping.component.ts
│ │ │ └── website
│ │ │ │ ├── website.component.css
│ │ │ │ ├── website.component.html
│ │ │ │ ├── website.component.spec.ts
│ │ │ │ └── website.component.ts
│ │ │ ├── home
│ │ │ ├── home.component.css
│ │ │ ├── home.component.html
│ │ │ ├── home.component.spec.ts
│ │ │ └── home.component.ts
│ │ │ ├── login
│ │ │ ├── login.component.css
│ │ │ ├── login.component.html
│ │ │ ├── login.component.spec.ts
│ │ │ └── login.component.ts
│ │ │ ├── not-found
│ │ │ ├── not-found.component.css
│ │ │ ├── not-found.component.html
│ │ │ ├── not-found.component.spec.ts
│ │ │ └── not-found.component.ts
│ │ │ ├── signup
│ │ │ ├── signup.component.css
│ │ │ ├── signup.component.html
│ │ │ ├── signup.component.spec.ts
│ │ │ └── signup.component.ts
│ │ │ └── tutorials
│ │ │ └── example-bootstrap
│ │ │ ├── 00-main
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ ├── items.component.ts
│ │ │ └── items.ts
│ │ │ ├── accordions
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ ├── items.component.spec.ts
│ │ │ └── items.component.ts
│ │ │ ├── alerts
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── badges
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── blockquotes
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── breadcrumb
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── buttons
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── cards
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── checkbox
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── collapses
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── dropdowns
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── forms
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── list-group
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── pagination
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── progress
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── spinners
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── tables
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── tutorial.component.css
│ │ │ ├── tutorial.component.html
│ │ │ ├── tutorial.component.spec.ts
│ │ │ ├── tutorial.component.ts
│ │ │ ├── tutorial.config.ts
│ │ │ ├── tutorial.routes.ts
│ │ │ └── typography
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ ├── assets
│ │ ├── .gitkeep
│ │ └── params
│ │ │ ├── css
│ │ │ ├── fonts.googleapis.css
│ │ │ └── fonts.googleapis.min.css
│ │ │ ├── images
│ │ │ ├── example-bootstrap
│ │ │ │ └── movie-screen.jpg
│ │ │ └── logo
│ │ │ │ ├── ganatan-logo.png
│ │ │ │ └── ganatan-logo@2x.png
│ │ │ └── js
│ │ │ ├── popovers.js
│ │ │ ├── toasts.js
│ │ │ └── tooltips.js
│ ├── environments
│ │ ├── environment.development.ts
│ │ └── environment.ts
│ ├── index.html
│ ├── main.ts
│ └── styles.css
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.spec.json
└── ui
│ ├── assets
│ ├── bootstrap
│ │ ├── css
│ │ │ ├── bootstrap-grid.css
│ │ │ ├── bootstrap-grid.css.map
│ │ │ ├── bootstrap-grid.min.css
│ │ │ ├── bootstrap-grid.min.css.map
│ │ │ ├── bootstrap-grid.rtl.css
│ │ │ ├── bootstrap-grid.rtl.css.map
│ │ │ ├── bootstrap-grid.rtl.min.css
│ │ │ ├── bootstrap-grid.rtl.min.css.map
│ │ │ ├── bootstrap-reboot.css
│ │ │ ├── bootstrap-reboot.css.map
│ │ │ ├── bootstrap-reboot.min.css
│ │ │ ├── bootstrap-reboot.min.css.map
│ │ │ ├── bootstrap-reboot.rtl.css
│ │ │ ├── bootstrap-reboot.rtl.css.map
│ │ │ ├── bootstrap-reboot.rtl.min.css
│ │ │ ├── bootstrap-reboot.rtl.min.css.map
│ │ │ ├── bootstrap-utilities.css
│ │ │ ├── bootstrap-utilities.css.map
│ │ │ ├── bootstrap-utilities.min.css
│ │ │ ├── bootstrap-utilities.min.css.map
│ │ │ ├── bootstrap-utilities.rtl.css
│ │ │ ├── bootstrap-utilities.rtl.css.map
│ │ │ ├── bootstrap-utilities.rtl.min.css
│ │ │ ├── bootstrap-utilities.rtl.min.css.map
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ ├── bootstrap.min.css
│ │ │ ├── bootstrap.min.css.map
│ │ │ ├── bootstrap.rtl.css
│ │ │ ├── bootstrap.rtl.css.map
│ │ │ ├── bootstrap.rtl.min.css
│ │ │ └── bootstrap.rtl.min.css.map
│ │ └── js
│ │ │ ├── bootstrap.bundle.js
│ │ │ ├── bootstrap.bundle.js.map
│ │ │ ├── bootstrap.bundle.min.js
│ │ │ ├── bootstrap.bundle.min.js.map
│ │ │ ├── bootstrap.esm.js
│ │ │ ├── bootstrap.esm.js.map
│ │ │ ├── bootstrap.esm.min.js
│ │ │ ├── bootstrap.esm.min.js.map
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.js.map
│ │ │ ├── bootstrap.min.js
│ │ │ └── bootstrap.min.js.map
│ ├── fontawesome
│ │ ├── css
│ │ │ ├── all.css
│ │ │ ├── all.min.css
│ │ │ ├── brands.css
│ │ │ ├── brands.min.css
│ │ │ ├── fontawesome.css
│ │ │ ├── fontawesome.min.css
│ │ │ ├── regular.css
│ │ │ ├── regular.min.css
│ │ │ ├── solid.css
│ │ │ ├── solid.min.css
│ │ │ ├── svg-with-js.css
│ │ │ ├── svg-with-js.min.css
│ │ │ ├── v4-font-face.css
│ │ │ ├── v4-font-face.min.css
│ │ │ ├── v4-shims.css
│ │ │ ├── v4-shims.min.css
│ │ │ ├── v5-font-face.css
│ │ │ └── v5-font-face.min.css
│ │ ├── js
│ │ │ ├── all.js
│ │ │ ├── all.min.js
│ │ │ ├── brands.js
│ │ │ ├── brands.min.js
│ │ │ ├── conflict-detection.js
│ │ │ ├── conflict-detection.min.js
│ │ │ ├── fontawesome.js
│ │ │ ├── fontawesome.min.js
│ │ │ ├── regular.js
│ │ │ ├── regular.min.js
│ │ │ ├── solid.js
│ │ │ ├── solid.min.js
│ │ │ ├── v4-shims.js
│ │ │ └── v4-shims.min.js
│ │ └── webfonts
│ │ │ ├── fa-brands-400.ttf
│ │ │ ├── fa-brands-400.woff2
│ │ │ ├── fa-regular-400.ttf
│ │ │ ├── fa-regular-400.woff2
│ │ │ ├── fa-solid-900.ttf
│ │ │ ├── fa-solid-900.woff2
│ │ │ ├── fa-v4compatibility.ttf
│ │ │ └── fa-v4compatibility.woff2
│ └── params
│ │ ├── css
│ │ ├── body.css
│ │ ├── fonts.googleapis.css
│ │ ├── fonts.googleapis.min.css
│ │ ├── footer.css
│ │ └── header.css
│ │ ├── images
│ │ └── logo
│ │ │ ├── ganatan-logo.png
│ │ │ └── ganatan-logo@2x.png
│ │ └── js
│ │ ├── popovers.js
│ │ ├── toasts.js
│ │ └── tooltips.js
│ └── home.html
├── frontend-angular
├── .editorconfig
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── angular.json
├── eslint.config.js
├── nginx.conf
├── package-lock.json
├── package.json
├── public
│ └── favicon.ico
├── server.js
├── src
│ ├── app
│ │ ├── app.config.ts
│ │ ├── app.css
│ │ ├── app.html
│ │ ├── app.routes.ts
│ │ ├── app.spec.ts
│ │ ├── app.ts
│ │ └── features
│ │ │ ├── about
│ │ │ ├── about.config.ts
│ │ │ ├── about.css
│ │ │ ├── about.html
│ │ │ ├── about.routes.ts
│ │ │ ├── about.spec.ts
│ │ │ ├── about.ts
│ │ │ ├── experience
│ │ │ │ ├── experience.css
│ │ │ │ ├── experience.html
│ │ │ │ ├── experience.spec.ts
│ │ │ │ └── experience.ts
│ │ │ └── skill
│ │ │ │ ├── skill.css
│ │ │ │ ├── skill.html
│ │ │ │ ├── skill.spec.ts
│ │ │ │ └── skill.ts
│ │ │ ├── contact
│ │ │ ├── contact.config.ts
│ │ │ ├── contact.css
│ │ │ ├── contact.html
│ │ │ ├── contact.routes.ts
│ │ │ ├── contact.spec.ts
│ │ │ ├── contact.ts
│ │ │ ├── mailing
│ │ │ │ ├── mailing.css
│ │ │ │ ├── mailing.html
│ │ │ │ ├── mailing.spec.ts
│ │ │ │ └── mailing.ts
│ │ │ ├── mapping
│ │ │ │ ├── mapping.css
│ │ │ │ ├── mapping.html
│ │ │ │ ├── mapping.spec.ts
│ │ │ │ └── mapping.ts
│ │ │ └── website
│ │ │ │ ├── website.css
│ │ │ │ ├── website.html
│ │ │ │ ├── website.spec.ts
│ │ │ │ └── website.ts
│ │ │ ├── home
│ │ │ ├── home.css
│ │ │ ├── home.html
│ │ │ ├── home.spec.ts
│ │ │ └── home.ts
│ │ │ ├── login
│ │ │ ├── login.css
│ │ │ ├── login.html
│ │ │ ├── login.spec.ts
│ │ │ └── login.ts
│ │ │ ├── not-found
│ │ │ ├── not-found.css
│ │ │ ├── not-found.html
│ │ │ ├── not-found.spec.ts
│ │ │ └── not-found.ts
│ │ │ ├── signup
│ │ │ ├── signup.css
│ │ │ ├── signup.html
│ │ │ ├── signup.spec.ts
│ │ │ └── signup.ts
│ │ │ └── tutorials
│ │ │ └── example-bootstrap
│ │ │ ├── 00-main
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ ├── items.component.ts
│ │ │ └── items.ts
│ │ │ ├── accordions
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ ├── items.component.spec.ts
│ │ │ └── items.component.ts
│ │ │ ├── alerts
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── badges
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── blockquotes
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── breadcrumb
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── buttons
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── cards
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── checkbox
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── collapses
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── dropdowns
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── forms
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── list-group
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── pagination
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── progress
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── spinners
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── tables
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ │ │ ├── tutorial.component.css
│ │ │ ├── tutorial.component.html
│ │ │ ├── tutorial.component.spec.ts
│ │ │ ├── tutorial.component.ts
│ │ │ ├── tutorial.config.ts
│ │ │ ├── tutorial.routes.ts
│ │ │ └── typography
│ │ │ ├── items.component.css
│ │ │ ├── items.component.html
│ │ │ └── items.component.ts
│ ├── assets
│ │ ├── .gitkeep
│ │ └── params
│ │ │ ├── css
│ │ │ ├── fonts.googleapis.css
│ │ │ └── fonts.googleapis.min.css
│ │ │ ├── images
│ │ │ ├── example-bootstrap
│ │ │ │ └── movie-screen.jpg
│ │ │ └── logo
│ │ │ │ ├── ganatan-logo.png
│ │ │ │ └── ganatan-logo@2x.png
│ │ │ └── js
│ │ │ ├── popovers.js
│ │ │ ├── toasts.js
│ │ │ └── tooltips.js
│ ├── environments
│ │ ├── environment.development.ts
│ │ └── environment.ts
│ ├── index.html
│ ├── main.ts
│ └── styles.css
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.spec.json
└── ui
│ ├── assets
│ ├── bootstrap
│ │ ├── css
│ │ │ ├── bootstrap-grid.css
│ │ │ ├── bootstrap-grid.css.map
│ │ │ ├── bootstrap-grid.min.css
│ │ │ ├── bootstrap-grid.min.css.map
│ │ │ ├── bootstrap-grid.rtl.css
│ │ │ ├── bootstrap-grid.rtl.css.map
│ │ │ ├── bootstrap-grid.rtl.min.css
│ │ │ ├── bootstrap-grid.rtl.min.css.map
│ │ │ ├── bootstrap-reboot.css
│ │ │ ├── bootstrap-reboot.css.map
│ │ │ ├── bootstrap-reboot.min.css
│ │ │ ├── bootstrap-reboot.min.css.map
│ │ │ ├── bootstrap-reboot.rtl.css
│ │ │ ├── bootstrap-reboot.rtl.css.map
│ │ │ ├── bootstrap-reboot.rtl.min.css
│ │ │ ├── bootstrap-reboot.rtl.min.css.map
│ │ │ ├── bootstrap-utilities.css
│ │ │ ├── bootstrap-utilities.css.map
│ │ │ ├── bootstrap-utilities.min.css
│ │ │ ├── bootstrap-utilities.min.css.map
│ │ │ ├── bootstrap-utilities.rtl.css
│ │ │ ├── bootstrap-utilities.rtl.css.map
│ │ │ ├── bootstrap-utilities.rtl.min.css
│ │ │ ├── bootstrap-utilities.rtl.min.css.map
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ ├── bootstrap.min.css
│ │ │ ├── bootstrap.min.css.map
│ │ │ ├── bootstrap.rtl.css
│ │ │ ├── bootstrap.rtl.css.map
│ │ │ ├── bootstrap.rtl.min.css
│ │ │ └── bootstrap.rtl.min.css.map
│ │ └── js
│ │ │ ├── bootstrap.bundle.js
│ │ │ ├── bootstrap.bundle.js.map
│ │ │ ├── bootstrap.bundle.min.js
│ │ │ ├── bootstrap.bundle.min.js.map
│ │ │ ├── bootstrap.esm.js
│ │ │ ├── bootstrap.esm.js.map
│ │ │ ├── bootstrap.esm.min.js
│ │ │ ├── bootstrap.esm.min.js.map
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.js.map
│ │ │ ├── bootstrap.min.js
│ │ │ └── bootstrap.min.js.map
│ ├── fontawesome
│ │ ├── css
│ │ │ ├── all.css
│ │ │ ├── all.min.css
│ │ │ ├── brands.css
│ │ │ ├── brands.min.css
│ │ │ ├── fontawesome.css
│ │ │ ├── fontawesome.min.css
│ │ │ ├── regular.css
│ │ │ ├── regular.min.css
│ │ │ ├── solid.css
│ │ │ ├── solid.min.css
│ │ │ ├── svg-with-js.css
│ │ │ ├── svg-with-js.min.css
│ │ │ ├── v4-font-face.css
│ │ │ ├── v4-font-face.min.css
│ │ │ ├── v4-shims.css
│ │ │ ├── v4-shims.min.css
│ │ │ ├── v5-font-face.css
│ │ │ └── v5-font-face.min.css
│ │ ├── js
│ │ │ ├── all.js
│ │ │ ├── all.min.js
│ │ │ ├── brands.js
│ │ │ ├── brands.min.js
│ │ │ ├── conflict-detection.js
│ │ │ ├── conflict-detection.min.js
│ │ │ ├── fontawesome.js
│ │ │ ├── fontawesome.min.js
│ │ │ ├── regular.js
│ │ │ ├── regular.min.js
│ │ │ ├── solid.js
│ │ │ ├── solid.min.js
│ │ │ ├── v4-shims.js
│ │ │ └── v4-shims.min.js
│ │ └── webfonts
│ │ │ ├── fa-brands-400.ttf
│ │ │ ├── fa-brands-400.woff2
│ │ │ ├── fa-regular-400.ttf
│ │ │ ├── fa-regular-400.woff2
│ │ │ ├── fa-solid-900.ttf
│ │ │ ├── fa-solid-900.woff2
│ │ │ ├── fa-v4compatibility.ttf
│ │ │ └── fa-v4compatibility.woff2
│ └── params
│ │ ├── css
│ │ ├── body.css
│ │ ├── fonts.googleapis.css
│ │ ├── fonts.googleapis.min.css
│ │ ├── footer.css
│ │ └── header.css
│ │ ├── images
│ │ └── logo
│ │ │ ├── ganatan-logo.png
│ │ │ └── ganatan-logo@2x.png
│ │ └── js
│ │ ├── popovers.js
│ │ ├── toasts.js
│ │ └── tooltips.js
│ └── home.html
├── frontend-react
├── .eslintrc.json
├── .gitignore
├── nginx.conf
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── server.js
└── src
│ ├── app
│ ├── app-routing.js
│ ├── app.css
│ ├── app.js
│ ├── app.test.js
│ └── modules
│ │ ├── application
│ │ └── example-bootstrap
│ │ │ ├── 00-main
│ │ │ ├── main.css
│ │ │ └── main.js
│ │ │ ├── accordions
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── alerts
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── badges
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── blockquotes
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── breadcrumb
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── buttons
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── cards
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── checkbox
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── collapses
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── dropdowns
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── example-bootstrap-routing.js
│ │ │ ├── example-bootstrap.css
│ │ │ ├── example-bootstrap.js
│ │ │ ├── forms
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── list-group
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── modal
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── pagination
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── popovers
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── progress
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── spinners
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── tables
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── toasts
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ ├── tooltips
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ │ └── typography
│ │ │ ├── items.css
│ │ │ └── items.js
│ │ └── general
│ │ ├── about
│ │ ├── about.css
│ │ └── about.js
│ │ ├── contact
│ │ ├── contact-routing.js
│ │ ├── contact.css
│ │ ├── contact.js
│ │ ├── mailing
│ │ │ ├── mailing.css
│ │ │ └── mailing.js
│ │ ├── mapping
│ │ │ ├── mapping.css
│ │ │ └── mapping.js
│ │ └── website
│ │ │ ├── website.css
│ │ │ └── website.js
│ │ ├── home
│ │ ├── home.css
│ │ └── home.js
│ │ ├── login
│ │ ├── login.css
│ │ └── login.js
│ │ ├── not-found
│ │ ├── not-found.css
│ │ └── not-found.js
│ │ └── signup
│ │ ├── signup.css
│ │ └── signup.js
│ ├── assets
│ ├── .gitkeep
│ └── params
│ │ ├── css
│ │ ├── fonts.googleapis.css
│ │ └── fonts.googleapis.min.css
│ │ └── images
│ │ ├── example-bootstrap
│ │ └── movie-screen.jpg
│ │ └── logo
│ │ ├── ganatan-logo.png
│ │ └── ganatan-logo@2x.png
│ ├── environments
│ └── environment.js
│ ├── index.css
│ ├── index.js
│ ├── reportWebVitals.js
│ └── setupTests.js
└── img
└── ganatan-about-github.png
/frontend-angular-19/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 | ij_typescript_use_double_quotes = false
14 |
15 | [*.md]
16 | max_line_length = off
17 | trim_trailing_whitespace = false
18 |
--------------------------------------------------------------------------------
/frontend-angular-19/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
2 |
3 | # Compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | /bazel-out
8 |
9 | # Node
10 | /node_modules
11 | npm-debug.log
12 | yarn-error.log
13 |
14 | # IDEs and editors
15 | .idea/
16 | .project
17 | .classpath
18 | .c9/
19 | *.launch
20 | .settings/
21 | *.sublime-workspace
22 |
23 | # Visual Studio Code
24 | .vscode/*
25 | !.vscode/settings.json
26 | !.vscode/tasks.json
27 | !.vscode/launch.json
28 | !.vscode/extensions.json
29 | .history/*
30 |
31 | # Miscellaneous
32 | /.angular/cache
33 | .sass-cache/
34 | /connect.lock
35 | /coverage
36 | /libpeerconnection.log
37 | testem.log
38 | /typings
39 |
40 | # System files
41 | .DS_Store
42 | Thumbs.db
43 |
--------------------------------------------------------------------------------
/frontend-angular-19/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2017-2025 Ganatan
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
13 | all 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
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/frontend-angular-19/README.md:
--------------------------------------------------------------------------------
1 |
2 | ### Installation
3 | * `npm install` (installing dependencies)
4 | * `npm outdated` (verifying dependencies)
5 |
6 | ### Developpement
7 | * `npm run start`
8 | * in your browser [http://localhost:4200](http://localhost:4200)
9 |
10 | ## Linter
11 | * `npm run lint`
12 |
13 | ## Tests
14 | * `npm run test`
15 | * `npm run coverage`
16 |
17 | ### Compilation
18 | * `npm run build` ( without SSR)
19 |
20 | ### Production
21 | * `npm run serve`
22 | * in your browser [http://localhost:4000](http://localhost:4000)
23 |
24 |
25 | ### Author
26 | * Author : danny
27 |
--------------------------------------------------------------------------------
/frontend-angular-19/eslint.config.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | const eslint = require("@eslint/js");
3 | const tseslint = require("typescript-eslint");
4 | const angular = require("angular-eslint");
5 |
6 | module.exports = tseslint.config(
7 | {
8 | files: ["**/*.ts"],
9 | extends: [
10 | eslint.configs.recommended,
11 | ...tseslint.configs.recommended,
12 | ...tseslint.configs.stylistic,
13 | ...angular.configs.tsRecommended,
14 | ],
15 | processor: angular.processInlineTemplates,
16 | rules: {
17 | "@angular-eslint/directive-selector": [
18 | "error",
19 | {
20 | type: "attribute",
21 | prefix: "app",
22 | style: "camelCase",
23 | },
24 | ],
25 | "@angular-eslint/component-selector": [
26 | "error",
27 | {
28 | type: "element",
29 | prefix: "app",
30 | style: "kebab-case",
31 | },
32 | ],
33 | "no-undefined": "error",
34 | "no-var": "error",
35 | "prefer-const": "error",
36 | "func-names": "error",
37 | "id-length": "error",
38 | "newline-before-return": "error",
39 | "space-before-blocks": "error",
40 | "no-alert": "error"
41 | },
42 | },
43 | {
44 | files: ["**/*.html"],
45 | extends: [
46 | ...angular.configs.templateRecommended,
47 | ...angular.configs.templateAccessibility,
48 | ],
49 | rules: {},
50 | }
51 | );
52 |
--------------------------------------------------------------------------------
/frontend-angular-19/nginx.conf:
--------------------------------------------------------------------------------
1 | user www-data;
2 | worker_processes auto;
3 | pid /run/nginx.pid;
4 | error_log /var/log/nginx/error.log;
5 | include /etc/nginx/modules-enabled/*.conf;
6 |
7 | events {
8 | worker_connections 768;
9 | }
10 |
11 | http {
12 | sendfile on;
13 | tcp_nopush on;
14 | types_hash_max_size 2048;
15 |
16 | include /etc/nginx/mime.types;
17 | default_type application/octet-stream;
18 |
19 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
20 | ssl_prefer_server_ciphers on;
21 |
22 | access_log /var/log/nginx/access.log;
23 | gzip on;
24 | include /etc/nginx/conf.d/*.conf;
25 | server {
26 | listen 80 default_server;
27 | listen [::]:80 default_server;
28 |
29 | root /var/www/html;
30 | index index.html index.htm index.nginx-debian.html;
31 | server_name _;
32 | location / {
33 | try_files $uri $uri/ =404;
34 | }
35 |
36 | }
37 | }
--------------------------------------------------------------------------------
/frontend-angular-19/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-starter",
3 | "version": "19.2.10",
4 | "scripts": {
5 | "ng": "ng",
6 | "dev": "ng serve --port 4200",
7 | "start": "ng serve --port 4200",
8 | "build": "ng build",
9 | "watch": "ng build --watch --configuration development",
10 | "test": "ng test",
11 | "coverage": "ng test --no-watch --code-coverage",
12 | "lint": "ng lint",
13 | "serve": "node server.js"
14 | },
15 | "private": true,
16 | "dependencies": {
17 | "@angular/animations": "19.2.10",
18 | "@angular/common": "19.2.10",
19 | "@angular/compiler": "19.2.10",
20 | "@angular/core": "19.2.10",
21 | "@angular/forms": "19.2.10",
22 | "@angular/platform-browser": "19.2.10",
23 | "@angular/platform-browser-dynamic": "19.2.10",
24 | "@angular/router": "19.2.10",
25 | "@fortawesome/fontawesome-free": "6.7.2",
26 | "bootstrap": "5.3.6",
27 | "rxjs": "7.8.2",
28 | "tslib": "2.8.1",
29 | "zone.js": "0.15.0"
30 | },
31 | "devDependencies": {
32 | "@angular-devkit/build-angular": "19.2.11",
33 | "@angular/cli": "19.2.11",
34 | "@angular/compiler-cli": "19.2.10",
35 | "@types/jasmine": "5.1.8",
36 | "angular-eslint": "19.4.0",
37 | "eslint": "9.26.0",
38 | "jasmine-core": "5.7.1",
39 | "karma": "6.4.4",
40 | "karma-chrome-launcher": "3.2.0",
41 | "karma-coverage": "2.2.1",
42 | "karma-jasmine": "5.1.0",
43 | "karma-jasmine-html-reporter": "2.1.0",
44 | "typescript": "5.6.3",
45 | "typescript-eslint": "8.32.1"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/frontend-angular-19/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/public/favicon.ico
--------------------------------------------------------------------------------
/frontend-angular-19/server.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const path = require('path');
3 | const app = express();
4 |
5 | app.use(express.static(path.join(__dirname, 'dist/angular-starter/browser')));
6 |
7 | app.get('/*', function (req, res) {
8 | res.sendFile(path.join(__dirname, 'dist/angular-starter/browser', 'index.html'));
9 | });
10 |
11 | const port = 4000;
12 | app.listen(port, () => {
13 | console.log(`Example app listening on port ${port}`)
14 | })
15 |
16 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/app.component.css:
--------------------------------------------------------------------------------
1 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link {
2 | color: white;
3 | font-weight: 500;
4 | border-top: 1px solid #09238d;
5 | border-bottom: 1px solid #09238d;
6 | }
7 |
8 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link:hover {
9 | color: yellow;
10 | border-top: 1px solid yellow;
11 | border-bottom: 1px solid yellow;
12 | }
13 |
14 | .nga-navbar {
15 | -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
16 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
17 | background-color: #09238d;
18 | }
19 |
20 | .nga-navbar-logo {
21 | font-weight: 700;
22 | }
23 |
24 | .nga-navbar-logo:hover {
25 | color: rgba(255, 255, 255, 0.75);
26 | }
27 |
28 | .nga-logo {
29 | font-weight: 700;
30 | }
31 |
32 | .nga-logo:hover {
33 | color: rgba(255, 255, 255, 0.75);
34 | }
35 |
36 | .nga-footer {
37 | background-color: #212121;
38 | color: white;
39 | }
40 |
41 | .nga-footer a {
42 | color: white;
43 | text-decoration: none
44 | }
45 |
46 | .nga-footer a:hover,
47 | .nga-footer a:focus {
48 | color: yellow;
49 | text-decoration: underline;
50 | }
51 |
52 | .nga-footer .hint {
53 | background-color: #1976d2;
54 | }
55 |
56 | .nga-footer .hint:hover {
57 | opacity: 0.8;
58 | }
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 | import { AppComponent } from './app.component';
3 |
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('AppComponent', () => {
7 | beforeEach(async () => {
8 | await TestBed.configureTestingModule({
9 | imports: [AppComponent],
10 | providers: [
11 | {
12 | provide: ActivatedRoute,
13 | useValue: {}
14 | }
15 | ]
16 | }).compileComponents();
17 | });
18 |
19 | it('should create the app', () => {
20 | const fixture = TestBed.createComponent(AppComponent);
21 | const app = fixture.componentInstance;
22 | expect(app).toBeTruthy();
23 | });
24 |
25 | it(`should have the 'angular-starter' title`, () => {
26 | const fixture = TestBed.createComponent(AppComponent);
27 | const app = fixture.componentInstance;
28 | expect(app.title).toEqual('angular-routing');
29 | });
30 |
31 | });
32 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink, RouterOutlet } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-root',
7 | imports: [CommonModule, RouterLink, RouterOutlet],
8 | templateUrl: './app.component.html',
9 | styleUrl: './app.component.css'
10 | })
11 | export class AppComponent implements OnInit {
12 | title = 'angular-routing';
13 | footerUrl = 'https://www.ganatan.com';
14 | footerLink = 'www.ganatan.com';
15 | ngOnInit(): void {
16 |
17 | const navMain = document.getElementById('navbarCollapse');
18 | if (navMain) {
19 | navMain.onclick = function onClick() {
20 | if (navMain) {
21 | navMain.classList.remove("show");
22 | }
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/app.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './app.routes';
5 |
6 | export const appConfig: ApplicationConfig = {
7 | providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)]
8 | };
9 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/app.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from '@angular/router';
2 |
3 | import { HomeComponent } from './features/home/home.component';
4 | import { NotFoundComponent } from './features/not-found/not-found.component';
5 |
6 | export const routes: Routes = [
7 | { path: '', component: HomeComponent, },
8 |
9 | {
10 | path: 'bootstrap',
11 | loadChildren: () => import(`./features/tutorials/example-bootstrap/tutorial.routes`)
12 | .then(routes => routes.routes)
13 | },
14 |
15 | {
16 | path: 'login',
17 | loadComponent: () => import(`./features/login/login.component`)
18 | .then(mod => mod.LoginComponent)
19 | },
20 | {
21 | path: 'signup',
22 | loadComponent: () => import(`./features/signup/signup.component`)
23 | .then(mod => mod.SignupComponent)
24 | },
25 |
26 | {
27 | path: 'contact',
28 | loadChildren: () => import(`./features/contact/contact.routes`)
29 | .then(routes => routes.routes)
30 | },
31 |
32 | {
33 | path: 'about',
34 | loadChildren: () => import('./features/about/about.routes')
35 | .then(routes => routes.routes)
36 | },
37 |
38 | { path: '**', component: NotFoundComponent }
39 | ];
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/about.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/about/about.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/about.component.html:
--------------------------------------------------------------------------------
1 |
2 |
about works!
3 |
7 |
Child Routes Result
8 |
9 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/about.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { AboutComponent } from './about.component';
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('AboutComponent', () => {
7 | let component: AboutComponent;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async () => {
11 | await TestBed.configureTestingModule({
12 | imports: [AboutComponent],
13 | providers: [
14 | {
15 | provide: ActivatedRoute,
16 | useValue: {}
17 | }
18 | ]
19 | })
20 | .compileComponents();
21 |
22 | fixture = TestBed.createComponent(AboutComponent);
23 | component = fixture.componentInstance;
24 | fixture.detectChanges();
25 | });
26 |
27 | it('should create', () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/about.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink, RouterOutlet } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-about',
7 | imports: [CommonModule, RouterLink, RouterOutlet],
8 | templateUrl: './about.component.html',
9 | styleUrl: './about.component.css'
10 | })
11 | export class AboutComponent {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/about.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './about.routes';
5 |
6 | export const aboutConfig: ApplicationConfig = {
7 | providers: [provideRouter(routes)]
8 | };
9 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/about.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from '@angular/router';
2 |
3 | import { AboutComponent } from './about.component';
4 |
5 | export const routes: Routes = [
6 | {
7 | path: '', component: AboutComponent, children: [
8 | {
9 | path: '',
10 | loadComponent: () => import(`./experience/experience.component`)
11 | .then(mod => mod.ExperienceComponent)
12 | },
13 | {
14 | path: 'experience',
15 | loadComponent: () => import(`./experience/experience.component`)
16 | .then(mod => mod.ExperienceComponent)
17 | },
18 | {
19 | path: 'skill',
20 | loadComponent: () => import(`./skill/skill.component`)
21 | .then(mod => mod.SkillComponent)
22 | },
23 |
24 | {
25 | path: '**',
26 | loadComponent: () => import(`./experience/experience.component`)
27 | .then(mod => mod.ExperienceComponent)
28 | },
29 |
30 | ]
31 | },
32 | ];
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/experience/experience.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/about/experience/experience.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/experience/experience.component.html:
--------------------------------------------------------------------------------
1 | experience works!
2 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/experience/experience.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { ExperienceComponent } from './experience.component';
4 |
5 | describe('ExperienceComponent', () => {
6 | let component: ExperienceComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [ExperienceComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(ExperienceComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/experience/experience.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-experience',
5 | imports: [],
6 | templateUrl: './experience.component.html',
7 | styleUrl: './experience.component.css'
8 | })
9 | export class ExperienceComponent {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/skill/skill.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/about/skill/skill.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/skill/skill.component.html:
--------------------------------------------------------------------------------
1 | skill works!
2 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/skill/skill.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { SkillComponent } from './skill.component';
4 |
5 | describe('SkillComponent', () => {
6 | let component: SkillComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [SkillComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(SkillComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/about/skill/skill.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-skill',
5 | imports: [],
6 | templateUrl: './skill.component.html',
7 | styleUrl: './skill.component.css'
8 | })
9 | export class SkillComponent {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/contact.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/contact/contact.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/contact.component.html:
--------------------------------------------------------------------------------
1 |
2 |
contact works!
3 |
8 |
Child Routes Result
9 |
10 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/contact.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { ContactComponent } from './contact.component';
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('ContactComponent', () => {
7 | let component: ContactComponent;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async () => {
11 | await TestBed.configureTestingModule({
12 | imports: [ContactComponent],
13 | providers: [
14 | {
15 | provide: ActivatedRoute,
16 | useValue: {}
17 | }
18 | ]
19 | })
20 | .compileComponents();
21 |
22 | fixture = TestBed.createComponent(ContactComponent);
23 | component = fixture.componentInstance;
24 | fixture.detectChanges();
25 | });
26 |
27 | it('should create', () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/contact.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink, RouterOutlet } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-contact',
7 | imports: [CommonModule, RouterLink, RouterOutlet],
8 | templateUrl: './contact.component.html',
9 | styleUrl: './contact.component.css'
10 | })
11 | export class ContactComponent {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/contact.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './contact.routes';
5 |
6 | export const contactConfig: ApplicationConfig = {
7 | providers: [provideRouter(routes)]
8 | };
9 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/contact.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from '@angular/router';
2 |
3 | import { ContactComponent } from './contact.component';
4 |
5 | export const routes: Routes = [
6 | {
7 | path: '', component: ContactComponent, children: [
8 | {
9 | path: '',
10 | loadComponent: () => import(`./mailing/mailing.component`)
11 | .then(mod => mod.MailingComponent)
12 | },
13 | {
14 | path: 'mapping',
15 | loadComponent: () => import(`./mapping/mapping.component`)
16 | .then(mod => mod.MappingComponent)
17 | },
18 | {
19 | path: 'website',
20 | loadComponent: () => import(`./website/website.component`)
21 | .then(mod => mod.WebsiteComponent)
22 | },
23 |
24 | {
25 | path: '**',
26 | loadComponent: () => import(`./mailing/mailing.component`)
27 | .then(mod => mod.MailingComponent)
28 | },
29 |
30 | ]
31 | },
32 | ];
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/mailing/mailing.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/contact/mailing/mailing.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/mailing/mailing.component.html:
--------------------------------------------------------------------------------
1 | mailing works!
2 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/mailing/mailing.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { MailingComponent } from './mailing.component';
4 |
5 | describe('MailingComponent', () => {
6 | let component: MailingComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [MailingComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(MailingComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/mailing/mailing.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-mailing',
5 | imports: [],
6 | templateUrl: './mailing.component.html',
7 | styleUrl: './mailing.component.css'
8 | })
9 | export class MailingComponent {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/mapping/mapping.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/contact/mapping/mapping.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/mapping/mapping.component.html:
--------------------------------------------------------------------------------
1 | mapping works!
2 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/mapping/mapping.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { MappingComponent } from './mapping.component';
4 |
5 | describe('MappingComponent', () => {
6 | let component: MappingComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [MappingComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(MappingComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/mapping/mapping.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-mapping',
5 | imports: [],
6 | templateUrl: './mapping.component.html',
7 | styleUrl: './mapping.component.css'
8 | })
9 | export class MappingComponent {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/website/website.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/contact/website/website.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/website/website.component.html:
--------------------------------------------------------------------------------
1 | website works!
2 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/website/website.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { WebsiteComponent } from './website.component';
4 |
5 | describe('WebsiteComponent', () => {
6 | let component: WebsiteComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [WebsiteComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(WebsiteComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/contact/website/website.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-website',
5 | imports: [],
6 | templateUrl: './website.component.html',
7 | styleUrl: './website.component.css'
8 | })
9 | export class WebsiteComponent {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/home/home.component.css:
--------------------------------------------------------------------------------
1 | .nga-card {
2 | display: block;
3 | background-color: rgba(255, 255, 255, .8);
4 | box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
5 | border-radius: 2px;
6 | transition: all .2s ease-in-out;
7 | cursor: pointer;
8 | }
9 |
10 | .nga-card:hover {
11 | transform: translateY(-3px);
12 | box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23);
13 | }
14 |
15 | .nga-card a {
16 | color: black;
17 | text-decoration: none;
18 | }
19 |
20 | .nga-card a:hover {
21 | color: #0d6efd;
22 | text-decoration: none;
23 | }
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/home/home.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { HomeComponent } from './home.component';
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('HomeComponent', () => {
7 | let component: HomeComponent;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async () => {
11 | await TestBed.configureTestingModule({
12 | imports: [HomeComponent],
13 | providers: [
14 | {
15 | provide: ActivatedRoute,
16 | useValue: {}
17 | }
18 | ]
19 | })
20 | .compileComponents();
21 |
22 | fixture = TestBed.createComponent(HomeComponent);
23 | component = fixture.componentInstance;
24 | fixture.detectChanges();
25 | });
26 |
27 | it('should create', () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/home/home.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { environment } from '../../../environments/environment';
3 | import { RouterLink } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-home',
7 | imports: [RouterLink],
8 | templateUrl: './home.component.html',
9 | styleUrl: './home.component.css'
10 | })
11 | export class HomeComponent {
12 | name = environment.application.name;
13 | version = environment.application.version;
14 | bootstrap = environment.application.bootstrap;
15 | fontawesome = environment.application.fontawesome;
16 | }
17 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/login/login.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/login/login.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/login/login.component.html:
--------------------------------------------------------------------------------
1 | login works!
2 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/login/login.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { LoginComponent } from './login.component';
4 |
5 | describe('LoginComponent', () => {
6 | let component: LoginComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [LoginComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(LoginComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/login/login.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-login',
5 | templateUrl: './login.component.html',
6 | styleUrl: './login.component.css'
7 | })
8 | export class LoginComponent {
9 |
10 | }
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/not-found/not-found.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/not-found/not-found.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/not-found/not-found.component.html:
--------------------------------------------------------------------------------
1 | not-found works!
2 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/not-found/not-found.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { NotFoundComponent } from './not-found.component';
4 |
5 | describe('NotFoundComponent', () => {
6 | let component: NotFoundComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [NotFoundComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(NotFoundComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/not-found/not-found.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-not-found',
5 | imports: [],
6 | templateUrl: './not-found.component.html',
7 | styleUrl: './not-found.component.css'
8 | })
9 | export class NotFoundComponent {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/signup/signup.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/signup/signup.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/signup/signup.component.html:
--------------------------------------------------------------------------------
1 | signup works!
2 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/signup/signup.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { SignupComponent } from './signup.component';
4 |
5 | describe('SignupComponent', () => {
6 | let component: SignupComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [SignupComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(SignupComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/signup/signup.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-signup',
5 | templateUrl: './signup.component.html',
6 | styleUrl: './signup.component.css'
7 | })
8 | export class SignupComponent {
9 |
10 | }
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/00-main/items.component.css:
--------------------------------------------------------------------------------
1 | .card {
2 | -webkit-transition: -webkit-transform 1s;
3 | -moz-transition: -moz-transform 1s;
4 | -o-transition: -o-transform 1s;
5 | transition: transform 1s;
6 | -webkit-transform-style: preserve-3d;
7 | -moz-transform-style: preserve-3d;
8 | -o-transform-style: preserve-3d;
9 | transform-style: preserve-3d;
10 | position: relative;
11 | }
12 |
13 | .nga-card-header {
14 | padding: 0.5rem 1rem;
15 | margin-bottom: 0;
16 | background-color: white;
17 | }
18 |
19 | .nga-card-rotate {
20 | -webkit-perspective: 800px;
21 | -moz-perspective: 800px;
22 | -o-perspective: 800px;
23 | perspective: 800px;
24 | margin-bottom: 30px;
25 | }
26 |
27 | .nga-card-rotate a {
28 | text-decoration: none;
29 | }
30 |
31 | .nga-card-rotate:not(.manual-flip):hover .card,
32 | .nga-card-rotate.hover.manual-flip .card {
33 | -webkit-transform: rotateY(180deg);
34 | -moz-transform: rotateY(180deg);
35 | -o-transform: rotateY(180deg);
36 | transform: rotateY(180deg);
37 | }
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/00-main/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Bootstrap Features
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/00-main/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink } from '@angular/router';
4 | import { ITEMS } from './items';
5 |
6 | @Component({
7 | selector: 'app-00-main',
8 | imports: [CommonModule, RouterLink],
9 | templateUrl: './items.component.html',
10 | styleUrls: ['./items.component.css']
11 | })
12 | export class ItemsComponent {
13 | items = ITEMS;
14 | }
15 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/accordions/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/accordions/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/accordions/items.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { ItemsComponent } from './items.component';
4 |
5 | describe('AccordionsComponent', () => {
6 | let component: ItemsComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [ItemsComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(ItemsComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/accordions/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-accordions',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/alerts/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/alerts/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/alerts/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-alerts',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/badges/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/badges/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/badges/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Badges
4 | Example heading New
5 | Example heading New
6 | Example heading New
7 | Example heading New
8 | Example heading New
9 | Example heading New
10 |
11 |
14 |
15 |
22 |
23 |
29 |
30 | Primary
31 | Secondary
32 | Success
33 | Danger
34 | Warning
35 | Info
36 | Light
37 | Dark
38 |
39 |
40 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/badges/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-badge',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/blockquotes/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/blockquotes/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/blockquotes/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Blockquotes
6 |
7 | A well-known quote, contained in a blockquote element.
8 |
9 |
10 |
11 |
12 | A well-known quote, contained in a blockquote element.
13 |
14 |
17 |
18 |
19 |
20 |
21 | A well-known quote, contained in a blockquote element.
22 |
23 |
26 |
27 |
28 |
29 |
30 | A well-known quote, contained in a blockquote element.
31 |
32 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/blockquotes/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-blockquotes',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/breadcrumb/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/breadcrumb/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/breadcrumb/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Breadcrumb
4 |
9 |
15 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/breadcrumb/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-breadcrumb',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/buttons/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/buttons/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/buttons/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-buttons',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/cards/items.component.css:
--------------------------------------------------------------------------------
1 | .nga-card {
2 | -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
3 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12)
4 | }
5 |
6 | .nga-card-box {
7 | display: block;
8 | background-color: rgba(255, 255, 255, .8);
9 | box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
10 | border-radius: 2px;
11 | transition: all .2s ease-in-out;
12 | cursor: pointer;
13 | }
14 |
15 | .nga-card-box:hover {
16 | box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23);
17 | }
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/cards/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-alerts',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/checkbox/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/checkbox/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/checkbox/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-collapse',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/collapses/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/collapses/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/collapses/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | // eslint-disable-next-line
4 | declare const bootstrap: any;
5 |
6 | @Component({
7 | selector: 'app-collapse',
8 | templateUrl: './items.component.html',
9 | styleUrls: ['./items.component.css']
10 | })
11 | export class ItemsComponent {
12 |
13 | closeCollapse() {
14 | const myCollapse = document.getElementById('collapseWidthJavascript')
15 | new bootstrap.Collapse(myCollapse, {
16 | hide: true,
17 | })
18 | }
19 |
20 | showCollapse() {
21 | const myCollapse = document.getElementById('collapseWidthJavascript')
22 | new bootstrap.Collapse(myCollapse, {
23 | show: true,
24 | })
25 | }
26 |
27 | toggleCollapse() {
28 | const myCollapse = document.getElementById('collapseWidthJavascript')
29 | new bootstrap.Collapse(myCollapse, {
30 | toggle: true,
31 | })
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/dropdowns/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/dropdowns/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/dropdowns/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-dropdowns',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/forms/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/forms/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/forms/items.component.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/forms/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-forms',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/list-group/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/list-group/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/list-group/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-list-group',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/pagination/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/pagination/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/pagination/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-pagination',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/progress/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/progress/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/progress/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-progress',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/spinners/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/spinners/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/spinners/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-spinners',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/tables/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/tables/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/tables/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-pagination',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/tutorial.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { TutorialComponent } from './tutorial.component';
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('TutorialComponent', () => {
7 | let component: TutorialComponent;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async () => {
11 | await TestBed.configureTestingModule({
12 | imports: [TutorialComponent],
13 | providers: [
14 | {
15 | provide: ActivatedRoute,
16 | useValue: {}
17 | }
18 | ]
19 | })
20 | .compileComponents();
21 |
22 | fixture = TestBed.createComponent(TutorialComponent);
23 | component = fixture.componentInstance;
24 | fixture.detectChanges();
25 | });
26 |
27 | it('should create', () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
32 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/tutorial.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink, RouterOutlet } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-example-bootstrap',
7 | imports: [CommonModule, RouterLink, RouterOutlet],
8 | templateUrl: './tutorial.component.html',
9 | styleUrls: ['./tutorial.component.css']
10 | })
11 | export class TutorialComponent {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/tutorial.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './tutorial.routes';
5 |
6 | export const tutorialConfig: ApplicationConfig = {
7 | providers: [provideRouter(routes)]
8 | };
9 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/typography/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/app/features/tutorials/example-bootstrap/typography/items.component.css
--------------------------------------------------------------------------------
/frontend-angular-19/src/app/features/tutorials/example-bootstrap/typography/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-collapse',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/assets/.gitkeep
--------------------------------------------------------------------------------
/frontend-angular-19/src/assets/params/images/example-bootstrap/movie-screen.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/assets/params/images/example-bootstrap/movie-screen.jpg
--------------------------------------------------------------------------------
/frontend-angular-19/src/assets/params/images/logo/ganatan-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/assets/params/images/logo/ganatan-logo.png
--------------------------------------------------------------------------------
/frontend-angular-19/src/assets/params/images/logo/ganatan-logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/src/assets/params/images/logo/ganatan-logo@2x.png
--------------------------------------------------------------------------------
/frontend-angular-19/src/assets/params/js/popovers.js:
--------------------------------------------------------------------------------
1 | var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
2 | var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
3 | return new bootstrap.Popover(popoverTriggerEl)
4 | })
5 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/assets/params/js/toasts.js:
--------------------------------------------------------------------------------
1 | var myToastEl = document.getElementById('myToast')
2 | myToastEl.classList.add("show");
3 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/assets/params/js/tooltips.js:
--------------------------------------------------------------------------------
1 | /*var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
2 | var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
3 | return new bootstrap.Tooltip(tooltipTriggerEl)
4 | })*/
5 |
6 | var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
7 | var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
8 | return new bootstrap.Tooltip(tooltipTriggerEl)
9 | })
10 |
11 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/environments/environment.development.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | application:
3 | {
4 | name: 'angular-bootstrap',
5 | version: 'Angular 19.2.10',
6 | bootstrap: 'Bootstrap 5.3.6',
7 | fontawesome: 'Font Awesome 6.7.1',
8 | }
9 | };
--------------------------------------------------------------------------------
/frontend-angular-19/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | application:
3 | {
4 | name: 'angular-bootstrap',
5 | version: 'Angular 19.2.10',
6 | bootstrap: 'Bootstrap 5.3.6',
7 | fontawesome: 'Font Awesome 6.7.1',
8 | }
9 | };
--------------------------------------------------------------------------------
/frontend-angular-19/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | AngularStarter
7 |
8 |
9 |
10 |
11 |
12 |
13 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/main.ts:
--------------------------------------------------------------------------------
1 | import { bootstrapApplication } from '@angular/platform-browser';
2 | import { appConfig } from './app/app.config';
3 | import { AppComponent } from './app/app.component';
4 |
5 | bootstrapApplication(AppComponent, appConfig)
6 | .catch((err) => console.error(err));
7 |
--------------------------------------------------------------------------------
/frontend-angular-19/src/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 3.5rem;
3 | font-family: "Roboto", sans-serif;
4 | }
--------------------------------------------------------------------------------
/frontend-angular-19/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3 | {
4 | "extends": "./tsconfig.json",
5 | "compilerOptions": {
6 | "outDir": "./out-tsc/app",
7 | "types": []
8 | },
9 | "files": [
10 | "src/main.ts"
11 | ],
12 | "include": [
13 | "src/**/*.d.ts"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/frontend-angular-19/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3 | {
4 | "compileOnSave": false,
5 | "compilerOptions": {
6 | "outDir": "./dist/out-tsc",
7 | "strict": true,
8 | "noImplicitOverride": true,
9 | "noPropertyAccessFromIndexSignature": true,
10 | "noImplicitReturns": true,
11 | "noFallthroughCasesInSwitch": true,
12 | "skipLibCheck": true,
13 | "isolatedModules": true,
14 | "esModuleInterop": true,
15 | "experimentalDecorators": true,
16 | "moduleResolution": "bundler",
17 | "importHelpers": true,
18 | "target": "ES2022",
19 | "module": "ES2022"
20 | },
21 | "angularCompilerOptions": {
22 | "enableI18nLegacyMessageIdFormat": false,
23 | "strictInjectionParameters": true,
24 | "strictInputAccessModifiers": true,
25 | "strictTemplates": true
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/frontend-angular-19/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3 | {
4 | "extends": "./tsconfig.json",
5 | "compilerOptions": {
6 | "outDir": "./out-tsc/spec",
7 | "types": [
8 | "jasmine"
9 | ]
10 | },
11 | "include": [
12 | "src/**/*.spec.ts",
13 | "src/**/*.d.ts"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/css/regular.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | :root, :host {
7 | --fa-style-family-classic: 'Font Awesome 6 Free';
8 | --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
9 |
10 | @font-face {
11 | font-family: 'Font Awesome 6 Free';
12 | font-style: normal;
13 | font-weight: 400;
14 | font-display: block;
15 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
16 |
17 | .far,
18 | .fa-regular {
19 | font-weight: 400; }
20 |
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/css/regular.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/css/solid.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | :root, :host {
7 | --fa-style-family-classic: 'Font Awesome 6 Free';
8 | --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
9 |
10 | @font-face {
11 | font-family: 'Font Awesome 6 Free';
12 | font-style: normal;
13 | font-weight: 900;
14 | font-display: block;
15 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
16 |
17 | .fas,
18 | .fa-solid {
19 | font-weight: 900; }
20 |
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/css/solid.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/css/v4-font-face.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | @font-face {
7 | font-family: 'FontAwesome';
8 | font-display: block;
9 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
10 |
11 | @font-face {
12 | font-family: 'FontAwesome';
13 | font-display: block;
14 | src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
15 |
16 | @font-face {
17 | font-family: 'FontAwesome';
18 | font-display: block;
19 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
20 | unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
21 |
22 | @font-face {
23 | font-family: 'FontAwesome';
24 | font-display: block;
25 | src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
26 | unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }
27 |
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/css/v4-font-face.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | @font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/css/v5-font-face.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | @font-face {
7 | font-family: 'Font Awesome 5 Brands';
8 | font-display: block;
9 | font-weight: 400;
10 | src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
11 |
12 | @font-face {
13 | font-family: 'Font Awesome 5 Free';
14 | font-display: block;
15 | font-weight: 900;
16 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
17 |
18 | @font-face {
19 | font-family: 'Font Awesome 5 Free';
20 | font-display: block;
21 | font-weight: 400;
22 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
23 |
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/css/v5-font-face.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | @font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-v4compatibility.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-v4compatibility.ttf
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-v4compatibility.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/fontawesome/webfonts/fa-v4compatibility.woff2
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/params/css/body.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 3.5rem;
3 | font-family: "Roboto", sans-serif;
4 | }
5 |
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/params/css/footer.css:
--------------------------------------------------------------------------------
1 | .nga-footer {
2 | background-color: #212121;
3 | color: white;
4 | }
5 |
6 | .nga-footer a {
7 | color: white;
8 | text-decoration: none
9 | }
10 |
11 | .nga-footer a:hover,
12 | .nga-footer a:focus {
13 | color: yellow;
14 | text-decoration: underline;
15 | }
16 |
17 | .nga-footer .hint {
18 | background-color: #1976d2;
19 | }
20 |
21 | .nga-footer .hint:hover {
22 | opacity: 0.8;
23 | }
24 |
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/params/css/header.css:
--------------------------------------------------------------------------------
1 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link {
2 | color: white;
3 | font-weight: 500;
4 | border-top: 1px solid #09238d;
5 | border-bottom: 1px solid #09238d;
6 | }
7 |
8 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link:hover {
9 | color: yellow;
10 | border-top: 1px solid yellow;
11 | border-bottom: 1px solid yellow;
12 | }
13 |
14 | .nga-navbar {
15 | -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
16 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
17 | background-color: #09238d;
18 | }
19 |
20 | .nga-logo {
21 | font-weight: 700;
22 | }
23 |
24 | .nga-logo:hover {
25 | color: rgba(255, 255, 255, 0.75);
26 | }
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/params/images/logo/ganatan-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/params/images/logo/ganatan-logo.png
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/params/images/logo/ganatan-logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular-19/ui/assets/params/images/logo/ganatan-logo@2x.png
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/params/js/popovers.js:
--------------------------------------------------------------------------------
1 | var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="popover"]'))
2 | var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
3 | return new bootstrap.Popover(popoverTriggerEl)
4 | })
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/params/js/toasts.js:
--------------------------------------------------------------------------------
1 | var myToastEl = document.getElementById('myToast')
2 | myToastEl.classList.add("show");
3 |
--------------------------------------------------------------------------------
/frontend-angular-19/ui/assets/params/js/tooltips.js:
--------------------------------------------------------------------------------
1 | var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
2 | var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
3 | return new bootstrap.Tooltip(tooltipTriggerEl)
4 | })
5 |
--------------------------------------------------------------------------------
/frontend-angular/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 | ij_typescript_use_double_quotes = false
14 |
15 | [*.md]
16 | max_line_length = off
17 | trim_trailing_whitespace = false
18 |
--------------------------------------------------------------------------------
/frontend-angular/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
2 |
3 | # Compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | /bazel-out
8 |
9 | # Node
10 | /node_modules
11 | npm-debug.log
12 | yarn-error.log
13 |
14 | # IDEs and editors
15 | .idea/
16 | .project
17 | .classpath
18 | .c9/
19 | *.launch
20 | .settings/
21 | *.sublime-workspace
22 |
23 | # Visual Studio Code
24 | .vscode/*
25 | !.vscode/settings.json
26 | !.vscode/tasks.json
27 | !.vscode/launch.json
28 | !.vscode/extensions.json
29 | .history/*
30 |
31 | # Miscellaneous
32 | /.angular/cache
33 | .sass-cache/
34 | /connect.lock
35 | /coverage
36 | /libpeerconnection.log
37 | testem.log
38 | /typings
39 |
40 | # System files
41 | .DS_Store
42 | Thumbs.db
43 |
--------------------------------------------------------------------------------
/frontend-angular/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:22
2 |
3 | WORKDIR /app
4 |
5 | COPY package*.json ./
6 |
7 | RUN npm install
8 |
9 | COPY . .
10 |
11 | RUN npm run build
12 |
13 | EXPOSE 4000
14 |
15 | CMD ["npm", "run", "serve"]
16 |
--------------------------------------------------------------------------------
/frontend-angular/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2017-2025 Ganatan
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
13 | all 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
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/frontend-angular/README.md:
--------------------------------------------------------------------------------
1 | ### Installation
2 | * `npm install` (installing dependencies)
3 | * `npm outdated` (verifying dependencies)
4 |
5 | ### Developpement
6 | * `npm run start`
7 | * in your browser [http://localhost:4200](http://localhost:4200)
8 |
9 | ## Linter
10 | * `npm run lint`
11 |
12 | ## Tests
13 | * `npm run test`
14 | * `npm run coverage`
15 |
16 | ### Compilation
17 | * `npm run build` ( without SSR)
18 |
19 | ### Production
20 | * `npm run serve`
21 | * in your browser [http://localhost:4000](http://localhost:4000)
22 |
23 |
24 | ### Author
25 | * Author : danny
26 |
--------------------------------------------------------------------------------
/frontend-angular/eslint.config.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | const eslint = require("@eslint/js");
3 | const tseslint = require("typescript-eslint");
4 | const angular = require("angular-eslint");
5 |
6 | module.exports = tseslint.config(
7 | {
8 | files: ["**/*.ts"],
9 | extends: [
10 | eslint.configs.recommended,
11 | ...tseslint.configs.recommended,
12 | ...tseslint.configs.stylistic,
13 | ...angular.configs.tsRecommended,
14 | ],
15 | processor: angular.processInlineTemplates,
16 | rules: {
17 | "@angular-eslint/directive-selector": [
18 | "error",
19 | {
20 | type: "attribute",
21 | prefix: "app",
22 | style: "camelCase",
23 | },
24 | ],
25 | "@angular-eslint/component-selector": [
26 | "error",
27 | {
28 | type: "element",
29 | prefix: "app",
30 | style: "kebab-case",
31 | },
32 | ],
33 | "@angular-eslint/component-class-suffix": [
34 | "error",
35 | {
36 | suffixes: ["","Component"]
37 | }
38 | ],
39 | "no-undefined": "error",
40 | "no-var": "error",
41 | "prefer-const": "error",
42 | "func-names": "error",
43 | "id-length": "error",
44 | "newline-before-return": "error",
45 | "space-before-blocks": "error",
46 | "no-alert": "error"
47 | },
48 | },
49 | {
50 | files: ["**/*.html"],
51 | extends: [
52 | ...angular.configs.templateRecommended,
53 | ...angular.configs.templateAccessibility,
54 | ],
55 | rules: {},
56 | }
57 | );
58 |
--------------------------------------------------------------------------------
/frontend-angular/nginx.conf:
--------------------------------------------------------------------------------
1 | user www-data;
2 | worker_processes auto;
3 | pid /run/nginx.pid;
4 | error_log /var/log/nginx/error.log;
5 | include /etc/nginx/modules-enabled/*.conf;
6 |
7 | events {
8 | worker_connections 768;
9 | }
10 |
11 | http {
12 | sendfile on;
13 | tcp_nopush on;
14 | types_hash_max_size 2048;
15 |
16 | include /etc/nginx/mime.types;
17 | default_type application/octet-stream;
18 |
19 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
20 | ssl_prefer_server_ciphers on;
21 |
22 | access_log /var/log/nginx/access.log;
23 | gzip on;
24 | include /etc/nginx/conf.d/*.conf;
25 | server {
26 | listen 80 default_server;
27 | listen [::]:80 default_server;
28 |
29 | root /var/www/html;
30 | index index.html index.htm index.nginx-debian.html;
31 | server_name _;
32 | location / {
33 | try_files $uri $uri/ =404;
34 | }
35 |
36 | }
37 | }
--------------------------------------------------------------------------------
/frontend-angular/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-starter",
3 | "version": "20.0.1",
4 | "scripts": {
5 | "ng": "ng",
6 | "dev": "ng serve --port 4200",
7 | "start": "ng serve --port 4200",
8 | "build": "ng build",
9 | "watch": "ng build --watch --configuration development",
10 | "test": "ng test",
11 | "test:headless": "ng test --watch=false --browsers=ChromeHeadless",
12 | "coverage": "ng test --no-watch --code-coverage",
13 | "lint": "ng lint",
14 | "serve": "node server.js",
15 | "docker:list-containers": "docker ps -a",
16 | "docker:list-images": "docker images",
17 | "docker:build": "docker build -t frontend-angular-bootstrap .",
18 | "docker:run": "docker run -p 4000:4000 frontend-angular-bootstrap"
19 | },
20 | "private": true,
21 | "dependencies": {
22 | "@angular/common": "20.0.1",
23 | "@angular/compiler": "20.0.1",
24 | "@angular/core": "20.0.1",
25 | "@angular/forms": "20.0.1",
26 | "@angular/platform-browser": "20.0.1",
27 | "@angular/router": "20.0.1",
28 | "@fortawesome/fontawesome-free": "6.7.2",
29 | "bootstrap": "5.3.6",
30 | "express": "5.1.0",
31 | "rxjs": "7.8.2",
32 | "tslib": "2.8.1",
33 | "zone.js": "0.15.1"
34 | },
35 | "devDependencies": {
36 | "@angular/build": "20.0.1",
37 | "@angular/cli": "20.0.1",
38 | "@angular/compiler-cli": "20.0.1",
39 | "@types/jasmine": "5.1.8",
40 | "angular-eslint": "19.7.1",
41 | "eslint": "9.28.0",
42 | "jasmine-core": "5.7.1",
43 | "karma": "6.4.4",
44 | "karma-chrome-launcher": "3.2.0",
45 | "karma-coverage": "2.2.1",
46 | "karma-jasmine": "5.1.0",
47 | "karma-jasmine-html-reporter": "2.1.0",
48 | "typescript": "5.8.3",
49 | "typescript-eslint": "8.33.1"
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/frontend-angular/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/public/favicon.ico
--------------------------------------------------------------------------------
/frontend-angular/server.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const path = require('path');
3 | const app = express();
4 |
5 | app.use(express.static(path.join(__dirname, 'dist/angular-starter/browser')));
6 |
7 | app.get('/', function (req, res) {
8 | res.sendFile(path.join(__dirname, 'dist/angular-starter/browser', 'index.html'));
9 | });
10 |
11 | const port = 4000;
12 | const host = 'localhost';
13 | app.listen(port, () => {
14 | console.log(`Server running at http://${host}:${port}`);
15 | })
16 |
17 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/app.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig, provideBrowserGlobalErrorListeners, provideZoneChangeDetection } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './app.routes';
5 |
6 | export const appConfig: ApplicationConfig = {
7 | providers: [
8 | provideBrowserGlobalErrorListeners(),
9 | provideZoneChangeDetection({ eventCoalescing: true }),
10 | provideRouter(routes)
11 | ]
12 | };
13 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/app.css:
--------------------------------------------------------------------------------
1 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link {
2 | color: white;
3 | font-weight: 500;
4 | border-top: 1px solid #09238d;
5 | border-bottom: 1px solid #09238d;
6 | }
7 |
8 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link:hover {
9 | color: yellow;
10 | border-top: 1px solid yellow;
11 | border-bottom: 1px solid yellow;
12 | }
13 |
14 | .nga-navbar {
15 | -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
16 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
17 | background-color: #09238d;
18 | }
19 |
20 | .nga-navbar-logo {
21 | font-weight: 700;
22 | }
23 |
24 | .nga-navbar-logo:hover {
25 | color: rgba(255, 255, 255, 0.75);
26 | }
27 |
28 | .nga-logo {
29 | font-weight: 700;
30 | }
31 |
32 | .nga-logo:hover {
33 | color: rgba(255, 255, 255, 0.75);
34 | }
35 |
36 | .nga-footer {
37 | background-color: #212121;
38 | color: white;
39 | }
40 |
41 | .nga-footer a {
42 | color: white;
43 | text-decoration: none
44 | }
45 |
46 | .nga-footer a:hover,
47 | .nga-footer a:focus {
48 | color: yellow;
49 | text-decoration: underline;
50 | }
51 |
52 | .nga-footer .hint {
53 | background-color: #1976d2;
54 | }
55 |
56 | .nga-footer .hint:hover {
57 | opacity: 0.8;
58 | }
--------------------------------------------------------------------------------
/frontend-angular/src/app/app.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from '@angular/router';
2 |
3 | import { Home } from './features/home/home';
4 | import { NotFound } from './features/not-found/not-found';
5 |
6 | export const routes: Routes = [
7 | { path: '', component: Home, },
8 |
9 | {
10 | path: 'bootstrap',
11 | loadChildren: () => import(`./features/tutorials/example-bootstrap/tutorial.routes`)
12 | .then(routes => routes.routes)
13 | },
14 |
15 | {
16 | path: 'login',
17 | loadComponent: () => import(`./features/login/login`)
18 | .then(mod => mod.Login)
19 | },
20 | {
21 | path: 'signup',
22 | loadComponent: () => import(`./features/signup/signup`)
23 | .then(mod => mod.Signup)
24 | },
25 |
26 | {
27 | path: 'contact',
28 | loadChildren: () => import(`./features/contact/contact.routes`)
29 | .then(routes => routes.routes)
30 | },
31 |
32 | {
33 | path: 'about',
34 | loadChildren: () => import('./features/about/about.routes')
35 | .then(routes => routes.routes)
36 | },
37 |
38 | { path: '**', component: NotFound }
39 | ];
--------------------------------------------------------------------------------
/frontend-angular/src/app/app.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 | import { App } from './app';
3 | import { ActivatedRoute } from '@angular/router';
4 |
5 | describe('App', () => {
6 | beforeEach(async () => {
7 | await TestBed.configureTestingModule({
8 | imports: [App],
9 | providers: [
10 | {
11 | provide: ActivatedRoute,
12 | useValue: {}
13 | }
14 | ]
15 | }).compileComponents();
16 | });
17 |
18 | it('should create the app', () => {
19 | const fixture = TestBed.createComponent(App);
20 | const app = fixture.componentInstance;
21 | expect(app).toBeTruthy();
22 | });
23 |
24 | it('should render title', () => {
25 | const fixture = TestBed.createComponent(App);
26 | const app = fixture.componentInstance;
27 | expect(app.title).toEqual('angular-routing');
28 | });
29 | });
30 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/app.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink, RouterOutlet } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-root',
7 | imports: [CommonModule, RouterLink, RouterOutlet],
8 | templateUrl: './app.html',
9 | styleUrl: './app.css'
10 | })
11 | export class App implements OnInit {
12 | title = 'angular-routing';
13 | footerUrl = 'https://www.ganatan.com';
14 | footerLink = 'www.ganatan.com';
15 | ngOnInit(): void {
16 |
17 | const navMain = document.getElementById('navbarCollapse');
18 | if (navMain) {
19 | navMain.onclick = function onClick() {
20 | if (navMain) {
21 | navMain.classList.remove("show");
22 | }
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/about.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './about.routes';
5 |
6 | export const aboutConfig: ApplicationConfig = {
7 | providers: [provideRouter(routes)]
8 | };
9 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/about.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/about/about.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/about.html:
--------------------------------------------------------------------------------
1 |
2 |
about works!
3 |
7 |
Child Routes Result
8 |
9 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/about.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from '@angular/router';
2 |
3 | import { About } from './about';
4 |
5 | export const routes: Routes = [
6 | {
7 | path: '', component: About, children: [
8 | {
9 | path: '',
10 | loadComponent: () => import(`./experience/experience`)
11 | .then(mod => mod.Experience)
12 | },
13 | {
14 | path: 'experience',
15 | loadComponent: () => import(`./experience/experience`)
16 | .then(mod => mod.Experience)
17 | },
18 | {
19 | path: 'skill',
20 | loadComponent: () => import(`./skill/skill`)
21 | .then(mod => mod.Skill)
22 | },
23 |
24 | {
25 | path: '**',
26 | loadComponent: () => import(`./experience/experience`)
27 | .then(mod => mod.Experience)
28 | },
29 |
30 | ]
31 | },
32 | ];
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/about.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { About } from './about';
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('About', () => {
7 | let component: About;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async () => {
11 | await TestBed.configureTestingModule({
12 | imports: [About],
13 | providers: [
14 | {
15 | provide: ActivatedRoute,
16 | useValue: {}
17 | }
18 | ]
19 | }).compileComponents();
20 |
21 | fixture = TestBed.createComponent(About);
22 | component = fixture.componentInstance;
23 | fixture.detectChanges();
24 | });
25 |
26 | it('should create', () => {
27 | expect(component).toBeTruthy();
28 | });
29 | });
30 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/about.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink, RouterOutlet } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-about',
7 | imports: [CommonModule, RouterLink, RouterOutlet],
8 | templateUrl: './about.html',
9 | styleUrl: './about.css'
10 | })
11 | export class About {
12 |
13 | }
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/experience/experience.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/about/experience/experience.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/experience/experience.html:
--------------------------------------------------------------------------------
1 | experience works!
2 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/experience/experience.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Experience } from './experience';
4 |
5 | describe('Experience', () => {
6 | let component: Experience;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [Experience]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(Experience);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/experience/experience.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-experience',
5 | imports: [],
6 | templateUrl: './experience.html',
7 | styleUrl: './experience.css'
8 | })
9 | export class Experience {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/skill/skill.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/about/skill/skill.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/skill/skill.html:
--------------------------------------------------------------------------------
1 | skill works!
2 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/skill/skill.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Skill } from './skill';
4 |
5 | describe('Skill', () => {
6 | let component: Skill;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [Skill]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(Skill);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/about/skill/skill.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-skill',
5 | imports: [],
6 | templateUrl: './skill.html',
7 | styleUrl: './skill.css'
8 | })
9 | export class Skill {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/contact.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './contact.routes';
5 |
6 | export const contactConfig: ApplicationConfig = {
7 | providers: [provideRouter(routes)]
8 | };
9 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/contact.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/contact/contact.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/contact.html:
--------------------------------------------------------------------------------
1 |
2 |
contact works!
3 |
8 |
Child Routes Result
9 |
10 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/contact.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from '@angular/router';
2 |
3 | import { Contact } from './contact';
4 |
5 | export const routes: Routes = [
6 | {
7 | path: '', component: Contact, children: [
8 | {
9 | path: '',
10 | loadComponent: () => import(`./mailing/mailing`)
11 | .then(mod => mod.Mailing)
12 | },
13 | {
14 | path: 'mapping',
15 | loadComponent: () => import(`./mapping/mapping`)
16 | .then(mod => mod.Mapping)
17 | },
18 | {
19 | path: 'website',
20 | loadComponent: () => import(`./website/website`)
21 | .then(mod => mod.Website)
22 | },
23 |
24 | {
25 | path: '**',
26 | loadComponent: () => import(`./mailing/mailing`)
27 | .then(mod => mod.Mailing)
28 | },
29 |
30 | ]
31 | },
32 | ];
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/contact.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Contact } from './contact';
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('Contact', () => {
7 | let component: Contact;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async () => {
11 | await TestBed.configureTestingModule({
12 | imports: [Contact],
13 | providers: [
14 | {
15 | provide: ActivatedRoute,
16 | useValue: {}
17 | }
18 | ]
19 | })
20 | .compileComponents();
21 |
22 | fixture = TestBed.createComponent(Contact);
23 | component = fixture.componentInstance;
24 | fixture.detectChanges();
25 | });
26 |
27 | it('should create', () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/contact.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink, RouterOutlet } from '@angular/router';
4 |
5 |
6 | @Component({
7 | selector: 'app-contact',
8 | imports: [CommonModule, RouterLink, RouterOutlet],
9 | templateUrl: './contact.html',
10 | styleUrl: './contact.css'
11 | })
12 | export class Contact {
13 |
14 | }
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/mailing/mailing.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/contact/mailing/mailing.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/mailing/mailing.html:
--------------------------------------------------------------------------------
1 | mailing works!
2 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/mailing/mailing.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Mailing } from './mailing';
4 |
5 | describe('Mailing', () => {
6 | let component: Mailing;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [Mailing]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(Mailing);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/mailing/mailing.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-mailing',
5 | imports: [],
6 | templateUrl: './mailing.html',
7 | styleUrl: './mailing.css'
8 | })
9 | export class Mailing {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/mapping/mapping.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/contact/mapping/mapping.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/mapping/mapping.html:
--------------------------------------------------------------------------------
1 | mapping works!
2 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/mapping/mapping.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Mapping } from './mapping';
4 |
5 | describe('Mapping', () => {
6 | let component: Mapping;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [Mapping]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(Mapping);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/mapping/mapping.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-mapping',
5 | imports: [],
6 | templateUrl: './mapping.html',
7 | styleUrl: './mapping.css'
8 | })
9 | export class Mapping {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/website/website.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/contact/website/website.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/website/website.html:
--------------------------------------------------------------------------------
1 | website works!
2 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/website/website.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Website } from './website';
4 |
5 | describe('Website', () => {
6 | let component: Website;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [Website]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(Website);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/contact/website/website.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-website',
5 | imports: [],
6 | templateUrl: './website.html',
7 | styleUrl: './website.css'
8 | })
9 | export class Website {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/home/home.css:
--------------------------------------------------------------------------------
1 | .nga-card {
2 | display: block;
3 | background-color: rgba(255, 255, 255, .8);
4 | box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
5 | border-radius: 2px;
6 | transition: all .2s ease-in-out;
7 | cursor: pointer;
8 | }
9 |
10 | .nga-card:hover {
11 | transform: translateY(-3px);
12 | box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23);
13 | }
14 |
15 | .nga-card a {
16 | color: black;
17 | text-decoration: none;
18 | }
19 |
20 | .nga-card a:hover {
21 | color: #0d6efd;
22 | text-decoration: none;
23 | }
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/home/home.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Home } from './home';
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('Home', () => {
7 | let component: Home;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async () => {
11 | await TestBed.configureTestingModule({
12 | imports: [Home],
13 | providers: [
14 | {
15 | provide: ActivatedRoute,
16 | useValue: {}
17 | }
18 | ]
19 | })
20 | .compileComponents();
21 |
22 | fixture = TestBed.createComponent(Home);
23 | component = fixture.componentInstance;
24 | fixture.detectChanges();
25 | });
26 |
27 | it('should create', () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/home/home.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { environment } from '../../../environments/environment';
3 | import { RouterLink } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-home',
7 | imports: [RouterLink],
8 | templateUrl: './home.html',
9 | styleUrl: './home.css'
10 | })
11 | export class Home {
12 | name = environment.application.name;
13 | version = environment.application.version;
14 | bootstrap = environment.application.bootstrap;
15 | fontawesome = environment.application.fontawesome;
16 | }
17 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/login/login.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/login/login.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/login/login.html:
--------------------------------------------------------------------------------
1 | login works!
2 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/login/login.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Login } from './login';
4 |
5 | describe('Login', () => {
6 | let component: Login;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [Login]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(Login);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/login/login.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-login',
5 | imports: [],
6 | templateUrl: './login.html',
7 | styleUrl: './login.css'
8 | })
9 | export class Login {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/not-found/not-found.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/not-found/not-found.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/not-found/not-found.html:
--------------------------------------------------------------------------------
1 | not-found works!
2 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/not-found/not-found.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { NotFound } from './not-found';
4 |
5 | describe('NotFound', () => {
6 | let component: NotFound;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [NotFound]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(NotFound);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/not-found/not-found.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-not-found',
5 | imports: [],
6 | templateUrl: './not-found.html',
7 | styleUrl: './not-found.css'
8 | })
9 | export class NotFound {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/signup/signup.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/signup/signup.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/signup/signup.html:
--------------------------------------------------------------------------------
1 | signup works!
2 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/signup/signup.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { Signup } from './signup';
4 |
5 | describe('Signup', () => {
6 | let component: Signup;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [Signup]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(Signup);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/signup/signup.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-signup',
5 | imports: [],
6 | templateUrl: './signup.html',
7 | styleUrl: './signup.css'
8 | })
9 | export class Signup {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/00-main/items.component.css:
--------------------------------------------------------------------------------
1 | .card {
2 | -webkit-transition: -webkit-transform 1s;
3 | -moz-transition: -moz-transform 1s;
4 | -o-transition: -o-transform 1s;
5 | transition: transform 1s;
6 | -webkit-transform-style: preserve-3d;
7 | -moz-transform-style: preserve-3d;
8 | -o-transform-style: preserve-3d;
9 | transform-style: preserve-3d;
10 | position: relative;
11 | }
12 |
13 | .nga-card-header {
14 | padding: 0.5rem 1rem;
15 | margin-bottom: 0;
16 | background-color: white;
17 | }
18 |
19 | .nga-card-rotate {
20 | -webkit-perspective: 800px;
21 | -moz-perspective: 800px;
22 | -o-perspective: 800px;
23 | perspective: 800px;
24 | margin-bottom: 30px;
25 | }
26 |
27 | .nga-card-rotate a {
28 | text-decoration: none;
29 | }
30 |
31 | .nga-card-rotate:not(.manual-flip):hover .card,
32 | .nga-card-rotate.hover.manual-flip .card {
33 | -webkit-transform: rotateY(180deg);
34 | -moz-transform: rotateY(180deg);
35 | -o-transform: rotateY(180deg);
36 | transform: rotateY(180deg);
37 | }
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/00-main/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Bootstrap Features
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/00-main/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink } from '@angular/router';
4 | import { ITEMS } from './items';
5 |
6 | @Component({
7 | selector: 'app-00-main',
8 | imports: [CommonModule, RouterLink],
9 | templateUrl: './items.component.html',
10 | styleUrls: ['./items.component.css']
11 | })
12 | export class ItemsComponent {
13 | items = ITEMS;
14 | }
15 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/accordions/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/accordions/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/accordions/items.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { ItemsComponent } from './items.component';
4 |
5 | describe('AccordionsComponent', () => {
6 | let component: ItemsComponent;
7 | let fixture: ComponentFixture;
8 |
9 | beforeEach(async () => {
10 | await TestBed.configureTestingModule({
11 | imports: [ItemsComponent]
12 | })
13 | .compileComponents();
14 |
15 | fixture = TestBed.createComponent(ItemsComponent);
16 | component = fixture.componentInstance;
17 | fixture.detectChanges();
18 | });
19 |
20 | it('should create', () => {
21 | expect(component).toBeTruthy();
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/accordions/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-accordions',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/alerts/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/alerts/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/alerts/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-alerts',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/badges/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/badges/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/badges/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Badges
4 | Example heading New
5 | Example heading New
6 | Example heading New
7 | Example heading New
8 | Example heading New
9 | Example heading New
10 |
11 |
14 |
15 |
22 |
23 |
29 |
30 | Primary
31 | Secondary
32 | Success
33 | Danger
34 | Warning
35 | Info
36 | Light
37 | Dark
38 |
39 |
40 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/badges/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-badge',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/blockquotes/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/blockquotes/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/blockquotes/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Blockquotes
6 |
7 | A well-known quote, contained in a blockquote element.
8 |
9 |
10 |
11 |
12 | A well-known quote, contained in a blockquote element.
13 |
14 |
17 |
18 |
19 |
20 |
21 | A well-known quote, contained in a blockquote element.
22 |
23 |
26 |
27 |
28 |
29 |
30 | A well-known quote, contained in a blockquote element.
31 |
32 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/blockquotes/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-blockquotes',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/breadcrumb/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/breadcrumb/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/breadcrumb/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Breadcrumb
4 |
9 |
15 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/breadcrumb/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-breadcrumb',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/buttons/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/buttons/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/buttons/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-buttons',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/cards/items.component.css:
--------------------------------------------------------------------------------
1 | .nga-card {
2 | -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
3 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12)
4 | }
5 |
6 | .nga-card-box {
7 | display: block;
8 | background-color: rgba(255, 255, 255, .8);
9 | box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
10 | border-radius: 2px;
11 | transition: all .2s ease-in-out;
12 | cursor: pointer;
13 | }
14 |
15 | .nga-card-box:hover {
16 | box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23);
17 | }
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/cards/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-alerts',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/checkbox/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/checkbox/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/checkbox/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-collapse',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/collapses/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/collapses/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/collapses/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | // eslint-disable-next-line
4 | declare const bootstrap: any;
5 |
6 | @Component({
7 | selector: 'app-collapse',
8 | templateUrl: './items.component.html',
9 | styleUrls: ['./items.component.css']
10 | })
11 | export class ItemsComponent {
12 |
13 | closeCollapse() {
14 | const myCollapse = document.getElementById('collapseWidthJavascript')
15 | new bootstrap.Collapse(myCollapse, {
16 | hide: true,
17 | })
18 | }
19 |
20 | showCollapse() {
21 | const myCollapse = document.getElementById('collapseWidthJavascript')
22 | new bootstrap.Collapse(myCollapse, {
23 | show: true,
24 | })
25 | }
26 |
27 | toggleCollapse() {
28 | const myCollapse = document.getElementById('collapseWidthJavascript')
29 | new bootstrap.Collapse(myCollapse, {
30 | toggle: true,
31 | })
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/dropdowns/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/dropdowns/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/dropdowns/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-dropdowns',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/forms/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/forms/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/forms/items.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Forms
4 |
34 |
35 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/forms/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-forms',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/list-group/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/list-group/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/list-group/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-list-group',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/pagination/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/pagination/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/pagination/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-pagination',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/progress/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/progress/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/progress/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-progress',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/spinners/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/spinners/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/spinners/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-spinners',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/tables/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/tables/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/tables/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-pagination',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/tutorial.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { ComponentFixture, TestBed } from '@angular/core/testing';
2 |
3 | import { TutorialComponent } from './tutorial.component';
4 | import { ActivatedRoute } from '@angular/router';
5 |
6 | describe('TutorialComponent', () => {
7 | let component: TutorialComponent;
8 | let fixture: ComponentFixture;
9 |
10 | beforeEach(async () => {
11 | await TestBed.configureTestingModule({
12 | imports: [TutorialComponent],
13 | providers: [
14 | {
15 | provide: ActivatedRoute,
16 | useValue: {}
17 | }
18 | ]
19 | })
20 | .compileComponents();
21 |
22 | fixture = TestBed.createComponent(TutorialComponent);
23 | component = fixture.componentInstance;
24 | fixture.detectChanges();
25 | });
26 |
27 | it('should create', () => {
28 | expect(component).toBeTruthy();
29 | });
30 | });
31 |
32 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/tutorial.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { CommonModule } from '@angular/common';
3 | import { RouterLink, RouterOutlet } from '@angular/router';
4 |
5 | @Component({
6 | selector: 'app-example-bootstrap',
7 | imports: [CommonModule, RouterLink, RouterOutlet],
8 | templateUrl: './tutorial.component.html',
9 | styleUrls: ['./tutorial.component.css']
10 | })
11 | export class TutorialComponent {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/tutorial.config.ts:
--------------------------------------------------------------------------------
1 | import { ApplicationConfig } from '@angular/core';
2 | import { provideRouter } from '@angular/router';
3 |
4 | import { routes } from './tutorial.routes';
5 |
6 | export const tutorialConfig: ApplicationConfig = {
7 | providers: [provideRouter(routes)]
8 | };
9 |
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/typography/items.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/app/features/tutorials/example-bootstrap/typography/items.component.css
--------------------------------------------------------------------------------
/frontend-angular/src/app/features/tutorials/example-bootstrap/typography/items.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-collapse',
5 | templateUrl: './items.component.html',
6 | styleUrls: ['./items.component.css']
7 | })
8 | export class ItemsComponent {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/assets/.gitkeep
--------------------------------------------------------------------------------
/frontend-angular/src/assets/params/images/example-bootstrap/movie-screen.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/assets/params/images/example-bootstrap/movie-screen.jpg
--------------------------------------------------------------------------------
/frontend-angular/src/assets/params/images/logo/ganatan-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/assets/params/images/logo/ganatan-logo.png
--------------------------------------------------------------------------------
/frontend-angular/src/assets/params/images/logo/ganatan-logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/src/assets/params/images/logo/ganatan-logo@2x.png
--------------------------------------------------------------------------------
/frontend-angular/src/assets/params/js/popovers.js:
--------------------------------------------------------------------------------
1 | var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
2 | var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
3 | return new bootstrap.Popover(popoverTriggerEl)
4 | })
5 |
--------------------------------------------------------------------------------
/frontend-angular/src/assets/params/js/toasts.js:
--------------------------------------------------------------------------------
1 | var myToastEl = document.getElementById('myToast')
2 | myToastEl.classList.add("show");
3 |
--------------------------------------------------------------------------------
/frontend-angular/src/assets/params/js/tooltips.js:
--------------------------------------------------------------------------------
1 | /*var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
2 | var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
3 | return new bootstrap.Tooltip(tooltipTriggerEl)
4 | })*/
5 |
6 | var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
7 | var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
8 | return new bootstrap.Tooltip(tooltipTriggerEl)
9 | })
10 |
11 |
--------------------------------------------------------------------------------
/frontend-angular/src/environments/environment.development.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | application:
3 | {
4 | name: 'angular-bootstrap',
5 | version: 'Angular 20.0.1',
6 | bootstrap: 'Bootstrap 5.3.6',
7 | fontawesome: 'Font Awesome 6.7.2',
8 | }
9 | };
--------------------------------------------------------------------------------
/frontend-angular/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | application:
3 | {
4 | name: 'angular-bootstrap',
5 | version: 'Angular 20.0.1',
6 | bootstrap: 'Bootstrap 5.3.6',
7 | fontawesome: 'Font Awesome 6.7.2',
8 | }
9 | };
--------------------------------------------------------------------------------
/frontend-angular/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AngularStarter
6 |
7 |
8 |
9 |
10 |
11 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/frontend-angular/src/main.ts:
--------------------------------------------------------------------------------
1 | import { bootstrapApplication } from '@angular/platform-browser';
2 | import { appConfig } from './app/app.config';
3 | import { App } from './app/app';
4 |
5 | bootstrapApplication(App, appConfig)
6 | .catch((err) => console.error(err));
7 |
--------------------------------------------------------------------------------
/frontend-angular/src/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 3.5rem;
3 | font-family: "Roboto", sans-serif;
4 | }
--------------------------------------------------------------------------------
/frontend-angular/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3 | {
4 | "extends": "./tsconfig.json",
5 | "compilerOptions": {
6 | "outDir": "./out-tsc/app",
7 | "types": []
8 | },
9 | "include": [
10 | "src/**/*.ts"
11 | ],
12 | "exclude": [
13 | "src/**/*.spec.ts"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/frontend-angular/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3 | {
4 | "compileOnSave": false,
5 | "compilerOptions": {
6 | "strict": true,
7 | "noImplicitOverride": true,
8 | "noPropertyAccessFromIndexSignature": true,
9 | "noImplicitReturns": true,
10 | "noFallthroughCasesInSwitch": true,
11 | "skipLibCheck": true,
12 | "isolatedModules": true,
13 | "experimentalDecorators": true,
14 | "importHelpers": true,
15 | "target": "ES2022",
16 | "module": "preserve"
17 | },
18 | "angularCompilerOptions": {
19 | "enableI18nLegacyMessageIdFormat": false,
20 | "strictInjectionParameters": true,
21 | "strictInputAccessModifiers": true,
22 | "typeCheckHostBindings": true,
23 | "strictTemplates": true
24 | },
25 | "files": [],
26 | "references": [
27 | {
28 | "path": "./tsconfig.app.json"
29 | },
30 | {
31 | "path": "./tsconfig.spec.json"
32 | }
33 | ]
34 | }
35 |
--------------------------------------------------------------------------------
/frontend-angular/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3 | {
4 | "extends": "./tsconfig.json",
5 | "compilerOptions": {
6 | "outDir": "./out-tsc/spec",
7 | "types": [
8 | "jasmine"
9 | ]
10 | },
11 | "include": [
12 | "src/**/*.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/css/regular.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | :root, :host {
7 | --fa-style-family-classic: 'Font Awesome 6 Free';
8 | --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
9 |
10 | @font-face {
11 | font-family: 'Font Awesome 6 Free';
12 | font-style: normal;
13 | font-weight: 400;
14 | font-display: block;
15 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
16 |
17 | .far,
18 | .fa-regular {
19 | font-weight: 400; }
20 |
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/css/regular.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/css/solid.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | :root, :host {
7 | --fa-style-family-classic: 'Font Awesome 6 Free';
8 | --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
9 |
10 | @font-face {
11 | font-family: 'Font Awesome 6 Free';
12 | font-style: normal;
13 | font-weight: 900;
14 | font-display: block;
15 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
16 |
17 | .fas,
18 | .fa-solid {
19 | font-weight: 900; }
20 |
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/css/solid.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/css/v4-font-face.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | @font-face {
7 | font-family: 'FontAwesome';
8 | font-display: block;
9 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
10 |
11 | @font-face {
12 | font-family: 'FontAwesome';
13 | font-display: block;
14 | src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
15 |
16 | @font-face {
17 | font-family: 'FontAwesome';
18 | font-display: block;
19 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
20 | unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
21 |
22 | @font-face {
23 | font-family: 'FontAwesome';
24 | font-display: block;
25 | src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
26 | unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }
27 |
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/css/v4-font-face.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | @font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/css/v5-font-face.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | @font-face {
7 | font-family: 'Font Awesome 5 Brands';
8 | font-display: block;
9 | font-weight: 400;
10 | src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
11 |
12 | @font-face {
13 | font-family: 'Font Awesome 5 Free';
14 | font-display: block;
15 | font-weight: 900;
16 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
17 |
18 | @font-face {
19 | font-family: 'Font Awesome 5 Free';
20 | font-display: block;
21 | font-weight: 400;
22 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
23 |
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/css/v5-font-face.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com
3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
4 | * Copyright 2023 Fonticons, Inc.
5 | */
6 | @font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/fontawesome/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/fontawesome/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/fontawesome/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/fontawesome/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/fontawesome/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/fontawesome/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/webfonts/fa-v4compatibility.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/fontawesome/webfonts/fa-v4compatibility.ttf
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/fontawesome/webfonts/fa-v4compatibility.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/fontawesome/webfonts/fa-v4compatibility.woff2
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/params/css/body.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 3.5rem;
3 | font-family: "Roboto", sans-serif;
4 | }
5 |
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/params/css/footer.css:
--------------------------------------------------------------------------------
1 | .nga-footer {
2 | background-color: #212121;
3 | color: white;
4 | }
5 |
6 | .nga-footer a {
7 | color: white;
8 | text-decoration: none
9 | }
10 |
11 | .nga-footer a:hover,
12 | .nga-footer a:focus {
13 | color: yellow;
14 | text-decoration: underline;
15 | }
16 |
17 | .nga-footer .hint {
18 | background-color: #1976d2;
19 | }
20 |
21 | .nga-footer .hint:hover {
22 | opacity: 0.8;
23 | }
24 |
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/params/css/header.css:
--------------------------------------------------------------------------------
1 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link {
2 | color: white;
3 | font-weight: 500;
4 | border-top: 1px solid #09238d;
5 | border-bottom: 1px solid #09238d;
6 | }
7 |
8 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link:hover {
9 | color: yellow;
10 | border-top: 1px solid yellow;
11 | border-bottom: 1px solid yellow;
12 | }
13 |
14 | .nga-navbar {
15 | -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
16 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
17 | background-color: #09238d;
18 | }
19 |
20 | .nga-logo {
21 | font-weight: 700;
22 | }
23 |
24 | .nga-logo:hover {
25 | color: rgba(255, 255, 255, 0.75);
26 | }
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/params/images/logo/ganatan-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/params/images/logo/ganatan-logo.png
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/params/images/logo/ganatan-logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-angular/ui/assets/params/images/logo/ganatan-logo@2x.png
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/params/js/popovers.js:
--------------------------------------------------------------------------------
1 | var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="popover"]'))
2 | var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
3 | return new bootstrap.Popover(popoverTriggerEl)
4 | })
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/params/js/toasts.js:
--------------------------------------------------------------------------------
1 | var myToastEl = document.getElementById('myToast')
2 | myToastEl.classList.add("show");
3 |
--------------------------------------------------------------------------------
/frontend-angular/ui/assets/params/js/tooltips.js:
--------------------------------------------------------------------------------
1 | var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
2 | var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
3 | return new bootstrap.Tooltip(tooltipTriggerEl)
4 | })
5 |
--------------------------------------------------------------------------------
/frontend-react/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es2021": true,
5 | "jest": true
6 | },
7 | "extends": [
8 | "eslint:recommended",
9 | "plugin:react/recommended"
10 | ],
11 | "parserOptions": {
12 | "ecmaFeatures": {
13 | "jsx": true
14 | },
15 | "ecmaVersion": "latest",
16 | "sourceType": "module"
17 | },
18 | "plugins": [
19 | "react"
20 | ],
21 | "rules": {
22 | "react/react-in-jsx-scope": "off",
23 | "linebreak-style": 0,
24 | "no-var": "error",
25 | "prefer-const": "error",
26 | "func-names": "error",
27 | "id-length": "error",
28 | "newline-before-return": "error",
29 | "space-before-blocks": "error",
30 | "no-alert": "error",
31 | "react/prop-types": 0,
32 | "indent": [
33 | "error",
34 | 2
35 | ]
36 | },
37 | "settings": {
38 | "react": {
39 | "version": "detect"
40 | }
41 | }
42 | }
--------------------------------------------------------------------------------
/frontend-react/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/frontend-react/nginx.conf:
--------------------------------------------------------------------------------
1 | user www-data;
2 | worker_processes auto;
3 | pid /run/nginx.pid;
4 | include /etc/nginx/modules-enabled/*.conf;
5 |
6 | events {
7 | worker_connections 768;
8 | }
9 |
10 | http {
11 | sendfile on;
12 | tcp_nopush on;
13 | tcp_nodelay on;
14 | keepalive_timeout 65;
15 | types_hash_max_size 2048;
16 | include /etc/nginx/mime.types;
17 | default_type application/octet-stream;
18 |
19 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
20 | ssl_prefer_server_ciphers on;
21 |
22 | access_log /var/log/nginx/access.log;
23 | error_log /var/log/nginx/error.log;
24 |
25 | gzip on;
26 |
27 | include /etc/nginx/conf.d/*.conf;
28 |
29 | server {
30 | listen 80 default_server;
31 | listen [::]:80 default_server;
32 | root /var/www/html;
33 | index index.html index.htm index.nginx-debian.html;
34 |
35 | server_name _;
36 |
37 | location / {
38 | try_files $uri $uri/ =404;
39 | }
40 |
41 | }
42 |
43 | }
44 |
45 |
--------------------------------------------------------------------------------
/frontend-react/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-bootstrap",
3 | "version": "18.3.1",
4 | "private": true,
5 | "dependencies": {
6 | "@fortawesome/fontawesome-free": "6.5.2",
7 | "@testing-library/jest-dom": "6.4.6",
8 | "@testing-library/react": "16.0.0",
9 | "@testing-library/user-event": "14.5.2",
10 | "bootstrap": "5.3.3",
11 | "react": "18.3.1",
12 | "react-dom": "18.3.1",
13 | "react-router-dom": "6.24.1",
14 | "react-scripts": "5.0.1",
15 | "web-vitals": "4.2.1"
16 | },
17 | "scripts": {
18 | "dev": "cross-env PORT=4200 react-scripts start",
19 | "start": "react-scripts start",
20 | "build": "react-scripts build",
21 | "test": "react-scripts test --watchAll=false",
22 | "coverage": "react-scripts test --coverage --watchAll=false",
23 | "serve": "node server",
24 | "eject": "react-scripts eject",
25 | "lint": "eslint \"src/**/*.{js,jsx}\""
26 | },
27 | "eslintConfig": {
28 | "extends": [
29 | "react-app",
30 | "react-app/jest"
31 | ]
32 | },
33 | "browserslist": {
34 | "production": [
35 | ">0.2%",
36 | "not dead",
37 | "not op_mini all"
38 | ],
39 | "development": [
40 | "last 1 chrome version",
41 | "last 1 firefox version",
42 | "last 1 safari version"
43 | ]
44 | },
45 | "devDependencies": {
46 | "cross-env": "^7.0.3",
47 | "eslint": "8.55.0",
48 | "eslint-plugin-react": "7.34.2"
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/frontend-react/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/public/favicon.ico
--------------------------------------------------------------------------------
/frontend-react/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/public/logo192.png
--------------------------------------------------------------------------------
/frontend-react/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/public/logo512.png
--------------------------------------------------------------------------------
/frontend-react/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/frontend-react/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/frontend-react/server.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const path = require('path');
3 | const app = express();
4 |
5 | app.use(express.static(path.join(__dirname, 'build')));
6 |
7 | app.get('/*', function (req, res) {
8 | res.sendFile(path.join(__dirname, 'build', 'index.html'));
9 | });
10 |
11 | const port = 3000;
12 | app.listen(port, () => {
13 | console.log(`Example app listening on port ${port}`)
14 | })
15 |
16 |
--------------------------------------------------------------------------------
/frontend-react/src/app/app-routing.js:
--------------------------------------------------------------------------------
1 | import React, { Suspense } from 'react';
2 | import { Routes, Route } from "react-router-dom";
3 |
4 | import Home from './modules/general/home/home';
5 | import Notfound from './modules/general/not-found/not-found';
6 |
7 | const About = React.lazy(() => import('./modules/general/about/about'));
8 | const Login = React.lazy(() => import('./modules/general/login/login'));
9 | const Signup = React.lazy(() => import('./modules/general/signup/signup'));
10 |
11 | const Contact = React.lazy(() => import('./modules/general/contact/contact'));
12 |
13 | const ExampleBootstrap = React.lazy(() => import('./modules/application/example-bootstrap/example-bootstrap'));
14 |
15 | class AppRouting extends React.Component {
16 |
17 | render() {
18 | return (
19 |
20 | } />
21 |
22 | ...>}>} />
23 | ...>}>} />
24 | ...>}>} />
25 |
26 | ...>}>} />
27 | ...>}>} />
28 |
29 | } />
30 |
31 |
32 | )
33 | }
34 |
35 | }
36 |
37 | export default AppRouting;
--------------------------------------------------------------------------------
/frontend-react/src/app/app.css:
--------------------------------------------------------------------------------
1 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link {
2 | color: white;
3 | font-weight: 500;
4 | border-top: 1px solid #09238d;
5 | border-bottom: 1px solid #09238d;
6 | }
7 |
8 | .navbar.navbar-dark .navbar-nav .nav-item .nav-link:hover {
9 | color: yellow;
10 | border-top: 1px solid yellow;
11 | border-bottom: 1px solid yellow;
12 | }
13 |
14 | .nga-navbar {
15 | -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
16 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 11px 10px 0 rgba(0, 0, 0, 0.12);
17 | background-color: #09238d;
18 | }
19 |
20 | .nga-navbar-logo {
21 | font-weight: 700;
22 | }
23 |
24 | .nga-navbar-logo:hover {
25 | color: rgba(255, 255, 255, 0.75);
26 | }
27 |
28 | .nga-logo {
29 | font-weight: 700;
30 | }
31 |
32 | .nga-logo:hover {
33 | color: rgba(255, 255, 255, 0.75);
34 | }
35 |
36 | .nga-footer {
37 | background-color: #212121;
38 | color: white;
39 | }
40 |
41 | .nga-footer a {
42 | color: white;
43 | text-decoration: none
44 | }
45 |
46 | .nga-footer a:hover,
47 | .nga-footer a:focus {
48 | color: yellow;
49 | text-decoration: underline;
50 | }
51 |
52 | .nga-footer .hint {
53 | background-color: #1976d2;
54 | }
55 |
56 | .nga-footer .hint:hover {
57 | opacity: 0.8;
58 | }
--------------------------------------------------------------------------------
/frontend-react/src/app/app.test.js:
--------------------------------------------------------------------------------
1 | import { render } from '@testing-library/react';
2 | import { BrowserRouter } from 'react-router-dom';
3 |
4 | import App from './App';
5 |
6 | it('renders App with Routes', () => {
7 | render(
8 |
9 |
10 |
11 | );
12 | expect(true).toStrictEqual(true);
13 | });
14 |
15 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/00-main/main.css:
--------------------------------------------------------------------------------
1 | .card {
2 | -webkit-transition: -webkit-transform 1s;
3 | -moz-transition: -moz-transform 1s;
4 | -o-transition: -o-transform 1s;
5 | transition: transform 1s;
6 | -webkit-transform-style: preserve-3d;
7 | -moz-transform-style: preserve-3d;
8 | -o-transform-style: preserve-3d;
9 | transform-style: preserve-3d;
10 | position: relative;
11 | }
12 |
13 | .nga-card-header {
14 | padding: 0.5rem 1rem;
15 | margin-bottom: 0;
16 | background-color: white;
17 | }
18 |
19 | .nga-card-rotate {
20 | -webkit-perspective: 800px;
21 | -moz-perspective: 800px;
22 | -o-perspective: 800px;
23 | perspective: 800px;
24 | margin-bottom: 30px;
25 | }
26 |
27 | .nga-card-rotate a {
28 | text-decoration: none;
29 | }
30 |
31 | .nga-card-rotate:not(.manual-flip):hover .card,
32 | .nga-card-rotate.hover.manual-flip .card {
33 | -webkit-transform: rotateY(180deg);
34 | -moz-transform: rotateY(180deg);
35 | -o-transform: rotateY(180deg);
36 | transform: rotateY(180deg);
37 | }
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/accordions/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/accordions/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/alerts/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/alerts/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/badges/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/badges/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/blockquotes/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/blockquotes/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/breadcrumb/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/breadcrumb/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/breadcrumb/items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './items.css';
4 |
5 | class Blockquotes extends React.Component {
6 |
7 | render() {
8 | return (
9 |
10 |
11 |
12 |
Breadcrumb
13 |
18 |
24 |
31 |
32 |
33 |
34 | )
35 | }
36 |
37 | }
38 | export default Blockquotes;
39 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/buttons/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/buttons/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/cards/items.css:
--------------------------------------------------------------------------------
1 | .nga-card {
2 | -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
3 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12)
4 | }
5 |
6 | .nga-card-box {
7 | display: block;
8 | background-color: rgba(255, 255, 255, .8);
9 | box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
10 | border-radius: 2px;
11 | transition: all .2s ease-in-out;
12 | cursor: pointer;
13 | }
14 |
15 | .nga-card-box:hover {
16 | box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23);
17 | }
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/checkbox/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/checkbox/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/collapses/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/collapses/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/dropdowns/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/dropdowns/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/example-bootstrap.css:
--------------------------------------------------------------------------------
1 | .nga-btn-toggle {
2 | display: inline-flex;
3 | align-items: center;
4 | padding: .25rem .5rem;
5 | font-weight: 600;
6 | color: rgba(0, 0, 0, .65);
7 | background-color: transparent;
8 | border: 0;
9 | }
10 |
11 | .nga-btn-toggle:hover,
12 | .nga-btn-toggle:focus {
13 | color: rgba(0, 0, 0, .85);
14 | background-color: #cfe2ff;
15 | }
16 |
17 | .nga-btn-toggle::before {
18 | width: 1.25em;
19 | line-height: 0;
20 | content: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e");
21 | transition: transform .35s ease;
22 | transform-origin: .5em 50%;
23 | }
24 |
25 | .nga-btn-toggle[aria-expanded="true"] {
26 | color: #0d6efd;
27 | }
28 |
29 | .nga-btn-toggle[aria-expanded="true"]::before {
30 | transform: rotate(90deg);
31 | }
32 |
33 | .nga-btn-toggle-nav a {
34 | display: inline-flex;
35 | padding: .1875rem .5rem;
36 | margin-top: .125rem;
37 | margin-left: 1.25rem;
38 | text-decoration: none;
39 | }
40 |
41 | .nga-btn-toggle-nav a:hover,
42 | .nga-btn-toggle-nav a:focus {
43 | color: #0d6efd;
44 | background-color: #cfe2ff;
45 | font-weight: bold;
46 | }
47 |
48 | @media (min-width: 768px) {
49 | .nga-container-layout {
50 | display: grid;
51 | gap: 1.5rem;
52 | grid-template-columns: 1fr 3fr
53 | }
54 | }
55 |
56 | @media (min-width: 992px) {
57 | .nga-container-layout {
58 | grid-template-columns: 1fr 5fr
59 | }
60 | }
61 |
62 | .nga-container-sidebar {
63 | overflow: auto;
64 | font-weight: 600
65 | }
66 |
67 | @media (min-width: 768px) {
68 | .nga-container-sidebar {
69 | position: -webkit-sticky;
70 | position: sticky;
71 | top: 5rem;
72 | display: block;
73 | height: calc(100vh - 7rem);
74 | padding-left: .25rem;
75 | margin-left: -.25rem;
76 | overflow-y: auto
77 | }
78 | }
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/forms/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/forms/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/forms/items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './items.css';
4 |
5 | class Blockquotes extends React.Component {
6 |
7 | render() {
8 | return (
9 |
10 |
11 |
12 |
Forms
13 |
43 |
44 |
45 |
46 | )
47 | }
48 |
49 | }
50 | export default Blockquotes;
51 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/list-group/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/list-group/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/modal/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/modal/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/pagination/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/pagination/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/popovers/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/popovers/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/progress/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/progress/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/progress/items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './items.css';
4 |
5 | class Blockquotes extends React.Component {
6 |
7 | render() {
8 | return (
9 |
10 |
progress works!
11 |
12 | )
13 | }
14 |
15 | }
16 | export default Blockquotes;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/spinners/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/spinners/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/spinners/items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './items.css';
4 |
5 | class Blockquotes extends React.Component {
6 |
7 | render() {
8 | return (
9 |
10 |
spinners works!
11 |
12 | )
13 | }
14 |
15 | }
16 | export default Blockquotes;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/tables/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/tables/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/tables/items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './items.css';
4 |
5 | class Blockquotes extends React.Component {
6 |
7 | render() {
8 | return (
9 |
12 | )
13 | }
14 |
15 | }
16 | export default Blockquotes;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/toasts/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/toasts/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/toasts/items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './items.css';
4 |
5 | class Blockquotes extends React.Component {
6 |
7 | render() {
8 | return (
9 |
12 | )
13 | }
14 |
15 | }
16 | export default Blockquotes;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/tooltips/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/tooltips/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/tooltips/items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './items.css';
4 |
5 | class Blockquotes extends React.Component {
6 |
7 | render() {
8 | return (
9 |
10 |
tooltips works!
11 |
12 | )
13 | }
14 |
15 | }
16 | export default Blockquotes;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/typography/items.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/application/example-bootstrap/typography/items.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/application/example-bootstrap/typography/items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './items.css';
4 |
5 | class Blockquotes extends React.Component {
6 |
7 | render() {
8 | return (
9 |
10 |
typography works!
11 |
12 | )
13 | }
14 |
15 | }
16 | export default Blockquotes;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/about/about.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/general/about/about.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/about/about.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './about.css';
4 |
5 | class About extends React.Component {
6 | render() {
7 | return (
8 |
11 | )
12 | }
13 | }
14 |
15 | export default About;
16 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/contact-routing.js:
--------------------------------------------------------------------------------
1 | import React, { Suspense } from 'react';
2 | import { Routes, Route } from "react-router-dom";
3 |
4 | import Mailing from './mailing/mailing';
5 |
6 | const Mapping = React.lazy(() => import('./mapping/mapping'));
7 | const Website = React.lazy(() => import('./website/website'));
8 |
9 | import Notfound from '../../../modules/general/not-found/not-found';
10 |
11 | class AppRouting extends React.Component {
12 |
13 | render() {
14 | return (
15 |
16 | } />
17 | } />
18 |
19 | ...>}>} />
20 | ...>}>} />
21 | } />
22 |
23 | )
24 | }
25 |
26 | }
27 |
28 | export default AppRouting;
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/contact.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/general/contact/contact.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/contact.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Link } from 'react-router-dom';
3 |
4 | import ContactRouting from './contact-routing';
5 |
6 | import './contact.css';
7 |
8 | class Contact extends React.Component {
9 |
10 | render() {
11 | return (
12 |
13 |
contact works!
14 |
15 | - Mailing
16 | - Mapping
17 | - Website
18 |
19 |
Child Routes Result
20 |
21 |
22 | )
23 | }
24 |
25 | }
26 | export default Contact;
27 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/mailing/mailing.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/general/contact/mailing/mailing.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/mailing/mailing.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './mailing.css';
4 |
5 | class Mailing extends React.Component {
6 |
7 | render() {
8 | return (
9 |
12 | )
13 | }
14 |
15 | }
16 | export default Mailing;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/mapping/mapping.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/general/contact/mapping/mapping.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/mapping/mapping.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './mapping.css';
4 |
5 | class Mapping extends React.Component {
6 |
7 | render() {
8 | return (
9 |
12 | )
13 | }
14 |
15 | }
16 | export default Mapping;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/website/website.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/general/contact/website/website.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/contact/website/website.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './website.css';
4 |
5 | class Website extends React.Component {
6 |
7 | render() {
8 | return (
9 |
12 | )
13 | }
14 |
15 | }
16 | export default Website;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/home/home.css:
--------------------------------------------------------------------------------
1 | .nga-card {
2 | display: block;
3 | background-color: rgba(255, 255, 255, .8);
4 | box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
5 | border-radius: 2px;
6 | transition: all .2s ease-in-out;
7 | cursor: pointer;
8 | }
9 |
10 | .nga-card:hover {
11 | transform: translateY(-3px);
12 | box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23);
13 | }
14 |
15 | .nga-card a {
16 | color: black;
17 | text-decoration: none;
18 | }
19 |
20 | .nga-card a:hover {
21 | color: #0d6efd;
22 | text-decoration: none;
23 | }
24 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/login/login.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/general/login/login.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/login/login.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './login.css';
4 |
5 | class Login extends React.Component {
6 |
7 | render() {
8 | return (
9 |
12 | )
13 | }
14 |
15 | }
16 | export default Login;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/not-found/not-found.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/general/not-found/not-found.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/not-found/not-found.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './not-found.css';
4 |
5 | class Notfound extends React.Component {
6 |
7 | render() {
8 | return (
9 |
10 |
not-found works!
11 |
12 | )
13 | }
14 |
15 | }
16 | export default Notfound;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/signup/signup.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/app/modules/general/signup/signup.css
--------------------------------------------------------------------------------
/frontend-react/src/app/modules/general/signup/signup.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './signup.css';
4 |
5 | class Signup extends React.Component {
6 |
7 | render() {
8 | return (
9 |
12 | )
13 | }
14 |
15 | }
16 | export default Signup;
17 |
--------------------------------------------------------------------------------
/frontend-react/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/assets/.gitkeep
--------------------------------------------------------------------------------
/frontend-react/src/assets/params/images/example-bootstrap/movie-screen.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/assets/params/images/example-bootstrap/movie-screen.jpg
--------------------------------------------------------------------------------
/frontend-react/src/assets/params/images/logo/ganatan-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/assets/params/images/logo/ganatan-logo.png
--------------------------------------------------------------------------------
/frontend-react/src/assets/params/images/logo/ganatan-logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/frontend-react/src/assets/params/images/logo/ganatan-logo@2x.png
--------------------------------------------------------------------------------
/frontend-react/src/environments/environment.js:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | application:
3 | {
4 | name: 'react-bootstrap',
5 | version: 'React 18.2.0',
6 | bootstrap: 'Bootstrap 5.2.2',
7 | fontawesome: 'Font Awesome 6.2.0',
8 | }
9 | };
--------------------------------------------------------------------------------
/frontend-react/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 3.5rem;
3 | font-family: "Roboto", sans-serif;
4 | }
--------------------------------------------------------------------------------
/frontend-react/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import { BrowserRouter } from "react-router-dom";
4 |
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | import "bootstrap/dist/css/bootstrap.min.css";
8 | import "@fortawesome/fontawesome-free/css/all.min.css";
9 | import "./assets/params/css/fonts.googleapis.min.css";
10 |
11 | import './index.css';
12 |
13 | import App from './app/app';
14 |
15 | const root = ReactDOM.createRoot(document.getElementById('root'));
16 | root.render(
17 |
18 |
19 |
20 |
21 |
22 | );
23 |
24 | // If you want to start measuring performance in your app, pass a function
25 | // to log results (for example: reportWebVitals(console.log))
26 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
27 | reportWebVitals();
28 |
--------------------------------------------------------------------------------
/frontend-react/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/frontend-react/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/img/ganatan-about-github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ganatan/angular-react-bootstrap/90f19c635e3e8732b49ce4fa63deb89318e55b9c/img/ganatan-about-github.png
--------------------------------------------------------------------------------