├── .browserslistrc ├── .editorconfig ├── .gitignore ├── README.md ├── angular.json ├── documentation ├── components │ └── AppComponent.html ├── coverage.html ├── dependencies.html ├── fonts │ ├── ionicons.eot │ ├── ionicons.svg │ ├── ionicons.ttf │ ├── ionicons.woff │ ├── ionicons.woff2 │ ├── roboto-v15-latin-300.eot │ ├── roboto-v15-latin-300.svg │ ├── roboto-v15-latin-300.ttf │ ├── roboto-v15-latin-300.woff │ ├── roboto-v15-latin-300.woff2 │ ├── roboto-v15-latin-700.eot │ ├── roboto-v15-latin-700.svg │ ├── roboto-v15-latin-700.ttf │ ├── roboto-v15-latin-700.woff │ ├── roboto-v15-latin-700.woff2 │ ├── roboto-v15-latin-italic.eot │ ├── roboto-v15-latin-italic.svg │ ├── roboto-v15-latin-italic.ttf │ ├── roboto-v15-latin-italic.woff │ ├── roboto-v15-latin-italic.woff2 │ ├── roboto-v15-latin-regular.eot │ ├── roboto-v15-latin-regular.svg │ ├── roboto-v15-latin-regular.ttf │ ├── roboto-v15-latin-regular.woff │ └── roboto-v15-latin-regular.woff2 ├── graph │ └── dependencies.svg ├── images │ ├── compodoc-vectorise-inverted.png │ ├── compodoc-vectorise-inverted.svg │ ├── compodoc-vectorise.png │ ├── compodoc-vectorise.svg │ ├── coverage-badge-documentation.svg │ └── favicon.ico ├── index.html ├── js │ ├── compodoc.js │ ├── lazy-load-graphs.js │ ├── libs │ │ ├── EventDispatcher.js │ │ ├── bootstrap-native.js │ │ ├── clipboard.min.js │ │ ├── custom-elements-es5-adapter.js │ │ ├── custom-elements.min.js │ │ ├── d3.v3.min.js │ │ ├── deep-iterator.js │ │ ├── es6-shim.min.js │ │ ├── htmlparser.js │ │ ├── innersvg.js │ │ ├── lit-html.js │ │ ├── prism.js │ │ ├── promise.min.js │ │ ├── svg-pan-zoom.min.js │ │ ├── tablesort.min.js │ │ ├── tablesort.number.min.js │ │ ├── vis.min.js │ │ └── zepto.min.js │ ├── menu-wc.js │ ├── menu-wc_es5.js │ ├── menu.js │ ├── routes.js │ ├── routes │ │ └── routes_index.js │ ├── search │ │ ├── lunr.min.js │ │ ├── search-lunr.js │ │ ├── search.js │ │ └── search_index.js │ ├── sourceCode.js │ ├── svg-pan-zoom.controls.js │ ├── tabs.js │ └── tree.js ├── miscellaneous │ └── variables.html ├── modules.html ├── modules │ ├── AppModule.html │ ├── AppModule │ │ └── dependencies.svg │ ├── AppRoutingModule.html │ └── MaterialModule.html ├── overview.html ├── routes.html └── styles │ ├── bootstrap-card.css │ ├── bootstrap.min.css │ ├── compodoc.css │ ├── dark.css │ ├── ionicons.min.css │ ├── laravel.css │ ├── material.css │ ├── original.css │ ├── postmark.css │ ├── prism.css │ ├── readthedocs.css │ ├── reset.css │ ├── stripe.css │ ├── style.css │ ├── tablesort.css │ └── vagrant.css ├── karma.conf.js ├── package-lock.json ├── package.json ├── src ├── app │ ├── app-routing.module.ts │ ├── app.component.html │ ├── app.component.scss │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ └── material │ │ └── material.module.ts ├── assets │ └── .gitkeep ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── index.html ├── main.ts ├── polyfills.ts ├── styles.scss └── test.ts ├── tailwind.config.js ├── tsconfig.app.json ├── tsconfig.doc.json ├── tsconfig.json └── tsconfig.spec.json /.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major versions 15 | last 2 iOS major versions 16 | Firefox ESR 17 | not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. 18 | -------------------------------------------------------------------------------- /.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 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.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 | # Only exists if Bazel was run 8 | /bazel-out 9 | 10 | # dependencies 11 | /node_modules 12 | 13 | # profiling files 14 | chrome-profiler-events*.json 15 | 16 | # IDEs and editors 17 | /.idea 18 | .project 19 | .classpath 20 | .c9/ 21 | *.launch 22 | .settings/ 23 | *.sublime-workspace 24 | 25 | # IDE - VSCode 26 | .vscode/* 27 | !.vscode/settings.json 28 | !.vscode/tasks.json 29 | !.vscode/launch.json 30 | !.vscode/extensions.json 31 | .history/* 32 | 33 | # misc 34 | /.sass-cache 35 | /connect.lock 36 | /coverage 37 | /libpeerconnection.log 38 | npm-debug.log 39 | yarn-error.log 40 | testem.log 41 | /typings 42 | 43 | # System Files 44 | .DS_Store 45 | Thumbs.db 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # angular-material-tailwind 2 | 3 | ## Features 4 | 5 | + [Angular Material](https://material.angular.io) set up and ready to use in templates. 6 | + [Tailwind CSS](https://tailwindcss.com/) 2.0 with JIT enabled 7 | + Documentation generator [Compodoc](https://compodoc.app) pre-configured 8 | 9 | ## Development server 10 | 11 | Run `npm start` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. 12 | 13 | ## Generating Documentation 14 | Run `npm run compodoc` in the root directory. It'll generate the documentation in project-name/documentation directory and will serve the documentation at **port 8080** in watch mode. 15 | 16 | ## Tailwind Intellisense not working 17 | Open extension settings and add a new field in **Include Languages** with Item="plaintext" and Value="ts" 18 | 19 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.1.3. 20 | 21 | --- 22 | 23 | ## Code scaffolding 24 | 25 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. 26 | 27 | ## Build 28 | 29 | Run `npm run build` to build the project. The build artifacts will be stored in the `dist/` directory. 30 | 31 | ## Running unit tests 32 | 33 | Run `npm run test` to execute the unit tests via [Karma](https://karma-runner.github.io). 34 | 35 | ## Running end-to-end tests 36 | 37 | Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. 38 | 39 | ## Further help 40 | 41 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. 42 | -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "tw-test": { 7 | "projectType": "application", 8 | "schematics": { 9 | "@schematics/angular:component": { 10 | "style": "scss" 11 | }, 12 | "@schematics/angular:application": { 13 | "strict": true 14 | } 15 | }, 16 | "root": "", 17 | "sourceRoot": "src", 18 | "prefix": "app", 19 | "architect": { 20 | "build": { 21 | "builder": "@angular-devkit/build-angular:browser", 22 | "options": { 23 | "outputPath": "dist/tw-test", 24 | "index": "src/index.html", 25 | "main": "src/main.ts", 26 | "polyfills": "src/polyfills.ts", 27 | "tsConfig": "tsconfig.app.json", 28 | "inlineStyleLanguage": "scss", 29 | "assets": [ 30 | "src/favicon.ico", 31 | "src/assets" 32 | ], 33 | "styles": [ 34 | "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", 35 | "src/styles.scss" 36 | ], 37 | "scripts": [] 38 | }, 39 | "configurations": { 40 | "production": { 41 | "budgets": [ 42 | { 43 | "type": "initial", 44 | "maximumWarning": "500kb", 45 | "maximumError": "1mb" 46 | }, 47 | { 48 | "type": "anyComponentStyle", 49 | "maximumWarning": "2kb", 50 | "maximumError": "4kb" 51 | } 52 | ], 53 | "fileReplacements": [ 54 | { 55 | "replace": "src/environments/environment.ts", 56 | "with": "src/environments/environment.prod.ts" 57 | } 58 | ], 59 | "outputHashing": "all" 60 | }, 61 | "development": { 62 | "buildOptimizer": false, 63 | "optimization": false, 64 | "vendorChunk": true, 65 | "extractLicenses": false, 66 | "sourceMap": true, 67 | "namedChunks": true 68 | } 69 | }, 70 | "defaultConfiguration": "production" 71 | }, 72 | "serve": { 73 | "builder": "@angular-devkit/build-angular:dev-server", 74 | "configurations": { 75 | "production": { 76 | "browserTarget": "tw-test:build:production" 77 | }, 78 | "development": { 79 | "browserTarget": "tw-test:build:development" 80 | } 81 | }, 82 | "defaultConfiguration": "development" 83 | }, 84 | "extract-i18n": { 85 | "builder": "@angular-devkit/build-angular:extract-i18n", 86 | "options": { 87 | "browserTarget": "tw-test:build" 88 | } 89 | }, 90 | "test": { 91 | "builder": "@angular-devkit/build-angular:karma", 92 | "options": { 93 | "main": "src/test.ts", 94 | "polyfills": "src/polyfills.ts", 95 | "tsConfig": "tsconfig.spec.json", 96 | "karmaConfig": "karma.conf.js", 97 | "inlineStyleLanguage": "scss", 98 | "assets": [ 99 | "src/favicon.ico", 100 | "src/assets" 101 | ], 102 | "styles": [ 103 | "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", 104 | "src/styles.scss" 105 | ], 106 | "scripts": [] 107 | } 108 | } 109 | } 110 | } 111 | }, 112 | "defaultProject": "tw-test" 113 | } 114 | -------------------------------------------------------------------------------- /documentation/coverage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
26 |
27 | 30 | 31 |
32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 53 | 54 |
55 | 56 |
57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 73 | 74 | 75 | 79 | 80 | 81 | 85 | 86 | 87 | 91 | 92 | 93 | 97 | 98 | 99 | 103 | 104 | 105 | 109 | 110 | 111 | 115 | 116 | 117 | 121 | 122 | 123 | 127 | 128 | 129 |
FileTypeIdentifierStatements
70 | 71 | src/app/app.component.ts 72 | componentAppComponent 76 | 0 % 77 | (0/2) 78 |
82 | 83 | src/environments/environment.prod.ts 84 | variableenvironment 88 | 0 % 89 | (0/1) 90 |
94 | 95 | src/environments/environment.ts 96 | variableenvironment 100 | 0 % 101 | (0/1) 102 |
106 | 107 | src/test.ts 108 | variablecontext 112 | 0 % 113 | (0/1) 114 |
118 | 119 | src/test.ts 120 | variablerequire 124 | 0 % 125 | (0/1) 126 |
130 | 131 | 132 | 133 | 136 | 137 |
138 |
139 |

result-matching ""

140 |
    141 |
    142 |
    143 |

    No results matching ""

    144 |
    145 |
    146 |
    147 | 148 |
    149 |
    150 | 151 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | -------------------------------------------------------------------------------- /documentation/dependencies.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
    26 |
    27 | 30 | 31 |
    32 |
    33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 50 |
      51 |
    • 52 | @angular/animations : ~12.1.0-
    • 53 |
    • 54 | @angular/cdk : ^12.1.4
    • 55 |
    • 56 | @angular/common : ~12.1.0-
    • 57 |
    • 58 | @angular/compiler : ~12.1.0-
    • 59 |
    • 60 | @angular/core : ~12.1.0-
    • 61 |
    • 62 | @angular/forms : ~12.1.0-
    • 63 |
    • 64 | @angular/material : ^12.1.4
    • 65 |
    • 66 | @angular/platform-browser : ~12.1.0-
    • 67 |
    • 68 | @angular/platform-browser-dynamic : ~12.1.0-
    • 69 |
    • 70 | @angular/router : ~12.1.0-
    • 71 |
    • 72 | @ngneat/tailwind : ^7.0.3
    • 73 |
    • 74 | rxjs : ~6.6.0
    • 75 |
    • 76 | tslib : ^2.2.0
    • 77 |
    • 78 | zone.js : ~0.11.4
    • 79 |
    80 | 81 | 82 | 83 | 84 | 85 | 86 |
    87 |
    88 |

    result-matching ""

    89 |
      90 |
      91 |
      92 |

      No results matching ""

      93 |
      94 |
      95 |
      96 | 97 |
      98 |
      99 | 100 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /documentation/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/ionicons.eot -------------------------------------------------------------------------------- /documentation/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/ionicons.ttf -------------------------------------------------------------------------------- /documentation/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/ionicons.woff -------------------------------------------------------------------------------- /documentation/fonts/ionicons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/ionicons.woff2 -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-300.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-300.eot -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-300.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-300.ttf -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-300.woff -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-300.woff2 -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-700.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-700.eot -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-700.ttf -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-700.woff -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-700.woff2 -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-italic.eot -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-italic.ttf -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-italic.woff -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-italic.woff2 -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-regular.eot -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-regular.ttf -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-regular.woff -------------------------------------------------------------------------------- /documentation/fonts/roboto-v15-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/fonts/roboto-v15-latin-regular.woff2 -------------------------------------------------------------------------------- /documentation/graph/dependencies.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | dependencies 11 | 12 | dependencies 13 | 14 | cluster_AppModule 15 | 16 | 17 | 18 | cluster_AppModule_imports 19 | 20 | 21 | 22 | cluster_AppModule_bootstrap 23 | 24 | 25 | 26 | cluster_AppModule_declarations 27 | 28 | 29 | 30 | 31 | AppComponent 32 | 33 | AppComponent 34 | 35 | 36 | 37 | AppModule 38 | 39 | AppModule 40 | 41 | 42 | 43 | AppComponent->AppModule 44 | 45 | 46 | 47 | 48 | 49 | AppComponent 50 | 51 | AppComponent 52 | 53 | 54 | 55 | AppModule->AppComponent 56 | 57 | 58 | 59 | 60 | 61 | AppRoutingModule 62 | 63 | AppRoutingModule 64 | 65 | 66 | 67 | AppRoutingModule->AppModule 68 | 69 | 70 | 71 | 72 | 73 | MaterialModule 74 | 75 | MaterialModule 76 | 77 | 78 | 79 | MaterialModule->AppModule 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /documentation/images/compodoc-vectorise-inverted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/images/compodoc-vectorise-inverted.png -------------------------------------------------------------------------------- /documentation/images/compodoc-vectorise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/images/compodoc-vectorise.png -------------------------------------------------------------------------------- /documentation/images/coverage-badge-documentation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | documentation 7 | 0% 8 | 9 | 10 | -------------------------------------------------------------------------------- /documentation/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/documentation/images/favicon.ico -------------------------------------------------------------------------------- /documentation/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
      26 |
      27 | 30 | 31 |
      32 |
      33 | 34 |

      angular-material-tailwind

      35 |

      This project was generated with Angular CLI version 12.1.3.

      36 |

      Development server

      37 |

      Run ng serve for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

      38 |

      Code scaffolding

      39 |

      Run ng generate component component-name to generate a new component. You can also use ng generate directive|pipe|service|class|guard|interface|enum|module.

      40 |

      Build

      41 |

      Run ng build to build the project. The build artifacts will be stored in the dist/ directory.

      42 |

      Running unit tests

      43 |

      Run ng test to execute the unit tests via Karma.

      44 |

      Running end-to-end tests

      45 |

      Run ng e2e to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.

      46 |

      Further help

      47 |

      To get more help on the Angular CLI use ng help or go check out the Angular CLI Overview and Command Reference page.

      48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
      68 |
      69 |

      result-matching ""

      70 |
        71 |
        72 |
        73 |

        No results matching ""

        74 |
        75 |
        76 |
        77 | 78 |
        79 |
        80 | 81 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /documentation/js/compodoc.js: -------------------------------------------------------------------------------- 1 | var compodoc = { 2 | EVENTS: { 3 | READY: 'compodoc.ready', 4 | SEARCH_READY: 'compodoc.search.ready' 5 | } 6 | }; 7 | 8 | Object.assign( compodoc, EventDispatcher.prototype ); 9 | 10 | document.addEventListener('DOMContentLoaded', function() { 11 | compodoc.dispatchEvent({ 12 | type: compodoc.EVENTS.READY 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /documentation/js/lazy-load-graphs.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var lazyGraphs = [].slice.call(document.querySelectorAll('[lazy]')); 3 | var active = false; 4 | 5 | var lazyLoad = function() { 6 | if (active === false) { 7 | active = true; 8 | 9 | setTimeout(function() { 10 | lazyGraphs.forEach(function(lazyGraph) { 11 | if ( 12 | lazyGraph.getBoundingClientRect().top <= window.innerHeight && 13 | lazyGraph.getBoundingClientRect().bottom >= 0 && 14 | getComputedStyle(lazyGraph).display !== 'none' 15 | ) { 16 | lazyGraph.data = lazyGraph.getAttribute('lazy'); 17 | lazyGraph.removeAttribute('lazy'); 18 | 19 | lazyGraphs = lazyGraphs.filter(function(image) { return image !== lazyGraph}); 20 | 21 | if (lazyGraphs.length === 0) { 22 | document.removeEventListener('scroll', lazyLoad); 23 | window.removeEventListener('resize', lazyLoad); 24 | window.removeEventListener('orientationchange', lazyLoad); 25 | } 26 | } 27 | }); 28 | 29 | active = false; 30 | }, 200); 31 | } 32 | }; 33 | 34 | // initial load 35 | lazyLoad(); 36 | 37 | var container = document.querySelector('.container-fluid.modules'); 38 | if (container) { 39 | container.addEventListener('scroll', lazyLoad); 40 | window.addEventListener('resize', lazyLoad); 41 | window.addEventListener('orientationchange', lazyLoad); 42 | } 43 | 44 | }); 45 | -------------------------------------------------------------------------------- /documentation/js/libs/EventDispatcher.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author mrdoob / http://mrdoob.com/ 3 | */ 4 | 5 | var EventDispatcher=function(){};Object.assign(EventDispatcher.prototype,{addEventListener:function(i,t){void 0===this._listeners&&(this._listeners={});var e=this._listeners;void 0===e[i]&&(e[i]=[]),-1===e[i].indexOf(t)&&e[i].push(t)},hasEventListener:function(i,t){if(void 0===this._listeners)return!1;var e=this._listeners;return void 0!==e[i]&&-1!==e[i].indexOf(t)},removeEventListener:function(i,t){if(void 0!==this._listeners){var e=this._listeners[i];if(void 0!==e){var s=e.indexOf(t);-1!==s&&e.splice(s,1)}}},dispatchEvent:function(i){if(void 0!==this._listeners){var t=this._listeners[i.type];if(void 0!==t){i.target=this;var e=[],s=0,n=t.length;for(s=0;s1?t[t.length-1]:void 0:t[0]},this.getActiveContent=function(){var t=this.getActiveTab().getElementsByTagName("A")[0].getAttribute("href").replace("#","");return t&&document.getElementById("c-"+t)},this.tab.addEventListener("click",this.handle,!1)},d=document.querySelectorAll("[data-toggle='tab'], [data-toggle='pill']"),u=0,h=d.length;u0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})},function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(t))return r(t,e,n);if(c.nodeList(t))return i(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function i(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return u(document.body,t,e,n)}var c=n(6),u=n(5);t.exports=o},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){r.off(t,o),e.apply(n,arguments)}var r=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;for(o;o0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===d(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,f.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(s.default);t.exports=p})},function(t,e){function n(t,e){for(;t&&t.nodeType!==o;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=n},function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function r(t,e,n,r,i){return"function"==typeof t.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return o(t,e,n,r,i)}))}function i(t,e,n,o){return function(n){n.delegateTarget=a(n.target,e),n.delegateTarget&&o.call(t,n)}}var a=n(4);t.exports=r},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e){function n(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}t.exports=n}])}); -------------------------------------------------------------------------------- /documentation/js/libs/custom-elements-es5-adapter.js: -------------------------------------------------------------------------------- 1 | /** 2 | @license @nocompile 3 | Copyright (c) 2018 The Polymer Project Authors. All rights reserved. 4 | This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 5 | The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 6 | The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 7 | Code distributed by Google as part of the polymer project is also 8 | subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 9 | */ 10 | (function () { 11 | 'use strict'; 12 | 13 | (function(){if(void 0===window.Reflect||void 0===window.customElements||window.customElements.hasOwnProperty('polyfillWrapFlushCallback'))return;const a=HTMLElement;window.HTMLElement=function(){return Reflect.construct(a,[],this.constructor)},HTMLElement.prototype=a.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,a);})(); 14 | 15 | }()); 16 | -------------------------------------------------------------------------------- /documentation/js/libs/innersvg.js: -------------------------------------------------------------------------------- 1 | /** 2 | * innerHTML property for SVGElement 3 | * Copyright(c) 2010, Jeff Schiller 4 | * 5 | * Licensed under the Apache License, Version 2 6 | * 7 | * Minor modifications by Chris Price to only polyfill when required. 8 | */ 9 | !function(e){if(e&&!("innerHTML"in e.prototype)){var t=function(e,r){var i=e.nodeType;if(3==i)r.push(e.textContent.replace(/&/,"&").replace(/",">"));else if(1==i){if(r.push("<",e.tagName),e.hasAttributes())for(var n=e.attributes,s=0,o=n.length;s");for(var h=e.childNodes,s=0,o=h.length;s")}else r.push("/>")}else{if(8!=i)throw"Error serializing XML. Unhandled node of type: "+i;r.push("\x3c!--",e.nodeValue,"--\x3e")}};Object.defineProperty(e.prototype,"innerHTML",{get:function(){for(var e=[],r=this.firstChild;r;)t(r,e),r=r.nextSibling;return e.join("")},set:function(e){for(;this.firstChild;)this.removeChild(this.firstChild);try{var t=new DOMParser;t.async=!1,sXML=""+e+"";for(var r=t.parseFromString(sXML,"text/xml").documentElement.firstChild;r;)this.appendChild(this.ownerDocument.importNode(r,!0)),r=r.nextSibling}catch(e){throw new Error("Error parsing XML string")}}})}}((0,eval)("this").SVGElement); -------------------------------------------------------------------------------- /documentation/js/libs/promise.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012-2013 (c) Pierre Duquesne 3 | * Licensed under the New BSD License. 4 | * https://github.com/stackp/promisejs 5 | */ 6 | (function(a){function b(){this._callbacks=[];}b.prototype.then=function(a,c){var d;if(this._isdone)d=a.apply(c,this.result);else{d=new b();this._callbacks.push(function(){var b=a.apply(c,arguments);if(b&&typeof b.then==='function')b.then(d.done,d);});}return d;};b.prototype.done=function(){this.result=arguments;this._isdone=true;for(var a=0;a=300)&&j.status!==304);h.done(a,j.responseText,j);}};j.send(k);return h;}function h(a){return function(b,c,d){return g(a,b,c,d);};}var i={Promise:b,join:c,chain:d,ajax:g,get:h('GET'),post:h('POST'),put:h('PUT'),del:h('DELETE'),ENOXHR:1,ETIMEOUT:2,ajaxTimeout:0};if(typeof define==='function'&&define.amd)define(function(){return i;});else a.promise=i;})(this); -------------------------------------------------------------------------------- /documentation/js/libs/tablesort.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * tablesort v5.1.0 (2018-09-14) 3 | * http://tristen.ca/tablesort/demo/ 4 | * Copyright (c) 2018 ; Licensed MIT 5 | */ 6 | !function(){function a(b,c){if(!(this instanceof a))return new a(b,c);if(!b||"TABLE"!==b.tagName)throw new Error("Element must be a table");this.init(b,c||{})}var b=[],c=function(a){var b;return window.CustomEvent&&"function"==typeof window.CustomEvent?b=new CustomEvent(a):(b=document.createEvent("CustomEvent"),b.initCustomEvent(a,!1,!1,void 0)),b},d=function(a){return a.getAttribute("data-sort")||a.textContent||a.innerText||""},e=function(a,b){return a=a.trim().toLowerCase(),b=b.trim().toLowerCase(),a===b?0:a0)if(a.tHead&&a.tHead.rows.length>0){for(e=0;e0&&l.push(k),m++;if(!l)return}for(m=0;m 17 | 99 | 100 | `); 101 | this.innerHTML = tp.strings; 102 | } 103 | }); -------------------------------------------------------------------------------- /documentation/js/menu-wc_es5.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 4 | 5 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 6 | 7 | function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 8 | 9 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 10 | 11 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 12 | 13 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } 14 | 15 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 16 | 17 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 18 | 19 | function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } 20 | 21 | function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } 22 | 23 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } 24 | 25 | function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } 26 | 27 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 28 | 29 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 30 | 31 | customElements.define('compodoc-menu', /*#__PURE__*/function (_HTMLElement) { 32 | _inherits(_class, _HTMLElement); 33 | 34 | var _super = _createSuper(_class); 35 | 36 | function _class() { 37 | var _this; 38 | 39 | _classCallCheck(this, _class); 40 | 41 | _this = _super.call(this); 42 | _this.isNormalMode = _this.getAttribute('mode') === 'normal'; 43 | return _this; 44 | } 45 | 46 | _createClass(_class, [{ 47 | key: "connectedCallback", 48 | value: function connectedCallback() { 49 | this.render(this.isNormalMode); 50 | } 51 | }, { 52 | key: "render", 53 | value: function render(isNormalMode) { 54 | var tp = lithtml.html("\n \n ")); 55 | this.innerHTML = tp.strings; 56 | } 57 | }]); 58 | 59 | return _class; 60 | }( /*#__PURE__*/_wrapNativeSuper(HTMLElement))); -------------------------------------------------------------------------------- /documentation/js/routes.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | 3 | function htmlEntities(str) { 4 | return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); 5 | } 6 | 7 | function foundLazyModuleWithPath(path) { 8 | //path is like app/customers/customers.module#CustomersModule 9 | var split = path.split('#'), 10 | lazyModulePath = split[0], 11 | lazyModuleName = split[1]; 12 | return lazyModuleName; 13 | } 14 | 15 | function getBB(selection) { 16 | selection.each(function(d){d.bbox = this.getBBox();}) 17 | } 18 | 19 | var test_cases, 20 | test_case, 21 | test_case_num, 22 | engine; 23 | 24 | var tree = ROUTES_INDEX; 25 | 26 | function cleanStringChildren(obj) { 27 | for (var property in obj) { 28 | if (obj.hasOwnProperty(property)) { 29 | if (property === 'children' && typeof obj[property] === 'object') { 30 | for (var i = obj[property].length - 1; i >= 0 ; i--) { 31 | if (typeof obj[property][i] === 'string') { 32 | obj[property].splice(i, 1); 33 | } 34 | } 35 | } 36 | if (typeof obj[property] === 'object') { 37 | cleanStringChildren(obj[property]); 38 | } 39 | } 40 | } 41 | } 42 | cleanStringChildren(tree); 43 | 44 | engine = d3.layout.tree().setNodeSizes(true); 45 | 46 | engine.spacing(function(a, b) { 47 | return a.parent == b.parent ? 48 | 0 : engine.rootXSize(); 49 | }) 50 | 51 | engine.nodeSize(function(d) { 52 | return [document.getElementById(d.id).getBBox()["height"] + 70, document.getElementById(d.id).getBBox()["width"] + 30]; 53 | }); 54 | 55 | var nodes = d3.layout.hierarchy()(tree), 56 | 57 | svg = d3.select("#body-routes").append('svg'), 58 | svg_g = svg.append("g"), 59 | svg_p = svg.append("g"), 60 | last_id = 0, 61 | 62 | node = svg_g.selectAll(".node") 63 | .data(nodes, function(d) { 64 | return d.id || (d.id = ++last_id); 65 | }) 66 | .enter().append("g") 67 | .attr("class", "node"); 68 | 69 | svg 70 | .attr('id', 'main') 71 | 72 | svg_g 73 | .attr("transform", "translate(20,0)") 74 | .attr('id', 'main-group') 75 | 76 | svg_p 77 | .attr("transform", "translate(20,0)") 78 | .attr('id', 'paths') 79 | 80 | var infos_group = node.append("g") 81 | .attr({ 82 | "id": function(d) { 83 | return d.id; 84 | }, 85 | dx: 0, 86 | dy: 0, 87 | }) 88 | 89 | //Node icon 90 | infos_group.append("text") 91 | .attr('font-family', 'Ionicons') 92 | .attr("y", 5) 93 | .attr("x", 0) 94 | .attr('class', function(d) { 95 | return d.children || d._children 96 | ? "icon has-children" 97 | : "icon"; 98 | }) 99 | .attr('font-size', function(d) { 100 | return '15px' 101 | }).text(function(d) { 102 | return '\uf183' 103 | }); 104 | 105 | //node infos 106 | infos_group.append("svg:text") 107 | .attr("x", function(d) { 108 | return 0; 109 | }) 110 | .attr("y", function(d) { 111 | return 10; 112 | }) 113 | .attr("dy", ".35em") 114 | .attr('class', 'text') 115 | .attr("text-anchor", function(d) { 116 | return "start"; 117 | }).html(function(d) { 118 | // if kind === module name + module 119 | // if kind === component component + path 120 | var _name = ''; 121 | if (d.kind === 'module') { 122 | if (d.module) { 123 | _name += '' + d.module + ''; 124 | if (d.name) { 125 | _name += '' + d.name + ''; 126 | } 127 | } else { 128 | _name += '' + htmlEntities(d.name) + ''; 129 | } 130 | } else if (d.kind === 'component') { 131 | _name += '' + d.path + '' 132 | _name += '' + d.component + '' 133 | if (d.outlet) { 134 | _name += '<outlet> : ' + d.outlet + '' 135 | } 136 | } else { 137 | _name += '/' + d.path + '' 138 | if (d.component) { 139 | _name += '' + d.component + '' 140 | } 141 | if (d.loadChildren) { 142 | var moduleName = foundLazyModuleWithPath(d.loadChildren); 143 | _name += '' + moduleName + '' 144 | } 145 | if (d.canActivate) { 146 | _name += '✓ canActivate' 147 | } 148 | if (d.canDeactivate) { 149 | _name += '×  canDeactivate' 150 | } 151 | if (d.canActivateChild) { 152 | _name += '✓ canActivateChild' 153 | } 154 | if (d.canLoad) { 155 | _name += '→ canLoad' 156 | } 157 | if (d.redirectTo) { 158 | _name += '→ ' + d.redirectTo + '' 159 | } 160 | if (d.pathMatch) { 161 | _name += '> ' + d.pathMatch + '' 162 | } 163 | if (d.outlet) { 164 | _name += '<outlet> : ' + d.outlet + '' 165 | } 166 | } 167 | return _name; 168 | }) 169 | .call(getBB); 170 | 171 | // 172 | // Node lazy loaded ? 173 | // 174 | infos_group.append('svg:text') 175 | .attr("y", function(d) { 176 | return 45; 177 | }) 178 | .attr("x", function(d) { 179 | return -18; 180 | }) 181 | .attr('font-family', 'Ionicons') 182 | .attr('class', function(d) { 183 | return "icon"; 184 | }) 185 | .attr('font-size', function(d) { 186 | return '15px' 187 | }).text(function(d) { 188 | var _text = ''; 189 | if (d.loadChildren) { 190 | _text = '\uf4c1'; 191 | } 192 | if (d.guarded) { 193 | _text = '\uf1b0'; 194 | } 195 | return _text; 196 | }); 197 | 198 | //Node text background 199 | infos_group.insert("rect","text") 200 | .attr("width", function(d){ 201 | return d.bbox.width; 202 | }) 203 | .attr("height", function(d){ 204 | return d.bbox.height; 205 | }) 206 | .attr("y", function(d) { 207 | return 15; 208 | }) 209 | .style("fill", "white") 210 | .style("fill-opacity", 0.75); 211 | 212 | nodes = engine.nodes(tree); 213 | 214 | function node_extents(n) { 215 | return [n.x - n.x_size / 2, n.y, 216 | n.x + n.x_size / 2, n.y + n.y_size 217 | ]; 218 | } 219 | var root_extents = node_extents(nodes[0]); 220 | var xmin = root_extents[0], 221 | ymin = root_extents[1], 222 | xmax = root_extents[2], 223 | ymax = root_extents[3], 224 | area_sum = (xmax - xmin) * (ymax - ymin), 225 | x_size_min = nodes[0].x_size, 226 | y_size_min = nodes[0].y_size; 227 | 228 | nodes.slice(1).forEach(function(n) { 229 | var ne = node_extents(n); 230 | xmin = Math.min(xmin, ne[0]); 231 | ymin = Math.min(ymin, ne[1]); 232 | xmax = Math.max(xmax, ne[2]); 233 | ymax = Math.max(ymax, ne[3]); 234 | area_sum += (ne[2] - ne[0]) * (ne[3] - ne[1]); 235 | x_size_min = Math.min(x_size_min, n.x_size); 236 | y_size_min = Math.min(y_size_min, n.y_size); 237 | }); 238 | 239 | var area_ave = area_sum / nodes.length; 240 | var scale = 80 / Math.sqrt(area_ave); 241 | 242 | function svg_x(node_y) { 243 | return (node_y - ymin); 244 | } 245 | 246 | function svg_y(node_x) { 247 | return (node_x - xmin) * scale; 248 | } 249 | 250 | 251 | var nodebox_right_margin = Math.min(x_size_min * scale, 10); 252 | var nodebox_vertical_margin = Math.min(y_size_min * scale, 3); 253 | 254 | node.attr("transform", function(d) { 255 | return "translate(" + svg_x(d.y) + "," + svg_y(d.x) + ")"; 256 | }) 257 | 258 | var diagonal = d3.svg.diagonal() 259 | .projection(function(d) { 260 | return [svg_x(d.y), svg_y(d.x)]; 261 | }); 262 | 263 | var links = engine.links(nodes); 264 | var links = svg_p.selectAll(".link") 265 | .data(links) 266 | .enter().append("path") 267 | .attr("class", "link") 268 | .attr("d", diagonal); 269 | 270 | var _svg = document.getElementById('main'), 271 | main_g = _svg.childNodes[0] 272 | 273 | _svg.removeChild(main_g); 274 | _svg.appendChild(main_g); 275 | 276 | svg.attr({ 277 | width: document.getElementById('main-group').getBBox()['width'] + 30, 278 | height: document.getElementById('main-group').getBBox()['height'] + 50, 279 | }); 280 | }); 281 | -------------------------------------------------------------------------------- /documentation/js/routes/routes_index.js: -------------------------------------------------------------------------------- 1 | var ROUTES_INDEX = {"name":"","kind":"module","className":"AppModule","children":[{"name":"routes","filename":"src/app/app-routing.module.ts","module":"AppRoutingModule","children":[],"kind":"module"}]} 2 | -------------------------------------------------------------------------------- /documentation/js/search/search-lunr.js: -------------------------------------------------------------------------------- 1 | (function(compodoc) { 2 | 3 | function LunrSearchEngine() { 4 | this.index = undefined; 5 | this.store = {}; 6 | this.name = 'LunrSearchEngine'; 7 | } 8 | 9 | LunrSearchEngine.prototype.init = function() { 10 | var that = this, 11 | d = new promise.Promise(); 12 | 13 | that.index = lunr.Index.load(COMPODOC_SEARCH_INDEX.index); 14 | that.store = COMPODOC_SEARCH_INDEX.store; 15 | d.done(); 16 | 17 | return d; 18 | }; 19 | 20 | LunrSearchEngine.prototype.search = function(q, offset, length) { 21 | var that = this, 22 | results = [], 23 | d = new promise.Promise(); 24 | 25 | if (this.index) { 26 | results = $.map(this.index.search('*' + q + '*'), function(result) { 27 | var doc = that.store[result.ref]; 28 | 29 | return { 30 | title: doc.title, 31 | url: doc.url, 32 | body: doc.summary || doc.body 33 | }; 34 | }); 35 | } 36 | 37 | d.done({ 38 | query: q, 39 | results: length === 0 ? results : results.slice(0, length), 40 | count: results.length 41 | }); 42 | 43 | return d; 44 | }; 45 | 46 | compodoc.addEventListener(compodoc.EVENTS.READY, function(event) { 47 | var engine = new LunrSearchEngine(), 48 | initialized = false; 49 | 50 | function query(q, offset, length) { 51 | if (!initialized) throw new Error('Search has not been initialized'); 52 | return engine.search(q, offset, length); 53 | } 54 | 55 | compodoc.search = { 56 | query: query 57 | }; 58 | 59 | engine.init() 60 | .then(function() { 61 | initialized = true; 62 | compodoc.dispatchEvent({ 63 | type: compodoc.EVENTS.SEARCH_READY 64 | }); 65 | }); 66 | }); 67 | })(compodoc); 68 | -------------------------------------------------------------------------------- /documentation/js/search/search.js: -------------------------------------------------------------------------------- 1 | (function(compodoc) { 2 | var usePushState = (typeof history.pushState !== 'undefined'), 3 | 4 | // DOM Elements 5 | $body = $('body'), 6 | $searchResults, 7 | $searchInput, 8 | $searchList, 9 | $searchTitle, 10 | $searchResultsCount, 11 | $searchQuery, 12 | $mainContainer, 13 | $xsMenu; 14 | 15 | // Throttle search 16 | function throttle(fn, wait) { 17 | var timeout; 18 | 19 | return function() { 20 | var ctx = this, args = arguments; 21 | if (!timeout) { 22 | timeout = setTimeout(function() { 23 | timeout = undefined; 24 | fn.apply(ctx, args); 25 | }, wait); 26 | } 27 | }; 28 | } 29 | 30 | function displayResults(res) { 31 | var noResults = res.count == 0; 32 | var groups = {}; 33 | $searchResults.toggleClass('no-results', noResults); 34 | 35 | // Clear old results 36 | $searchList.empty(); 37 | 38 | // Display title for research 39 | $searchResultsCount.text(res.count); 40 | $searchQuery.text(res.query); 41 | 42 | // Group result by context 43 | res.results.forEach(function(res) { 44 | var context = res.title.split(' - ')[0]; 45 | if (typeof groups[context] === 'undefined') { 46 | groups[context] = { 47 | results: [res] 48 | } 49 | } else { 50 | groups[context].results.push(res) 51 | } 52 | }); 53 | 54 | var sortedGroups = Object.keys(groups).sort(); 55 | 56 | for (var i = 0; i < sortedGroups.length; i++) { 57 | var property = sortedGroups[i]; 58 | 59 | var $li = $('
      • ', { 60 | 'class': 'search-results-group' 61 | }); 62 | var finalPropertyLabel = ''; 63 | var propertyLabels = property.split('-'); 64 | 65 | if (propertyLabels.length === 2 && propertyLabels[0] !== 'miscellaneous' && propertyLabels[0] !== 'additional') { 66 | finalPropertyLabel = propertyLabels[0].charAt(0).toUpperCase() + propertyLabels[0].substring(1) + ' - ' + propertyLabels[1].charAt(0).toUpperCase() + propertyLabels[1].substring(1) + ' (' + groups[property].results.length + ')'; 67 | } else if (propertyLabels[0] === 'additional') { 68 | finalPropertyLabel = 'Additional pages' + ' (' + groups[property].results.length + ')' 69 | } else { 70 | finalPropertyLabel = propertyLabels[0].charAt(0).toUpperCase() + propertyLabels[0].substring(1) + ' (' + groups[property].results.length + ')' 71 | } 72 | var $groupTitle = $('

        ', { 73 | 'text': finalPropertyLabel 74 | }); 75 | $groupTitle.appendTo($li); 76 | 77 | var $ulResults = $('
          ', { 78 | 'class': 'search-results-list' 79 | }) 80 | 81 | groups[property].results.forEach(function(res) { 82 | var link = ''; 83 | var $liResult = $('
        • ', { 84 | 'class': 'search-results-item' 85 | }); 86 | switch (COMPODOC_CURRENT_PAGE_DEPTH) { 87 | case 0: 88 | link = './'; 89 | break; 90 | case 1: 91 | case 2: 92 | case 3: 93 | case 4: 94 | case 5: 95 | link = '../'.repeat(COMPODOC_CURRENT_PAGE_DEPTH); 96 | break; 97 | }; 98 | var finalResLabel = res.title.split(' - ')[1].charAt(0).toUpperCase() + res.title.split(' - ')[1].substring(1); 99 | var $link = $('', { 100 | 'href': link + res.url, 101 | 'text': finalResLabel 102 | }); 103 | $link.appendTo($liResult); 104 | $liResult.appendTo($ulResults); 105 | }); 106 | $ulResults.appendTo($li); 107 | 108 | $li.appendTo($searchList); 109 | } 110 | } 111 | 112 | function launchSearch(q) { 113 | $body.addClass('with-search'); 114 | 115 | if ($xsMenu.css('display') === 'block') { 116 | $mainContainer.css('height', 'calc(100% - 100px)'); 117 | $mainContainer.css('margin-top', '100px'); 118 | } 119 | 120 | throttle(compodoc.search.query(q, 0, MAX_SEARCH_RESULTS) 121 | .then(function(results) { 122 | displayResults(results); 123 | }), 1000); 124 | } 125 | 126 | function closeSearch() { 127 | $body.removeClass('with-search'); 128 | if ($xsMenu.css('display') === 'block') { 129 | $mainContainer.css('height', 'calc(100% - 50px)'); 130 | $mainContainer.css('margin-top', '50px'); 131 | } 132 | } 133 | 134 | function bindMenuButton() { 135 | document.getElementById('btn-menu').addEventListener('click', function() { 136 | if ($xsMenu.css('display') === 'none') { 137 | $body.removeClass('with-search'); 138 | $mainContainer.css('height', 'calc(100% - 50px)'); 139 | $mainContainer.css('margin-top', '50px'); 140 | } 141 | $.each($searchInputs, function(index, item){ 142 | var item = $(item); 143 | item.val(''); 144 | }); 145 | }); 146 | } 147 | 148 | function bindSearch() { 149 | // Bind DOM 150 | $searchInputs = $('#book-search-input input'); 151 | 152 | $searchResults = $('.search-results'); 153 | $searchList = $searchResults.find('.search-results-list'); 154 | $searchTitle = $searchResults.find('.search-results-title'); 155 | $searchResultsCount = $searchTitle.find('.search-results-count'); 156 | $searchQuery = $searchTitle.find('.search-query'); 157 | $mainContainer = $('.container-fluid'); 158 | $xsMenu = $('.xs-menu'); 159 | 160 | // Launch query based on input content 161 | function handleUpdate(item) { 162 | var q = item.val(); 163 | 164 | if (q.length == 0) { 165 | closeSearch(); 166 | window.location.href = window.location.href.replace(window.location.search, ''); 167 | } else { 168 | launchSearch(q); 169 | } 170 | } 171 | 172 | // Detect true content change in search input 173 | var propertyChangeUnbound = false; 174 | 175 | $.each($searchInputs, function(index, item){ 176 | var item = $(item); 177 | // HTML5 (IE9 & others) 178 | item.on('input', function(e) { 179 | // Unbind propertychange event for IE9+ 180 | if (!propertyChangeUnbound) { 181 | $(this).unbind('propertychange'); 182 | propertyChangeUnbound = true; 183 | } 184 | 185 | handleUpdate($(this)); 186 | }); 187 | // Workaround for IE < 9 188 | item.on('propertychange', function(e) { 189 | if (e.originalEvent.propertyName == 'value') { 190 | handleUpdate($(this)); 191 | } 192 | }); 193 | // Push to history on blur 194 | item.on('blur', function(e) { 195 | // Update history state 196 | if (usePushState) { 197 | var uri = updateQueryString('q', $(this).val()); 198 | if ($(this).val() !== '') { 199 | history.pushState({ path: uri }, null, uri); 200 | } 201 | } 202 | }); 203 | }); 204 | } 205 | 206 | function launchSearchFromQueryString() { 207 | var q = getParameterByName('q'); 208 | if (q && q.length > 0) { 209 | // Update search inputs 210 | $.each($searchInputs, function(index, item){ 211 | var item = $(item); 212 | item.val(q) 213 | }); 214 | // Launch search 215 | launchSearch(q); 216 | } 217 | } 218 | 219 | compodoc.addEventListener(compodoc.EVENTS.SEARCH_READY, function(event) { 220 | bindSearch(); 221 | 222 | bindMenuButton(); 223 | 224 | launchSearchFromQueryString(); 225 | }); 226 | 227 | function getParameterByName(name) { 228 | var url = window.location.href; 229 | name = name.replace(/[\[\]]/g, '\\$&'); 230 | var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)', 'i'), 231 | results = regex.exec(url); 232 | if (!results) return null; 233 | if (!results[2]) return ''; 234 | return decodeURIComponent(results[2].replace(/\+/g, ' ')); 235 | } 236 | 237 | function updateQueryString(key, value) { 238 | value = encodeURIComponent(value); 239 | 240 | var url = window.location.href; 241 | var re = new RegExp('([?&])' + key + '=.*?(&|#|$)(.*)', 'gi'), 242 | hash; 243 | 244 | if (re.test(url)) { 245 | if (typeof value !== 'undefined' && value !== null) 246 | return url.replace(re, '$1' + key + '=' + value + '$2$3'); 247 | else { 248 | hash = url.split('#'); 249 | url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, ''); 250 | if (typeof hash[1] !== 'undefined' && hash[1] !== null) 251 | url += '#' + hash[1]; 252 | return url; 253 | } 254 | } 255 | else { 256 | if (typeof value !== 'undefined' && value !== null) { 257 | var separator = url.indexOf('?') !== -1 ? '&' : '?'; 258 | hash = url.split('#'); 259 | url = hash[0] + separator + key + '=' + value; 260 | if (typeof hash[1] !== 'undefined' && hash[1] !== null) 261 | url += '#' + hash[1]; 262 | return url; 263 | } 264 | else 265 | return url; 266 | } 267 | } 268 | })(compodoc); 269 | -------------------------------------------------------------------------------- /documentation/js/sourceCode.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var $tabSource = document.querySelector('#source-tab'), 3 | $tabInfo = document.querySelector('#info-tab'), 4 | $tabReadme = document.querySelector('#readme-tab'), 5 | $tabTemplate = document.querySelector('#templateData-tab'), 6 | $tabTree = document.querySelector('#tree-tab'), 7 | $tabExample = document.querySelector('#example-tab'), 8 | $prismPre = document.querySelector('pre.compodoc-sourcecode'); 9 | if ($tabSource && $prismPre) { 10 | $prismCode = $prismPre.querySelector('code'), 11 | $content = document.querySelector('.content'), 12 | prismLinks = document.querySelectorAll('.link-to-prism') 13 | 14 | for (var i = 0; i < prismLinks.length; i++) { 15 | prismLinks[i].addEventListener('click', linkToPrism, false); 16 | } 17 | 18 | function linkToPrism(event) { 19 | var targetLine = event.target.getAttribute('data-line'); 20 | event.preventDefault(); 21 | 22 | $prismPre.setAttribute('data-line', targetLine); 23 | Prism.highlightElement($prismCode, function() {}); 24 | 25 | $tabSource.click(); 26 | 27 | setTimeout(function() { 28 | var $prismHighlightLine = document.querySelector('.line-highlight'), 29 | top = parseInt(getComputedStyle($prismHighlightLine)['top']); 30 | $content.scrollTop = top; 31 | }, 500); 32 | }; 33 | 34 | window.onhashchange = function(event) { 35 | switch (window.location.hash) { 36 | case '': 37 | case '#info': 38 | $tabInfo.click(); 39 | break; 40 | case '#readme': 41 | $tabReadme.click(); 42 | break; 43 | case '#source': 44 | $tabSource.click(); 45 | break; 46 | case '#template': 47 | $tabTemplate.click(); 48 | break; 49 | case '#dom-tree': 50 | $tabTree.click(); 51 | break; 52 | case '#example': 53 | $tabExample.click(); 54 | break; 55 | } 56 | } 57 | } 58 | }); 59 | -------------------------------------------------------------------------------- /documentation/js/svg-pan-zoom.controls.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | if (document.getElementById('module-graph-svg')) { 3 | panZoom = svgPanZoom(document.getElementById('module-graph-svg').querySelector('svg'), { 4 | zoomEnabled: true, 5 | minZoom: 1, 6 | maxZoom: 5 7 | }); 8 | 9 | document.getElementById('zoom-in').addEventListener('click', function(ev) { 10 | ev.preventDefault(); 11 | panZoom.zoomIn(); 12 | }); 13 | 14 | document.getElementById('zoom-out').addEventListener('click', function(ev) { 15 | ev.preventDefault(); 16 | panZoom.zoomOut(); 17 | }); 18 | 19 | document.getElementById('reset').addEventListener('click', function(ev) { 20 | ev.preventDefault(); 21 | panZoom.resetZoom(); 22 | panZoom.resetPan(); 23 | }); 24 | 25 | var overviewFullscreen = false, 26 | originalOverviewHeight; 27 | 28 | document.getElementById('fullscreen').addEventListener('click', function(ev) { 29 | if (overviewFullscreen) { 30 | document.getElementById('module-graph-svg').style.height = originalOverviewHeight; 31 | overviewFullscreen = false; 32 | if (ev.target) { 33 | ev.target.classList.remove('ion-md-close'); 34 | ev.target.classList.add('ion-ios-resize'); 35 | } 36 | } else { 37 | originalOverviewHeight = document.getElementById('module-graph-svg').style.height; 38 | document.getElementById('module-graph-svg').style.height = '85vh'; 39 | overviewFullscreen = true; 40 | if (ev.target) { 41 | ev.target.classList.remove('ion-ios-resize'); 42 | ev.target.classList.add('ion-md-close'); 43 | } 44 | } 45 | document.getElementById('module-graph-svg').querySelector('svg').style.height = document.getElementById('module-graph-svg').clientHeight; 46 | setTimeout(function() { 47 | panZoom.resize(); 48 | panZoom.fit(); 49 | panZoom.center(); 50 | }, 0) 51 | }); 52 | } 53 | }); 54 | -------------------------------------------------------------------------------- /documentation/js/tabs.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var tabs = document.getElementsByClassName('nav-tabs'), 3 | updateAddress = function(e) { 4 | if(history.pushState && e.target.dataset.link) { 5 | history.pushState(null, null, '#' + e.target.dataset.link); 6 | } 7 | }; 8 | if (tabs.length > 0) { 9 | tabs = tabs[0].querySelectorAll('li'); 10 | for (var i = 0; i < tabs.length; i++) { 11 | tabs[i].addEventListener('click', updateAddress); 12 | var linkTag = tabs[i].querySelector('a'); 13 | if (location.hash !== '') { 14 | var currentHash = location.hash.substr(1); 15 | if (currentHash === linkTag.dataset.link) { 16 | linkTag.click(); 17 | } 18 | } 19 | } 20 | } 21 | }); 22 | -------------------------------------------------------------------------------- /documentation/js/tree.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var tabs = document.getElementsByClassName('nav-tabs')[0], 3 | tabsCollection = tabs.getElementsByTagName('A'), 4 | treeTab; 5 | var len = tabsCollection.length; 6 | for(var i = 0; i < len; i++) { 7 | if (tabsCollection[i].getAttribute('id') === 'tree-tab') { 8 | treeTab = tabsCollection[i]; 9 | } 10 | } 11 | 12 | // short-circuit if no tree tab 13 | if (!treeTab) return; 14 | 15 | var handler = new Tautologistics.NodeHtmlParser.HtmlBuilder(function(error, dom) { 16 | if (error) { 17 | console.log('handler ko'); 18 | } 19 | }), 20 | parser = new Tautologistics.NodeHtmlParser.Parser(handler), 21 | currentLocation = window.location; 22 | parser.parseComplete(COMPONENT_TEMPLATE); 23 | 24 | var newNodes = [], 25 | newEdges = [], 26 | parsedHtml = handler.dom[0], 27 | nodeCount = 0, 28 | nodeLevel = 0; 29 | 30 | newNodes.push({ 31 | _id: 0, 32 | label: parsedHtml.name, 33 | type: parsedHtml.type 34 | }) 35 | //Add id for nodes 36 | var traverseIds = function(o) { 37 | for (i in o) { 38 | if (!!o[i] && typeof(o[i]) == "object") { 39 | if (!o[i].length && o[i].type === 'tag') { 40 | nodeCount += 1; 41 | o[i]._id = nodeCount; 42 | } 43 | traverseIds(o[i]); 44 | } 45 | } 46 | } 47 | parsedHtml._id = 0; 48 | traverseIds(parsedHtml); 49 | 50 | 51 | var DeepIterator = deepIterator.default, 52 | it = DeepIterator(parsedHtml); 53 | for (let { 54 | value, 55 | parent, 56 | parentNode, 57 | key, 58 | type 59 | } of it) { 60 | if (type === 'NonIterableObject' && typeof key !== 'undefined' && value.type === 'tag') { 61 | var newNode = { 62 | id: value._id, 63 | label: value.name, 64 | type: value.type 65 | }; 66 | for(var i = 0; i < COMPONENTS.length; i++) { 67 | if (COMPONENTS[i].selector === value.name) { 68 | newNode.font = { 69 | multi: 'html' 70 | }; 71 | newNode.label = '' + newNode.label + ''; 72 | newNode.color = '#FB7E81'; 73 | newNode.name = COMPONENTS[i].name; 74 | } 75 | } 76 | for(var i = 0; i < DIRECTIVES.length; i++) { 77 | if (value.attributes) { 78 | for(attr in value.attributes) { 79 | if (DIRECTIVES[i].selector.indexOf(attr) !== -1) { 80 | newNode.font = { 81 | multi: 'html' 82 | }; 83 | newNode.label = '' + newNode.label + ''; 84 | newNode.color = '#FF9800'; 85 | newNode.name = DIRECTIVES[i].name; 86 | } 87 | } 88 | } 89 | } 90 | newNodes.push(newNode); 91 | newEdges.push({ 92 | from: parentNode._parent._id, 93 | to: value._id, 94 | arrows: 'to' 95 | }); 96 | } 97 | } 98 | 99 | newNodes.shift(); 100 | 101 | var container = document.getElementById('tree-container'), 102 | data = { 103 | nodes: newNodes, 104 | edges: newEdges 105 | }, 106 | options = { 107 | layout: { 108 | hierarchical: { 109 | sortMethod: 'directed', 110 | enabled: true 111 | } 112 | }, 113 | nodes: { 114 | shape: 'ellipse', 115 | fixed: true 116 | } 117 | }, 118 | 119 | handleClickNode = function(params) { 120 | var clickeNodeId; 121 | if (params.nodes.length > 0) { 122 | clickeNodeId = params.nodes[0]; 123 | for(var i = 0; i < newNodes.length; i++) { 124 | if (newNodes[i].id === clickeNodeId) { 125 | for(var j = 0; j < COMPONENTS.length; j++) { 126 | if (COMPONENTS[j].name === newNodes[i].name) { 127 | document.location.href = currentLocation.origin + currentLocation.pathname.replace(ACTUAL_COMPONENT.name, newNodes[i].name); 128 | } 129 | } 130 | } 131 | } 132 | } 133 | }, 134 | 135 | loadTree = function () { 136 | setTimeout(function() { 137 | container.style.height = document.getElementsByClassName('content')[0].offsetHeight - 140 + 'px'; 138 | var network = new vis.Network(container, data, options); 139 | network.on('click', handleClickNode); 140 | }, 200); // Fade is 0.150 141 | }; 142 | 143 | loadTree(); 144 | treeTab.addEventListener('click', function() { 145 | loadTree(); 146 | }); 147 | }); 148 | -------------------------------------------------------------------------------- /documentation/miscellaneous/variables.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
          26 |
          27 | 30 | 31 |
          32 |
          33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 53 | 54 |
          55 |

          Index

          56 | 57 | 58 | 59 | 75 | 76 | 77 |
          60 | 74 |
          78 |
          79 | 80 |

          src/test.ts

          81 |
          82 |

          83 | 84 | 85 | 92 | 93 | 94 | 97 | 98 | 99 | 100 | 101 |
          86 | 87 | 88 | context 89 | 90 | 91 |
          95 | Default value : require.context('./', true, /\.spec\.ts$/) 96 |
          102 | 103 | 104 | 105 | 112 | 113 | 114 | 118 | 119 | 120 | 121 | 122 |
          106 | 107 | 108 | require 109 | 110 | 111 |
          115 | Type : literal type 116 | 117 |
          123 |
          124 |

          src/environments/environment.prod.ts

          125 |
          126 |

          127 | 128 | 129 | 136 | 137 | 138 | 142 | 143 | 144 | 149 | 150 | 151 | 152 | 153 |
          130 | 131 | 132 | environment 133 | 134 | 135 |
          139 | Type : object 140 | 141 |
          145 | Default value : { 146 | production: true 147 | } 148 |
          154 |
          155 |

          src/environments/environment.ts

          156 |
          157 |

          158 | 159 | 160 | 167 | 168 | 169 | 173 | 174 | 175 | 180 | 181 | 182 | 183 | 184 |
          161 | 162 | 163 | environment 164 | 165 | 166 |
          170 | Type : object 171 | 172 |
          176 | Default value : { 177 | production: false 178 | } 179 |
          185 |
          186 | 187 | 188 | 189 |
          190 |
          191 |

          result-matching ""

          192 |
            193 |
            194 |
            195 |

            No results matching ""

            196 |
            197 |
            198 |
            199 | 200 |
            201 |
            202 | 203 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | -------------------------------------------------------------------------------- /documentation/modules.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
            26 |
            27 | 30 | 31 |
            32 |
            33 | 34 | 35 | 36 | 39 |
            40 |
            41 |
            42 |
            43 |
            44 |

            AppModule

            45 |
            46 |
            47 |

            48 | 49 | Your browser does not support SVG 50 | 51 |

            52 | 55 |
            56 |
            57 |
            58 |
            59 |
            60 |
            61 |

            AppRoutingModule

            62 |
            63 |
            64 |

            65 | No graph available. 66 |

            67 | 70 |
            71 |
            72 |
            73 |
            74 |
            75 |
            76 |

            MaterialModule

            77 |
            78 |
            79 |

            80 | No graph available. 81 |

            82 | 85 |
            86 |
            87 |
            88 |
            89 |
            90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 |
            107 |
            108 |

            result-matching ""

            109 |
              110 |
              111 |
              112 |

              No results matching ""

              113 |
              114 |
              115 |
              116 | 117 |
              118 |
              119 | 120 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /documentation/modules/AppModule/dependencies.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | dependencies 11 | 12 | dependencies 13 | 14 | cluster_AppModule 15 | 16 | 17 | 18 | cluster_AppModule_declarations 19 | 20 | 21 | 22 | cluster_AppModule_imports 23 | 24 | 25 | 26 | cluster_AppModule_bootstrap 27 | 28 | 29 | 30 | 31 | AppComponent 32 | 33 | AppComponent 34 | 35 | 36 | 37 | AppModule 38 | 39 | AppModule 40 | 41 | 42 | 43 | AppComponent->AppModule 44 | 45 | 46 | 47 | 48 | 49 | AppComponent 50 | 51 | AppComponent 52 | 53 | 54 | 55 | AppModule->AppComponent 56 | 57 | 58 | 59 | 60 | 61 | AppRoutingModule 62 | 63 | AppRoutingModule 64 | 65 | 66 | 67 | AppRoutingModule->AppModule 68 | 69 | 70 | 71 | 72 | 73 | MaterialModule 74 | 75 | MaterialModule 76 | 77 | 78 | 79 | MaterialModule->AppModule 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /documentation/modules/AppRoutingModule.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
              26 |
              27 | 30 | 31 |
              32 |
              33 | 34 | 35 | 36 | 40 | 41 | 42 | 50 | 51 |
              52 |
              53 | 54 |

              55 |

              File

              56 |

              57 |

              58 | src/app/app-routing.module.ts 59 |

              60 | 61 | 62 | 63 | 64 | 65 |
              66 |
              67 |
              68 |
              69 | 70 | 71 |
              72 | 73 | 74 |
              75 |
              import { NgModule } from '@angular/core';
               76 | import { RouterModule, Routes } from '@angular/router';
               77 | 
               78 | const routes: Routes = [];
               79 | 
               80 | @NgModule({
               81 |   imports: [RouterModule.forRoot(routes)],
               82 |   exports: [RouterModule]
               83 | })
               84 | export class AppRoutingModule { }
               85 | 
              86 |
              87 |
              88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 |
              104 |
              105 |

              result-matching ""

              106 |
                107 |
                108 |
                109 |

                No results matching ""

                110 |
                111 |
                112 |
                113 | 114 |
                115 |
                116 | 117 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | -------------------------------------------------------------------------------- /documentation/modules/MaterialModule.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
                26 |
                27 | 30 | 31 |
                32 |
                33 | 34 | 35 | 36 | 40 | 41 | 42 | 50 | 51 |
                52 |
                53 | 54 |

                55 |

                File

                56 |

                57 |

                58 | src/app/material/material.module.ts 59 |

                60 | 61 | 62 | 63 | 64 | 65 |
                66 |
                67 |
                68 |
                69 | 70 | 71 |
                72 | 73 | 74 |
                75 |
                import { NgModule } from '@angular/core';
                 76 | import { A11yModule } from '@angular/cdk/a11y';
                 77 | import { ClipboardModule } from '@angular/cdk/clipboard';
                 78 | import { DragDropModule } from '@angular/cdk/drag-drop';
                 79 | import { PortalModule } from '@angular/cdk/portal';
                 80 | import { ScrollingModule } from '@angular/cdk/scrolling';
                 81 | import { CdkStepperModule } from '@angular/cdk/stepper';
                 82 | import { CdkTableModule } from '@angular/cdk/table';
                 83 | import { CdkTreeModule } from '@angular/cdk/tree';
                 84 | import { MatAutocompleteModule } from '@angular/material/autocomplete';
                 85 | import { MatBadgeModule } from '@angular/material/badge';
                 86 | import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
                 87 | import { MatButtonModule } from '@angular/material/button';
                 88 | import { MatButtonToggleModule } from '@angular/material/button-toggle';
                 89 | import { MatCardModule } from '@angular/material/card';
                 90 | import { MatCheckboxModule } from '@angular/material/checkbox';
                 91 | import { MatChipsModule } from '@angular/material/chips';
                 92 | import { MatStepperModule } from '@angular/material/stepper';
                 93 | import { MatDatepickerModule } from '@angular/material/datepicker';
                 94 | import { MatDialogModule } from '@angular/material/dialog';
                 95 | import { MatDividerModule } from '@angular/material/divider';
                 96 | import { MatExpansionModule } from '@angular/material/expansion';
                 97 | import { MatGridListModule } from '@angular/material/grid-list';
                 98 | import { MatIconModule } from '@angular/material/icon';
                 99 | import { MatInputModule } from '@angular/material/input';
                100 | import { MatListModule } from '@angular/material/list';
                101 | import { MatMenuModule } from '@angular/material/menu';
                102 | import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
                103 | import { MatPaginatorModule } from '@angular/material/paginator';
                104 | import { MatProgressBarModule } from '@angular/material/progress-bar';
                105 | import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
                106 | import { MatRadioModule } from '@angular/material/radio';
                107 | import { MatSelectModule } from '@angular/material/select';
                108 | import { MatSidenavModule } from '@angular/material/sidenav';
                109 | import { MatSliderModule } from '@angular/material/slider';
                110 | import { MatSlideToggleModule } from '@angular/material/slide-toggle';
                111 | import { MatSnackBarModule } from '@angular/material/snack-bar';
                112 | import { MatSortModule } from '@angular/material/sort';
                113 | import { MatTableModule } from '@angular/material/table';
                114 | import { MatTabsModule } from '@angular/material/tabs';
                115 | import { MatToolbarModule } from '@angular/material/toolbar';
                116 | import { MatTooltipModule } from '@angular/material/tooltip';
                117 | import { MatTreeModule } from '@angular/material/tree';
                118 | 
                119 | @NgModule({
                120 |   exports: [
                121 |     A11yModule,
                122 |     ClipboardModule,
                123 |     CdkStepperModule,
                124 |     CdkTableModule,
                125 |     CdkTreeModule,
                126 |     DragDropModule,
                127 |     MatAutocompleteModule,
                128 |     MatBadgeModule,
                129 |     MatBottomSheetModule,
                130 |     MatButtonModule,
                131 |     MatButtonToggleModule,
                132 |     MatCardModule,
                133 |     MatCheckboxModule,
                134 |     MatChipsModule,
                135 |     MatStepperModule,
                136 |     MatDatepickerModule,
                137 |     MatDialogModule,
                138 |     MatDividerModule,
                139 |     MatExpansionModule,
                140 |     MatGridListModule,
                141 |     MatIconModule,
                142 |     MatInputModule,
                143 |     MatListModule,
                144 |     MatMenuModule,
                145 |     MatNativeDateModule,
                146 |     MatPaginatorModule,
                147 |     MatProgressBarModule,
                148 |     MatProgressSpinnerModule,
                149 |     MatRadioModule,
                150 |     MatRippleModule,
                151 |     MatSelectModule,
                152 |     MatSidenavModule,
                153 |     MatSliderModule,
                154 |     MatSlideToggleModule,
                155 |     MatSnackBarModule,
                156 |     MatSortModule,
                157 |     MatTableModule,
                158 |     MatTabsModule,
                159 |     MatToolbarModule,
                160 |     MatTooltipModule,
                161 |     MatTreeModule,
                162 |     PortalModule,
                163 |     ScrollingModule,
                164 |   ]
                165 | })
                166 | export class MaterialModule { }
                167 | 
                168 |
                169 |
                170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 |
                186 |
                187 |

                result-matching ""

                188 |
                  189 |
                  190 |
                  191 |

                  No results matching ""

                  192 |
                  193 |
                  194 |
                  195 | 196 |
                  197 |
                  198 | 199 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | -------------------------------------------------------------------------------- /documentation/overview.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
                  26 |
                  27 | 30 | 31 |
                  32 |
                  33 | 34 | 35 | 38 | 39 |
                  40 |
                  41 | 42 | 44 | 46 | 47 | 49 | 50 | dependencies 51 | 52 | dependencies 53 | 54 | cluster_AppModule 55 | 56 | 57 | 58 | cluster_AppModule_declarations 59 | 60 | 61 | 62 | cluster_AppModule_imports 63 | 64 | 65 | 66 | cluster_AppModule_bootstrap 67 | 68 | 69 | 70 | 71 | AppComponent 72 | 73 | AppComponent 74 | 75 | 76 | 77 | AppModule 78 | 79 | AppModule 80 | 81 | 82 | 83 | AppComponent->AppModule 84 | 85 | 86 | 87 | 88 | 89 | AppComponent 90 | 91 | AppComponent 92 | 93 | 94 | 95 | AppModule->AppComponent 96 | 97 | 98 | 99 | 100 | 101 | AppRoutingModule 102 | 103 | AppRoutingModule 104 | 105 | 106 | 107 | AppRoutingModule->AppModule 108 | 109 | 110 | 111 | 112 | 113 | MaterialModule 114 | 115 | MaterialModule 116 | 117 | 118 | 119 | MaterialModule->AppModule 120 | 121 | 122 | 123 | 124 | 125 | 126 |
                  127 | 128 |
                  129 | 130 | 131 | 132 |
                  133 |
                  134 | 135 |
                  136 |
                  137 |
                  138 |
                  139 |
                  140 |

                  141 |

                  142 | 3 Modules 143 |

                  144 |
                  145 |
                  146 |
                  147 |
                  148 |
                  149 |
                  150 |

                  151 |

                  1 Component

                  152 |
                  153 |
                  154 |
                  155 |
                  156 |
                  157 |
                  158 |

                  159 |

                  160 | 0 161 |

                  162 |
                  163 |
                  164 |
                  165 |
                  166 |
                  167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 |
                  186 |
                  187 |

                  result-matching ""

                  188 |
                    189 |
                    190 |
                    191 |

                    No results matching ""

                    192 |
                    193 |
                    194 |
                    195 | 196 |
                    197 |
                    198 | 199 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | -------------------------------------------------------------------------------- /documentation/routes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | angular-material-tailwind documentation 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 24 | 25 |
                    26 |
                    27 | 30 | 31 |
                    32 |
                    33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 49 | 50 |
                    51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
                    63 |
                    64 |

                    result-matching ""

                    65 |
                      66 |
                      67 |
                      68 |

                      No results matching ""

                      69 |
                      70 |
                      71 |
                      72 | 73 |
                      74 |
                      75 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /documentation/styles/bootstrap-card.css: -------------------------------------------------------------------------------- 1 | .card { 2 | position: relative; 3 | display: block; 4 | margin-bottom: 20px; 5 | background-color: #fff; 6 | border: 1px solid #ddd; 7 | border-radius: 4px; 8 | } 9 | 10 | .card-block { 11 | padding: 15px; 12 | } 13 | .card-block:before, .card-block:after { 14 | content: " "; 15 | display: table; 16 | } 17 | .card-block:after { 18 | clear: both; 19 | } 20 | 21 | .card-title { 22 | margin: 5px; 23 | margin-bottom: 2px; 24 | text-align: center; 25 | } 26 | 27 | .card-subtitle { 28 | margin-top: -10px; 29 | margin-bottom: 0; 30 | } 31 | 32 | .card-text:last-child { 33 | margin-bottom: 0; 34 | margin-top: 10px; 35 | } 36 | 37 | .card-link:hover { 38 | text-decoration: none; 39 | } 40 | .card-link + .card-link { 41 | margin-left: 15px; 42 | } 43 | 44 | .card > .list-group:first-child .list-group-item:first-child { 45 | border-top-right-radius: 4px; 46 | border-top-left-radius: 4px; 47 | } 48 | .card > .list-group:last-child .list-group-item:last-child { 49 | border-bottom-right-radius: 4px; 50 | border-bottom-left-radius: 4px; 51 | } 52 | 53 | .card-header { 54 | padding: 10px 15px; 55 | background-color: #f5f5f5; 56 | border-bottom: 1px solid #ddd; 57 | } 58 | .card-header:before, .card-header:after { 59 | content: " "; 60 | display: table; 61 | } 62 | .card-header:after { 63 | clear: both; 64 | } 65 | .card-header:first-child { 66 | border-radius: 4px 4px 0 0; 67 | } 68 | 69 | .card-footer { 70 | padding: 10px 15px; 71 | background-color: #f5f5f5; 72 | border-top: 1px solid #ddd; 73 | } 74 | .card-footer:before, .card-footer:after { 75 | content: " "; 76 | display: table; 77 | } 78 | .card-footer:after { 79 | clear: both; 80 | } 81 | .card-footer:last-child { 82 | border-radius: 0 0 4px 4px; 83 | } 84 | 85 | .card-header-tabs { 86 | margin-right: -5px; 87 | margin-bottom: -10px; 88 | margin-left: -5px; 89 | border-bottom: 0; 90 | } 91 | 92 | .card-header-pills { 93 | margin-right: -5px; 94 | margin-left: -5px; 95 | } 96 | 97 | .card-primary { 98 | background-color: #337ab7; 99 | border-color: #337ab7; 100 | } 101 | .card-primary .card-header, 102 | .card-primary .card-footer { 103 | background-color: transparent; 104 | } 105 | 106 | .card-success { 107 | background-color: #5cb85c; 108 | border-color: #5cb85c; 109 | } 110 | .card-success .card-header, 111 | .card-success .card-footer { 112 | background-color: transparent; 113 | } 114 | 115 | .card-info { 116 | background-color: #5bc0de; 117 | border-color: #5bc0de; 118 | } 119 | .card-info .card-header, 120 | .card-info .card-footer { 121 | background-color: transparent; 122 | } 123 | 124 | .card-warning { 125 | background-color: #f0ad4e; 126 | border-color: #f0ad4e; 127 | } 128 | .card-warning .card-header, 129 | .card-warning .card-footer { 130 | background-color: transparent; 131 | } 132 | 133 | .card-danger { 134 | background-color: #d9534f; 135 | border-color: #d9534f; 136 | } 137 | .card-danger .card-header, 138 | .card-danger .card-footer { 139 | background-color: transparent; 140 | } 141 | 142 | .card-outline-primary { 143 | background-color: transparent; 144 | border-color: #337ab7; 145 | } 146 | 147 | .card-outline-secondary { 148 | background-color: transparent; 149 | border-color: #ccc; 150 | } 151 | 152 | .card-outline-info { 153 | background-color: transparent; 154 | border-color: #5bc0de; 155 | } 156 | 157 | .card-outline-success { 158 | background-color: transparent; 159 | border-color: #5cb85c; 160 | } 161 | 162 | .card-outline-warning { 163 | background-color: transparent; 164 | border-color: #f0ad4e; 165 | } 166 | 167 | .card-outline-danger { 168 | background-color: transparent; 169 | border-color: #d9534f; 170 | } 171 | 172 | .card-inverse .card-header, 173 | .card-inverse .card-footer { 174 | border-color: rgba(255, 255, 255, 0.2); 175 | } 176 | .card-inverse .card-header, 177 | .card-inverse .card-footer, 178 | .card-inverse .card-title, 179 | .card-inverse .card-blockquote { 180 | color: #fff; 181 | } 182 | .card-inverse .card-link, 183 | .card-inverse .card-text, 184 | .card-inverse .card-subtitle, 185 | .card-inverse .card-blockquote .blockquote-footer { 186 | color: rgba(255, 255, 255, 0.65); 187 | } 188 | .card-inverse .card-link:hover, .card-inverse .card-link:focus { 189 | color: #fff; 190 | } 191 | 192 | .card-blockquote { 193 | padding: 0; 194 | margin-bottom: 0; 195 | border-left: 0; 196 | } 197 | 198 | .card-img { 199 | border-radius: .25em; 200 | } 201 | 202 | .card-img-overlay { 203 | position: absolute; 204 | top: 0; 205 | right: 0; 206 | bottom: 0; 207 | left: 0; 208 | padding: 15px; 209 | } 210 | 211 | .card-img-top { 212 | border-top-right-radius: 4px; 213 | border-top-left-radius: 4px; 214 | } 215 | 216 | .card-img-bottom { 217 | border-bottom-right-radius: 4px; 218 | border-bottom-left-radius: 4px; 219 | } 220 | -------------------------------------------------------------------------------- /documentation/styles/dark.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #212121; 3 | color: #fafafa; 4 | } 5 | 6 | code { 7 | color: #e09393; 8 | } 9 | 10 | a, 11 | .menu ul.list li a.active { 12 | color: #7fc9ff; 13 | } 14 | 15 | .menu { 16 | background: #212121; 17 | border-right: 1px solid #444; 18 | } 19 | 20 | .menu ul.list li a { 21 | color: #fafafa; 22 | } 23 | 24 | .menu ul.list li.divider { 25 | background: #444; 26 | } 27 | 28 | .xs-menu ul.list li:nth-child(2) { 29 | margin: 0; 30 | background: none; 31 | } 32 | 33 | .menu ul.list li:nth-child(2) { 34 | margin: 0; 35 | background: none; 36 | } 37 | 38 | #book-search-input { 39 | background: #212121; 40 | border-top: 1px solid #444; 41 | border-bottom: 1px solid #444; 42 | color: #fafafa; 43 | } 44 | 45 | .table-bordered { 46 | border: 1px solid #444; 47 | } 48 | 49 | .table-bordered > tbody > tr > td, 50 | .table-bordered > tbody > tr > th, 51 | .table-bordered > tfoot > tr > td, 52 | .table-bordered > tfoot > tr > th, 53 | .table-bordered > thead > tr > td, 54 | .table-bordered > thead > tr > th { 55 | border: 1px solid #444; 56 | } 57 | 58 | .coverage a, 59 | .coverage-count { 60 | color: #fafafa; 61 | } 62 | 63 | .coverage-header { 64 | color: black; 65 | } 66 | 67 | .routes svg text, 68 | .routes svg a { 69 | fill: white; 70 | } 71 | .routes svg rect { 72 | fill: #212121 !important; 73 | } 74 | 75 | .navbar-default, 76 | .btn-default { 77 | background-color: black; 78 | border-color: #444; 79 | color: #fafafa; 80 | } 81 | 82 | .navbar-default .navbar-brand { 83 | color: #fafafa; 84 | } 85 | 86 | .overview .card, 87 | .modules .card { 88 | background: #171717; 89 | color: #fafafa; 90 | border: 1px solid #444; 91 | } 92 | .overview .card a { 93 | color: #fafafa; 94 | } 95 | 96 | .modules .card-header { 97 | background: none; 98 | border-bottom: 1px solid #444; 99 | } 100 | 101 | .module .list-group-item { 102 | background: none; 103 | border: 1px solid #444; 104 | } 105 | 106 | .container-fluid.module h3 a { 107 | color: #337ab7; 108 | } 109 | 110 | table.params thead { 111 | background: #484848; 112 | color: #fafafa; 113 | } 114 | -------------------------------------------------------------------------------- /documentation/styles/laravel.css: -------------------------------------------------------------------------------- 1 | .nav-tabs > li > a { 2 | text-decoration: none; 3 | } 4 | 5 | .navbar-default .navbar-brand { 6 | color: #f4645f; 7 | text-decoration: none; 8 | font-size: 16px; 9 | } 10 | 11 | .menu ul.list li a[data-type='chapter-link'], 12 | .menu ul.list li.chapter .simple { 13 | color: #525252; 14 | border-bottom: 1px dashed rgba(0, 0, 0, 0.1); 15 | } 16 | 17 | .content h1, 18 | .content h2, 19 | .content h3, 20 | .content h4, 21 | .content h5 { 22 | color: #292e31; 23 | font-weight: normal; 24 | } 25 | 26 | .content { 27 | color: #4c555a; 28 | } 29 | 30 | a { 31 | color: #f4645f; 32 | text-decoration: underline; 33 | } 34 | a:hover { 35 | color: #f1362f; 36 | } 37 | 38 | .menu ul.list li:nth-child(2) { 39 | margin-top: 0; 40 | } 41 | 42 | .menu ul.list li.title a { 43 | color: #f4645f; 44 | text-decoration: none; 45 | font-size: 16px; 46 | } 47 | 48 | .menu ul.list li a { 49 | color: #f4645f; 50 | text-decoration: none; 51 | } 52 | .menu ul.list li a.active { 53 | color: #f4645f; 54 | font-weight: bold; 55 | } 56 | 57 | code { 58 | box-sizing: border-box; 59 | display: inline-block; 60 | padding: 0 5px; 61 | background: #f0f2f1; 62 | border-radius: 3px; 63 | color: #b93d6a; 64 | font-size: 13px; 65 | line-height: 20px; 66 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.125); 67 | } 68 | 69 | pre { 70 | margin: 0; 71 | padding: 12px 12px; 72 | background: rgba(238, 238, 238, 0.35); 73 | border-radius: 3px; 74 | font-size: 13px; 75 | line-height: 1.5em; 76 | font-weight: 500; 77 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.125); 78 | } 79 | 80 | @media (prefers-color-scheme: dark) { 81 | body { 82 | color: #fafafa; 83 | } 84 | .content h1, 85 | .content h2, 86 | .content h3, 87 | .content h4, 88 | .content h5 { 89 | color: #fafafa; 90 | } 91 | 92 | code { 93 | background: none; 94 | } 95 | 96 | .content { 97 | color: #fafafa; 98 | } 99 | 100 | .menu ul.list li a[data-type='chapter-link'], 101 | .menu ul.list li.chapter .simple { 102 | color: #fafafa; 103 | } 104 | 105 | .menu ul.list li.title a { 106 | color: #fafafa; 107 | } 108 | 109 | .menu ul.list li a { 110 | color: #fafafa; 111 | } 112 | .menu ul.list li a.active { 113 | color: #7fc9ff; 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /documentation/styles/material.css: -------------------------------------------------------------------------------- 1 | .menu { 2 | background: none; 3 | } 4 | 5 | a:hover { 6 | text-decoration: none; 7 | } 8 | 9 | /** LINK **/ 10 | 11 | .menu ul.list li a { 12 | text-decoration: none; 13 | } 14 | 15 | .menu ul.list li a:hover, 16 | .menu ul.list li.chapter .simple:hover { 17 | background-color: #f8f9fa; 18 | text-decoration: none; 19 | } 20 | 21 | #book-search-input { 22 | margin-bottom: 0; 23 | } 24 | 25 | .menu ul.list li.divider { 26 | margin-top: 0; 27 | background: #e9ecef; 28 | } 29 | 30 | .menu .title:hover { 31 | background-color: #f8f9fa; 32 | } 33 | 34 | /** CARD **/ 35 | 36 | .card { 37 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 38 | 0 1px 5px 0 rgba(0, 0, 0, 0.12); 39 | border-radius: 0.125rem; 40 | border: 0; 41 | margin-top: 1px; 42 | } 43 | 44 | .card-header { 45 | background: none; 46 | } 47 | 48 | /** BUTTON **/ 49 | 50 | .btn { 51 | border-radius: 0.125rem; 52 | } 53 | 54 | /** NAV BAR **/ 55 | 56 | .nav { 57 | border: 0; 58 | } 59 | .nav-tabs > li > a { 60 | border: 0; 61 | border-bottom: 0.214rem solid transparent; 62 | color: rgba(0, 0, 0, 0.54); 63 | margin-right: 0; 64 | } 65 | .nav-tabs > li.active > a, 66 | .nav-tabs > li.active > a:focus, 67 | .nav-tabs > li.active > a:hover { 68 | color: rgba(0, 0, 0, 0.87); 69 | border-top: 0; 70 | border-left: 0; 71 | border-right: 0; 72 | border-bottom: 0.214rem solid transparent; 73 | border-color: #008cff; 74 | font-weight: bold; 75 | } 76 | .nav > li > a:focus, 77 | .nav > li > a:hover { 78 | background: none; 79 | } 80 | 81 | /** LIST **/ 82 | 83 | .list-group-item:first-child { 84 | border-top-left-radius: 0.125rem; 85 | border-top-right-radius: 0.125rem; 86 | } 87 | .list-group-item:last-child { 88 | border-bottom-left-radius: 0.125rem; 89 | border-bottom-right-radius: 0.125rem; 90 | } 91 | 92 | /** MISC **/ 93 | 94 | .modifier { 95 | border-radius: 0.125rem; 96 | } 97 | 98 | pre[class*='language-'] { 99 | border-radius: 0.125rem; 100 | } 101 | 102 | /** TABLE **/ 103 | 104 | .table-hover > tbody > tr:hover { 105 | background: rgba(0, 0, 0, 0.075); 106 | } 107 | 108 | table.params thead { 109 | background: none; 110 | } 111 | table.params thead td { 112 | color: rgba(0, 0, 0, 0.54); 113 | font-weight: bold; 114 | } 115 | 116 | @media (prefers-color-scheme: dark) { 117 | .menu .title:hover { 118 | background-color: #2d2d2d; 119 | } 120 | .menu ul.list li a:hover, 121 | .menu ul.list li.chapter .simple:hover { 122 | background-color: #2d2d2d; 123 | } 124 | .nav-tabs > li > a { 125 | color: #fafafa; 126 | } 127 | table.params thead { 128 | background: #484848; 129 | } 130 | table.params thead td { 131 | color: #fafafa; 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /documentation/styles/original.css: -------------------------------------------------------------------------------- 1 | .navbar-default .navbar-brand, 2 | .menu ul.list li.title { 3 | font-weight: bold; 4 | color: #3c3c3c; 5 | padding-bottom: 5px; 6 | } 7 | 8 | .menu ul.list li a[data-type='chapter-link'], 9 | .menu ul.list li.chapter .simple { 10 | font-weight: bold; 11 | font-size: 14px; 12 | } 13 | 14 | .menu ul.list li a[href='./routes.html'] { 15 | border-bottom: none; 16 | } 17 | 18 | .menu ul.list > li:nth-child(2) { 19 | display: none; 20 | } 21 | 22 | .menu ul.list li.chapter ul.links { 23 | background: #fff; 24 | padding-left: 0; 25 | } 26 | 27 | .menu ul.list li.chapter ul.links li { 28 | border-bottom: 1px solid #ddd; 29 | padding-left: 20px; 30 | } 31 | 32 | .menu ul.list li.chapter ul.links li:last-child { 33 | border-bottom: none; 34 | } 35 | 36 | .menu ul.list li a.active { 37 | color: #337ab7; 38 | font-weight: bold; 39 | } 40 | 41 | #book-search-input { 42 | margin-bottom: 0; 43 | border-bottom: none; 44 | } 45 | .menu ul.list li.divider { 46 | margin: 0; 47 | } 48 | 49 | @media (prefers-color-scheme: dark) { 50 | .menu ul.list li.chapter ul.links { 51 | background: none; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /documentation/styles/postmark.css: -------------------------------------------------------------------------------- 1 | .navbar-default { 2 | background: #ffde00; 3 | border: none; 4 | } 5 | 6 | .navbar-default .navbar-brand { 7 | color: #333; 8 | font-weight: bold; 9 | } 10 | 11 | .menu { 12 | background: #333; 13 | color: #fcfcfc; 14 | } 15 | 16 | .menu ul.list li a { 17 | color: #333; 18 | } 19 | 20 | .menu ul.list li.title { 21 | background: #ffde00; 22 | color: #333; 23 | padding-bottom: 5px; 24 | } 25 | 26 | .menu ul.list li:nth-child(2) { 27 | margin-top: 0; 28 | } 29 | 30 | .menu ul.list li.chapter a, 31 | .menu ul.list li.chapter .simple { 32 | color: white; 33 | text-decoration: none; 34 | } 35 | 36 | .menu ul.list li.chapter ul.links a { 37 | color: #949494; 38 | text-transform: none; 39 | padding-left: 35px; 40 | } 41 | 42 | .menu ul.list li.chapter ul.links a:hover, 43 | .menu ul.list li.chapter ul.links a.active { 44 | color: #ffde00; 45 | } 46 | 47 | .menu ul.list li.chapter ul.links { 48 | padding-left: 0; 49 | } 50 | 51 | .menu ul.list li.divider { 52 | background: rgba(255, 255, 255, 0.07); 53 | } 54 | 55 | #book-search-input input, 56 | #book-search-input input:focus, 57 | #book-search-input input:hover { 58 | color: #949494; 59 | } 60 | 61 | .copyright { 62 | color: #b3b3b3; 63 | background: #272525; 64 | } 65 | 66 | .content { 67 | background: #fcfcfc; 68 | } 69 | 70 | .content a { 71 | color: #007dcc; 72 | } 73 | 74 | .content a:visited { 75 | color: #0165a5; 76 | } 77 | 78 | .menu ul.list li:nth-last-child(2) { 79 | background: none; 80 | } 81 | 82 | .list-group-item:first-child, 83 | .list-group-item:last-child { 84 | border-radius: 0; 85 | } 86 | 87 | .menu ul.list li.title a { 88 | text-decoration: none; 89 | font-weight: bold; 90 | } 91 | 92 | .menu ul.list li.title a:hover { 93 | background: rgba(255, 255, 255, 0.1); 94 | } 95 | 96 | .breadcrumb > li + li:before { 97 | content: '»\00a0'; 98 | } 99 | 100 | .breadcrumb { 101 | padding-bottom: 15px; 102 | border-bottom: 1px solid #e1e4e5; 103 | } 104 | 105 | code { 106 | white-space: nowrap; 107 | max-width: 100%; 108 | background: #f5f5f5; 109 | padding: 2px 5px; 110 | color: #666666; 111 | overflow-x: auto; 112 | border-radius: 0; 113 | } 114 | 115 | pre { 116 | white-space: pre; 117 | margin: 0; 118 | padding: 12px 12px; 119 | font-size: 12px; 120 | line-height: 1.5; 121 | display: block; 122 | overflow: auto; 123 | color: #404040; 124 | background: #f3f3f3; 125 | } 126 | 127 | pre code.hljs { 128 | border: none; 129 | background: inherit; 130 | } 131 | 132 | /* 133 | Atom One Light by Daniel Gamage 134 | Original One Light Syntax theme from https://github.com/atom/one-light-syntax 135 | base: #fafafa 136 | mono-1: #383a42 137 | mono-2: #686b77 138 | mono-3: #a0a1a7 139 | hue-1: #0184bb 140 | hue-2: #4078f2 141 | hue-3: #a626a4 142 | hue-4: #50a14f 143 | hue-5: #e45649 144 | hue-5-2: #c91243 145 | hue-6: #986801 146 | hue-6-2: #c18401 147 | */ 148 | 149 | .hljs { 150 | display: block; 151 | overflow-x: auto; 152 | padding: 0.5em; 153 | color: #383a42; 154 | background: #fafafa; 155 | } 156 | 157 | .hljs-comment, 158 | .hljs-quote { 159 | color: #a0a1a7; 160 | font-style: italic; 161 | } 162 | 163 | .hljs-doctag, 164 | .hljs-keyword, 165 | .hljs-formula { 166 | color: #a626a4; 167 | } 168 | 169 | .hljs-section, 170 | .hljs-name, 171 | .hljs-selector-tag, 172 | .hljs-deletion, 173 | .hljs-subst { 174 | color: #e45649; 175 | } 176 | 177 | .hljs-literal { 178 | color: #0184bb; 179 | } 180 | 181 | .hljs-string, 182 | .hljs-regexp, 183 | .hljs-addition, 184 | .hljs-attribute, 185 | .hljs-meta-string { 186 | color: #50a14f; 187 | } 188 | 189 | .hljs-built_in, 190 | .hljs-class .hljs-title { 191 | color: #c18401; 192 | } 193 | 194 | .hljs-attr, 195 | .hljs-variable, 196 | .hljs-template-variable, 197 | .hljs-type, 198 | .hljs-selector-class, 199 | .hljs-selector-attr, 200 | .hljs-selector-pseudo, 201 | .hljs-number { 202 | color: #986801; 203 | } 204 | 205 | .hljs-symbol, 206 | .hljs-bullet, 207 | .hljs-link, 208 | .hljs-meta, 209 | .hljs-selector-id, 210 | .hljs-title { 211 | color: #4078f2; 212 | } 213 | 214 | .hljs-emphasis { 215 | font-style: italic; 216 | } 217 | 218 | .hljs-strong { 219 | font-weight: bold; 220 | } 221 | 222 | .hljs-link { 223 | text-decoration: underline; 224 | } 225 | 226 | @media (prefers-color-scheme: dark) { 227 | .content { 228 | background: none; 229 | } 230 | code { 231 | background: none; 232 | color: #e09393; 233 | } 234 | .menu ul.list li.chapter a.active { 235 | color: #ffde00; 236 | } 237 | .menu { 238 | background: #272525; 239 | } 240 | } 241 | -------------------------------------------------------------------------------- /documentation/styles/prism.css: -------------------------------------------------------------------------------- 1 | /* PrismJS 1.24.0 2 | https://prismjs.com/download.html?#themes=prism-okaidia&languages=markup+css+clike+javascript+apacheconf+aspnet+bash+c+csharp+cpp+coffeescript+dart+docker+elm+git+go+graphql+handlebars+haskell+http+ignore+java+json+kotlin+less+markdown+markup-templating+nginx+php+powershell+ruby+rust+sass+scss+sql+swift+typescript+wasm+yaml&plugins=line-highlight+line-numbers+toolbar+copy-to-clipboard */ 3 | /** 4 | * okaidia theme for JavaScript, CSS and HTML 5 | * Loosely based on Monokai textmate theme by http://www.monokai.nl/ 6 | * @author ocodia 7 | */ 8 | 9 | code[class*='language-'], 10 | pre[class*='language-'] { 11 | color: #f8f8f2; 12 | background: none; 13 | text-shadow: 0 1px rgba(0, 0, 0, 0.3); 14 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 15 | font-size: 1em; 16 | text-align: left; 17 | white-space: pre; 18 | word-spacing: normal; 19 | word-break: normal; 20 | word-wrap: normal; 21 | line-height: 1.5; 22 | 23 | -moz-tab-size: 4; 24 | -o-tab-size: 4; 25 | tab-size: 4; 26 | 27 | -webkit-hyphens: none; 28 | -moz-hyphens: none; 29 | -ms-hyphens: none; 30 | hyphens: none; 31 | } 32 | 33 | /* Code blocks */ 34 | pre[class*='language-'] { 35 | padding: 1em; 36 | margin: 0.5em 0; 37 | overflow: auto; 38 | border-radius: 0.3em; 39 | } 40 | 41 | :not(pre) > code[class*='language-'], 42 | pre[class*='language-'] { 43 | background: #272822; 44 | } 45 | 46 | /* Inline code */ 47 | :not(pre) > code[class*='language-'] { 48 | padding: 0.1em; 49 | border-radius: 0.3em; 50 | white-space: normal; 51 | } 52 | 53 | .token.comment, 54 | .token.prolog, 55 | .token.doctype, 56 | .token.cdata { 57 | color: #8292a2; 58 | } 59 | 60 | .token.punctuation { 61 | color: #f8f8f2; 62 | } 63 | 64 | .token.namespace { 65 | opacity: 0.7; 66 | } 67 | 68 | .token.property, 69 | .token.tag, 70 | .token.constant, 71 | .token.symbol, 72 | .token.deleted { 73 | color: #f92672; 74 | } 75 | 76 | .token.boolean, 77 | .token.number { 78 | color: #ae81ff; 79 | } 80 | 81 | .token.selector, 82 | .token.attr-name, 83 | .token.string, 84 | .token.char, 85 | .token.builtin, 86 | .token.inserted { 87 | color: #a6e22e; 88 | } 89 | 90 | .token.operator, 91 | .token.entity, 92 | .token.url, 93 | .language-css .token.string, 94 | .style .token.string, 95 | .token.variable { 96 | color: #f8f8f2; 97 | } 98 | 99 | .token.atrule, 100 | .token.attr-value, 101 | .token.function, 102 | .token.class-name { 103 | color: #e6db74; 104 | } 105 | 106 | .token.keyword { 107 | color: #66d9ef; 108 | } 109 | 110 | .token.regex, 111 | .token.important { 112 | color: #fd971f; 113 | } 114 | 115 | .token.important, 116 | .token.bold { 117 | font-weight: bold; 118 | } 119 | .token.italic { 120 | font-style: italic; 121 | } 122 | 123 | .token.entity { 124 | cursor: help; 125 | } 126 | 127 | pre[data-line] { 128 | position: relative; 129 | padding: 1em 0 1em 3em; 130 | } 131 | 132 | .line-highlight { 133 | position: absolute; 134 | left: 0; 135 | right: 0; 136 | padding: inherit 0; 137 | margin-top: 1em; /* Same as .prism’s padding-top */ 138 | 139 | background: hsla(24, 20%, 50%, 0.08); 140 | background: linear-gradient(to right, hsla(24, 20%, 50%, 0.1) 70%, hsla(24, 20%, 50%, 0)); 141 | 142 | pointer-events: none; 143 | 144 | line-height: inherit; 145 | white-space: pre; 146 | } 147 | 148 | @media print { 149 | .line-highlight { 150 | /* 151 | * This will prevent browsers from replacing the background color with white. 152 | * It's necessary because the element is layered on top of the displayed code. 153 | */ 154 | -webkit-print-color-adjust: exact; 155 | color-adjust: exact; 156 | } 157 | } 158 | 159 | .line-highlight:before, 160 | .line-highlight[data-end]:after { 161 | content: attr(data-start); 162 | position: absolute; 163 | top: 0.4em; 164 | left: 0.6em; 165 | min-width: 1em; 166 | padding: 0 0.5em; 167 | background-color: hsla(24, 20%, 50%, 0.4); 168 | color: hsl(24, 20%, 95%); 169 | font: bold 65%/1.5 sans-serif; 170 | text-align: center; 171 | vertical-align: 0.3em; 172 | border-radius: 999px; 173 | text-shadow: none; 174 | box-shadow: 0 1px white; 175 | } 176 | 177 | .line-highlight[data-end]:after { 178 | content: attr(data-end); 179 | top: auto; 180 | bottom: 0.4em; 181 | } 182 | 183 | .line-numbers .line-highlight:before, 184 | .line-numbers .line-highlight:after { 185 | content: none; 186 | } 187 | 188 | pre[id].linkable-line-numbers span.line-numbers-rows { 189 | pointer-events: all; 190 | } 191 | pre[id].linkable-line-numbers span.line-numbers-rows > span:before { 192 | cursor: pointer; 193 | } 194 | pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { 195 | background-color: rgba(128, 128, 128, 0.2); 196 | } 197 | 198 | pre[class*='language-'].line-numbers { 199 | position: relative; 200 | padding-left: 3.8em; 201 | counter-reset: linenumber; 202 | } 203 | 204 | pre[class*='language-'].line-numbers > code { 205 | position: relative; 206 | white-space: inherit; 207 | } 208 | 209 | .line-numbers .line-numbers-rows { 210 | position: absolute; 211 | pointer-events: none; 212 | top: 0; 213 | font-size: 100%; 214 | left: -3.8em; 215 | width: 3em; /* works for line-numbers below 1000 lines */ 216 | letter-spacing: -1px; 217 | border-right: 1px solid #999; 218 | 219 | -webkit-user-select: none; 220 | -moz-user-select: none; 221 | -ms-user-select: none; 222 | user-select: none; 223 | } 224 | 225 | .line-numbers-rows > span { 226 | display: block; 227 | counter-increment: linenumber; 228 | } 229 | 230 | .line-numbers-rows > span:before { 231 | content: counter(linenumber); 232 | color: #999; 233 | display: block; 234 | padding-right: 0.8em; 235 | text-align: right; 236 | } 237 | 238 | div.code-toolbar { 239 | position: relative; 240 | } 241 | 242 | div.code-toolbar > .toolbar { 243 | position: absolute; 244 | top: 0.3em; 245 | right: 0.2em; 246 | transition: opacity 0.3s ease-in-out; 247 | opacity: 0; 248 | } 249 | 250 | div.code-toolbar:hover > .toolbar { 251 | opacity: 1; 252 | } 253 | 254 | /* Separate line b/c rules are thrown out if selector is invalid. 255 | IE11 and old Edge versions don't support :focus-within. */ 256 | div.code-toolbar:focus-within > .toolbar { 257 | opacity: 1; 258 | } 259 | 260 | div.code-toolbar > .toolbar .toolbar-item { 261 | display: inline-block; 262 | } 263 | 264 | div.code-toolbar > .toolbar a { 265 | cursor: pointer; 266 | } 267 | 268 | div.code-toolbar > .toolbar button { 269 | background: none; 270 | border: 0; 271 | color: inherit; 272 | font: inherit; 273 | line-height: normal; 274 | overflow: visible; 275 | padding: 0; 276 | -webkit-user-select: none; /* for button */ 277 | -moz-user-select: none; 278 | -ms-user-select: none; 279 | } 280 | 281 | div.code-toolbar > .toolbar a, 282 | div.code-toolbar > .toolbar button, 283 | div.code-toolbar > .toolbar span { 284 | color: #bbb; 285 | font-size: 0.8em; 286 | padding: 0 0.5em; 287 | background: #f5f2f0; 288 | background: rgba(224, 224, 224, 0.2); 289 | box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2); 290 | border-radius: 0.5em; 291 | } 292 | 293 | div.code-toolbar > .toolbar a:hover, 294 | div.code-toolbar > .toolbar a:focus, 295 | div.code-toolbar > .toolbar button:hover, 296 | div.code-toolbar > .toolbar button:focus, 297 | div.code-toolbar > .toolbar span:hover, 298 | div.code-toolbar > .toolbar span:focus { 299 | color: inherit; 300 | text-decoration: none; 301 | } 302 | -------------------------------------------------------------------------------- /documentation/styles/readthedocs.css: -------------------------------------------------------------------------------- 1 | .navbar-default { 2 | background: #2980b9; 3 | border: none; 4 | } 5 | 6 | .navbar-default .navbar-brand { 7 | color: #fcfcfc; 8 | } 9 | 10 | .menu { 11 | background: #343131; 12 | color: #fcfcfc; 13 | } 14 | 15 | .menu ul.list li a { 16 | color: #fcfcfc; 17 | } 18 | 19 | .menu ul.list li.title { 20 | background: #2980b9; 21 | padding-bottom: 5px; 22 | } 23 | 24 | .menu ul.list li:nth-child(2) { 25 | margin-top: 0; 26 | } 27 | 28 | .menu ul.list li.chapter a, 29 | .menu ul.list li.chapter .simple { 30 | color: #555; 31 | text-transform: uppercase; 32 | text-decoration: none; 33 | } 34 | 35 | .menu ul.list li.chapter ul.links a { 36 | color: #b3b3b3; 37 | text-transform: none; 38 | padding-left: 35px; 39 | } 40 | 41 | .menu ul.list li.chapter ul.links a:hover { 42 | background: #4e4a4a; 43 | } 44 | 45 | .menu ul.list li.chapter a.active, 46 | .menu ul.list li.chapter ul.links a.active { 47 | color: #0099e5; 48 | } 49 | 50 | .menu ul.list li.chapter ul.links { 51 | padding-left: 0; 52 | } 53 | 54 | .menu ul.list li.divider { 55 | background: rgba(255, 255, 255, 0.07); 56 | } 57 | 58 | #book-search-input input, 59 | #book-search-input input:focus, 60 | #book-search-input input:hover { 61 | color: #949494; 62 | } 63 | 64 | .copyright { 65 | color: #b3b3b3; 66 | background: #272525; 67 | } 68 | 69 | .content { 70 | background: #fcfcfc; 71 | } 72 | 73 | .content a { 74 | color: #2980b9; 75 | } 76 | 77 | .content a:hover { 78 | color: #3091d1; 79 | } 80 | 81 | .content a:visited { 82 | color: #9b59b6; 83 | } 84 | 85 | .menu ul.list li:nth-last-child(2) { 86 | background: none; 87 | } 88 | 89 | code { 90 | white-space: nowrap; 91 | max-width: 100%; 92 | background: #fff; 93 | padding: 2px 5px; 94 | color: #e74c3c; 95 | overflow-x: auto; 96 | border-radius: 0; 97 | } 98 | 99 | pre { 100 | white-space: pre; 101 | margin: 0; 102 | padding: 12px 12px; 103 | font-size: 12px; 104 | line-height: 1.5; 105 | display: block; 106 | overflow: auto; 107 | color: #404040; 108 | background: rgba(238, 238, 238, 0.35); 109 | } 110 | 111 | @media (prefers-color-scheme: dark) { 112 | .content { 113 | background: none; 114 | } 115 | code { 116 | background: none; 117 | color: #e09393; 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /documentation/styles/reset.css: -------------------------------------------------------------------------------- 1 | /* http://meyerweb.com/eric/tools/css/reset/ 2 | v2.0 | 20110126 3 | License: none (public domain) 4 | */ 5 | 6 | html, body, div, span, applet, object, iframe, 7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 8 | a, abbr, acronym, address, big, cite, code, 9 | del, dfn, em, img, ins, kbd, q, s, samp, 10 | small, strike, strong, sub, sup, tt, var, 11 | b, u, i, center, 12 | dl, dt, dd, ol, ul, li, 13 | fieldset, form, label, legend, 14 | table, caption, tbody, tfoot, thead, tr, th, td, 15 | article, aside, canvas, details, embed, 16 | figure, figcaption, footer, header, hgroup, 17 | menu, nav, output, ruby, section, summary, 18 | time, mark, audio, video { 19 | margin: 0; 20 | padding: 0; 21 | border: 0; 22 | font-size: 100%; 23 | font: inherit; 24 | vertical-align: baseline; 25 | } 26 | /* HTML5 display-role reset for older browsers */ 27 | article, aside, details, figcaption, figure, 28 | footer, header, hgroup, menu, nav, section { 29 | display: block; 30 | } 31 | body { 32 | line-height: 1; 33 | } 34 | ol, ul { 35 | list-style: none; 36 | } 37 | blockquote, q { 38 | quotes: none; 39 | } 40 | blockquote:before, blockquote:after, 41 | q:before, q:after { 42 | content: ''; 43 | content: none; 44 | } 45 | table { 46 | border-collapse: collapse; 47 | border-spacing: 0; 48 | } -------------------------------------------------------------------------------- /documentation/styles/stripe.css: -------------------------------------------------------------------------------- 1 | .navbar-default .navbar-brand { 2 | color: #0099e5; 3 | } 4 | 5 | .menu ul.list li a[data-type='chapter-link'], 6 | .menu ul.list li.chapter .simple { 7 | color: #939da3; 8 | text-transform: uppercase; 9 | } 10 | 11 | .content h1, 12 | .content h2, 13 | .content h3, 14 | .content h4, 15 | .content h5 { 16 | color: #292e31; 17 | font-weight: normal; 18 | } 19 | 20 | .content { 21 | color: #4c555a; 22 | } 23 | 24 | .menu ul.list li.title { 25 | padding: 5px 0; 26 | } 27 | 28 | a { 29 | color: #0099e5; 30 | text-decoration: none; 31 | } 32 | a:hover { 33 | color: #292e31; 34 | text-decoration: none; 35 | } 36 | 37 | .menu ul.list li:nth-child(2) { 38 | margin-top: 0; 39 | } 40 | 41 | .menu ul.list li.title a, 42 | .navbar a { 43 | color: #0099e5; 44 | text-decoration: none; 45 | font-size: 16px; 46 | } 47 | 48 | .menu ul.list li a.active { 49 | color: #0099e5; 50 | } 51 | 52 | code { 53 | box-sizing: border-box; 54 | display: inline-block; 55 | padding: 0 5px; 56 | background: #fafcfc; 57 | border-radius: 4px; 58 | color: #b93d6a; 59 | font-size: 13px; 60 | line-height: 20px; 61 | } 62 | 63 | pre { 64 | margin: 0; 65 | padding: 12px 12px; 66 | background: #272b2d; 67 | border-radius: 5px; 68 | font-size: 13px; 69 | line-height: 1.5em; 70 | font-weight: 500; 71 | } 72 | 73 | @media (prefers-color-scheme: dark) { 74 | body { 75 | color: #fafafa; 76 | } 77 | .content h1, 78 | .content h2, 79 | .content h3, 80 | .content h4, 81 | .content h5 { 82 | color: #fafafa; 83 | } 84 | 85 | code { 86 | background: none; 87 | } 88 | 89 | .content { 90 | color: #fafafa; 91 | } 92 | 93 | .menu ul.list li a[data-type='chapter-link'], 94 | .menu ul.list li.chapter .simple { 95 | color: #fafafa; 96 | } 97 | 98 | .menu ul.list li.title a { 99 | color: #fafafa; 100 | } 101 | 102 | .menu ul.list li a { 103 | color: #fafafa; 104 | } 105 | .menu ul.list li a.active { 106 | color: #7fc9ff; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /documentation/styles/style.css: -------------------------------------------------------------------------------- 1 | @import "./reset.css"; 2 | @import "./bootstrap.min.css"; 3 | @import "./bootstrap-card.css"; 4 | @import "./prism.css"; 5 | @import "./ionicons.min.css"; 6 | @import "./compodoc.css"; 7 | @import "./tablesort.css"; 8 | -------------------------------------------------------------------------------- /documentation/styles/tablesort.css: -------------------------------------------------------------------------------- 1 | th[role=columnheader]:not(.no-sort) { 2 | cursor: pointer; 3 | } 4 | 5 | th[role=columnheader]:not(.no-sort):after { 6 | content: ''; 7 | float: right; 8 | margin-top: 7px; 9 | border-width: 0 4px 4px; 10 | border-style: solid; 11 | border-color: #404040 transparent; 12 | visibility: visible; 13 | opacity: 1; 14 | -ms-user-select: none; 15 | -webkit-user-select: none; 16 | -moz-user-select: none; 17 | user-select: none; 18 | } 19 | 20 | th[aria-sort=ascending]:not(.no-sort):after { 21 | border-bottom: none; 22 | border-width: 4px 4px 0; 23 | } 24 | 25 | th[aria-sort]:not(.no-sort):after { 26 | visibility: visible; 27 | opacity: 0.4; 28 | } 29 | 30 | th[role=columnheader]:not(.no-sort):hover:after { 31 | visibility: visible; 32 | opacity: 1; 33 | } 34 | -------------------------------------------------------------------------------- /documentation/styles/vagrant.css: -------------------------------------------------------------------------------- 1 | .navbar-default .navbar-brand { 2 | background: white; 3 | color: #8d9ba8; 4 | } 5 | 6 | .menu .list { 7 | background: #0c5593; 8 | } 9 | 10 | .menu .chapter { 11 | padding: 0 20px; 12 | } 13 | 14 | .menu ul.list li a[data-type='chapter-link'], 15 | .menu ul.list li.chapter .simple { 16 | color: white; 17 | text-transform: uppercase; 18 | border-bottom: 1px solid rgba(255, 255, 255, 0.4); 19 | } 20 | 21 | .content h1, 22 | .content h2, 23 | .content h3, 24 | .content h4, 25 | .content h5 { 26 | color: #292e31; 27 | font-weight: normal; 28 | } 29 | 30 | .content { 31 | color: #4c555a; 32 | } 33 | 34 | a { 35 | color: #0094bf; 36 | text-decoration: underline; 37 | } 38 | a:hover { 39 | color: #f1362f; 40 | } 41 | 42 | .menu ul.list li.title { 43 | background: white; 44 | padding-bottom: 5px; 45 | } 46 | 47 | .menu ul.list li:nth-child(2) { 48 | margin-top: 0; 49 | } 50 | 51 | .menu ul.list li:nth-last-child(2) { 52 | background: none; 53 | } 54 | 55 | .menu ul.list li.title a { 56 | padding: 10px 15px; 57 | } 58 | 59 | .menu ul.list li.title a, 60 | .navbar a { 61 | color: #8d9ba8; 62 | text-decoration: none; 63 | font-size: 16px; 64 | font-weight: 300; 65 | } 66 | 67 | .menu ul.list li a { 68 | color: white; 69 | padding: 10px; 70 | font-weight: 300; 71 | text-decoration: none; 72 | } 73 | .menu ul.list li a.active { 74 | color: white; 75 | font-weight: bold; 76 | } 77 | 78 | .copyright { 79 | color: white; 80 | background: #000; 81 | } 82 | 83 | code { 84 | box-sizing: border-box; 85 | display: inline-block; 86 | padding: 0 5px; 87 | background: rgba(0, 148, 191, 0.1); 88 | border-radius: 3px; 89 | color: #0094bf; 90 | font-size: 13px; 91 | line-height: 20px; 92 | } 93 | 94 | pre { 95 | margin: 0; 96 | padding: 12px 12px; 97 | background: rgba(238, 238, 238, 0.35); 98 | border-radius: 3px; 99 | font-size: 13px; 100 | line-height: 1.5em; 101 | font-weight: 500; 102 | } 103 | 104 | @media (prefers-color-scheme: dark) { 105 | body { 106 | color: #fafafa; 107 | } 108 | .content h1, 109 | .content h2, 110 | .content h3, 111 | .content h4, 112 | .content h5 { 113 | color: #fafafa; 114 | } 115 | 116 | code { 117 | background: none; 118 | } 119 | 120 | .content { 121 | color: #fafafa; 122 | } 123 | 124 | .menu ul.list li.title a, 125 | .navbar a { 126 | color: #8d9ba8; 127 | } 128 | 129 | .menu ul.list li a { 130 | color: #fafafa; 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /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'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | jasmine: { 17 | // you can add configuration options for Jasmine here 18 | // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html 19 | // for example, you can disable the random execution with `random: false` 20 | // or set a specific seed with `seed: 4321` 21 | }, 22 | clearContext: false // leave Jasmine Spec Runner output visible in browser 23 | }, 24 | jasmineHtmlReporter: { 25 | suppressAll: true // removes the duplicated traces 26 | }, 27 | coverageReporter: { 28 | dir: require('path').join(__dirname, './coverage/tw-test'), 29 | subdir: '.', 30 | reporters: [ 31 | { type: 'html' }, 32 | { type: 'text-summary' } 33 | ] 34 | }, 35 | reporters: ['progress', 'kjhtml'], 36 | port: 9876, 37 | colors: true, 38 | logLevel: config.LOG_INFO, 39 | autoWatch: true, 40 | browsers: ['Chrome'], 41 | singleRun: false, 42 | restartOnFileChange: true 43 | }); 44 | }; 45 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-material-tailwind", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "ng": "ng", 6 | "start": "ng serve --open", 7 | "build": "ng build", 8 | "watch": "ng build --watch --configuration development", 9 | "test": "ng test", 10 | "compodoc": "npx compodoc -p tsconfig.doc.json --serve --watch --hideGenerator" 11 | }, 12 | "private": true, 13 | "dependencies": { 14 | "@angular/animations": "~12.1.0-", 15 | "@angular/cdk": "^12.1.4", 16 | "@angular/common": "~12.1.0-", 17 | "@angular/compiler": "~12.1.0-", 18 | "@angular/core": "~12.1.0-", 19 | "@angular/forms": "~12.1.0-", 20 | "@angular/material": "^12.1.4", 21 | "@angular/platform-browser": "~12.1.0-", 22 | "@angular/platform-browser-dynamic": "~12.1.0-", 23 | "@angular/router": "~12.1.0-", 24 | "@ngneat/tailwind": "^7.0.3", 25 | "rxjs": "~6.6.0", 26 | "tslib": "^2.2.0", 27 | "zone.js": "~0.11.4" 28 | }, 29 | "devDependencies": { 30 | "@angular-devkit/build-angular": "~12.1.3", 31 | "@angular/cli": "~12.1.3", 32 | "@angular/compiler-cli": "~12.1.0-", 33 | "@tailwindcss/aspect-ratio": "0.2.1", 34 | "@tailwindcss/forms": "0.3.3", 35 | "@tailwindcss/line-clamp": "0.2.1", 36 | "@tailwindcss/typography": "0.4.1", 37 | "@types/jasmine": "~3.8.0", 38 | "@types/node": "^12.11.1", 39 | "jasmine-core": "~3.8.0", 40 | "karma": "~6.3.0", 41 | "karma-chrome-launcher": "~3.1.0", 42 | "karma-coverage": "~2.0.3", 43 | "karma-jasmine": "~4.0.0", 44 | "karma-jasmine-html-reporter": "~1.7.0", 45 | "tailwindcss": "2.2.7", 46 | "typescript": "~4.3.2" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/app/app-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | 4 | const routes: Routes = []; 5 | 6 | @NgModule({ 7 | imports: [RouterModule.forRoot(routes)], 8 | exports: [RouterModule] 9 | }) 10 | export class AppRoutingModule { } 11 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 |

                      Hello

                      3 |

                      Lorem, ipsum dolor sit amet consectetur adipisicing elit. Fuga labore maiores 4 | assumenda, qui minima, 5 | amet aperiam distinctio a accusantium repellendus vel! Voluptatum officia quo exercitationem quia eum ex vel 6 | cupiditate.

                      7 | 8 |
                      9 | -------------------------------------------------------------------------------- /src/app/app.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/src/app/app.component.scss -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async () => { 7 | await TestBed.configureTestingModule({ 8 | imports: [ 9 | RouterTestingModule 10 | ], 11 | declarations: [ 12 | AppComponent 13 | ], 14 | }).compileComponents(); 15 | }); 16 | 17 | it('should create the app', () => { 18 | const fixture = TestBed.createComponent(AppComponent); 19 | const app = fixture.componentInstance; 20 | expect(app).toBeTruthy(); 21 | }); 22 | 23 | it(`should have as title 'tw-test'`, () => { 24 | const fixture = TestBed.createComponent(AppComponent); 25 | const app = fixture.componentInstance; 26 | expect(app.title).toEqual('tw-test'); 27 | }); 28 | 29 | it('should render title', () => { 30 | const fixture = TestBed.createComponent(AppComponent); 31 | fixture.detectChanges(); 32 | const compiled = fixture.nativeElement as HTMLElement; 33 | expect(compiled.querySelector('.content span')?.textContent).toContain('tw-test app is running!'); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['./app.component.scss'] 7 | }) 8 | 9 | export class AppComponent { 10 | title = 'tw-test'; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | 4 | import { AppRoutingModule } from './app-routing.module'; 5 | import { AppComponent } from './app.component'; 6 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 7 | 8 | import { MaterialModule } from './material/material.module'; 9 | 10 | 11 | @NgModule({ 12 | declarations: [ 13 | AppComponent 14 | ], 15 | imports: [ 16 | BrowserModule, 17 | AppRoutingModule, 18 | BrowserAnimationsModule, 19 | MaterialModule 20 | ], 21 | providers: [], 22 | bootstrap: [AppComponent] 23 | }) 24 | export class AppModule { } 25 | -------------------------------------------------------------------------------- /src/app/material/material.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { A11yModule } from '@angular/cdk/a11y'; 3 | import { ClipboardModule } from '@angular/cdk/clipboard'; 4 | import { DragDropModule } from '@angular/cdk/drag-drop'; 5 | import { PortalModule } from '@angular/cdk/portal'; 6 | import { ScrollingModule } from '@angular/cdk/scrolling'; 7 | import { CdkStepperModule } from '@angular/cdk/stepper'; 8 | import { CdkTableModule } from '@angular/cdk/table'; 9 | import { CdkTreeModule } from '@angular/cdk/tree'; 10 | import { MatAutocompleteModule } from '@angular/material/autocomplete'; 11 | import { MatBadgeModule } from '@angular/material/badge'; 12 | import { MatBottomSheetModule } from '@angular/material/bottom-sheet'; 13 | import { MatButtonModule } from '@angular/material/button'; 14 | import { MatButtonToggleModule } from '@angular/material/button-toggle'; 15 | import { MatCardModule } from '@angular/material/card'; 16 | import { MatCheckboxModule } from '@angular/material/checkbox'; 17 | import { MatChipsModule } from '@angular/material/chips'; 18 | import { MatStepperModule } from '@angular/material/stepper'; 19 | import { MatDatepickerModule } from '@angular/material/datepicker'; 20 | import { MatDialogModule } from '@angular/material/dialog'; 21 | import { MatDividerModule } from '@angular/material/divider'; 22 | import { MatExpansionModule } from '@angular/material/expansion'; 23 | import { MatGridListModule } from '@angular/material/grid-list'; 24 | import { MatIconModule } from '@angular/material/icon'; 25 | import { MatInputModule } from '@angular/material/input'; 26 | import { MatListModule } from '@angular/material/list'; 27 | import { MatMenuModule } from '@angular/material/menu'; 28 | import { MatNativeDateModule, MatRippleModule } from '@angular/material/core'; 29 | import { MatPaginatorModule } from '@angular/material/paginator'; 30 | import { MatProgressBarModule } from '@angular/material/progress-bar'; 31 | import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; 32 | import { MatRadioModule } from '@angular/material/radio'; 33 | import { MatSelectModule } from '@angular/material/select'; 34 | import { MatSidenavModule } from '@angular/material/sidenav'; 35 | import { MatSliderModule } from '@angular/material/slider'; 36 | import { MatSlideToggleModule } from '@angular/material/slide-toggle'; 37 | import { MatSnackBarModule } from '@angular/material/snack-bar'; 38 | import { MatSortModule } from '@angular/material/sort'; 39 | import { MatTableModule } from '@angular/material/table'; 40 | import { MatTabsModule } from '@angular/material/tabs'; 41 | import { MatToolbarModule } from '@angular/material/toolbar'; 42 | import { MatTooltipModule } from '@angular/material/tooltip'; 43 | import { MatTreeModule } from '@angular/material/tree'; 44 | 45 | @NgModule({ 46 | exports: [ 47 | A11yModule, 48 | ClipboardModule, 49 | CdkStepperModule, 50 | CdkTableModule, 51 | CdkTreeModule, 52 | DragDropModule, 53 | MatAutocompleteModule, 54 | MatBadgeModule, 55 | MatBottomSheetModule, 56 | MatButtonModule, 57 | MatButtonToggleModule, 58 | MatCardModule, 59 | MatCheckboxModule, 60 | MatChipsModule, 61 | MatStepperModule, 62 | MatDatepickerModule, 63 | MatDialogModule, 64 | MatDividerModule, 65 | MatExpansionModule, 66 | MatGridListModule, 67 | MatIconModule, 68 | MatInputModule, 69 | MatListModule, 70 | MatMenuModule, 71 | MatNativeDateModule, 72 | MatPaginatorModule, 73 | MatProgressBarModule, 74 | MatProgressSpinnerModule, 75 | MatRadioModule, 76 | MatRippleModule, 77 | MatSelectModule, 78 | MatSidenavModule, 79 | MatSliderModule, 80 | MatSlideToggleModule, 81 | MatSnackBarModule, 82 | MatSortModule, 83 | MatTableModule, 84 | MatTabsModule, 85 | MatToolbarModule, 86 | MatTooltipModule, 87 | MatTreeModule, 88 | PortalModule, 89 | ScrollingModule, 90 | ] 91 | }) 92 | export class MaterialModule { } 93 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/src/assets/.gitkeep -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build` 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/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbdotjs/angular-material-tailwind/c12d53746bc86a139ddd30d33a5a08f901f83c2a/src/favicon.ico -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TwTest 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /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().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** 22 | * IE11 requires the following for NgClass support on SVG elements 23 | */ 24 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 25 | 26 | /** 27 | * Web Animations `@angular/platform-browser/animations` 28 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. 29 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). 30 | */ 31 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 32 | 33 | /** 34 | * By default, zone.js will patch all possible macroTask and DomEvents 35 | * user can disable parts of macroTask/DomEvents patch by setting following flags 36 | * because those flags need to be set before `zone.js` being loaded, and webpack 37 | * will put import in the top of bundle, so user need to create a separate file 38 | * in this directory (for example: zone-flags.ts), and put the following flags 39 | * into that file, and then add the following code before importing zone.js. 40 | * import './zone-flags'; 41 | * 42 | * The flags allowed in zone-flags.ts are listed here. 43 | * 44 | * The following flags will work for all browsers. 45 | * 46 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 47 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 48 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 49 | * 50 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 51 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 52 | * 53 | * (window as any).__Zone_enable_cross_context_check = true; 54 | * 55 | */ 56 | 57 | /*************************************************************************************************** 58 | * Zone JS is required by default for Angular itself. 59 | */ 60 | import 'zone.js'; // Included with Angular CLI. 61 | 62 | 63 | /*************************************************************************************************** 64 | * APPLICATION IMPORTS 65 | */ 66 | -------------------------------------------------------------------------------- /src/styles.scss: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss/base'; 2 | @import 'tailwindcss/components'; 3 | @import 'tailwindcss/utilities'; 4 | /* You can add global styles to this file, and also import other style files */ 5 | 6 | html, body { height: 100%; } 7 | body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } 8 | -------------------------------------------------------------------------------- /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 | declare const require: { 11 | context(path: string, deep?: boolean, filter?: RegExp): { 12 | keys(): string[]; 13 | (id: string): T; 14 | }; 15 | }; 16 | 17 | // First, initialize the Angular testing environment. 18 | getTestBed().initTestEnvironment( 19 | BrowserDynamicTestingModule, 20 | platformBrowserDynamicTesting() 21 | ); 22 | // Then we find all the tests. 23 | const context = require.context('./', true, /\.spec\.ts$/); 24 | // And load the modules. 25 | context.keys().map(context); 26 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { guessProductionMode } = require("@ngneat/tailwind"); 2 | 3 | process.env.TAILWIND_MODE = guessProductionMode() ? 'build' : 'watch'; 4 | 5 | module.exports = { 6 | prefix: '', 7 | mode: 'jit', 8 | purge: { 9 | content: [ 10 | './src/**/*.{html,ts,css,scss,sass,less,styl}', 11 | ] 12 | }, 13 | darkMode: false, // or 'media' or 'class' 14 | theme: { 15 | extend: {}, 16 | }, 17 | variants: { 18 | extend: {}, 19 | }, 20 | plugins: [require('@tailwindcss/aspect-ratio'),require('@tailwindcss/forms'),require('@tailwindcss/line-clamp'),require('@tailwindcss/typography')], 21 | }; 22 | -------------------------------------------------------------------------------- /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": [ 9 | "src/main.ts", 10 | "src/polyfills.ts" 11 | ], 12 | "include": [ 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.doc.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["src/**/*.ts"]} 3 | -------------------------------------------------------------------------------- /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": true, 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": "es2017", 18 | "module": "es2020", 19 | "lib": [ 20 | "es2018", 21 | "dom" 22 | ] 23 | }, 24 | "angularCompilerOptions": { 25 | "enableI18nLegacyMessageIdFormat": false, 26 | "strictInjectionParameters": true, 27 | "strictInputAccessModifiers": true, 28 | "strictTemplates": true 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------