├── .gitignore ├── .vscode └── settings.json ├── README.md ├── app ├── app.component.html ├── app.component.scss ├── app.component.ts ├── app.module.ts ├── main.ts ├── promo │ ├── promo.component.html │ ├── promo.component.scss │ ├── promo.component.ts │ └── scss │ │ ├── _color-01.scss │ │ ├── _color-02.scss │ │ ├── _content.scss │ │ └── _globals.scss ├── scss │ ├── _content.scss │ ├── _footer.scss │ ├── _globals.scss │ └── _header.scss └── shared │ ├── components │ ├── content │ │ ├── accordion │ │ │ ├── accordion-pane.component.html │ │ │ ├── accordion-pane.component.scss │ │ │ ├── accordion-pane.component.ts │ │ │ ├── accordion.component.html │ │ │ ├── accordion.component.scss │ │ │ ├── accordion.component.ts │ │ │ └── scss │ │ │ │ ├── _globals.scss │ │ │ │ ├── _items.scss │ │ │ │ └── _pane.scss │ │ ├── message │ │ │ ├── message.component.html │ │ │ ├── message.component.scss │ │ │ ├── message.component.ts │ │ │ └── scss │ │ │ │ ├── _globals.scss │ │ │ │ ├── _icon.scss │ │ │ │ ├── _layout-01.scss │ │ │ │ ├── _layout-02.scss │ │ │ │ └── _message.scss │ │ ├── tabs │ │ │ ├── scss │ │ │ │ ├── _globals.scss │ │ │ │ ├── _items.scss │ │ │ │ └── _pane.scss │ │ │ ├── tabs-pane.component.html │ │ │ ├── tabs-pane.component.scss │ │ │ ├── tabs-pane.component.ts │ │ │ ├── tabs.component.html │ │ │ ├── tabs.component.scss │ │ │ └── tabs.component.ts │ │ └── thumbnail-list │ │ │ ├── scss │ │ │ ├── _color-01.scss │ │ │ ├── _color-02.scss │ │ │ ├── _globals.scss │ │ │ ├── _items.scss │ │ │ ├── _layout-01.scss │ │ │ └── _layout-02.scss │ │ │ ├── thumbnail-list.component.html │ │ │ ├── thumbnail-list.component.scss │ │ │ └── thumbnail-list.component.ts │ ├── navigation │ │ ├── navbar-primary │ │ │ ├── navbar-primary.component.html │ │ │ ├── navbar-primary.component.scss │ │ │ ├── navbar-primary.component.ts │ │ │ └── scss │ │ │ │ ├── _globals.scss │ │ │ │ └── _items.scss │ │ ├── navbar-secondary │ │ │ ├── navbar-secondary.component.html │ │ │ ├── navbar-secondary.component.scss │ │ │ ├── navbar-secondary.component.ts │ │ │ └── scss │ │ │ │ ├── _globals.scss │ │ │ │ └── _items.scss │ │ ├── pills │ │ │ ├── pills.component.html │ │ │ ├── pills.component.scss │ │ │ ├── pills.component.ts │ │ │ └── scss │ │ │ │ ├── _globals.scss │ │ │ │ └── _items.scss │ │ └── shared │ │ │ └── scss │ │ │ ├── _mixins.scss │ │ │ └── _variables.scss │ └── popups │ │ ├── modal │ │ ├── modal.component.html │ │ ├── modal.component.scss │ │ ├── modal.component.ts │ │ └── scss │ │ │ ├── _color-01.scss │ │ │ ├── _color-02.scss │ │ │ ├── _color-03.scss │ │ │ ├── _modal.scss │ │ │ └── _shield.scss │ │ └── tooltip │ │ ├── scss │ │ ├── _globals.scss │ │ └── _tooltip.scss │ │ ├── tooltip.component.html │ │ ├── tooltip.component.scss │ │ └── tooltip.component.ts │ └── scss │ ├── layout │ ├── _container.scss │ └── _grid.scss │ ├── root │ ├── _colors.scss │ └── _links.scss │ └── typography │ ├── _headers.scss │ └── _paragraphs.scss ├── bs-config.json ├── css ├── normalize.css └── root.css ├── favicon.ico ├── images ├── beaker.png └── knife.png ├── index.html ├── package.json ├── systemjs.config.js └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /.sass-cache 3 | npm-debug.log 4 | /app/**/*.js 5 | /app/**/*.map 6 | /app/**/*.css -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "**/*.map": {}, 4 | "**/*.js": { 5 | "when": "$(basename).ts" 6 | }, 7 | "**/*.css": { 8 | "when": "$(basename).scss" 9 | }, 10 | "app/**/*.js": true, 11 | "app/**/*.css": true, 12 | "node_modules": true 13 | } 14 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # So, What is This? 2 | This repository contains all code examples for the demos from my [Pluralsight](https://www.Pluralsight.com "Pluralsight") course: [Styling Angular Applications](https://www.pluralsight.com/courses/styling-angular-applications). Use these files to follow along with the course or for whatever you want really. 3 | 4 | #Styling Angular Applications 5 | Angular revolutionizes the way that we architect CSS for modern web applications. But before we can become Angular styling ninjas we need to take a step back consider the many different ways that things can be done. In this course we explore how the framework aligns with web components and what that means for adding styles to components and apps in general. Throughout this course we develop systems geared towards organization, scale, and maintainability for HTML and CSS within Angular apps. And as we get more comfortable adding and styling components within these systems we consider component themes and the ways that we can transform their look under certain circumstances. By the end of this course we'll have a strong knowledge of how Angular processes CSS and the many different ways it can be leveraged as part of an overall design system for creating beautiful, organized, maintainable, and future proof web applications. 6 | 7 | #### Introduction 8 | There are many considerations when it comes to CSS and styling applications in Angular version 2+ and in this module we explore, at a high level, many of the concepts we will cover in this course. 9 | 10 | #### How Styles Work in Angular 11 | In this module we dive into how styles work in Angular. We cover how the different view encapsulation modes work, what they mean as far as the rendered code and style scoping, and why you may want to use each of them. We explore some of the different ways that we can add styles to components, how Angular handles them, and how their priority flows through. And lastly, we dig into how Angular emulates Shadow DOM, CSS Scoping Module selectors, what they look like when rendered in the browser, and how/why we would want to use them. 12 | 13 | #### Scalable, Maintainable CSS/SCSS Architecture in Angular 14 | In this module we leverage the default Emulated view encapsulation mode for angular components along with the SASS preprocessor to cover concepts regarding global styles, variables, and mixins. We explore aspects regarding CSS selectors and class naming conventions both at a global app level as well as at a local component level. We develop a system for applying CSS relative units across components with reliability. And we utilize SASS variables and mixins to create relationships between styles within individual components and across multiple components making them easier to edit and maintain over time. 15 | 16 | #### Creating Component Themes 17 | In this module we focus on what a component theme is and on creating components that will vary their look under certain criteria. First we will look at explicitly setting component themes per instance by adding classes and properties to our components and exploring what this SCSS/CSS looks like. We then look at providing context aware themes to our components that automatically change styles based on the surroundings of the component using the :host-context selector. We use methods to determine if theme classes have been provided or if projected content exists to conditionally alter the look of components. And finally we explore the future of component theming with CSS Custom Properties. 18 | 19 | #### It's Wrap 20 | In this module we recap, at a high level, the core concepts and takeaways from the course and get ourselves set up to build amazing Angular applications that look great today and are easy to bring forward into the web of tomorrow. 21 | ## How to Use It 22 | In order to work with this project here's what you'll need to do... 23 | 24 | ### Install and Set Up 25 | 1. Install the following if you don't already have them 26 | * [node.js](https://nodejs.org/en/ "Node.js") 27 | * [git](https://git-scm.com/ "Git")

28 | 2. Clone the repository down to your computer
`https://github.com/pluralsight-styling-angular-apps/demos.git`

29 | 3. CD to the project folder
`cd demos`

30 | 4. Install project dependencies
`npm install`

31 | 5. Build the code, watch for file changes, and serve up the site locally
`npm start` 32 | 33 | ### Working With the Demos 34 | This repository contains the entire set of 56 demos for the course. To switch between demos you'll just need to checkout the proper branch. In order to know what branch to use for a given demo, the branch name is briefly displayed in the lower right hand corner of the video clip every time a code example is shown. The branches are named by module, for example, the first demo in module 02 is named `module-02-01` whereas the sixth demo in module 04 is named `module-04-06`. 35 | 36 | #### Module 02 37 | `module-02-01` - `module-02-16` 38 | 39 | #### Module 03 40 | `module-03-01` - `module-03-25` 41 | 42 | #### Module 04 43 | `module-04-01` - `module-04-15` 44 | -------------------------------------------------------------------------------- /app/app.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

5 | Styling Angular Applications 6 |

7 | For Angular Versions 2.0+ 8 |
9 | 10 |
11 | 12 |
13 | 14 |
15 |
16 | 17 |

Styles in Angular?

18 |

19 | Angular 2.0+ revolutionizes the way that we architect CSS. But before we become Angular styling ninjas we need to take a step back and look at all the different ways that things can be done. In this course we explore how the framework aligns with web components and what that means for adding styles to components and apps in general. It will provide a strong knowledge of how Angular processes CSS and the many different ways it can be leveraged as part of an overall design system for creating beautiful, organized, maintainable, and future proof applications. 20 |

21 |

22 | This course compliments Deborah Kurata’s Angular 2: “Getting Started” course. She briefly mentions Angular 2 components and styling and this course picks up where she leaves off with a deep dive into all that can be done with styles in Angular 2.0+. Also, it covers CSS/SCSS strategies that developers can implement to build clean, organized, and easy to maintain applications in the framework. 23 |

24 | 25 |

26 | 27 | Click here to learn More! 28 |

29 |

Styling Angular Applications

30 | 31 | Your Account is Expiring! 32 | Your account will expire within the next thirty days. Please update your payment method in your account. 33 | 34 |
35 |
36 | 37 | Offer Ends Soon! 38 | Act fast and renew your account in the next five days to recieve 20% off! 39 | 40 |
41 | 42 |

43 | 44 | 45 | 46 |

47 | A dive into how styles work in Angular 2.0+. We cover how the different view encapsulation modes work, what they mean as far as the compiled code and scope, and why we may want to use each of them. We then move into the different ways that we can add styles to components, how Angular handles them, and how their priority flows through. After a complete exploration of styles in Angular we will move on to how Shadow DOM emulation is done, the CSS selectors that are emulated, what they look like when rendered in the browser, and how/why we would want to use them. 48 |

49 |
50 | 51 |

52 | Focus primarily on the default “Emulated” View Encapsulation mode for Angular components. We cover concepts regarding how global styles, variables, and mixins can be handled. We look at implementing systems for CSS selectors and naming conventions. We then create a system that will allow us to apply relative units with predictability. We explore creating well-organized and structured files and address the selectors we use as well as issues regarding style overrides. We explore ideas around code, file, and directory structure and organization. And finally, we leverage the ever polular SASS preprocessor to create relationships between the styles within individual components or across multiple components making them easier to edit and maintain over time. 53 |

54 |
55 | 56 |

57 | Focus on creating components that have multiple themes and we explore some different ways that we can apply them. First we explicitly set the theme per instance by adding classes and properties to components and we explore what that this SCSS/CSS would look like. We then look at providing context aware themes for components that will automatically change styles based on their surroundings using the Host Context pseudo class. We then look at ways to provide inputs as properties then adding logic to check the classes added to apply the proper theme. We also explore explore ways to conditionally alter the markup of component templates when needed. And finally, we look at the future of component theming by taking a completely different approach using CSS Custom Properties. 58 |

59 |
60 |
61 | 62 |
63 |
64 | 65 |

Modules

66 | 67 | 68 |

69 | In this module we begin by discussing some of the problems with CSS and traditional web apps. We then move on to a brief discussion on web components. We explore how they attempt to solve some of these issues but, as we'll discover, thier features are lacking in browser support. This leads us into a brief introduction to Angular 2.0+ and how it currently bridges the gap allowing us to leverage many of the concepts of web components now. We explore how this new way of building requires us to completely revamp our thought process when it comes to CSS/SCSS styling and architecture. 70 |

71 |
72 | 73 |

74 | In this module we dive into how styles work in Angular 2.0+. We cover how the different view encapsulation modes work, what they mean as far as the compiled code and scope, and why we may want to use each of them. We then move into the different ways that we can add styles to components how Angular handles them, and how their priority flows through. After a complete exploration of styles in Angular we will move on to how Shadow DOM emulation is done, the CSS selectors that are emulated, what they look like when rendered in the browser, and how/why we would want to use them. 75 |

76 |
77 | 78 |

79 | In this module we focus primarily on the default “Emulated” View Encapsulation mode for Angular components. We cover concepts regarding how global styles, variables, and mixins can be handled. We look at implementing systems for CSS selectors and naming conventions. We then create a system that will allow us to apply relative units with predictability. We explore creating well-organized and structured files and address the selectors we use as well as issues regarding style overrides. We explore ideas around code, file, and directory structure and organization. And finally, we leverage the ever polular SASS preprocessor to create relationships between the styles within individual components or across multiple components making them easier to edit and maintain over time. 80 |

81 |
82 | 83 |

84 | In this module we focus on creating components that have multiple themes and we explore some different ways that we can apply them. First we explicitly set the theme per instance by adding classes and properties to components and we explore what that this SCSS/CSS would look like. We then look at providing context aware themes for components that will automatically change styles based on their surroundings using the Host Context pseudo class. We then look at ways to provide inputs as properties then adding logic to check the classes added to apply the proper theme. We also explore explore ways to conditionally alter the markup of component templates when needed. And finally, we look at the future of component theming by taking a completely different approach using CSS Custom Properties. 85 |

86 |
87 | 88 |

89 | In this module we wrap everything up and recap at a high level the core concepts and takeaways from the course so that you can get on your merry way armed and ready to style any Angular application! 90 |

91 |
92 |
93 | 94 |

Prerequisites

95 | 96 |

97 | This course assumes an understanding of 98 | 99 | HTML 100 | 101 | Hyper Text Markup Language. Describes the structure of Web pages using markup. 102 | 103 | , 104 | 105 | CSS 106 | 107 | Cascading Style Sheets. Describes how HTML elements are to be displayed on screen, paper, or in other media. 108 | 109 | , CSS Preprocessors, namely 110 | 111 | SASS 112 | 113 | Syntactically Awesome Style Sheets. A scripting language that is interpreted into Cascading Style Sheets (CSS). 114 | 115 | , and a general familiarity with Angular 2.0+ and Typescript. 116 |

117 | 118 |
119 |
120 | 121 |
122 | 123 | -------------------------------------------------------------------------------- /app/app.component.scss: -------------------------------------------------------------------------------- 1 | @import 'scss/globals'; 2 | @import 'scss/header'; 3 | @import 'scss/content'; 4 | @import 'scss/footer'; -------------------------------------------------------------------------------- /app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { AppModule } from './app.module'; 2 | import { Component } from '@angular/core'; 3 | 4 | @Component({ 5 | moduleId: module.id, 6 | selector: 'saa-app', 7 | templateUrl: 'app.component.html', 8 | styleUrls: ['app.component.css'] 9 | }) 10 | 11 | export class AppComponent { 12 | 13 | pills = [ 14 | { 15 | label: 'HTML' 16 | }, 17 | { 18 | label: 'CSS' 19 | }, 20 | { 21 | label: 'SASS' 22 | } 23 | ]; 24 | 25 | } -------------------------------------------------------------------------------- /app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | import { AppComponent } from './app.component'; 4 | import { PromoComponent } from './promo/promo.component'; 5 | 6 | // Content Components 7 | import { AccordionComponent } from './shared/components/content/accordion/accordion.component' 8 | import { AccordionPaneComponent } from './shared/components/content/accordion/accordion-pane.component' 9 | import { TabsComponent } from './shared/components/content/tabs/tabs.component' 10 | import { TabsPaneComponent } from './shared/components/content/tabs/tabs-pane.component' 11 | import { ThumbnailListComponent } from './shared/components/content/thumbnail-list/thumbnail-list.component' 12 | import { MessageComponent } from './shared/components/content/message/message.component' 13 | 14 | // Navigation Components 15 | import { NavBarPrimaryComponent } from './shared/components/navigation/navbar-primary/navbar-primary.component' 16 | import { NavBarSecondaryComponent } from './shared/components/navigation/navbar-secondary/navbar-secondary.component' 17 | import { PillsComponent } from './shared/components/navigation/pills/pills.component' 18 | 19 | // PopUp Components 20 | import { ModalComponent } from './shared/components/popups/modal/modal.component' 21 | import { ToolTipComponent } from './shared/components/popups/tooltip/tooltip.component' 22 | 23 | @NgModule({ 24 | imports: [ BrowserModule ], 25 | declarations: [ 26 | AppComponent, 27 | PromoComponent, 28 | AccordionComponent, 29 | AccordionPaneComponent, 30 | TabsComponent, 31 | TabsPaneComponent, 32 | MessageComponent, 33 | ThumbnailListComponent, 34 | NavBarPrimaryComponent, 35 | NavBarSecondaryComponent, 36 | PillsComponent, 37 | ModalComponent, 38 | ToolTipComponent 39 | ], 40 | bootstrap: [ AppComponent ] 41 | }) 42 | 43 | export class AppModule { } -------------------------------------------------------------------------------- /app/main.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | import { AppModule } from './app.module'; 3 | 4 | const platform = platformBrowserDynamic(); 5 | 6 | platform.bootstrapModule(AppModule); -------------------------------------------------------------------------------- /app/promo/promo.component.html: -------------------------------------------------------------------------------- 1 |
2 |

CSS/SCSS Architecture

3 |

4 | Focus primarily on the default “Emulated” View Encapsulation mode for Angular components. We cover concepts regarding how global styles, variables, and mixins can be handled. We look at implementing systems for CSS selectors and naming conventions. We then create a system that will allow us to apply relative units with predictability. We explore creating well-organized and structured files and address the selectors we use as well as issues regarding style overrides. We explore ideas around code, file, and directory structure and organization. And finally, we leverage the ever polular SASS preprocessor to create relationships between the styles within individual components or across multiple components making them easier to edit and maintain over time. 5 |

6 |
7 | 12 | -------------------------------------------------------------------------------- /app/promo/promo.component.scss: -------------------------------------------------------------------------------- 1 | @import 'scss/globals'; 2 | @import 'scss/content'; 3 | 4 | // Colors 5 | @import 'scss/color-01'; 6 | @import 'scss/color-02'; -------------------------------------------------------------------------------- /app/promo/promo.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ElementRef } from '@angular/core'; 2 | 3 | @Component({ 4 | moduleId: module.id, 5 | selector: 'saa-promo', 6 | templateUrl: 'promo.component.html', 7 | styleUrls: ['promo.component.css'] 8 | }) 9 | 10 | export class PromoComponent { 11 | themeClassNames; 12 | isColor01 = false; 13 | 14 | constructor(private hostRef: ElementRef) {} 15 | 16 | ngAfterContentInit() { 17 | this.themeClassNames = this.hostRef.nativeElement.className.split(' '); 18 | if (this.themeClassNames.indexOf('color--01') > -1) { 19 | this.isColor01 = true; 20 | } 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /app/promo/scss/_color-01.scss: -------------------------------------------------------------------------------- 1 | :host(.color--01) { 2 | 3 | .content { 4 | border-color: #ccc; 5 | } 6 | 7 | } -------------------------------------------------------------------------------- /app/promo/scss/_color-02.scss: -------------------------------------------------------------------------------- 1 | @import '../../shared/scss/root/colors'; 2 | 3 | 4 | 5 | :host(.color--02) { 6 | background: $g-root__color--secondary--01a; 7 | color: white; 8 | padding: 1em; 9 | 10 | .content { 11 | border-color: white; 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /app/promo/scss/_content.scss: -------------------------------------------------------------------------------- 1 | @import '../../shared/scss/typography/headers'; 2 | @import '../../shared/scss/typography/paragraphs'; 3 | 4 | 5 | 6 | 7 | .content { 8 | border: solid 0.0625em; 9 | margin-right: 1em; 10 | max-width: 35%; 11 | padding: 1em; 12 | 13 | &__title { 14 | @include g-root__h3; 15 | margin-top: 0.5em; 16 | } 17 | 18 | &__description { 19 | @include g-root__paragraph; 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /app/promo/scss/_globals.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | display: flex; 3 | font-size: 1rem; 4 | margin-top: 2em; 5 | } -------------------------------------------------------------------------------- /app/scss/_content.scss: -------------------------------------------------------------------------------- 1 | @import '../shared/scss/layout/container'; 2 | @import '../shared/scss/layout/grid'; 3 | @import '../shared/scss/typography/headers'; 4 | @import '../shared/scss/typography/paragraphs'; 5 | 6 | 7 | 8 | 9 | .content { 10 | @include g-layout__container; 11 | 12 | &__sections { 13 | @include g-layout__grid; 14 | } 15 | 16 | &__title { 17 | @include g-root__h2; 18 | } 19 | 20 | &__sub-title { 21 | @include g-root__h3; 22 | } 23 | 24 | &__paragraph { 25 | @include g-root__paragraph 26 | } 27 | 28 | // Large Viewports 29 | @media (min-width: 52rem) { 30 | 31 | &__primary { 32 | @include g-layout__grid__item--08; 33 | } 34 | 35 | &__secondary { 36 | @include g-layout__grid__item--04; 37 | } 38 | 39 | } 40 | 41 | // Small Viewports 42 | @media (max-width: 52rem) { 43 | 44 | &__primary { 45 | @include g-layout__grid__item--12; 46 | } 47 | 48 | &__secondary { 49 | @include g-layout__grid__item--12; 50 | } 51 | 52 | } 53 | 54 | } -------------------------------------------------------------------------------- /app/scss/_footer.scss: -------------------------------------------------------------------------------- 1 | @import '../shared/scss/root/colors'; 2 | @import '../shared/scss/layout/container'; 3 | 4 | 5 | 6 | 7 | .footer { 8 | background: $g-root__color--secondary--04a; 9 | color: #555; 10 | display: block; 11 | font-family: arial, sans-serif; 12 | margin-top: 1.8em; 13 | overflow: hidden; 14 | padding: 1em 0 3em; 15 | 16 | &__content { 17 | @include g-layout__container; 18 | } 19 | 20 | &__title { 21 | border-top: solid 1px #444; 22 | display: block; 23 | padding: 2.5em 0 0.3em; 24 | } 25 | 26 | &__sub-title { 27 | font-size: 0.8em; 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /app/scss/_globals.scss: -------------------------------------------------------------------------------- 1 | @import '../shared/scss/root/links'; 2 | @import '../shared/scss/typography/headers'; 3 | 4 | 5 | 6 | 7 | :host { 8 | font-size: 1rem; 9 | } 10 | 11 | h1 { 12 | @include g-root__h1; 13 | } 14 | 15 | strong { 16 | @include g-root__link; 17 | } -------------------------------------------------------------------------------- /app/scss/_header.scss: -------------------------------------------------------------------------------- 1 | @import '../shared/scss/root/colors'; 2 | @import '../shared/scss/layout/container'; 3 | @import '../shared/scss/typography/headers'; 4 | 5 | 6 | 7 | 8 | .header { 9 | background: $g-root__color--secondary--04a; 10 | display: block; 11 | font-family: arial, sans-serif; 12 | overflow: hidden; 13 | margin-bottom: 1.8em; 14 | 15 | &__content { 16 | @include g-layout__container; 17 | } 18 | 19 | &__title { 20 | @include g-root__h1; 21 | color: white; 22 | } 23 | 24 | &__sub-title { 25 | color: #888; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /app/shared/components/content/accordion/accordion-pane.component.html: -------------------------------------------------------------------------------- 1 |