├── src ├── assets │ ├── .gitkeep │ ├── images │ │ ├── logo.png │ │ ├── dancer.jpg │ │ ├── favicon.ico │ │ ├── logo-2.png │ │ ├── user-images │ │ │ ├── user-1.jpg │ │ │ ├── user-2.jpg │ │ │ └── user-3.jpg │ │ ├── banner-images │ │ │ └── banner-image-1.jpg │ │ ├── company-images │ │ │ ├── company-logo1.png │ │ │ ├── company-logo2.png │ │ │ ├── company-logo3.png │ │ │ ├── company-logo4.png │ │ │ ├── company-logo5.png │ │ │ ├── company-logo6.png │ │ │ ├── company-logo7.png │ │ │ ├── company-logo8.png │ │ │ └── company-logo9.png │ │ └── gallery-images │ │ │ ├── gallery-image-1.jpg │ │ │ ├── gallery-image-2.jpg │ │ │ ├── gallery-image-3.jpg │ │ │ ├── gallery-image-4.jpg │ │ │ ├── gallery-image-5.jpg │ │ │ └── gallery-image-6.jpg │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── js │ │ ├── pushy.min.js │ │ ├── images-loaded.min.js │ │ └── wow.min.js │ └── css │ │ ├── namari-color.css │ │ ├── font-awesome.css.map │ │ └── font-awesome.min.css ├── polyfills.ts ├── app │ ├── navigation │ │ ├── navigation.component.css │ │ ├── navigation.component.ts │ │ └── navigation.component.html │ ├── gallery │ │ ├── models │ │ │ └── image.model.ts │ │ ├── image-block │ │ │ ├── image-block.component.html │ │ │ └── image-block.component.ts │ │ └── gallery-page │ │ │ ├── gallery-page.component.html │ │ │ └── gallery-page.component.ts │ ├── about │ │ ├── models │ │ │ ├── feature.model.ts │ │ │ └── intro.model.ts │ │ ├── feature-block │ │ │ ├── feature-block.component.ts │ │ │ └── feature-block.component.html │ │ └── about-page │ │ │ ├── about-page.component.html │ │ │ └── about-page.component.ts │ ├── clients │ │ ├── models │ │ │ ├── company.model.ts │ │ │ └── client.model.ts │ │ ├── companies-block │ │ │ ├── companies-block.component.html │ │ │ └── companies-block.component.ts │ │ └── clients-page │ │ │ ├── clients-page.component.html │ │ │ └── clients-page.component.ts │ ├── notfound │ │ └── notfound-page │ │ │ ├── notfound-page.component.css │ │ │ ├── notfound-page.component.html │ │ │ └── notfound-page.component.ts │ ├── footer │ │ ├── footer.component.css │ │ ├── footer.model.ts │ │ ├── footer.component.html │ │ └── footer.component.ts │ ├── pricing │ │ ├── models │ │ │ ├── pricing.model.ts │ │ │ └── plan.model.ts │ │ ├── pricing-block │ │ │ ├── pricing-block.component.ts │ │ │ └── pricing-block.component.html │ │ └── pricing-page │ │ │ ├── pricing-page.component.html │ │ │ └── pricing-page.component.ts │ ├── services │ │ ├── models │ │ │ └── service.model.ts │ │ └── services-page │ │ │ ├── services-page.component.ts │ │ │ └── services-page.component.html │ ├── testimonial │ │ ├── models │ │ │ ├── feedback.model.ts │ │ │ └── testimonial.model.ts │ │ ├── feedback-block │ │ │ ├── feedback-block.component.html │ │ │ └── feedback-block.component.ts │ │ └── testimonial-page │ │ │ ├── testimonial-page.component.html │ │ │ └── testimonial-page.component.ts │ ├── social │ │ ├── models │ │ │ └── site.model.ts │ │ ├── social.component.html │ │ └── social.component.ts │ ├── app.component.ts │ ├── home │ │ ├── models │ │ │ └── header.model.ts │ │ └── home-page │ │ │ ├── home-page.component.html │ │ │ └── home-page.component.ts │ ├── shared │ │ └── services │ │ │ ├── configuration.ts │ │ │ ├── config.service.ts │ │ │ └── in-memory-data.service.ts │ ├── navmenu │ │ ├── navmenu.component.html │ │ └── navmenu.component.ts │ ├── app.component.html │ ├── app.module.ts │ └── app-routing.module.ts ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── main.ts ├── .browserslistrc ├── test.ts ├── karma.conf.js └── index.html ├── .vscode └── settings.json ├── img └── home.png ├── e2e ├── src │ ├── app.po.ts │ └── app.e2e-spec.ts ├── tsconfig.e2e.json └── protractor.conf.js ├── .prettierrc.json ├── .editorconfig ├── tsconfig.app.json ├── tsconfig.spec.json ├── .gitignore ├── .prettierignore ├── tsconfig.json ├── .eslintrc.json ├── package.json ├── angular.json └── README.md /src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "angular.enable-strict-mode-prompt": false 3 | } 4 | -------------------------------------------------------------------------------- /src/app/navigation/navigation.component.css: -------------------------------------------------------------------------------- 1 | #header { 2 | margin-top: 15px; 3 | } -------------------------------------------------------------------------------- /img/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/img/home.png -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | }; 4 | -------------------------------------------------------------------------------- /src/app/gallery/models/image.model.ts: -------------------------------------------------------------------------------- 1 | export class Image { 2 | id: number; 3 | name: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/favicon.ico -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/assets/images/dancer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/dancer.jpg -------------------------------------------------------------------------------- /src/assets/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/favicon.ico -------------------------------------------------------------------------------- /src/assets/images/logo-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/logo-2.png -------------------------------------------------------------------------------- /src/assets/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/app/about/models/feature.model.ts: -------------------------------------------------------------------------------- 1 | export class Feature { 2 | id: number; 3 | icon: string; 4 | title: string; 5 | description: string; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/clients/models/company.model.ts: -------------------------------------------------------------------------------- 1 | export class Company { 2 | id: number; 3 | name: string; 4 | weblink: string; 5 | logo: string; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/notfound/notfound-page/notfound-page.component.css: -------------------------------------------------------------------------------- 1 | .big-text { 2 | 3 | font-size: 15em; 4 | }.big-text { 5 | 6 | font-size: 15em; 7 | } 8 | -------------------------------------------------------------------------------- /src/assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/assets/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/assets/images/user-images/user-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/user-images/user-1.jpg -------------------------------------------------------------------------------- /src/assets/images/user-images/user-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/user-images/user-2.jpg -------------------------------------------------------------------------------- /src/assets/images/user-images/user-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/user-images/user-3.jpg -------------------------------------------------------------------------------- /src/app/footer/footer.component.css: -------------------------------------------------------------------------------- 1 | .footer-social app-social { 2 | float: right; 3 | right: 10px; 4 | margin-right: 0; 5 | margin-left: 15px; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/about/models/intro.model.ts: -------------------------------------------------------------------------------- 1 | export class Intro { 2 | id: number; 3 | name: string; 4 | tagline: string; 5 | title: string; 6 | description: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/footer/footer.model.ts: -------------------------------------------------------------------------------- 1 | export class Footer { 2 | id: number; 3 | name: string; 4 | tagline: string; 5 | developer: string; 6 | developerlink: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/clients/models/client.model.ts: -------------------------------------------------------------------------------- 1 | export class Client { 2 | id: number; 3 | name: string; 4 | tagline: string; 5 | title: string; 6 | description: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/pricing/models/pricing.model.ts: -------------------------------------------------------------------------------- 1 | export class Pricing { 2 | id: number; 3 | name: string; 4 | tagline: string; 5 | title: string; 6 | description: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/services/models/service.model.ts: -------------------------------------------------------------------------------- 1 | export class Service { 2 | id: number; 3 | name: string; 4 | tagline: string; 5 | title: string; 6 | description: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/assets/images/banner-images/banner-image-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/banner-images/banner-image-1.jpg -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo1.png -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo2.png -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo3.png -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo4.png -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo5.png -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo6.png -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo7.png -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo8.png -------------------------------------------------------------------------------- /src/assets/images/company-images/company-logo9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/company-images/company-logo9.png -------------------------------------------------------------------------------- /src/assets/images/gallery-images/gallery-image-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/gallery-images/gallery-image-1.jpg -------------------------------------------------------------------------------- /src/assets/images/gallery-images/gallery-image-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/gallery-images/gallery-image-2.jpg -------------------------------------------------------------------------------- /src/assets/images/gallery-images/gallery-image-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/gallery-images/gallery-image-3.jpg -------------------------------------------------------------------------------- /src/assets/images/gallery-images/gallery-image-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/gallery-images/gallery-image-4.jpg -------------------------------------------------------------------------------- /src/assets/images/gallery-images/gallery-image-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/gallery-images/gallery-image-5.jpg -------------------------------------------------------------------------------- /src/assets/images/gallery-images/gallery-image-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndrewJBateman/angular-website-example/HEAD/src/assets/images/gallery-images/gallery-image-6.jpg -------------------------------------------------------------------------------- /src/app/testimonial/models/feedback.model.ts: -------------------------------------------------------------------------------- 1 | export class Feedback { 2 | id: number; 3 | name: string; 4 | userimage: string; 5 | comments: string; 6 | company: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/social/models/site.model.ts: -------------------------------------------------------------------------------- 1 | export class Site { 2 | id: number; 3 | link: string; 4 | title: string; 5 | target: string; 6 | username: string; 7 | icon: string; 8 | } 9 | -------------------------------------------------------------------------------- /src/app/testimonial/models/testimonial.model.ts: -------------------------------------------------------------------------------- 1 | export class Testimonial { 2 | id: number; 3 | name: string; 4 | tagline: string; 5 | title: string; 6 | description: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | }) 7 | export class AppComponent { 8 | title = 'Namari Website'; 9 | } 10 | -------------------------------------------------------------------------------- /src/app/home/models/header.model.ts: -------------------------------------------------------------------------------- 1 | export class Header { 2 | id: number; 3 | name: string; 4 | tagline: string; 5 | title: string; 6 | description: string; 7 | image: string; 8 | buttontext: string; 9 | buttonlink: string; 10 | } 11 | -------------------------------------------------------------------------------- /e2e/src/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": true, 4 | "singleQuote": true, 5 | "semi": true, 6 | "bracketSpacing": true, 7 | "arrowParens": "avoid", 8 | "trailingComma": "es5", 9 | "bracketSameLine": true, 10 | "printWidth": 80, 11 | "endOfLine": "auto" 12 | } 13 | -------------------------------------------------------------------------------- /e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "types": [ 8 | "jasmine", 9 | "jasminewd2", 10 | "node" 11 | ] 12 | } 13 | } -------------------------------------------------------------------------------- /src/app/gallery/image-block/image-block.component.html: -------------------------------------------------------------------------------- 1 | 6 | Landing Page 7 | 8 | -------------------------------------------------------------------------------- /src/app/shared/services/configuration.ts: -------------------------------------------------------------------------------- 1 | export const configuration = { 2 | header: { 3 | heading: 'My website', 4 | headingtext: 5 | 'Namari is a free landing page template you can use for your projects.', 6 | buttontext: 'do some action', 7 | buttonlink: 'home', 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /src/app/clients/companies-block/companies-block.component.html: -------------------------------------------------------------------------------- 1 | 2 | {{ company.name }} 5 |
6 | {{ company.name }} 7 |
8 |
9 | -------------------------------------------------------------------------------- /src/app/notfound/notfound-page/notfound-page.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

404

4 |

Nothing Found Here!! try our Home Page

5 |
6 |
7 | -------------------------------------------------------------------------------- /src/app/testimonial/feedback-block/feedback-block.component.html: -------------------------------------------------------------------------------- 1 |
2 | User 3 | {{ feedback.comments }} 4 | 5 |
6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://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 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": ["src/main.ts", "src/polyfills.ts"], 9 | "include": ["src/**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /src/app/gallery/image-block/image-block.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { Image } from '../models/image.model'; 3 | @Component({ 4 | selector: 'app-image-block', 5 | templateUrl: './image-block.component.html', 6 | standalone: true, 7 | }) 8 | export class ImageBlockComponent { 9 | @Input() image: Image; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/pricing/pricing-block/pricing-block.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { Plan } from '../models/plan.model'; 3 | 4 | @Component({ 5 | selector: 'app-pricing-block', 6 | templateUrl: './pricing-block.component.html', 7 | standalone: true, 8 | }) 9 | export class PricingBlockComponent { 10 | @Input() plan: Plan; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/navmenu/navmenu.component.html: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /src/app/pricing/models/plan.model.ts: -------------------------------------------------------------------------------- 1 | export class Plan { 2 | id: 1; 3 | title: string; 4 | subtitle: string; 5 | description: string; 6 | price: string; 7 | currency: string; 8 | downloads: string; 9 | extensions: string; 10 | tutorials: string; 11 | support: string; 12 | updates: string; 13 | buttontext: string; 14 | buttonlink: string; 15 | featured: false; 16 | } 17 | -------------------------------------------------------------------------------- /src/app/about/feature-block/feature-block.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { Feature } from '../models/feature.model'; 3 | 4 | @Component({ 5 | selector: 'app-feature-block', 6 | templateUrl: './feature-block.component.html', 7 | standalone: true, 8 | }) 9 | export class FeatureBlockComponent { 10 | @Input() feature: Feature; 11 | } 12 | -------------------------------------------------------------------------------- /e2e/src/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | 3 | describe('workspace-project App', () => { 4 | let page: AppPage; 5 | 6 | beforeEach(() => { 7 | page = new AppPage(); 8 | }); 9 | 10 | it('should display welcome message', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('Welcome to angular-website-example!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /src/app/testimonial/feedback-block/feedback-block.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { Feedback } from '../models/feedback.model'; 3 | 4 | @Component({ 5 | selector: 'app-feedback-block', 6 | templateUrl: './feedback-block.component.html', 7 | standalone: true, 8 | }) 9 | export class FeedbackBlockComponent { 10 | @Input() feedback: Feedback; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/clients/companies-block/companies-block.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { Company } from '../models/company.model'; 3 | 4 | @Component({ 5 | selector: 'app-companies-block', 6 | templateUrl: './companies-block.component.html', 7 | standalone: true, 8 | }) 9 | export class CompaniesBlockComponent { 10 | @Input() company: Company; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/about/feature-block/feature-block.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 | 7 |
8 |

{{ feature.title }}

9 |

{{ feature.description }}

10 |
11 |
12 | -------------------------------------------------------------------------------- /src/app/notfound/notfound-page/notfound-page.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-notfound-page', 6 | templateUrl: './notfound-page.component.html', 7 | styleUrls: ['./notfound-page.component.css'], 8 | standalone: true, 9 | imports: [RouterLink], 10 | }) 11 | export class NotfoundPageComponent {} 12 | -------------------------------------------------------------------------------- /tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/app/social/social.component.html: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic() 12 | .bootstrapModule(AppModule) 13 | .catch(err => console.log(err)); 14 | -------------------------------------------------------------------------------- /src/app/gallery/gallery-page/gallery-page.component.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /src/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | # 5 | # For IE 9-11 support, please remove 'not' from the last line of the file and adjust as needed 6 | 7 | > 0.5% 8 | last 2 versions 9 | Firefox ESR 10 | not dead 11 | not IE 9-11 -------------------------------------------------------------------------------- /src/app/footer/footer.component.html: -------------------------------------------------------------------------------- 1 | @if (footer$ | async; as footer) { 2 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting, 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | // First, initialize the Angular testing environment. 11 | getTestBed().initTestEnvironment( 12 | BrowserDynamicTestingModule, 13 | platformBrowserDynamicTesting(), 14 | { 15 | teardown: { destroyAfterEach: false }, 16 | } 17 | ); 18 | -------------------------------------------------------------------------------- /src/app/pricing/pricing-page/pricing-page.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | @if (pricing$ | async; as pricing) { 4 |
5 |

{{ pricing.tagline }}

6 |

{{ pricing.title }}

7 |
8 | } 9 | 10 | @for (plan of plans$ | async; track plan; let i = $index) { 11 |
12 | 13 |
14 | } 15 |
16 |
17 | -------------------------------------------------------------------------------- /src/app/navmenu/navmenu.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, Output, EventEmitter } from '@angular/core'; 2 | import { RouterLinkActive, RouterLink } from '@angular/router'; 3 | 4 | interface MenuItem {} 5 | 6 | @Component({ 7 | selector: 'app-navmenu', 8 | templateUrl: './navmenu.component.html', 9 | standalone: true, 10 | imports: [RouterLinkActive, RouterLink], 11 | }) 12 | export class NavmenuComponent { 13 | @Input() menu: MenuItem[]; 14 | @Input() menuOpen: boolean; 15 | @Output() menuStatus: EventEmitter; 16 | 17 | toggleMenu(): void { 18 | this.menuStatus.emit(!this.menuOpen); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | /node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .angular 14 | .project 15 | .classpath 16 | .c9/ 17 | *.launch 18 | .settings/ 19 | *.sublime-workspace 20 | 21 | # IDE - VSCode 22 | .vscode/* 23 | !.vscode/settings.json 24 | !.vscode/tasks.json 25 | !.vscode/launch.json 26 | !.vscode/extensions.json 27 | 28 | # misc 29 | /.angular/cache 30 | /.sass-cache 31 | /connect.lock 32 | /coverage 33 | /libpeerconnection.log 34 | npm-debug.log 35 | yarn-error.log 36 | testem.log 37 | /typings 38 | 39 | # System Files 40 | .DS_Store 41 | Thumbs.db 42 | -------------------------------------------------------------------------------- /src/app/testimonial/testimonial-page/testimonial-page.component.html: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /src/app/about/about-page/about-page.component.html: -------------------------------------------------------------------------------- 1 | @if (intro$ | async; as intro) { 2 |
3 |
4 |
5 |
6 |

{{ intro.tagline }}

7 |

{{ intro.title }}

8 |

{{ intro.description }}

9 |
10 |
11 | @if (features$) { 12 |
13 | @for (feature of features$ | async; track feature; let i = $index) { 14 |
15 | 16 |
17 | } 18 |
19 | } 20 |
21 |
22 | } 23 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-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 | -------------------------------------------------------------------------------- /src/app/home/home-page/home-page.component.html: -------------------------------------------------------------------------------- 1 | @if (header$ | async; as header) { 2 |
3 | 24 |
25 | } 26 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false, 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /src/app/clients/clients-page/clients-page.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | @if (clients$ | async; as clients) { 4 |
5 |
6 |

{{ clients.tagline }}

7 |

{{ clients.title }}

8 |

{{ clients.description }}

9 |
10 |
11 | } 12 | 13 |
14 | @for (company of companies$ | async; track company; let i = $index) { 15 |
16 | 17 |
18 | } 19 |
20 |
21 |
22 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 |
2 |
5 |
8 |
11 |
14 |
15 | 16 |
17 | 18 | 19 | 20 |
21 | 22 | -------------------------------------------------------------------------------- /src/app/pricing/pricing-block/pricing-block.component.html: -------------------------------------------------------------------------------- 1 | 2 |
6 |
7 |

{{ plan.title }}

8 |

{{ plan.subtitle }}

9 |
10 |
11 | {{ plan.currency }}{{ plan.price }} 13 |
14 |

{{ plan.description }}

15 |
16 |
    17 |
  • {{ plan.downloads }}
  • 18 |
  • {{ plan.extensions }}
  • 19 |
  • {{ plan.tutorials }}
  • 20 |
  • {{ plan.support }}
  • 21 |
  • {{ plan.updates }}
  • 22 |
23 | {{ plan.buttontext }} 24 |
25 |
26 | 27 | -------------------------------------------------------------------------------- /e2e/protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './src/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | onPrepare() { 23 | require('ts-node').register({ 24 | project: require('path').join(__dirname, './tsconfig.e2e.json') 25 | }); 26 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 27 | } 28 | }; -------------------------------------------------------------------------------- /src/app/social/social.component.ts: -------------------------------------------------------------------------------- 1 | import { Observable, throwError, catchError } from 'rxjs'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { ConfigService } from '../shared/services/config.service'; 4 | import { Site } from './models/site.model'; 5 | import { AsyncPipe } from '@angular/common'; 6 | 7 | @Component({ 8 | selector: 'app-social', 9 | templateUrl: './social.component.html', 10 | standalone: true, 11 | imports: [AsyncPipe], 12 | }) 13 | export class SocialComponent implements OnInit { 14 | socialsites$: Observable = new Observable(); 15 | 16 | constructor(private config: ConfigService) {} 17 | 18 | ngOnInit() { 19 | this.getSocialsites(); 20 | } 21 | 22 | getSocialsites(): void { 23 | this.socialsites$ = this.config.getSettings('websites').pipe( 24 | catchError(error => { 25 | console.error('Error fetching feature data:', error); 26 | return throwError(error); 27 | }) 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "baseUrl": "./", 6 | "outDir": "./dist/out-tsc", 7 | "forceConsistentCasingInFileNames": true, 8 | "strict": false, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true, 11 | "sourceMap": true, 12 | "declaration": false, 13 | "downlevelIteration": true, 14 | "experimentalDecorators": true, 15 | "moduleResolution": "node", 16 | "importHelpers": true, 17 | "target": "ES2022", 18 | "module": "ES2022", 19 | "lib": [ 20 | "ES2022", 21 | "dom" 22 | ], 23 | "strictPropertyInitialization": false, 24 | "useDefineForClassFields": false 25 | }, 26 | "angularCompilerOptions": { 27 | "enableI18nLegacyMessageIdFormat": false, 28 | "strictInjectionParameters": true, 29 | "strictInputAccessModifiers": true, 30 | "strictTemplates": true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma'), 14 | ], 15 | client: { 16 | clearContext: false, // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, '../coverage'), 20 | reports: ['html', 'lcovonly'], 21 | fixWebpackSourcePaths: true, 22 | }, 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false, 30 | }); 31 | }; 32 | -------------------------------------------------------------------------------- /src/app/home/home-page/home-page.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Observable, throwError, catchError } from 'rxjs'; 3 | import { ConfigService } from '../../shared/services/config.service'; 4 | import { Header } from '../models/header.model'; 5 | import { AsyncPipe } from '@angular/common'; 6 | import { RouterLink } from '@angular/router'; 7 | 8 | @Component({ 9 | selector: 'app-home-page', 10 | templateUrl: './home-page.component.html', 11 | standalone: true, 12 | imports: [RouterLink, AsyncPipe], 13 | }) 14 | export class HomePageComponent implements OnInit { 15 | header$: Observable
; 16 | 17 | constructor(private config: ConfigService) {} 18 | 19 | ngOnInit() { 20 | this.getPageData('pages', 7); 21 | } 22 | 23 | getPageData(database: string, id?: number): void { 24 | this.header$ = this.config.getSettings(database, id).pipe( 25 | catchError(error => { 26 | console.error('Error fetching feature data:', error); 27 | return throwError(error); 28 | }) 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app/navigation/navigation.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Location } from '@angular/common'; 3 | import { ConfigService } from '../shared/services/config.service'; 4 | import { NavmenuComponent } from '../navmenu/navmenu.component'; 5 | 6 | @Component({ 7 | selector: 'app-navigation', 8 | templateUrl: './navigation.component.html', 9 | styleUrls: ['./navigation.component.css'], 10 | standalone: true, 11 | imports: [NavmenuComponent], 12 | }) 13 | export class NavigationComponent implements OnInit { 14 | menu: { id: number; title: string; link: string }[]; 15 | 16 | menuOpen: boolean; 17 | database = 'menu'; 18 | 19 | constructor( 20 | private location: Location, 21 | private config: ConfigService 22 | ) {} 23 | 24 | ngOnInit() { 25 | this.menuOpen = false; 26 | this.getMenu(); 27 | } 28 | 29 | toggleMenu(status: boolean) { 30 | this.menuOpen = status; 31 | } 32 | 33 | getMenu() { 34 | this.config.getSettings(this.database).subscribe(setting => { 35 | this.menu = setting; 36 | }); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/app/services/services-page/services-page.component.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-explicit-any */ 2 | import { Observable, throwError, catchError } from 'rxjs'; 3 | import { Component, OnInit } from '@angular/core'; 4 | import { ConfigService } from '../../shared/services/config.service'; 5 | import { Service } from '../models/service.model'; 6 | import { AsyncPipe } from '@angular/common'; 7 | 8 | @Component({ 9 | selector: 'app-services-page', 10 | templateUrl: './services-page.component.html', 11 | standalone: true, 12 | imports: [AsyncPipe], 13 | }) 14 | export class ServicesPageComponent implements OnInit { 15 | services$: Observable = new Observable(); 16 | 17 | constructor(private config: ConfigService) {} 18 | 19 | ngOnInit() { 20 | this.getPageData('pages', 3); 21 | } 22 | 23 | getPageData(database: string, id?: number) { 24 | this.services$ = this.config.getSettings(database, id).pipe( 25 | catchError(error => { 26 | console.error('Error fetching feature data:', error); 27 | return throwError(error); 28 | }) 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app/gallery/gallery-page/gallery-page.component.ts: -------------------------------------------------------------------------------- 1 | import { Observable, throwError, catchError } from 'rxjs'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { ConfigService } from '../../shared/services/config.service'; 4 | import { Image } from '../models/image.model'; 5 | import { AsyncPipe } from '@angular/common'; 6 | import { ImageBlockComponent } from '../image-block/image-block.component'; 7 | 8 | @Component({ 9 | selector: 'app-gallery-page', 10 | templateUrl: './gallery-page.component.html', 11 | standalone: true, 12 | imports: [ImageBlockComponent, AsyncPipe], 13 | }) 14 | export class GalleryPageComponent implements OnInit { 15 | images$: Observable = new Observable(); 16 | 17 | constructor(private config: ConfigService) {} 18 | 19 | ngOnInit() { 20 | this.getBlockData('images'); 21 | } 22 | 23 | getBlockData(database: string) { 24 | this.images$ = this.config.getSettings(database).pipe( 25 | catchError(error => { 26 | console.error('Error fetching feature data:', error); 27 | return throwError(error); 28 | }) 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app/footer/footer.component.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'rxjs'; 2 | import { Component, OnInit } from '@angular/core'; 3 | 4 | import { ConfigService } from '../shared/services/config.service'; 5 | import { Footer } from './footer.model'; 6 | import { AsyncPipe } from '@angular/common'; 7 | import { SocialComponent } from '../social/social.component'; 8 | import { RouterLink } from '@angular/router'; 9 | 10 | @Component({ 11 | selector: 'app-footer', 12 | templateUrl: './footer.component.html', 13 | styleUrls: ['./footer.component.css'], 14 | standalone: true, 15 | imports: [ 16 | RouterLink, 17 | SocialComponent, 18 | AsyncPipe, 19 | ], 20 | }) 21 | export class FooterComponent implements OnInit { 22 | // footer$: Observable = new Observable(); 23 | footer$: Observable