├── src ├── assets │ ├── .gitkeep │ ├── angular.ico │ ├── favicon.ico │ ├── images │ │ ├── vue.jpg │ │ ├── angular.jpg │ │ ├── react.jpg │ │ └── avatars │ │ │ ├── 1.jpg │ │ │ ├── 2.jpg │ │ │ ├── 3.jpg │ │ │ ├── 4.jpg │ │ │ ├── 5.jpg │ │ │ ├── 6.jpg │ │ │ ├── 7.jpg │ │ │ ├── 8.jpg │ │ │ └── 9.jpg │ └── brand │ │ ├── coreui-signet.svg │ │ ├── coreui-signet-white.svg │ │ ├── coreui-base.svg │ │ └── coreui-base-white.svg ├── app │ ├── views │ │ ├── base │ │ │ ├── navs │ │ │ │ ├── navs.component.scss │ │ │ │ ├── navs.component.ts │ │ │ │ └── navs.component.spec.ts │ │ │ ├── tabs │ │ │ │ ├── tabs.component.scss │ │ │ │ ├── tabs.component.ts │ │ │ │ └── tabs.component.spec.ts │ │ │ ├── cards │ │ │ │ ├── cards.component.scss │ │ │ │ ├── cards.component.spec.ts │ │ │ │ └── cards.component.ts │ │ │ ├── tables │ │ │ │ ├── tables.component.scss │ │ │ │ ├── tables.component.ts │ │ │ │ └── tables.component.spec.ts │ │ │ ├── carousels │ │ │ │ ├── carousels.component.scss │ │ │ │ └── carousels.component.spec.ts │ │ │ ├── collapses │ │ │ │ ├── collapses.component.scss │ │ │ │ ├── collapses.component.ts │ │ │ │ └── collapses.component.spec.ts │ │ │ ├── popovers │ │ │ │ ├── popovers.component.scss │ │ │ │ ├── popovers.component.ts │ │ │ │ ├── popovers.component.spec.ts │ │ │ │ └── popovers.component.html │ │ │ ├── spinners │ │ │ │ ├── spinners.component.scss │ │ │ │ ├── spinners.component.ts │ │ │ │ └── spinners.component.spec.ts │ │ │ ├── tooltips │ │ │ │ ├── tooltips.component.scss │ │ │ │ ├── tooltips.component.ts │ │ │ │ ├── tooltips.component.spec.ts │ │ │ │ └── tooltips.component.html │ │ │ ├── breadcrumbs │ │ │ │ ├── breadcrumbs.component.scss │ │ │ │ ├── breadcrumbs.component.spec.ts │ │ │ │ ├── breadcrumbs.component.ts │ │ │ │ └── breadcrumbs.component.html │ │ │ ├── list-groups │ │ │ │ ├── list-groups.component.scss │ │ │ │ ├── list-groups.component.spec.ts │ │ │ │ └── list-groups.component.ts │ │ │ ├── paginations │ │ │ │ ├── paginations.component.scss │ │ │ │ ├── paginations.component.ts │ │ │ │ └── paginations.component.spec.ts │ │ │ ├── placeholders │ │ │ │ ├── placeholders.component.scss │ │ │ │ ├── placeholders.component.ts │ │ │ │ └── placeholders.component.spec.ts │ │ │ ├── accordion │ │ │ │ ├── accordions.component.scss │ │ │ │ ├── accordions.component.spec.ts │ │ │ │ └── accordions.component.ts │ │ │ └── progress │ │ │ │ ├── progress.component.ts │ │ │ │ └── progress.component.spec.ts │ │ ├── charts │ │ │ ├── charts.component.scss │ │ │ ├── routes.ts │ │ │ ├── charts.component.spec.ts │ │ │ └── charts.component.html │ │ ├── forms │ │ │ ├── layout │ │ │ │ ├── layout.component.scss │ │ │ │ ├── layout.component.ts │ │ │ │ └── layout.component.spec.ts │ │ │ ├── ranges │ │ │ │ ├── ranges.component.scss │ │ │ │ ├── ranges.component.ts │ │ │ │ ├── ranges.component.spec.ts │ │ │ │ └── ranges.component.html │ │ │ ├── select │ │ │ │ ├── select.component.scss │ │ │ │ ├── select.component.ts │ │ │ │ └── select.component.spec.ts │ │ │ ├── validation │ │ │ │ ├── validation.component.scss │ │ │ │ ├── validation.component.spec.ts │ │ │ │ └── validation.component.ts │ │ │ ├── checks-radios │ │ │ │ ├── checks-radios.component.scss │ │ │ │ ├── checks-radios.component.spec.ts │ │ │ │ └── checks-radios.component.ts │ │ │ ├── input-groups │ │ │ │ ├── input-groups.component.scss │ │ │ │ ├── input-groups.component.spec.ts │ │ │ │ └── input-groups.component.ts │ │ │ ├── floating-labels │ │ │ │ ├── floating-labels.component.scss │ │ │ │ ├── floating-labels.component.ts │ │ │ │ └── floating-labels.component.spec.ts │ │ │ ├── form-controls │ │ │ │ ├── form-controls.component.scss │ │ │ │ ├── form-controls.component.ts │ │ │ │ └── form-controls.component.spec.ts │ │ │ └── routes.ts │ │ ├── pages │ │ │ ├── login │ │ │ │ ├── login.component.scss │ │ │ │ ├── login.component.ts │ │ │ │ ├── login.component.spec.ts │ │ │ │ └── login.component.html │ │ │ ├── page404 │ │ │ │ ├── page404.component.scss │ │ │ │ ├── page404.component.ts │ │ │ │ ├── page404.component.html │ │ │ │ └── page404.component.spec.ts │ │ │ ├── page500 │ │ │ │ ├── page500.component.scss │ │ │ │ ├── page500.component.ts │ │ │ │ ├── page500.component.html │ │ │ │ └── page500.component.spec.ts │ │ │ ├── register │ │ │ │ ├── register.component.scss │ │ │ │ ├── register.component.ts │ │ │ │ ├── register.component.spec.ts │ │ │ │ └── register.component.html │ │ │ └── routes.ts │ │ ├── widgets │ │ │ ├── widgets │ │ │ │ ├── widgets.component.scss │ │ │ │ ├── widgets.component.ts │ │ │ │ └── widgets.component.spec.ts │ │ │ ├── widgets-e │ │ │ │ ├── widgets-e.component.scss │ │ │ │ ├── widgets-e.component.spec.ts │ │ │ │ └── widgets-e.component.html │ │ │ ├── widgets-brand │ │ │ │ ├── widgets-brand.component.scss │ │ │ │ ├── widgets-brand.component.html │ │ │ │ └── widgets-brand.component.spec.ts │ │ │ ├── widgets-dropdown │ │ │ │ ├── widgets-dropdown.component.scss │ │ │ │ └── widgets-dropdown.component.spec.ts │ │ │ └── routes.ts │ │ ├── notifications │ │ │ ├── modals │ │ │ │ ├── modals.component.scss │ │ │ │ ├── modals.component.spec.ts │ │ │ │ └── modals.component.ts │ │ │ ├── toasters │ │ │ │ ├── toasters.component.scss │ │ │ │ ├── toast-simple │ │ │ │ │ ├── toast.component.scss │ │ │ │ │ ├── toast-sample-icon.component.svg │ │ │ │ │ ├── toast-sample-icon.component.ts │ │ │ │ │ ├── toast.component.html │ │ │ │ │ ├── toast.component.ts │ │ │ │ │ └── toast.component.spec.ts │ │ │ │ └── toasters.component.spec.ts │ │ │ ├── badges │ │ │ │ ├── badges.component.scss │ │ │ │ ├── badges.component.ts │ │ │ │ └── badges.component.spec.ts │ │ │ ├── alerts │ │ │ │ ├── alerts.component.scss │ │ │ │ ├── alerts.component.spec.ts │ │ │ │ └── alerts.component.ts │ │ │ └── routes.ts │ │ ├── buttons │ │ │ ├── button-groups │ │ │ │ ├── button-groups.component.scss │ │ │ │ ├── button-groups.component.spec.ts │ │ │ │ └── button-groups.component.ts │ │ │ ├── buttons │ │ │ │ ├── buttons.component.ts │ │ │ │ └── buttons.component.spec.ts │ │ │ ├── routes.ts │ │ │ └── dropdowns │ │ │ │ ├── dropdowns.component.spec.ts │ │ │ │ └── dropdowns.component.ts │ │ ├── dashboard │ │ │ ├── dashboard.component.scss │ │ │ └── routes.ts │ │ ├── theme │ │ │ ├── typography.component.ts │ │ │ ├── routes.ts │ │ │ ├── colors.component.html │ │ │ └── colors.component.ts │ │ └── icons │ │ │ ├── coreui-icons.component.html │ │ │ ├── routes.ts │ │ │ └── coreui-icons.component.ts │ ├── layout │ │ ├── index.ts │ │ └── default-layout │ │ │ ├── default-footer │ │ │ ├── default-footer.component.scss │ │ │ ├── default-footer.component.html │ │ │ ├── default-footer.component.ts │ │ │ └── default-footer.component.spec.ts │ │ │ ├── default-header │ │ │ ├── default-header.component.scss │ │ │ └── default-header.component.spec.ts │ │ │ ├── index.ts │ │ │ ├── default-layout.component.scss │ │ │ ├── default-layout.component.html │ │ │ └── default-layout.component.ts │ ├── icons │ │ └── signet.ts │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.config.ts │ └── app.routes.ts ├── components │ ├── docs-link │ │ ├── docs-link.component.scss │ │ ├── docs-link.component.html │ │ ├── docs-link.component.spec.ts │ │ └── docs-link.component.ts │ ├── docs-callout │ │ ├── docs-callout.component.scss │ │ ├── docs-callout.component.html │ │ ├── docs-callout.component.spec.ts │ │ └── docs-callout.component.ts │ ├── index.ts │ ├── docs-example │ │ ├── docs-example.component.scss │ │ ├── docs-example.component.html │ │ ├── docs-example.component.spec.ts │ │ └── docs-example.component.ts │ └── public-api.ts ├── scss │ ├── _fixes.scss │ ├── _variables.scss │ ├── _charts.scss │ ├── _custom.scss │ ├── styles.scss │ ├── _scrollbar.scss │ ├── _theme.scss │ └── _examples.scss ├── declarations.d.ts ├── main.ts ├── test.ts └── index.html ├── .github ├── FUNDING.yml ├── SUPPORT.md ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── workflows │ ├── build-check.yml │ └── stale.yml ├── COMMIT_CONVENTION.md └── CODE_OF_CONDUCT.md ├── .editorconfig ├── tsconfig.app.json ├── tsconfig.spec.json ├── .gitignore ├── LICENSE ├── tsconfig.json ├── karma.conf.js └── package.json /src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/navs/navs.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/tabs/tabs.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/charts/charts.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/cards/cards.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/tables/tables.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/forms/layout/layout.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/forms/ranges/ranges.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/forms/select/select.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/pages/login/login.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/carousels/carousels.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/collapses/collapses.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/popovers/popovers.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/spinners/spinners.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/tooltips/tooltips.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/pages/page404/page404.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/pages/page500/page500.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/pages/register/register.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets/widgets.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/docs-link/docs-link.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/breadcrumbs/breadcrumbs.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/list-groups/list-groups.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/base/paginations/paginations.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/forms/validation/validation.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/notifications/modals/modals.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets-e/widgets-e.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/docs-callout/docs-callout.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './public-api'; 2 | -------------------------------------------------------------------------------- /src/app/layout/index.ts: -------------------------------------------------------------------------------- 1 | export * from './default-layout'; 2 | -------------------------------------------------------------------------------- /src/app/views/base/placeholders/placeholders.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/forms/checks-radios/checks-radios.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/forms/input-groups/input-groups.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/notifications/toasters/toasters.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/scss/_fixes.scss: -------------------------------------------------------------------------------- 1 | // Place for temp fixes 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/app/views/buttons/button-groups/button-groups.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/forms/floating-labels/floating-labels.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets-brand/widgets-brand.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-footer/default-footer.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-header/default-header.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/docs-example/docs-example.component.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/angular.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/angular.ico -------------------------------------------------------------------------------- /src/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/favicon.ico -------------------------------------------------------------------------------- /src/assets/images/vue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/vue.jpg -------------------------------------------------------------------------------- /src/assets/images/angular.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/angular.jpg -------------------------------------------------------------------------------- /src/assets/images/react.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/react.jpg -------------------------------------------------------------------------------- /src/declarations.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.json' { 2 | const value: any; 3 | export default value; 4 | } 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/avatars/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/1.jpg -------------------------------------------------------------------------------- /src/assets/images/avatars/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/2.jpg -------------------------------------------------------------------------------- /src/assets/images/avatars/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/3.jpg -------------------------------------------------------------------------------- /src/assets/images/avatars/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/4.jpg -------------------------------------------------------------------------------- /src/assets/images/avatars/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/5.jpg -------------------------------------------------------------------------------- /src/assets/images/avatars/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/6.jpg -------------------------------------------------------------------------------- /src/assets/images/avatars/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/7.jpg -------------------------------------------------------------------------------- /src/assets/images/avatars/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/8.jpg -------------------------------------------------------------------------------- /src/assets/images/avatars/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/super-dev03/angular-test/HEAD/src/assets/images/avatars/9.jpg -------------------------------------------------------------------------------- /src/app/views/notifications/toasters/toast-simple/toast.component.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | overflow: hidden; 4 | } 5 | -------------------------------------------------------------------------------- /src/app/views/dashboard/dashboard.component.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | .legend { 3 | small { 4 | font-size: x-small; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | custom: "https://coreui.io/pricing?support=angular" 4 | open_collective: coreui 5 | -------------------------------------------------------------------------------- /src/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variable overrides 2 | // 3 | // If you want to customize your project please add your variables below. 4 | 5 | $enable-deprecation-messages: false !default; 6 | -------------------------------------------------------------------------------- /src/scss/_charts.scss: -------------------------------------------------------------------------------- 1 | // custom .chartjs-tooltip-body-item 2 | 3 | .chartjs-tooltip-body-item > td { 4 | padding-bottom: 0 !important; 5 | padding-top: 0 !important; 6 | font-size: smaller; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/index.ts: -------------------------------------------------------------------------------- 1 | export * from './default-footer/default-footer.component'; 2 | export * from './default-header/default-header.component'; 3 | export * from './default-layout.component'; 4 | -------------------------------------------------------------------------------- /src/app/views/forms/form-controls/form-controls.component.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | #exampleColorInput { 3 | min-width: 2.5rem; 4 | } 5 | .color-box { 6 | min-width: 2rem; 7 | min-height: 2rem; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/components/public-api.ts: -------------------------------------------------------------------------------- 1 | export { DocsCalloutComponent } from './docs-callout/docs-callout.component' 2 | export { DocsExampleComponent } from './docs-example/docs-example.component' 3 | export { DocsLinkComponent } from './docs-link/docs-link.component' 4 | -------------------------------------------------------------------------------- /src/components/docs-link/docs-link.component.html: -------------------------------------------------------------------------------- 1 |
2 | 7 | {{text ?? 'docs'}} 8 | 9 |
10 | -------------------------------------------------------------------------------- /src/app/views/notifications/badges/badges.component.scss: -------------------------------------------------------------------------------- 1 | :host-context(.dark-theme) ::ng-deep c-badge { 2 | &.bg-light:not([class*="dark:"]) { 3 | color: var(--cui-body-bg); 4 | } 5 | 6 | &.bg-light-gradient:not([class*="dark:"]) { 7 | color: var(--cui-body-bg); 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /.github/SUPPORT.md: -------------------------------------------------------------------------------- 1 | ### Bug reports 2 | 3 | See the [contributing guidelines](CONTRIBUTING.md) for sharing bug reports. 4 | 5 | ### How-to 6 | 7 | For general troubleshooting or help getting started: 8 | 9 | - Go to [Discussions](https://github.com/coreui/coreui-free-angular-admin-template/discussions). 10 | -------------------------------------------------------------------------------- /src/app/views/charts/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | import { ChartsComponent } from './charts.component'; 4 | 5 | export const routes: Routes = [ 6 | { 7 | path: '', 8 | component: ChartsComponent, 9 | data: { 10 | title: 'Charts' 11 | } 12 | } 13 | ]; 14 | -------------------------------------------------------------------------------- /src/app/views/widgets/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '', 6 | loadComponent: () => import('./widgets/widgets.component').then(m => m.WidgetsComponent), 7 | data: { 8 | title: 'Widgets' 9 | } 10 | } 11 | ]; 12 | -------------------------------------------------------------------------------- /src/app/views/dashboard/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '', 6 | loadComponent: () => import('./dashboard.component').then(m => m.DashboardComponent), 7 | data: { 8 | title: $localize`Dashboard` 9 | } 10 | } 11 | ]; 12 | 13 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import { bootstrapApplication } from '@angular/platform-browser'; 4 | 5 | import { AppComponent } from './app/app.component'; 6 | import { appConfig } from './app/app.config'; 7 | 8 | bootstrapApplication(AppComponent, appConfig) 9 | .catch(err => console.error(err)); 10 | 11 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /src/app/views/notifications/toasters/toast-simple/toast-sample-icon.component.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/app/views/notifications/toasters/toast-simple/toast-sample-icon.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'toast-sample-icon', 5 | templateUrl: './toast-sample-icon.component.svg', 6 | }) 7 | export class ToastSampleIconComponent implements OnInit { 8 | 9 | constructor() { } 10 | 11 | ngOnInit(): void { 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-footer/default-footer.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | CoreUI 4 | © 2024 creativeLabs 5 |
6 |
7 | Powered by 8 | 9 | CoreUI for Angular 10 | 11 |
12 | 13 | -------------------------------------------------------------------------------- /src/app/views/notifications/alerts/alerts.component.scss: -------------------------------------------------------------------------------- 1 | :host-context(.dark-theme) ::ng-deep .btn-close { 2 | --cui-btn-close-bg: url("data:image/svg+xml,") !important; 3 | } 4 | -------------------------------------------------------------------------------- /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 | "@angular/localize" 8 | ], 9 | "paths": { 10 | "@docs-components/*": ["./src/components/*"] 11 | } 12 | }, 13 | "files": [ 14 | "src/main.ts" 15 | ], 16 | "include": [ 17 | "src/**/*.d.ts" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /src/scss/_custom.scss: -------------------------------------------------------------------------------- 1 | // Here you can add other styles 2 | 3 | // custom .chartjs-tooltip-body-item padding 4 | @import "charts"; 5 | 6 | // custom tweaks for scrollbar styling (wip) 7 | @import "scrollbar"; 8 | 9 | // custom calendar today cell color 10 | .calendar-cell.today { 11 | --cui-calendar-cell-today-color: var(--cui-info) !important; 12 | } 13 | 14 | // custom select week cursor pointer 15 | .select-week .calendar-row.current { 16 | cursor: pointer; 17 | } 18 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-footer/default-footer.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { FooterComponent } from '@coreui/angular'; 3 | 4 | @Component({ 5 | selector: 'app-default-footer', 6 | templateUrl: './default-footer.component.html', 7 | styleUrls: ['./default-footer.component.scss'], 8 | standalone: true, 9 | }) 10 | export class DefaultFooterComponent extends FooterComponent { 11 | constructor() { 12 | super(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /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 | "@angular/localize" 9 | ], 10 | "paths": { 11 | "@docs-components/*": ["./src/components/*"] 12 | } 13 | }, 14 | "files": [ 15 | "src/test.ts", 16 | ], 17 | "include": [ 18 | "src/**/*.spec.ts", 19 | "src/**/*.d.ts" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/app/views/theme/typography.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent } from '@coreui/angular'; 3 | 4 | @Component({ 5 | templateUrl: 'typography.component.html', 6 | standalone: true, 7 | imports: [ 8 | TextColorDirective, 9 | CardComponent, 10 | CardHeaderComponent, 11 | CardBodyComponent, 12 | ], 13 | }) 14 | export class TypographyComponent { 15 | constructor() {} 16 | } 17 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | // First, initialize the Angular testing environment. 11 | getTestBed().initTestEnvironment( 12 | BrowserDynamicTestingModule, 13 | platformBrowserDynamicTesting(), 14 | { teardown: { destroyAfterEach: true }}, 15 | ); 16 | -------------------------------------------------------------------------------- /src/app/views/icons/coreui-icons.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ title }} 4 | 5 | 6 | 7 | 8 | @for (icon of icons; track icon[0]) { 9 | 10 | 11 |
{{ toKebabCase(icon[0]) }}
12 |
13 | } 14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /src/components/docs-example/docs-example.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Preview 6 | 7 | 8 | 9 | 10 | 11 | Code 12 | 13 | 14 | 15 |
16 |
17 | 18 |
19 |
20 | -------------------------------------------------------------------------------- /src/scss/styles.scss: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | 3 | // If you want to override variables do it here 4 | @import "variables"; 5 | 6 | // Import styles with default layout. 7 | @import "@coreui/coreui/scss/coreui"; 8 | 9 | // Import Chart.js custom tooltips styles 10 | @import "@coreui/chartjs/scss/coreui-chartjs"; 11 | 12 | // Custom styles for this theme 13 | @import "theme"; 14 | 15 | // Some temp fixes 16 | //@import "fixes"; 17 | 18 | // If you want to add custom CSS you can put it here. 19 | @import "custom"; 20 | 21 | // Examples 22 | // We use those styles to show code examples, you should remove them in your application. 23 | @import "examples"; 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for a new feature in CoreUI Free Angular Admin Template. 4 | title: '' 5 | labels: feature 6 | assignees: '' 7 | 8 | --- 9 | 10 | Before opening: 11 | 12 | - [Search for duplicate or closed issues](https://github.com/coreui/coreui-free-angular-admin-template/issues?utf8=%E2%9C%93&q=is%3Aissue) 13 | - Read the [contributing guidelines](https://github.com/coreui/coreui-free-angular-admin-template/blob/main/.github/CONTRIBUTING.md) 14 | 15 | Feature requests must include: 16 | 17 | - As much detail as possible for what we should add and why it's important to Bootstrap 18 | - Relevant links to prior art, screenshots, or live demos whenever possible 19 | -------------------------------------------------------------------------------- /src/app/views/pages/page404/page404.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IconDirective } from '@coreui/icons-angular'; 3 | import { ContainerComponent, RowComponent, ColComponent, InputGroupComponent, InputGroupTextDirective, FormControlDirective, ButtonDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-page404', 7 | templateUrl: './page404.component.html', 8 | styleUrls: ['./page404.component.scss'], 9 | standalone: true, 10 | imports: [ContainerComponent, RowComponent, ColComponent, InputGroupComponent, InputGroupTextDirective, IconDirective, FormControlDirective, ButtonDirective] 11 | }) 12 | export class Page404Component { 13 | 14 | constructor() { } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/views/pages/page500/page500.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IconDirective } from '@coreui/icons-angular'; 3 | import { ContainerComponent, RowComponent, ColComponent, InputGroupComponent, InputGroupTextDirective, FormControlDirective, ButtonDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-page500', 7 | templateUrl: './page500.component.html', 8 | styleUrls: ['./page500.component.scss'], 9 | standalone: true, 10 | imports: [ContainerComponent, RowComponent, ColComponent, InputGroupComponent, InputGroupTextDirective, IconDirective, FormControlDirective, ButtonDirective] 11 | }) 12 | export class Page500Component { 13 | 14 | constructor() { } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/views/notifications/toasters/toast-simple/toast.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | {{ title }} 8 | 9 | 10 |

This is a dynamic toast no {{ toastBody.toast?.index }} {{ toastBody.toast?.clock }}

11 | 12 | 13 |
14 |
15 | -------------------------------------------------------------------------------- /src/app/views/base/spinners/spinners.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { DocsExampleComponent } from '@docs-components/public-api'; 3 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, SpinnerComponent, ButtonDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-spinners', 7 | templateUrl: './spinners.component.html', 8 | styleUrls: ['./spinners.component.scss'], 9 | standalone: true, 10 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, SpinnerComponent, ButtonDirective] 11 | }) 12 | export class SpinnersComponent { 13 | 14 | constructor() { } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/views/forms/ranges/ranges.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { DocsExampleComponent } from '@docs-components/public-api'; 3 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, FormLabelDirective, FormControlDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-ranges', 7 | templateUrl: './ranges.component.html', 8 | styleUrls: ['./ranges.component.scss'], 9 | standalone: true, 10 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, FormLabelDirective, FormControlDirective] 11 | }) 12 | export class RangesComponent { 13 | 14 | constructor() { } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/components/docs-link/docs-link.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DocsLinkComponent } from './docs-link.component'; 4 | 5 | describe('DocsLinkComponent', () => { 6 | let component: DocsLinkComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [DocsLinkComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DocsLinkComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/views/theme/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '', 6 | data: { 7 | title: 'Theme' 8 | }, 9 | children: [ 10 | { 11 | path: '', 12 | redirectTo: 'colors', 13 | pathMatch: 'full' 14 | }, 15 | { 16 | path: 'colors', 17 | loadComponent: () => import('./colors.component').then(m => m.ColorsComponent), 18 | data: { 19 | title: 'Colors' 20 | } 21 | }, 22 | { 23 | path: 'typography', 24 | loadComponent: () => import('./typography.component').then(m => m.TypographyComponent), 25 | data: { 26 | title: 'Typography' 27 | } 28 | } 29 | ] 30 | } 31 | ]; 32 | 33 | -------------------------------------------------------------------------------- /.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 | /bazel-out 8 | 9 | # Node 10 | /node_modules 11 | npm-debug.log 12 | yarn-error.log 13 | 14 | # profiling files 15 | chrome-profiler-events*.json 16 | 17 | # IDEs and editors 18 | .idea/ 19 | .project 20 | .classpath 21 | .c9/ 22 | *.launch 23 | .settings/ 24 | *.sublime-workspace 25 | 26 | # Visual Studio Code 27 | .vscode/* 28 | !.vscode/settings.json 29 | !.vscode/tasks.json 30 | !.vscode/launch.json 31 | !.vscode/extensions.json 32 | .history/* 33 | 34 | # Miscellaneous 35 | /.angular/cache 36 | .sass-cache/ 37 | /connect.lock 38 | /coverage 39 | /libpeerconnection.log 40 | testem.log 41 | /typings 42 | 43 | # System files 44 | .DS_Store 45 | Thumbs.db 46 | -------------------------------------------------------------------------------- /src/app/views/notifications/badges/badges.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { DocsExampleComponent } from '@docs-components/public-api'; 3 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, BadgeComponent, ButtonDirective, BorderDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-badges', 7 | templateUrl: './badges.component.html', 8 | styleUrls: ['./badges.component.scss'], 9 | standalone: true, 10 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, BadgeComponent, ButtonDirective, BorderDirective] 11 | }) 12 | export class BadgesComponent { 13 | 14 | constructor() { } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/components/docs-link/docs-link.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, HostBinding, Input, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-docs-link', 5 | templateUrl: './docs-link.component.html', 6 | styleUrls: ['./docs-link.component.scss'], 7 | standalone: true 8 | }) 9 | export class DocsLinkComponent implements OnInit { 10 | 11 | @Input() href?: string = 'https://coreui.io/angular/docs/'; 12 | @Input() name?: string; 13 | @Input() text?: string; 14 | 15 | constructor() { } 16 | 17 | @HostBinding('class') 18 | get hostClasses(): any { 19 | return { 20 | 'float-end': true 21 | }; 22 | } 23 | 24 | ngOnInit(): void { 25 | this.href = this.name ? `https://coreui.io/angular/docs/components/${this.name}` : this.href; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/app/views/forms/select/select.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { ReactiveFormsModule } from '@angular/forms'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, FormSelectDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-select', 8 | templateUrl: './select.component.html', 9 | styleUrls: ['./select.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, FormSelectDirective, ReactiveFormsModule] 12 | }) 13 | export class SelectComponent { 14 | 15 | constructor() { } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets-brand/widgets-brand.component.html: -------------------------------------------------------------------------------- 1 | 2 | @for (widget of brandData; track widget; let i = $index) { 3 | 4 | 9 | 10 | @if (withCharts) { 11 | 18 | {{ chart.id }} 19 | 20 | } 21 | 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/components/docs-callout/docs-callout.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | @if (!!name) { 7 |

8 | An Angular {{ name }} component{{ plural ? 's' : '' }} {{ plural ? 'have' : 'has' }} been created as a native 9 | Angular 10 | version 11 | of Bootstrap {{ name }}. {{ name }} {{ plural ? 'are' : 'is' }} delivered with some new features, 12 | variants, and unique design that matches CoreUI Design System requirements. 13 |

14 | } 15 | 16 | 17 | 18 |
19 | For more information please visit our official documentation of CoreUI Components Library for Angular. 20 |
21 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-footer/default-footer.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DefaultFooterComponent } from './default-footer.component'; 4 | 5 | describe('DefaultFooterComponent', () => { 6 | let component: DefaultFooterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [DefaultFooterComponent] 12 | }) 13 | .compileComponents(); 14 | }); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DefaultFooterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/views/base/tooltips/tooltips.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, TooltipDirective, ButtonDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-tooltips', 8 | templateUrl: './tooltips.component.html', 9 | styleUrls: ['./tooltips.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, TooltipDirective, RouterLink, ButtonDirective] 12 | }) 13 | export class TooltipsComponent { 14 | 15 | constructor() { } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/app/icons/signet.ts: -------------------------------------------------------------------------------- 1 | export const signet = [ 2 | '102 115', 3 | ` 4 | 5 | 6 | `, 7 | ] 8 | 9 | -------------------------------------------------------------------------------- /src/components/docs-callout/docs-callout.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DocsCalloutComponent } from './docs-callout.component'; 4 | import { CalloutModule } from '@coreui/angular'; 5 | 6 | describe('DocsCalloutComponent', () => { 7 | let component: DocsCalloutComponent; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async () => { 11 | await TestBed.configureTestingModule({ 12 | imports: [CalloutModule, DocsCalloutComponent] 13 | }) 14 | .compileComponents(); 15 | }); 16 | 17 | beforeEach(() => { 18 | fixture = TestBed.createComponent(DocsCalloutComponent); 19 | component = fixture.componentInstance; 20 | fixture.detectChanges(); 21 | }); 22 | 23 | it('should create', () => { 24 | expect(component).toBeTruthy(); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /src/app/views/base/tables/tables.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { DocsExampleComponent } from '@docs-components/public-api'; 3 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, TableDirective, TableColorDirective, TableActiveDirective, BorderDirective, AlignDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-tables', 7 | templateUrl: './tables.component.html', 8 | styleUrls: ['./tables.component.scss'], 9 | standalone: true, 10 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, TableDirective, TableColorDirective, TableActiveDirective, BorderDirective, AlignDirective] 11 | }) 12 | export class TablesComponent { 13 | 14 | constructor() { } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/views/pages/register/register.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IconDirective } from '@coreui/icons-angular'; 3 | import { ContainerComponent, RowComponent, ColComponent, TextColorDirective, CardComponent, CardBodyComponent, FormDirective, InputGroupComponent, InputGroupTextDirective, FormControlDirective, ButtonDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-register', 7 | templateUrl: './register.component.html', 8 | styleUrls: ['./register.component.scss'], 9 | standalone: true, 10 | imports: [ContainerComponent, RowComponent, ColComponent, TextColorDirective, CardComponent, CardBodyComponent, FormDirective, InputGroupComponent, InputGroupTextDirective, IconDirective, FormControlDirective, ButtonDirective] 11 | }) 12 | export class RegisterComponent { 13 | 14 | constructor() { } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/components/docs-example/docs-example.component.spec.ts: -------------------------------------------------------------------------------- 1 | // import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | // 3 | // import { DocsExampleComponent } from './docs-example.component'; 4 | // 5 | // describe('DocsExampleComponent', () => { 6 | // let component: DocsExampleComponent; 7 | // let fixture: ComponentFixture; 8 | // 9 | // beforeEach(async () => { 10 | // await TestBed.configureTestingModule({ 11 | // declarations: [ DocsExampleComponent ] 12 | // }) 13 | // .compileComponents(); 14 | // }); 15 | // 16 | // beforeEach(() => { 17 | // fixture = TestBed.createComponent(DocsExampleComponent); 18 | // component = fixture.componentInstance; 19 | // fixture.detectChanges(); 20 | // }); 21 | // 22 | // it('should create', () => { 23 | // expect(component).toBeTruthy(); 24 | // }); 25 | // }); 26 | -------------------------------------------------------------------------------- /src/app/views/pages/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '404', 6 | loadComponent: () => import('./page404/page404.component').then(m => m.Page404Component), 7 | data: { 8 | title: 'Page 404' 9 | } 10 | }, 11 | { 12 | path: '500', 13 | loadComponent: () => import('./page500/page500.component').then(m => m.Page500Component), 14 | data: { 15 | title: 'Page 500' 16 | } 17 | }, 18 | { 19 | path: 'login', 20 | loadComponent: () => import('./login/login.component').then(m => m.LoginComponent), 21 | data: { 22 | title: 'Login Page' 23 | } 24 | }, 25 | { 26 | path: 'register', 27 | loadComponent: () => import('./register/register.component').then(m => m.RegisterComponent), 28 | data: { 29 | title: 'Register Page' 30 | } 31 | } 32 | ]; 33 | -------------------------------------------------------------------------------- /src/app/views/base/paginations/paginations.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, PaginationComponent, PageItemComponent, PageLinkDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-paginations', 8 | templateUrl: './paginations.component.html', 9 | styleUrls: ['./paginations.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, PaginationComponent, PageItemComponent, PageLinkDirective, RouterLink] 12 | }) 13 | export class PaginationsComponent { 14 | 15 | constructor() { } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /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 | AppComponent 11 | ], 12 | }).compileComponents(); 13 | }); 14 | 15 | it('should create the app', () => { 16 | const fixture = TestBed.createComponent(AppComponent); 17 | const app = fixture.componentInstance; 18 | expect(app).toBeTruthy(); 19 | }); 20 | 21 | it(`should have as title 'CoreUI Angular Admin Template'`, () => { 22 | const fixture = TestBed.createComponent(AppComponent); 23 | const app = fixture.componentInstance; 24 | expect(app.title).toEqual('CoreUI Angular Admin Template'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /.github/workflows/build-check.yml: -------------------------------------------------------------------------------- 1 | name: Build Check 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - "dependabot/**" 7 | pull_request: 8 | branches: 9 | - main 10 | - v5.* 11 | schedule: 12 | - # build runs every weekday at 4:15AM UTC 13 | - cron: '15 4 * * *' 14 | 15 | env: 16 | FORCE_COLOR: 2 17 | NODE: 20 18 | 19 | jobs: 20 | build: 21 | strategy: 22 | matrix: 23 | platform: [ubuntu-latest, windows-latest, macOS-latest] 24 | node-version: [20.x] 25 | runs-on: ${{ matrix.platform }} 26 | steps: 27 | - name: Clone repository 28 | uses: actions/checkout@v4 29 | 30 | - name: Set up Node.js 31 | uses: actions/setup-node@v4 32 | with: 33 | node-version: ${{ env.node-version }} 34 | 35 | - name: Install npm dependencies 36 | run: npm install 37 | 38 | - name: Run build 39 | run: npm run build 40 | -------------------------------------------------------------------------------- /src/app/views/buttons/buttons/buttons.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | import { IconDirective } from '@coreui/icons-angular'; 4 | import { DocsExampleComponent } from '@docs-components/public-api'; 5 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, ButtonDirective } from '@coreui/angular'; 6 | 7 | @Component({ 8 | selector: 'app-buttons', 9 | templateUrl: './buttons.component.html', 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ButtonDirective, IconDirective, RouterLink] 12 | }) 13 | export class ButtonsComponent { 14 | 15 | states = ['normal', 'active', 'disabled']; 16 | colors = ['primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark']; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/app/views/pages/page404/page404.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
6 |

404

7 |

Oops! You're lost.

8 |

9 | The page you are looking for was not found. 10 |

11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 |
22 |
23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Tell us about a bug you may have identified in CoreUI Free Angular Admin Template. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | Before opening: 11 | 12 | - [Search for duplicate or closed issues](https://github.com/coreui/coreui-free-angular-admin-template/issues?utf8=%E2%9C%93&q=is%3Aissue) 13 | - [Validate](https://html5.validator.nu/) any HTML to avoid common problems 14 | - Read the [contributing guidelines](https://github.com/coreui/coreui-free-angular-admin-template/blob/v4-dev/.github/CONTRIBUTING.md) 15 | 16 | Bug reports must include: 17 | 18 | - Operating system and version (Windows, macOS, Android, iOS) 19 | - Browser and version (Chrome, Firefox, Safari, Microsoft Edge, Opera, Android Browser) 20 | - A [reduced test case](https://css-tricks.com/reduced-test-cases/) or suggested fix using [CodePen](https://codepen.io/) or [JS Bin](https://jsbin.com/) 21 | -------------------------------------------------------------------------------- /src/app/views/base/accordion/accordions.component.scss: -------------------------------------------------------------------------------- 1 | :host ::ng-deep { 2 | .accordion-custom { 3 | .accordion-button { 4 | background-color: var(--cui-dark); 5 | color: var(--cui-white); 6 | } 7 | 8 | .accordion-button::after { 9 | --cui-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgba%28255, 255, 255, 0.87%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); 10 | --cui-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgba%28255, 255, 255, 0.87%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); 11 | } 12 | } 13 | } 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/app/views/base/popovers/popovers.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { DocsExampleComponent } from '@docs-components/public-api'; 3 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, ButtonDirective, PopoverDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-popovers', 7 | templateUrl: './popovers.component.html', 8 | styleUrls: ['./popovers.component.scss'], 9 | standalone: true, 10 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ButtonDirective, PopoverDirective] 11 | }) 12 | export class PopoversComponent implements OnInit { 13 | 14 | visible = true; 15 | 16 | constructor() { } 17 | 18 | ngOnInit(): void { 19 | setTimeout(() => { 20 | this.visible = !this.visible; 21 | }, 3000); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/app/views/pages/login/login.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NgStyle } from '@angular/common'; 3 | import { IconDirective } from '@coreui/icons-angular'; 4 | import { ContainerComponent, RowComponent, ColComponent, CardGroupComponent, TextColorDirective, CardComponent, CardBodyComponent, FormDirective, InputGroupComponent, InputGroupTextDirective, FormControlDirective, ButtonDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-login', 8 | templateUrl: './login.component.html', 9 | styleUrls: ['./login.component.scss'], 10 | standalone: true, 11 | imports: [ContainerComponent, RowComponent, ColComponent, CardGroupComponent, TextColorDirective, CardComponent, CardBodyComponent, FormDirective, InputGroupComponent, InputGroupTextDirective, IconDirective, FormControlDirective, ButtonDirective, NgStyle] 12 | }) 13 | export class LoginComponent { 14 | 15 | constructor() { } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/app/views/base/collapses/collapses.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { DocsExampleComponent } from '@docs-components/public-api'; 3 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, ButtonDirective, CollapseDirective } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-collapses', 7 | templateUrl: './collapses.component.html', 8 | styleUrls: ['./collapses.component.scss'], 9 | standalone: true, 10 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ButtonDirective, CollapseDirective] 11 | }) 12 | export class CollapsesComponent { 13 | 14 | collapses = [false, false, false, false]; 15 | 16 | constructor() { } 17 | 18 | toggleCollapse(id: number): void { 19 | // @ts-ignore 20 | this.collapses[id] = !this.collapses[id]; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/app/views/pages/page500/page500.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 |

500

7 |

Houston, we have a problem!

8 |

9 | The page you are looking for is temporarily unavailable. 10 |

11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 |
22 |
23 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-layout.component.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | .ng-scrollbar { 3 | --scrollbar-padding: 1px; 4 | --scrollbar-size: 5px; 5 | --scrollbar-thumb-color: var(--cui-gray-500, #999); 6 | --scrollbar-thumb-hover-color: var(--cui-gray-400, #999); 7 | --scrollbar-hover-size: calc(var(--scrollbar-size) * 1.5); 8 | } 9 | } 10 | 11 | // ng-scrollbar css variables 12 | //.cui-scrollbar { 13 | // --scrollbar-border-radius: 7px; 14 | // --scrollbar-padding: 1px; 15 | // --scrollbar-viewport-margin: 0; 16 | // --scrollbar-track-color: transparent; 17 | // --scrollbar-wrapper-color: transparent; 18 | // --scrollbar-thumb-color: rgba(0, 0, 0, 0.2); 19 | // --scrollbar-thumb-hover-color: var(--scrollbar-thumb-color); 20 | // --scrollbar-size: 5px; 21 | // --scrollbar-hover-size: var(--scrollbar-size); 22 | // --scrollbar-thumb-transition: height ease-out 150ms, width ease-out 150ms; 23 | // --scrollbar-track-transition: height ease-out 150ms, width ease-out 150ms; 24 | //} 25 | -------------------------------------------------------------------------------- /src/app/views/base/progress/progress.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { DocsExampleComponent } from '@docs-components/public-api'; 3 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, ProgressBarDirective, ProgressComponent as ProgressComponent_1, ProgressBarComponent, ProgressStackedComponent } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-progress', 7 | templateUrl: './progress.component.html', 8 | standalone: true, 9 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ProgressBarDirective, ProgressComponent_1, ProgressBarComponent, ProgressStackedComponent] 10 | }) 11 | export class ProgressComponent { 12 | 13 | value = 10; 14 | variant?: 'striped'; 15 | 16 | constructor() { 17 | setTimeout(() => { 18 | this.value = 100; 19 | this.variant = 'striped'; 20 | }, 3000); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/app/views/icons/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '', 6 | data: { 7 | title: 'Icons' 8 | }, 9 | children: [ 10 | { 11 | path: '', 12 | redirectTo: 'coreui-icons', 13 | pathMatch: 'full' 14 | }, 15 | { 16 | path: 'coreui-icons', 17 | loadComponent: () => import('./coreui-icons.component').then(m => m.CoreUIIconsComponent), 18 | data: { 19 | title: 'CoreUI Icons' 20 | } 21 | }, 22 | { 23 | path: 'brands', 24 | loadComponent: () => import('./coreui-icons.component').then(m => m.CoreUIIconsComponent), 25 | data: { 26 | title: 'Brands' 27 | } 28 | }, 29 | { 30 | path: 'flags', 31 | loadComponent: () => import('./coreui-icons.component').then(m => m.CoreUIIconsComponent), 32 | data: { 33 | title: 'Flags' 34 | } 35 | } 36 | ] 37 | } 38 | ]; 39 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { NavigationEnd, Router, RouterOutlet } from '@angular/router'; 3 | import { Title } from '@angular/platform-browser'; 4 | 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from './icons/icon-subset'; 7 | 8 | @Component({ 9 | selector: 'app-root', 10 | template: '', 11 | standalone: true, 12 | imports: [RouterOutlet] 13 | }) 14 | export class AppComponent implements OnInit { 15 | title = 'CoreUI Angular Admin Template'; 16 | 17 | constructor( 18 | private router: Router, 19 | private titleService: Title, 20 | private iconSetService: IconSetService 21 | ) { 22 | this.titleService.setTitle(this.title); 23 | // iconSet singleton 24 | this.iconSetService.icons = { ...iconSubset }; 25 | } 26 | 27 | ngOnInit(): void { 28 | this.router.events.subscribe((evt) => { 29 | if (!(evt instanceof NavigationEnd)) { 30 | return; 31 | } 32 | }); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/app/views/base/navs/navs.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, NavComponent, NavItemComponent, NavLinkDirective, ThemeDirective, DropdownComponent, DropdownToggleDirective, DropdownMenuDirective, DropdownItemDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-navs', 8 | templateUrl: './navs.component.html', 9 | styleUrls: ['./navs.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, NavComponent, NavItemComponent, NavLinkDirective, RouterLink, ThemeDirective, DropdownComponent, DropdownToggleDirective, DropdownMenuDirective, DropdownItemDirective] 12 | }) 13 | export class NavsComponent { 14 | 15 | constructor() { } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/app/views/buttons/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '', 6 | data: { 7 | title: 'Buttons' 8 | }, 9 | children: [ 10 | { 11 | path: '', 12 | redirectTo: 'buttons', 13 | pathMatch: 'full' 14 | }, 15 | { 16 | path: 'buttons', 17 | loadComponent: () => import('./buttons/buttons.component').then(m => m.ButtonsComponent), 18 | data: { 19 | title: 'Buttons' 20 | } 21 | }, 22 | { 23 | path: 'button-groups', 24 | loadComponent: () => import('./button-groups/button-groups.component').then(m => m.ButtonGroupsComponent), 25 | data: { 26 | title: 'Button groups' 27 | } 28 | }, 29 | { 30 | path: 'dropdowns', 31 | loadComponent: () => import('./dropdowns/dropdowns.component').then(m => m.DropdownsComponent), 32 | data: { 33 | title: 'Dropdowns' 34 | } 35 | }, 36 | ] 37 | } 38 | ]; 39 | 40 | -------------------------------------------------------------------------------- /src/app/views/forms/form-controls/form-controls.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NgStyle } from '@angular/common'; 3 | import { ReactiveFormsModule, FormsModule } from '@angular/forms'; 4 | import { DocsExampleComponent } from '@docs-components/public-api'; 5 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, FormDirective, FormLabelDirective, FormControlDirective, ButtonDirective } from '@coreui/angular'; 6 | 7 | @Component({ 8 | selector: 'app-form-controls', 9 | templateUrl: './form-controls.component.html', 10 | styleUrls: ['./form-controls.component.scss'], 11 | standalone: true, 12 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ReactiveFormsModule, FormsModule, FormDirective, FormLabelDirective, FormControlDirective, ButtonDirective, NgStyle] 13 | }) 14 | export class FormControlsComponent { 15 | 16 | public favoriteColor = '#26ab3c'; 17 | 18 | constructor() { } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/app/views/theme/colors.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Theme colors 4 | 5 | 6 | 7 | 8 |
Brand Primary Color
9 |
10 | 11 |
Brand Secondary Color
12 |
13 | 14 |
Brand Success Color
15 |
16 | 17 |
Brand Danger Color
18 |
19 | 20 |
Brand Warning Color
21 |
22 | 23 |
Brand Info Color
24 |
25 | 26 |
Brand Light Color
27 |
28 | 29 |
Brand Dark Color
30 |
31 |
32 |
33 |
34 | -------------------------------------------------------------------------------- /src/scss/_scrollbar.scss: -------------------------------------------------------------------------------- 1 | // scrollbar tinkering 2 | 3 | @supports (scrollbar-width: thin) { 4 | * { 5 | scrollbar-width: thin; 6 | scrollbar-color: #444 transparent; 7 | } 8 | } 9 | 10 | //::-webkit-scrollbar { 11 | // width: .7em; 12 | // height: .7em; 13 | //} 14 | 15 | ::-webkit-scrollbar-track { 16 | background: var(--cui-body-bg, #fff); 17 | border-radius: 100vw; 18 | margin-block: .2em; 19 | } 20 | 21 | ::-webkit-scrollbar-thumb { 22 | background: #999; 23 | border: .15em solid var(--cui-body-bg, #fff); 24 | border-radius: 100vw; 25 | } 26 | 27 | ::-webkit-scrollbar-thumb:hover { 28 | background: #444; 29 | } 30 | 31 | .dark-theme::-webkit-scrollbar-thumb { 32 | background: var(--cui-gray-600, #444); 33 | } 34 | 35 | .dark-theme::-webkit-scrollbar-thumb:hover { 36 | background: var(--cui-gray-400, #999); 37 | } 38 | 39 | .ng-scroll-content { 40 | display: flex !important; 41 | } 42 | 43 | .ng-scrollbar:not(.overflow) .ng-scrollbar-wrapper[verticalused="false"] { 44 | //background-color: #e797a5; 45 | .ng-scroll-viewport { 46 | display: flex; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/app/app.config.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig, importProvidersFrom } from '@angular/core'; 2 | import { provideAnimations } from '@angular/platform-browser/animations'; 3 | import { 4 | provideRouter, 5 | withEnabledBlockingInitialNavigation, 6 | withHashLocation, 7 | withInMemoryScrolling, 8 | withRouterConfig, 9 | withViewTransitions 10 | } from '@angular/router'; 11 | 12 | import { DropdownModule, SidebarModule } from '@coreui/angular'; 13 | import { IconSetService } from '@coreui/icons-angular'; 14 | import { routes } from './app.routes'; 15 | 16 | export const appConfig: ApplicationConfig = { 17 | providers: [ 18 | provideRouter(routes, 19 | withRouterConfig({ 20 | onSameUrlNavigation: 'reload' 21 | }), 22 | withInMemoryScrolling({ 23 | scrollPositionRestoration: 'top', 24 | anchorScrolling: 'enabled' 25 | }), 26 | withEnabledBlockingInitialNavigation(), 27 | withViewTransitions(), 28 | withHashLocation() 29 | ), 30 | importProvidersFrom(SidebarModule, DropdownModule), 31 | IconSetService, 32 | provideAnimations() 33 | ] 34 | }; 35 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. 2 | # 3 | # You can adjust the behavior by modifying this file. 4 | # For more information, see: 5 | # https://github.com/actions/stale 6 | name: Mark stale issues and pull requests 7 | 8 | on: 9 | schedule: 10 | - cron: '34 23 * * 0' 11 | 12 | jobs: 13 | stale: 14 | 15 | runs-on: ubuntu-latest 16 | permissions: 17 | issues: write 18 | pull-requests: write 19 | 20 | steps: 21 | - uses: actions/stale@v5 22 | with: 23 | repo-token: ${{ secrets.GITHUB_TOKEN }} 24 | stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions' 25 | stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions' 26 | stale-issue-label: 'no-issue-activity' 27 | stale-pr-label: 'no-pr-activity' 28 | -------------------------------------------------------------------------------- /src/app/views/forms/floating-labels/floating-labels.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NgStyle } from '@angular/common'; 3 | import { ReactiveFormsModule, FormsModule } from '@angular/forms'; 4 | import { DocsExampleComponent } from '@docs-components/public-api'; 5 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, FormFloatingDirective, FormControlDirective, FormLabelDirective, FormDirective, FormSelectDirective, GutterDirective } from '@coreui/angular'; 6 | 7 | @Component({ 8 | selector: 'app-floating-labels', 9 | templateUrl: './floating-labels.component.html', 10 | styleUrls: ['./floating-labels.component.scss'], 11 | standalone: true, 12 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, FormFloatingDirective, FormControlDirective, FormLabelDirective, ReactiveFormsModule, FormsModule, FormDirective, NgStyle, FormSelectDirective, GutterDirective] 13 | }) 14 | export class FloatingLabelsComponent { 15 | 16 | constructor() { } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-2024 creativeLabs Łukasz Holeczek 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | CoreUI Free Angular Admin Template 22 | 23 | 24 | 25 | 26 |
27 | 28 | Loading... 29 |
30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /src/app/views/base/placeholders/placeholders.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, CardImgDirective, CardTitleDirective, CardTextDirective, ButtonDirective, ColDirective, PlaceholderAnimationDirective, PlaceholderDirective, BgColorDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-placeholders', 8 | templateUrl: './placeholders.component.html', 9 | styleUrls: ['./placeholders.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, CardImgDirective, CardTitleDirective, CardTextDirective, ButtonDirective, ColDirective, RouterLink, PlaceholderAnimationDirective, PlaceholderDirective, BgColorDirective] 12 | }) 13 | export class PlaceholdersComponent implements OnInit { 14 | 15 | constructor() { } 16 | 17 | ngOnInit(): void { 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /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 | "noImplicitOverride": true, 10 | "noPropertyAccessFromIndexSignature": true, 11 | "noImplicitReturns": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "sourceMap": true, 14 | "declaration": false, 15 | "downlevelIteration": true, 16 | "experimentalDecorators": true, 17 | "moduleResolution": "node", 18 | "importHelpers": true, 19 | "target": "ES2022", 20 | "module": "ES2022", 21 | "useDefineForClassFields": false, 22 | "lib": [ 23 | "ES2022", 24 | "dom" 25 | ] 26 | }, 27 | "angularCompilerOptions": { 28 | "enableI18nLegacyMessageIdFormat": false, 29 | "strictInjectionParameters": true, 30 | "strictInputAccessModifiers": true, 31 | "strictTemplates": true 32 | }, 33 | "files": [], 34 | "references": [ 35 | { "path": "./tsconfig.app.json" }, 36 | { "path": "./tsconfig.spec.json" }, 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /src/app/views/notifications/toasters/toast-simple/toast.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectorRef, Component, ElementRef, forwardRef, Input, Renderer2 } from '@angular/core'; 2 | 3 | import { ToastComponent, ToasterService, ToastHeaderComponent, ToastBodyComponent, ToastCloseDirective, ProgressBarDirective, ProgressComponent } from '@coreui/angular'; 4 | 5 | @Component({ 6 | selector: 'app-toast-simple', 7 | templateUrl: './toast.component.html', 8 | styleUrls: ['./toast.component.scss'], 9 | providers: [{ provide: ToastComponent, useExisting: forwardRef(() => AppToastComponent) }], 10 | standalone: true, 11 | imports: [ToastHeaderComponent, ToastBodyComponent, ToastCloseDirective, ProgressBarDirective, ProgressComponent] 12 | }) 13 | export class AppToastComponent extends ToastComponent { 14 | 15 | @Input() closeButton = true; 16 | @Input() title = ''; 17 | 18 | constructor( 19 | public override hostElement: ElementRef, 20 | public override renderer: Renderer2, 21 | public override toasterService: ToasterService, 22 | public override changeDetectorRef: ChangeDetectorRef 23 | ) { 24 | super(hostElement, renderer, toasterService, changeDetectorRef); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/assets/brand/coreui-signet.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | signet 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/assets/brand/coreui-signet-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | signet_white 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/app/views/charts/charts.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { CardModule, GridModule } from '@coreui/angular'; 4 | import { ChartjsModule } from '@coreui/angular-chartjs'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../icons/icon-subset'; 7 | import { ChartsComponent } from './charts.component'; 8 | 9 | describe('ChartsComponent', () => { 10 | let component: ChartsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(waitForAsync(() => { 15 | TestBed.configureTestingModule({ 16 | imports: [GridModule, CardModule, ChartjsModule, ChartsComponent], 17 | providers: [IconSetService] 18 | }).compileComponents(); 19 | })); 20 | 21 | beforeEach(() => { 22 | iconSetService = TestBed.inject(IconSetService); 23 | iconSetService.icons = { ...iconSubset }; 24 | 25 | fixture = TestBed.createComponent(ChartsComponent); 26 | component = fixture.componentInstance; 27 | fixture.detectChanges(); 28 | }); 29 | 30 | it('should create', () => { 31 | expect(component).toBeTruthy(); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /src/app/views/forms/layout/layout.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { ReactiveFormsModule, FormsModule } from '@angular/forms'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, FormControlDirective, FormDirective, FormLabelDirective, FormSelectDirective, FormCheckComponent, FormCheckInputDirective, FormCheckLabelDirective, ButtonDirective, ColDirective, InputGroupComponent, InputGroupTextDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-layout', 8 | templateUrl: './layout.component.html', 9 | styleUrls: ['./layout.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, FormControlDirective, ReactiveFormsModule, FormsModule, FormDirective, FormLabelDirective, FormSelectDirective, FormCheckComponent, FormCheckInputDirective, FormCheckLabelDirective, ButtonDirective, ColDirective, InputGroupComponent, InputGroupTextDirective] 12 | }) 13 | export class LayoutComponent { 14 | 15 | constructor() { } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/app/views/notifications/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '', 6 | data: { 7 | title: 'Notifications' 8 | }, 9 | children: [ 10 | { 11 | path: '', 12 | redirectTo: 'badges', 13 | pathMatch: 'full' 14 | }, 15 | { 16 | path: 'alerts', 17 | loadComponent: () => import('./alerts/alerts.component').then(m => m.AlertsComponent), 18 | data: { 19 | title: 'Alerts' 20 | } 21 | }, 22 | { 23 | path: 'badges', 24 | loadComponent: () => import('./badges/badges.component').then(m => m.BadgesComponent), 25 | data: { 26 | title: 'Badges' 27 | } 28 | }, 29 | { 30 | path: 'modal', 31 | loadComponent: () => import('./modals/modals.component').then(m => m.ModalsComponent), 32 | data: { 33 | title: 'Modal' 34 | } 35 | }, 36 | { 37 | path: 'toasts', 38 | loadComponent: () => import('./toasters/toasters.component').then(m => m.ToastersComponent), 39 | data: { 40 | title: 'Toasts' 41 | } 42 | } 43 | ] 44 | } 45 | ]; 46 | -------------------------------------------------------------------------------- /src/app/views/forms/select/select.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, GridModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { SelectComponent } from './select.component'; 8 | 9 | describe('SelectComponent', () => { 10 | let component: SelectComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [CardModule, GridModule, RouterTestingModule, SelectComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(SelectComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/components/docs-callout/docs-callout.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import packageJson from '../../../package.json'; 3 | import { NgTemplateOutlet } from '@angular/common'; 4 | import { CalloutComponent } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-docs-callout', 8 | templateUrl: './docs-callout.component.html', 9 | styleUrls: ['./docs-callout.component.scss'], 10 | standalone: true, 11 | imports: [CalloutComponent, NgTemplateOutlet] 12 | }) 13 | export class DocsCalloutComponent { 14 | 15 | @Input() name: string = ''; 16 | 17 | constructor() { } 18 | 19 | private _href: string = 'https://coreui.io/angular/docs/'; 20 | 21 | get href(): string { 22 | return this._href; 23 | } 24 | 25 | @Input() 26 | set href(value: string) { 27 | const version = packageJson?.config?.coreui_library_short_version; 28 | const docsUrl = packageJson?.config?.coreui_library_docs_url ?? 'https://coreui.io/angular/'; 29 | // const path: string = version ? `${version}/${value}` : `${value}`; 30 | const path: string = value; 31 | this._href = `${docsUrl}${path}`; 32 | } 33 | 34 | get plural() { 35 | return this.name?.slice(-1) === 's'; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/app/views/pages/page404/page404.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ButtonModule, FormModule, GridModule } from '@coreui/angular'; 4 | import { IconModule } from '@coreui/icons-angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { Page404Component } from './page404.component'; 8 | 9 | describe('Page404Component', () => { 10 | let component: Page404Component; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [FormModule, GridModule, ButtonModule, IconModule, Page404Component], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(Page404Component); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/pages/page500/page500.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ButtonModule, FormModule, GridModule } from '@coreui/angular'; 4 | import { IconModule } from '@coreui/icons-angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { Page500Component } from './page500.component'; 8 | 9 | describe('Page500Component', () => { 10 | let component: Page500Component; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [GridModule, ButtonModule, FormModule, IconModule, Page500Component], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(Page500Component); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets-e/widgets-e.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { GridModule, WidgetModule } from '@coreui/angular'; 4 | import { ChartjsModule } from '@coreui/angular-chartjs'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { WidgetsEComponent } from './widgets-e.component'; 8 | 9 | describe('WidgetsEComponent', () => { 10 | let component: WidgetsEComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [WidgetModule, GridModule, ChartjsModule, WidgetsEComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(WidgetsEComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/pages/login/login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ButtonModule, CardModule, FormModule, GridModule } from '@coreui/angular'; 4 | import { LoginComponent } from './login.component'; 5 | import { IconModule } from '@coreui/icons-angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | 9 | describe('LoginComponent', () => { 10 | let component: LoginComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [FormModule, CardModule, GridModule, ButtonModule, IconModule, LoginComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(LoginComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/forms/ranges/ranges.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, FormModule, GridModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { RangesComponent } from './ranges.component'; 8 | 9 | describe('RangesComponent', () => { 10 | let component: RangesComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [CardModule, GridModule, FormModule, RouterTestingModule, RangesComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(RangesComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/navs/navs.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, DropdownModule, GridModule, NavModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { NavsComponent } from './navs.component'; 8 | 9 | describe('NavsComponent', () => { 10 | let component: NavsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [GridModule, CardModule, RouterTestingModule, NavModule, DropdownModule, NavsComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(NavsComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/tabs/tabs.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { IconDirective } from '@coreui/icons-angular'; 3 | import { RouterLink } from '@angular/router'; 4 | import { 5 | CardBodyComponent, 6 | CardComponent, 7 | CardHeaderComponent, 8 | ColComponent, 9 | NavComponent, 10 | NavItemComponent, 11 | NavLinkDirective, 12 | RoundedDirective, 13 | RowComponent, 14 | TabContentComponent, 15 | TabContentRefDirective, 16 | TabPaneComponent, 17 | TextColorDirective 18 | } from '@coreui/angular'; 19 | 20 | @Component({ 21 | selector: 'app-tabs', 22 | templateUrl: './tabs.component.html', 23 | styleUrls: ['./tabs.component.scss'], 24 | standalone: true, 25 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, NavComponent, NavItemComponent, NavLinkDirective, TabContentRefDirective, RouterLink, IconDirective, TabContentComponent, RoundedDirective, TabPaneComponent] 26 | }) 27 | export class TabsComponent { 28 | 29 | public panes = [ 30 | { name: 'Home 01', id: 'tab-01', icon: 'cilHome' }, 31 | { name: 'Profile 02', id: 'tab-02', icon: 'cilUser' }, 32 | { name: 'Contact 03', id: 'tab-03', icon: 'cilCode' } 33 | ]; 34 | 35 | constructor() { } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/app/views/base/progress/progress.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, GridModule, ProgressModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { ProgressComponent } from './progress.component'; 8 | 9 | describe('ProgressComponent', () => { 10 | let component: ProgressComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [ProgressModule, CardModule, GridModule, RouterTestingModule, ProgressComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(ProgressComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/tabs/tabs.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, GridModule, NavModule, TabsModule } from '@coreui/angular'; 5 | import { IconModule, IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { TabsComponent } from './tabs.component'; 8 | 9 | describe('TabsComponent', () => { 10 | let component: TabsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [TabsModule, GridModule, CardModule, IconModule, RouterTestingModule, NavModule, TabsComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(TabsComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/pages/register/register.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ButtonModule, CardModule, FormModule, GridModule } from '@coreui/angular'; 4 | import { IconModule } from '@coreui/icons-angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { RegisterComponent } from './register.component'; 8 | 9 | describe('RegisterComponent', () => { 10 | let component: RegisterComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [CardModule, FormModule, GridModule, ButtonModule, IconModule, RegisterComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(RegisterComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/forms/layout/layout.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { ButtonModule, CardModule, FormModule, GridModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { LayoutComponent } from './layout.component'; 8 | 9 | describe('LayoutComponent', () => { 10 | let component: LayoutComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [FormModule, CardModule, GridModule, ButtonModule, RouterTestingModule, LayoutComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(LayoutComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/tables/tables.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, GridModule, TableModule, UtilitiesModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { TablesComponent } from './tables.component'; 8 | 9 | describe('TablesComponent', () => { 10 | let component: TablesComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [GridModule, CardModule, TableModule, GridModule, UtilitiesModule, RouterTestingModule, TablesComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(TablesComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/popovers/popovers.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { ButtonModule, CardModule, GridModule, PopoverModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { PopoversComponent } from './popovers.component'; 8 | 9 | describe('PopoversComponent', () => { 10 | let component: PopoversComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [CardModule, GridModule, PopoverModule, ButtonModule, RouterTestingModule, PopoversComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(PopoversComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/spinners/spinners.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { ButtonModule, CardModule, GridModule, SpinnerModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { SpinnersComponent } from './spinners.component'; 8 | 9 | describe('SpinnersComponent', () => { 10 | let component: SpinnersComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [SpinnerModule, CardModule, GridModule, ButtonModule, RouterTestingModule, SpinnersComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(SpinnersComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/tooltips/tooltips.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { ButtonModule, CardModule, GridModule, TooltipModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { TooltipsComponent } from './tooltips.component'; 8 | 9 | describe('TooltipsComponent', () => { 10 | let component: TooltipsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [CardModule, GridModule, TooltipModule, ButtonModule, RouterTestingModule, TooltipsComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(TooltipsComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/paginations/paginations.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, GridModule, PaginationModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { PaginationsComponent } from './paginations.component'; 8 | 9 | describe('PaginationsComponent', () => { 10 | let component: PaginationsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [PaginationModule, CardModule, GridModule, RouterTestingModule, PaginationsComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(PaginationsComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/breadcrumbs/breadcrumbs.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { BreadcrumbModule, CardModule, GridModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { BreadcrumbsComponent } from './breadcrumbs.component'; 8 | 9 | describe('BreadcrumbsComponent', () => { 10 | let component: BreadcrumbsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(waitForAsync(() => { 15 | TestBed.configureTestingModule({ 16 | imports: [CardModule, GridModule, BreadcrumbModule, RouterTestingModule, BreadcrumbsComponent], 17 | providers: [IconSetService] 18 | }).compileComponents(); 19 | })); 20 | 21 | beforeEach(() => { 22 | iconSetService = TestBed.inject(IconSetService); 23 | iconSetService.icons = { ...iconSubset }; 24 | 25 | fixture = TestBed.createComponent(BreadcrumbsComponent); 26 | component = fixture.componentInstance; 27 | fixture.detectChanges(); 28 | }); 29 | 30 | it('should create', () => { 31 | expect(component).toBeTruthy(); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /src/app/views/notifications/badges/badges.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { BadgeModule, ButtonModule, CardModule, GridModule, UtilitiesModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { BadgesComponent } from './badges.component'; 8 | 9 | describe('BadgesComponent', () => { 10 | let component: BadgesComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [BadgeModule, CardModule, GridModule, UtilitiesModule, ButtonModule, RouterTestingModule, BadgesComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(BadgesComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/forms/floating-labels/floating-labels.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, FormModule, GridModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { FloatingLabelsComponent } from './floating-labels.component'; 8 | 9 | describe('FloatingLabelsComponent', () => { 10 | let component: FloatingLabelsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [CardModule, GridModule, RouterTestingModule, FormModule, FloatingLabelsComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(FloatingLabelsComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/buttons/buttons/buttons.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { ButtonModule, CardModule, GridModule } from '@coreui/angular'; 5 | import { IconModule } from '@coreui/icons-angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { ButtonsComponent } from './buttons.component'; 9 | 10 | describe('ButtonsComponent', () => { 11 | let component: ButtonsComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [CardModule, GridModule, ButtonModule, RouterTestingModule, IconModule, ButtonsComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(ButtonsComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/notifications/toasters/toast-simple/toast.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; 3 | 4 | import { ButtonModule, ProgressModule, ToastModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../../icons/icon-subset'; 7 | import { AppToastComponent } from './toast.component'; 8 | 9 | describe('ToastComponent', () => { 10 | let component: AppToastComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(waitForAsync(() => { 15 | TestBed.configureTestingModule({ 16 | imports: [NoopAnimationsModule, ToastModule, ProgressModule, ButtonModule, AppToastComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | })); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(AppToastComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/cards/cards.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { ButtonModule, CardModule, GridModule, ListGroupModule, NavModule, UtilitiesModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { CardsComponent } from './cards.component'; 8 | 9 | describe('CardsComponent', () => { 10 | let component: CardsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [CardModule, NavModule, GridModule, ListGroupModule, UtilitiesModule, ButtonModule, RouterTestingModule, CardsComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(CardsComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/base/placeholders/placeholders.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { ButtonModule, CardModule, GridModule, UtilitiesModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { PlaceholdersComponent } from './placeholders.component'; 8 | 9 | describe('PlaceholdersComponent', () => { 10 | let component: PlaceholdersComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [CardModule, GridModule, UtilitiesModule, ButtonModule, RouterTestingModule, PlaceholdersComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(PlaceholdersComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets-brand/widgets-brand.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { GridModule, WidgetModule } from '@coreui/angular'; 4 | import { ChartjsModule } from '@coreui/angular-chartjs'; 5 | import { IconModule } from '@coreui/icons-angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { WidgetsBrandComponent } from './widgets-brand.component'; 9 | 10 | describe('WidgetsBrandComponent', () => { 11 | let component: WidgetsBrandComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [WidgetModule, GridModule, ChartjsModule, IconModule, WidgetsBrandComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(WidgetsBrandComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/forms/input-groups/input-groups.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { ButtonModule, CardModule, DropdownModule, FormModule, GridModule } from '@coreui/angular'; 5 | import { IconSetService } from '@coreui/icons-angular'; 6 | import { iconSubset } from '../../../icons/icon-subset'; 7 | import { InputGroupsComponent } from './input-groups.component'; 8 | 9 | describe('InputGroupsComponent', () => { 10 | let component: InputGroupsComponent; 11 | let fixture: ComponentFixture; 12 | let iconSetService: IconSetService; 13 | 14 | beforeEach(async () => { 15 | await TestBed.configureTestingModule({ 16 | imports: [FormModule, CardModule, GridModule, ButtonModule, DropdownModule, RouterTestingModule, InputGroupsComponent], 17 | providers: [IconSetService] 18 | }) 19 | .compileComponents(); 20 | }); 21 | 22 | beforeEach(() => { 23 | iconSetService = TestBed.inject(IconSetService); 24 | iconSetService.icons = { ...iconSubset }; 25 | 26 | fixture = TestBed.createComponent(InputGroupsComponent); 27 | component = fixture.componentInstance; 28 | fixture.detectChanges(); 29 | }); 30 | 31 | it('should create', () => { 32 | expect(component).toBeTruthy(); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/app/views/notifications/alerts/alerts.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { AlertModule, ButtonModule, CardModule, GridModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { AlertsComponent } from './alerts.component'; 9 | 10 | describe('AlertsComponent', () => { 11 | let component: AlertsComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [AlertModule, ButtonModule, NoopAnimationsModule, GridModule, CardModule, RouterTestingModule, AlertsComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(AlertsComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/base/accordion/accordions.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { AccordionModule, CardModule, GridModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { AccordionsComponent } from './accordions.component'; 9 | 10 | describe('AccordionsComponent', () => { 11 | let component: AccordionsComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [AccordionModule, NoopAnimationsModule, CardModule, GridModule, RouterTestingModule, AccordionsComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(AccordionsComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/forms/form-controls/form-controls.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { FormsModule } from '@angular/forms'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { ButtonModule, CardModule, FormModule, GridModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { FormControlsComponent } from './form-controls.component'; 9 | 10 | describe('FormControlsComponent', () => { 11 | let component: FormControlsComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [CardModule, GridModule, FormsModule, FormModule, ButtonModule, RouterTestingModule, FormControlsComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(FormControlsComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/forms/input-groups/input-groups.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { ReactiveFormsModule } from '@angular/forms'; 3 | import { RouterLink } from '@angular/router'; 4 | import { DocsExampleComponent } from '@docs-components/public-api'; 5 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, InputGroupComponent, InputGroupTextDirective, FormControlDirective, FormLabelDirective, FormCheckInputDirective, ButtonDirective, ThemeDirective, DropdownComponent, DropdownToggleDirective, DropdownMenuDirective, DropdownItemDirective, DropdownDividerDirective, FormSelectDirective } from '@coreui/angular'; 6 | 7 | @Component({ 8 | selector: 'app-input-groups', 9 | templateUrl: './input-groups.component.html', 10 | styleUrls: ['./input-groups.component.scss'], 11 | standalone: true, 12 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, InputGroupComponent, InputGroupTextDirective, FormControlDirective, FormLabelDirective, FormCheckInputDirective, ButtonDirective, ThemeDirective, DropdownComponent, DropdownToggleDirective, DropdownMenuDirective, DropdownItemDirective, RouterLink, DropdownDividerDirective, FormSelectDirective, ReactiveFormsModule] 13 | }) 14 | export class InputGroupsComponent { 15 | 16 | constructor() { } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/app/views/forms/validation/validation.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { FormsModule } from '@angular/forms'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { ButtonModule, CardModule, FormModule, GridModule, ListGroupModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { ValidationComponent } from './validation.component'; 9 | 10 | describe('ValidationComponent', () => { 11 | let component: ValidationComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [FormModule, ButtonModule, ListGroupModule, FormsModule, GridModule, CardModule, RouterTestingModule, ValidationComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(ValidationComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/base/collapses/collapses.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { ButtonModule, CardModule, CollapseModule, GridModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { CollapsesComponent } from './collapses.component'; 9 | 10 | describe('CollapsesComponent', () => { 11 | let component: CollapsesComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [CardModule, CollapseModule, NoopAnimationsModule, GridModule, ButtonModule, RouterTestingModule, CollapsesComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(CollapsesComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/notifications/modals/modals.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { ButtonModule, CardModule, GridModule, ModalModule, PopoverModule, TooltipModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { ModalsComponent } from './modals.component'; 9 | 10 | describe('ModalsComponent', () => { 11 | let component: ModalsComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [ModalModule, NoopAnimationsModule, GridModule, CardModule, PopoverModule, ButtonModule, RouterTestingModule, TooltipModule, ModalsComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(ModalsComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/base/list-groups/list-groups.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { ReactiveFormsModule } from '@angular/forms'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { BadgeModule, ButtonModule, CardModule, FormModule, GridModule, ListGroupModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { ListGroupsComponent } from './list-groups.component'; 9 | 10 | describe('ListGroupsComponent', () => { 11 | let component: ListGroupsComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [ListGroupModule, ButtonModule, ReactiveFormsModule, BadgeModule, FormModule, GridModule, CardModule, RouterTestingModule, ListGroupsComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(ListGroupsComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/forms/checks-radios/checks-radios.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { ReactiveFormsModule } from '@angular/forms'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { ButtonGroupModule, ButtonModule, CardModule, FormModule, GridModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { ChecksRadiosComponent } from './checks-radios.component'; 9 | 10 | describe('ChecksRadiosComponent', () => { 11 | let component: ChecksRadiosComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [CardModule, GridModule, ButtonModule, FormModule, ReactiveFormsModule, RouterTestingModule, ButtonGroupModule, ChecksRadiosComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(ChecksRadiosComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/base/carousels/carousels.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { CardModule, CarouselModule, GridModule } from '@coreui/angular'; 6 | import { IconModule } from '@coreui/icons-angular'; 7 | import { IconSetService } from '@coreui/icons-angular'; 8 | import { iconSubset } from '../../../icons/icon-subset'; 9 | import { CarouselsComponent } from './carousels.component'; 10 | 11 | describe('CarouselsComponent', () => { 12 | let component: CarouselsComponent; 13 | let fixture: ComponentFixture; 14 | let iconSetService: IconSetService 15 | 16 | beforeEach(waitForAsync(() => { 17 | TestBed.configureTestingModule({ 18 | imports: [CarouselModule, NoopAnimationsModule, CardModule, GridModule, IconModule, RouterTestingModule, CarouselsComponent], 19 | providers: [IconSetService] 20 | }) 21 | .compileComponents(); 22 | })); 23 | 24 | beforeEach(() => { 25 | iconSetService = TestBed.inject(IconSetService); 26 | iconSetService.icons = { ...iconSubset }; 27 | 28 | fixture = TestBed.createComponent(CarouselsComponent); 29 | component = fixture.componentInstance; 30 | fixture.detectChanges(); 31 | }); 32 | 33 | it('should create', () => { 34 | expect(component).toBeTruthy(); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /src/app/views/notifications/modals/modals.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NgTemplateOutlet } from '@angular/common'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { 5 | ButtonCloseDirective, 6 | ButtonDirective, 7 | CardBodyComponent, 8 | CardComponent, 9 | CardHeaderComponent, 10 | ColComponent, 11 | ModalBodyComponent, 12 | ModalComponent, 13 | ModalFooterComponent, 14 | ModalHeaderComponent, 15 | ModalTitleDirective, 16 | ModalToggleDirective, 17 | PopoverDirective, 18 | RowComponent, 19 | TextColorDirective, 20 | ThemeDirective, 21 | TooltipDirective 22 | } from '@coreui/angular'; 23 | 24 | @Component({ 25 | selector: 'app-modals', 26 | templateUrl: './modals.component.html', 27 | styleUrls: ['./modals.component.scss'], 28 | standalone: true, 29 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ModalComponent, ModalHeaderComponent, ModalTitleDirective, ThemeDirective, ButtonCloseDirective, ModalBodyComponent, ModalFooterComponent, ButtonDirective, NgTemplateOutlet, ModalToggleDirective, PopoverDirective, TooltipDirective] 30 | }) 31 | export class ModalsComponent { 32 | 33 | public liveDemoVisible = false; 34 | 35 | toggleLiveDemo() { 36 | this.liveDemoVisible = !this.liveDemoVisible; 37 | } 38 | 39 | handleLiveDemoChange(event: boolean) { 40 | this.liveDemoVisible = event; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/app/views/buttons/button-groups/button-groups.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | import { ReactiveFormsModule } from '@angular/forms'; 4 | 5 | import { ButtonGroupModule, ButtonModule, CardModule, DropdownModule, FormModule, GridModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { ButtonGroupsComponent } from './button-groups.component'; 9 | 10 | describe('ButtonGroupsComponent', () => { 11 | let component: ButtonGroupsComponent; 12 | let fixture: ComponentFixture; 13 | let iconSetService: IconSetService; 14 | 15 | beforeEach(async () => { 16 | await TestBed.configureTestingModule({ 17 | imports: [ReactiveFormsModule, ButtonModule, DropdownModule, FormModule, GridModule, CardModule, RouterTestingModule, ButtonModule, ButtonGroupModule, ButtonGroupsComponent], 18 | providers: [IconSetService] 19 | }) 20 | .compileComponents(); 21 | }); 22 | 23 | beforeEach(() => { 24 | iconSetService = TestBed.inject(IconSetService); 25 | iconSetService.icons = { ...iconSubset }; 26 | 27 | fixture = TestBed.createComponent(ButtonGroupsComponent); 28 | component = fixture.componentInstance; 29 | fixture.detectChanges(); 30 | }); 31 | 32 | it('should create', () => { 33 | expect(component).toBeTruthy(); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ButtonModule, DropdownModule, GridModule, WidgetModule } from '@coreui/angular'; 4 | import { IconModule } from '@coreui/icons-angular'; 5 | import { ChartjsModule } from '@coreui/angular-chartjs'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { WidgetsDropdownComponent } from './widgets-dropdown.component'; 9 | import { RouterTestingModule } from '@angular/router/testing'; 10 | 11 | describe('WidgetsDropdownComponent', () => { 12 | let component: WidgetsDropdownComponent; 13 | let fixture: ComponentFixture; 14 | let iconSetService: IconSetService; 15 | 16 | beforeEach(async () => { 17 | await TestBed.configureTestingModule({ 18 | imports: [WidgetModule, DropdownModule, IconModule, ButtonModule, ChartjsModule, GridModule, WidgetsDropdownComponent, RouterTestingModule], 19 | providers: [IconSetService] 20 | }) 21 | .compileComponents(); 22 | }); 23 | 24 | beforeEach(() => { 25 | iconSetService = TestBed.inject(IconSetService); 26 | iconSetService.icons = { ...iconSubset }; 27 | 28 | fixture = TestBed.createComponent(WidgetsDropdownComponent); 29 | component = fixture.componentInstance; 30 | fixture.detectChanges(); 31 | }); 32 | 33 | it('should create', () => { 34 | expect(component).toBeTruthy(); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /src/app/views/base/breadcrumbs/breadcrumbs.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { NgClass } from '@angular/common'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { 5 | BreadcrumbComponent, 6 | BreadcrumbItemComponent, 7 | BreadcrumbRouterComponent, 8 | CardBodyComponent, 9 | CardComponent, 10 | CardHeaderComponent, 11 | ColComponent, 12 | RowComponent, 13 | TextColorDirective 14 | } from '@coreui/angular'; 15 | 16 | @Component({ 17 | templateUrl: './breadcrumbs.component.html', 18 | styleUrls: ['./breadcrumbs.component.scss'], 19 | standalone: true, 20 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, BreadcrumbComponent, BreadcrumbItemComponent, NgClass, BreadcrumbRouterComponent] 21 | }) 22 | export class BreadcrumbsComponent implements OnInit { 23 | public items = []; 24 | 25 | constructor() {} 26 | 27 | ngOnInit(): void { 28 | this.items = [ 29 | { label: 'Home', url: '/', attributes: { title: 'Home' } }, 30 | { label: 'Library', url: '/' }, 31 | { label: 'Data', url: '/dashboard/' }, 32 | { label: 'CoreUI', url: '/' } 33 | ]; 34 | 35 | setTimeout(() => { 36 | this.items = [ 37 | { label: 'CoreUI', url: '/' }, 38 | { label: 'Data', url: '/dashboard/' }, 39 | { label: 'Library', url: '/' }, 40 | { label: 'Home', url: '/', attributes: { title: 'Home' } } 41 | ]; 42 | }, 5000); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/app/views/notifications/alerts/alerts.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | import { 4 | AlertComponent, 5 | AlertHeadingDirective, 6 | AlertLinkDirective, 7 | ButtonCloseDirective, 8 | ButtonDirective, 9 | CardBodyComponent, 10 | CardComponent, 11 | CardHeaderComponent, 12 | ColComponent, 13 | RowComponent, 14 | TemplateIdDirective, 15 | TextColorDirective, 16 | ThemeDirective 17 | } from '@coreui/angular'; 18 | import { IconDirective } from '@coreui/icons-angular'; 19 | import { DocsExampleComponent } from '@docs-components/public-api'; 20 | 21 | @Component({ 22 | selector: 'app-alerts', 23 | templateUrl: './alerts.component.html', 24 | styleUrls: ['./alerts.component.scss'], 25 | standalone: true, 26 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, AlertComponent, AlertLinkDirective, RouterLink, AlertHeadingDirective, IconDirective, TemplateIdDirective, ThemeDirective, ButtonCloseDirective, ButtonDirective] 27 | }) 28 | export class AlertsComponent implements OnInit { 29 | 30 | visible = [true, true]; 31 | dismissible = true; 32 | 33 | constructor() { } 34 | 35 | ngOnInit(): void { 36 | } 37 | 38 | onAlertVisibleChange(eventValue: any = this.visible) { 39 | this.visible[1] = eventValue; 40 | } 41 | 42 | onResetDismiss() { 43 | this.visible = [true, true]; 44 | } 45 | 46 | onToggleDismiss() { 47 | this.dismissible = !this.dismissible; 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/scss/_theme.scss: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: var(--cui-tertiary-bg); 3 | } 4 | 5 | .wrapper { 6 | width: 100%; 7 | @include ltr-rtl("padding-left", var(--cui-sidebar-occupy-start, 0)); 8 | @include ltr-rtl("padding-right", var(--cui-sidebar-occupy-end, 0)); 9 | will-change: auto; 10 | @include transition(padding .15s); 11 | } 12 | 13 | .header > .container-fluid, 14 | .sidebar-header { 15 | min-height: calc(4rem + 1px); // stylelint-disable-line function-disallowed-list 16 | } 17 | 18 | .sidebar-brand-full { 19 | margin-left: 3px; 20 | } 21 | 22 | .sidebar-header { 23 | .nav-underline-border { 24 | --cui-nav-underline-border-link-padding-x: 1rem; 25 | --cui-nav-underline-border-gap: 0; 26 | } 27 | 28 | .nav-link { 29 | display: flex; 30 | align-items: center; 31 | min-height: calc(4rem + 1px); // stylelint-disable-line function-disallowed-list 32 | } 33 | } 34 | 35 | .sidebar-toggler { 36 | @include ltr-rtl("margin-left", auto); 37 | } 38 | 39 | .sidebar-narrow, 40 | .sidebar-narrow-unfoldable:not(:hover) { 41 | .sidebar-toggler { 42 | @include ltr-rtl("margin-right", auto); 43 | } 44 | } 45 | 46 | .header > .container-fluid + .container-fluid { 47 | min-height: 3rem; 48 | } 49 | 50 | .footer { 51 | min-height: calc(3rem + 1px); // stylelint-disable-line function-disallowed-list 52 | } 53 | 54 | @if $enable-dark-mode { 55 | @include color-mode(dark) { 56 | body { 57 | background-color: var(--cui-dark-bg-subtle); 58 | } 59 | 60 | .footer { 61 | --cui-footer-bg: var(--cui-body-bg); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/app/views/notifications/toasters/toasters.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 3 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; 4 | 5 | import { ButtonModule, CardModule, FormModule, GridModule, ProgressModule, ToastModule } from '@coreui/angular'; 6 | import { IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { ToastersComponent } from './toasters.component'; 9 | import { AppToastComponent } from './toast-simple/toast.component'; 10 | 11 | describe('ToastersComponent', () => { 12 | let component: ToastersComponent; 13 | let fixture: ComponentFixture; 14 | let iconSetService: IconSetService; 15 | 16 | beforeEach(waitForAsync(() => { 17 | TestBed.configureTestingModule({ 18 | imports: [NoopAnimationsModule, GridModule, ToastModule, CardModule, FormModule, ButtonModule, ProgressModule, FormsModule, ReactiveFormsModule, ToastersComponent, AppToastComponent], 19 | providers: [IconSetService] 20 | }) 21 | .compileComponents(); 22 | })); 23 | 24 | beforeEach(() => { 25 | iconSetService = TestBed.inject(IconSetService); 26 | iconSetService.icons = { ...iconSubset }; 27 | 28 | fixture = TestBed.createComponent(ToastersComponent); 29 | component = fixture.componentInstance; 30 | fixture.detectChanges(); 31 | }); 32 | 33 | it('should create', () => { 34 | expect(component).toBeTruthy(); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /src/app/views/buttons/dropdowns/dropdowns.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { NoopAnimationsModule } from '@angular/platform-browser/animations'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | 5 | import { 6 | ButtonGroupModule, 7 | ButtonModule, 8 | CardModule, 9 | CollapseModule, 10 | DropdownModule, 11 | GridModule, 12 | NavbarModule, 13 | NavModule 14 | } from '@coreui/angular'; 15 | import { IconSetService } from '@coreui/icons-angular'; 16 | import { iconSubset } from '../../../icons/icon-subset'; 17 | import { DropdownsComponent } from './dropdowns.component'; 18 | 19 | describe('DropdownsComponent', () => { 20 | let component: DropdownsComponent; 21 | let fixture: ComponentFixture; 22 | let iconSetService: IconSetService; 23 | 24 | beforeEach(async () => { 25 | await TestBed.configureTestingModule({ 26 | imports: [ButtonModule, DropdownModule, CollapseModule, NoopAnimationsModule, GridModule, CardModule, RouterTestingModule, NavModule, NavbarModule, ButtonGroupModule, DropdownsComponent], 27 | providers: [IconSetService] 28 | }) 29 | .compileComponents(); 30 | }); 31 | 32 | beforeEach(() => { 33 | iconSetService = TestBed.inject(IconSetService); 34 | iconSetService.icons = { ...iconSubset }; 35 | 36 | fixture = TestBed.createComponent(DropdownsComponent); 37 | component = fixture.componentInstance; 38 | fixture.detectChanges(); 39 | }); 40 | 41 | it('should create', () => { 42 | expect(component).toBeTruthy(); 43 | }); 44 | }); 45 | -------------------------------------------------------------------------------- /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/coreui-free-angular-admin-template'), 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 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets/widgets.component.ts: -------------------------------------------------------------------------------- 1 | import { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core'; 2 | import { WidgetsBrandComponent } from '../widgets-brand/widgets-brand.component'; 3 | import { IconDirective } from '@coreui/icons-angular'; 4 | import { WidgetsEComponent } from '../widgets-e/widgets-e.component'; 5 | import { WidgetsDropdownComponent } from '../widgets-dropdown/widgets-dropdown.component'; 6 | import { DocsExampleComponent } from '@docs-components/public-api'; 7 | import { TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, RowComponent, ColComponent, WidgetStatBComponent, ProgressBarDirective, ProgressComponent, WidgetStatFComponent, TemplateIdDirective, CardGroupComponent, WidgetStatCComponent } from '@coreui/angular'; 8 | 9 | @Component({ 10 | selector: 'app-widgets', 11 | templateUrl: './widgets.component.html', 12 | styleUrls: ['./widgets.component.scss'], 13 | changeDetection: ChangeDetectionStrategy.Default, 14 | standalone: true, 15 | imports: [TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, WidgetsDropdownComponent, RowComponent, ColComponent, WidgetStatBComponent, ProgressBarDirective, ProgressComponent, WidgetsEComponent, WidgetStatFComponent, TemplateIdDirective, IconDirective, WidgetsBrandComponent, CardGroupComponent, WidgetStatCComponent] 16 | }) 17 | export class WidgetsComponent implements AfterContentInit { 18 | constructor( 19 | private changeDetectorRef: ChangeDetectorRef 20 | ) {} 21 | 22 | ngAfterContentInit(): void { 23 | this.changeDetectorRef.detectChanges(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-layout.component.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | @if (!sidebar1.narrow) { 20 | 21 | 22 | 23 | } 24 | 25 | 26 | 27 |
28 | 29 | 33 | 34 |
35 | 36 | 37 | 38 |
39 | 40 | 41 |
42 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-header/default-header.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { ReactiveFormsModule } from '@angular/forms'; 3 | import { RouterTestingModule } from '@angular/router/testing'; 4 | import { 5 | AvatarModule, 6 | BadgeModule, 7 | BreadcrumbModule, 8 | ButtonGroupModule, 9 | DropdownModule, 10 | GridModule, 11 | HeaderModule, 12 | NavModule, 13 | ProgressModule, 14 | SidebarModule 15 | } from '@coreui/angular'; 16 | import { IconModule, IconSetService } from '@coreui/icons-angular'; 17 | import { iconSubset } from '../../../icons/icon-subset'; 18 | import { DefaultHeaderComponent } from './default-header.component'; 19 | 20 | describe('DefaultHeaderComponent', () => { 21 | let component: DefaultHeaderComponent; 22 | let fixture: ComponentFixture; 23 | let iconSetService: IconSetService; 24 | 25 | beforeEach(async () => { 26 | await TestBed.configureTestingModule({ 27 | imports: [GridModule, HeaderModule, IconModule, NavModule, BadgeModule, AvatarModule, DropdownModule, BreadcrumbModule, RouterTestingModule, SidebarModule, ProgressModule, ButtonGroupModule, ReactiveFormsModule, DefaultHeaderComponent], 28 | providers: [IconSetService] 29 | }) 30 | .compileComponents(); 31 | }); 32 | 33 | beforeEach(() => { 34 | iconSetService = TestBed.inject(IconSetService); 35 | iconSetService.icons = { ...iconSubset }; 36 | 37 | fixture = TestBed.createComponent(DefaultHeaderComponent); 38 | component = fixture.componentInstance; 39 | fixture.detectChanges(); 40 | }); 41 | 42 | it('should create', () => { 43 | expect(component).toBeTruthy(); 44 | }); 45 | }); 46 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets/widgets.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | 4 | import { CardModule, GridModule, ProgressModule, WidgetModule } from '@coreui/angular'; 5 | import { ChartjsModule } from '@coreui/angular-chartjs'; 6 | import { IconModule, IconSetService } from '@coreui/icons-angular'; 7 | import { iconSubset } from '../../../icons/icon-subset'; 8 | import { WidgetsBrandComponent } from '../widgets-brand/widgets-brand.component'; 9 | import { WidgetsDropdownComponent } from '../widgets-dropdown/widgets-dropdown.component'; 10 | import { WidgetsEComponent } from '../widgets-e/widgets-e.component'; 11 | import { WidgetsComponent } from './widgets.component'; 12 | 13 | describe('WidgetsComponent', () => { 14 | let component: WidgetsComponent; 15 | let fixture: ComponentFixture; 16 | let iconSetService: IconSetService; 17 | 18 | beforeEach(async () => { 19 | await TestBed.configureTestingModule({ 20 | imports: [WidgetModule, ProgressModule, GridModule, CardModule, RouterTestingModule, ChartjsModule, IconModule, WidgetsComponent, WidgetsBrandComponent, WidgetsDropdownComponent, WidgetsEComponent], 21 | providers: [IconSetService] 22 | }) 23 | .compileComponents(); 24 | }); 25 | 26 | beforeEach(() => { 27 | iconSetService = TestBed.inject(IconSetService); 28 | iconSetService.icons = { ...iconSubset }; 29 | 30 | fixture = TestBed.createComponent(WidgetsComponent); 31 | component = fixture.componentInstance; 32 | fixture.detectChanges(); 33 | }); 34 | 35 | it('should create', () => { 36 | expect(component).toBeTruthy(); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /src/app/views/widgets/widgets-e/widgets-e.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 15 | 16 | 17 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 31 | 32 | 33 | 34 | 35 | 39 | 40 | 41 | 42 | 43 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /src/app/layout/default-layout/default-layout.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink, RouterOutlet } from '@angular/router'; 3 | import { NgScrollbar } from 'ngx-scrollbar'; 4 | 5 | import { IconDirective } from '@coreui/icons-angular'; 6 | import { 7 | ContainerComponent, 8 | ShadowOnScrollDirective, 9 | SidebarBrandComponent, 10 | SidebarComponent, 11 | SidebarFooterComponent, 12 | SidebarHeaderComponent, 13 | SidebarNavComponent, 14 | SidebarToggleDirective, 15 | SidebarTogglerDirective 16 | } from '@coreui/angular'; 17 | 18 | import { DefaultFooterComponent, DefaultHeaderComponent } from './'; 19 | import { navItems } from './_nav'; 20 | 21 | function isOverflown(element: HTMLElement) { 22 | return ( 23 | element.scrollHeight > element.clientHeight || 24 | element.scrollWidth > element.clientWidth 25 | ); 26 | } 27 | 28 | @Component({ 29 | selector: 'app-dashboard', 30 | templateUrl: './default-layout.component.html', 31 | styleUrls: ['./default-layout.component.scss'], 32 | standalone: true, 33 | imports: [ 34 | SidebarComponent, 35 | SidebarHeaderComponent, 36 | SidebarBrandComponent, 37 | RouterLink, 38 | IconDirective, 39 | NgScrollbar, 40 | SidebarNavComponent, 41 | SidebarFooterComponent, 42 | SidebarToggleDirective, 43 | SidebarTogglerDirective, 44 | DefaultHeaderComponent, 45 | ShadowOnScrollDirective, 46 | ContainerComponent, 47 | RouterOutlet, 48 | DefaultFooterComponent 49 | ] 50 | }) 51 | export class DefaultLayoutComponent { 52 | public navItems = navItems; 53 | 54 | onScrollbarUpdate($event: any) { 55 | // if ($event.verticalUsed) { 56 | // console.log('verticalUsed', $event.verticalUsed); 57 | // } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/app/views/base/accordion/accordions.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { DomSanitizer } from '@angular/platform-browser'; 3 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, AccordionComponent, AccordionItemComponent, TemplateIdDirective, AccordionButtonDirective, BgColorDirective } from '@coreui/angular'; 4 | import { DocsExampleComponent } from '@docs-components/public-api'; 5 | 6 | @Component({ 7 | selector: 'app-accordions', 8 | templateUrl: './accordions.component.html', 9 | styleUrls: ['./accordions.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, AccordionComponent, AccordionItemComponent, TemplateIdDirective, AccordionButtonDirective, BgColorDirective] 12 | }) 13 | export class AccordionsComponent { 14 | 15 | items = [1, 2, 3, 4]; 16 | 17 | constructor( 18 | private sanitizer: DomSanitizer 19 | ) { } 20 | 21 | getAccordionBodyText(value: string|number) { 22 | const textSample = ` 23 | This is the #${value} item accordion body. It is hidden by 24 | default, until the collapse plugin adds the appropriate classes that we use to 25 | style each element. These classes control the overall appearance, as well as 26 | the showing and hiding via CSS transitions. You can modify any of this with 27 | custom CSS or overriding our default variables. It's also worth noting 28 | that just about any HTML can go within the .accordion-body, 29 | though the transition does limit overflow. 30 | `; 31 | return this.sanitizer.bypassSecurityTrustHtml(textSample); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/components/docs-example/docs-example.component.ts: -------------------------------------------------------------------------------- 1 | import { 2 | AfterContentInit, 3 | AfterViewInit, 4 | ChangeDetectionStrategy, 5 | ChangeDetectorRef, 6 | Component, 7 | HostBinding, 8 | Input 9 | } from '@angular/core'; 10 | 11 | import packageJson from '../../../package.json'; 12 | import { IconDirective } from '@coreui/icons-angular'; 13 | import { RouterLink } from '@angular/router'; 14 | import { NavComponent, NavItemComponent, NavLinkDirective } from '@coreui/angular'; 15 | 16 | @Component({ 17 | selector: 'app-docs-example', 18 | templateUrl: './docs-example.component.html', 19 | styleUrls: ['./docs-example.component.scss'], 20 | changeDetection: ChangeDetectionStrategy.OnPush, 21 | standalone: true, 22 | imports: [NavComponent, NavItemComponent, NavLinkDirective, RouterLink, IconDirective] 23 | }) 24 | export class DocsExampleComponent implements AfterContentInit, AfterViewInit { 25 | 26 | constructor( 27 | private changeDetectorRef: ChangeDetectorRef 28 | ) {} 29 | 30 | @Input() fragment?: string; 31 | 32 | @HostBinding('class.example') 33 | get exampleClass() { 34 | return true; 35 | }; 36 | 37 | private _href = 'https://coreui.io/angular/docs/'; 38 | 39 | get href(): string { 40 | return this._href; 41 | } 42 | 43 | @Input() 44 | set href(value: string) { 45 | const version = packageJson?.config?.coreui_library_short_version; 46 | const docsUrl = packageJson?.config?.coreui_library_docs_url ?? 'https://coreui.io/angular/'; 47 | // const path: string = version ? `${version}/${value}` : ''; 48 | this._href = `${docsUrl}${value}`; 49 | } 50 | 51 | ngAfterContentInit(): void { 52 | // this.changeDetectorRef.detectChanges(); 53 | } 54 | 55 | ngAfterViewInit(): void { 56 | this.changeDetectorRef.markForCheck(); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/app/views/pages/register/register.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 |
8 |

Register

9 |

Create your account

10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | @ 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | 34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | -------------------------------------------------------------------------------- /src/app/views/icons/coreui-icons.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ActivatedRoute } from '@angular/router'; 3 | 4 | import { IconDirective, IconSetService } from '@coreui/icons-angular'; 5 | import { brandSet, flagSet, freeSet } from '@coreui/icons'; 6 | import { CardBodyComponent, CardComponent, CardHeaderComponent, ColComponent, RowComponent } from '@coreui/angular'; 7 | import { DocsLinkComponent } from '@docs-components/public-api'; 8 | 9 | @Component({ 10 | templateUrl: 'coreui-icons.component.html', 11 | providers: [IconSetService], 12 | standalone: true, 13 | imports: [ 14 | CardComponent, 15 | CardHeaderComponent, 16 | CardBodyComponent, 17 | ColComponent, 18 | DocsLinkComponent, 19 | IconDirective, 20 | RowComponent 21 | ] 22 | }) 23 | export class CoreUIIconsComponent implements OnInit { 24 | public title = 'CoreUI Icons'; 25 | public icons!: [string, string[]][]; 26 | 27 | constructor( 28 | private route: ActivatedRoute, public iconSet: IconSetService 29 | ) { 30 | iconSet.icons = { ...freeSet, ...brandSet, ...flagSet }; 31 | } 32 | 33 | ngOnInit() { 34 | const path = this.route?.routeConfig?.path; 35 | let prefix = 'cil'; 36 | if (path === 'coreui-icons') { 37 | this.title = `${this.title} - Free`; 38 | prefix = 'cil'; 39 | } else if (path === 'brands') { 40 | this.title = `${this.title} - Brands`; 41 | prefix = 'cib'; 42 | } else if (path === 'flags') { 43 | this.title = `${this.title} - Flags`; 44 | prefix = 'cif'; 45 | } 46 | this.icons = this.getIconsView(prefix); 47 | } 48 | 49 | toKebabCase(str: string) { 50 | return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase(); 51 | } 52 | 53 | getIconsView(prefix: string) { 54 | return Object.entries(this.iconSet.icons).filter((icon) => { 55 | return icon[0].startsWith(prefix); 56 | }); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/app/views/base/cards/cards.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | import { NgTemplateOutlet } from '@angular/common'; 4 | import { DocsExampleComponent } from '@docs-components/public-api'; 5 | import { 6 | BorderDirective, 7 | ButtonDirective, 8 | CardBodyComponent, 9 | CardComponent, 10 | CardFooterComponent, 11 | CardGroupComponent, 12 | CardHeaderComponent, 13 | CardImgDirective, 14 | CardLinkDirective, 15 | CardSubtitleDirective, 16 | CardTextDirective, 17 | CardTitleDirective, 18 | ColComponent, 19 | GutterDirective, 20 | ListGroupDirective, 21 | ListGroupItemDirective, 22 | NavComponent, 23 | NavItemComponent, 24 | NavLinkDirective, 25 | RowComponent, 26 | TextColorDirective 27 | } from '@coreui/angular'; 28 | 29 | type CardColor = { 30 | color: string 31 | textColor?: string 32 | } 33 | 34 | @Component({ 35 | selector: 'app-cards', 36 | templateUrl: './cards.component.html', 37 | styleUrls: ['./cards.component.scss'], 38 | standalone: true, 39 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, NgTemplateOutlet, CardTitleDirective, CardTextDirective, ButtonDirective, CardSubtitleDirective, CardLinkDirective, RouterLink, ListGroupDirective, ListGroupItemDirective, CardFooterComponent, NavComponent, NavItemComponent, NavLinkDirective, BorderDirective, CardGroupComponent, GutterDirective, CardImgDirective] 40 | }) 41 | export class CardsComponent { 42 | 43 | colors: CardColor[] = [ 44 | { color: 'primary', textColor: 'primary' }, 45 | { color: 'secondary', textColor: 'secondary' }, 46 | { color: 'success', textColor: 'success' }, 47 | { color: 'danger', textColor: 'danger' }, 48 | { color: 'warning', textColor: 'warning' }, 49 | { color: 'info', textColor: 'info' }, 50 | { color: 'light' }, 51 | { color: 'dark' } 52 | ]; 53 | 54 | imgContext = { $implicit: 'top', bottom: 'bottom' }; 55 | 56 | constructor() { } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/app/views/buttons/dropdowns/dropdowns.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { ReactiveFormsModule } from '@angular/forms'; 3 | import { RouterLink } from '@angular/router'; 4 | import { DocsExampleComponent } from '@docs-components/public-api'; 5 | import { 6 | ButtonDirective, 7 | ButtonGroupComponent, 8 | CardBodyComponent, 9 | CardComponent, 10 | CardHeaderComponent, 11 | ColComponent, 12 | CollapseDirective, 13 | ContainerComponent, 14 | DropdownComponent, 15 | DropdownDividerDirective, 16 | DropdownHeaderDirective, 17 | DropdownItemDirective, 18 | DropdownMenuDirective, 19 | DropdownToggleDirective, 20 | FormControlDirective, 21 | FormDirective, 22 | NavbarBrandDirective, 23 | NavbarComponent, 24 | NavbarNavComponent, 25 | NavbarTogglerDirective, 26 | NavItemComponent, 27 | NavLinkDirective, 28 | RowComponent, 29 | TextColorDirective, 30 | ThemeDirective 31 | } from '@coreui/angular'; 32 | 33 | @Component({ 34 | selector: 'app-dropdowns', 35 | templateUrl: './dropdowns.component.html', 36 | standalone: true, 37 | imports: [ 38 | RowComponent, 39 | ColComponent, 40 | TextColorDirective, 41 | CardComponent, 42 | CardHeaderComponent, 43 | CardBodyComponent, 44 | DocsExampleComponent, 45 | ThemeDirective, 46 | DropdownComponent, 47 | ButtonDirective, 48 | DropdownToggleDirective, 49 | DropdownMenuDirective, 50 | DropdownHeaderDirective, 51 | DropdownItemDirective, 52 | RouterLink, 53 | DropdownDividerDirective, 54 | NavbarComponent, 55 | ContainerComponent, 56 | NavbarBrandDirective, 57 | NavbarTogglerDirective, 58 | CollapseDirective, 59 | NavbarNavComponent, 60 | NavItemComponent, 61 | NavLinkDirective, 62 | ReactiveFormsModule, 63 | FormDirective, 64 | FormControlDirective, 65 | ButtonGroupComponent 66 | ] 67 | }) 68 | export class DropdownsComponent { 69 | 70 | public colors = ['primary', 'secondary', 'success', 'info', 'warning', 'danger']; 71 | 72 | constructor() { } 73 | 74 | } 75 | -------------------------------------------------------------------------------- /src/app/views/charts/charts.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CoreUI Angular wrapper component for Chart.js 4.4, the most popular charting library. 5 |
6 |
7 |
8 | 9 | 10 | 11 | Bar Chart 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | Line Chart 22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 | 32 | 33 | Doughnut Chart 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | Pie Chart 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Polar Area Chart 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | Radar Chart 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /src/app/views/buttons/button-groups/button-groups.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, ReactiveFormsModule } from '@angular/forms'; 3 | import { RouterLink } from '@angular/router'; 4 | import { DocsExampleComponent } from '@docs-components/public-api'; 5 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, ButtonGroupComponent, ButtonDirective, FormCheckLabelDirective, ButtonToolbarComponent, InputGroupComponent, InputGroupTextDirective, FormControlDirective, ThemeDirective, DropdownComponent, DropdownToggleDirective, DropdownMenuDirective, DropdownItemDirective, DropdownDividerDirective } from '@coreui/angular'; 6 | 7 | @Component({ 8 | selector: 'app-button-groups', 9 | templateUrl: './button-groups.component.html', 10 | styleUrls: ['./button-groups.component.scss'], 11 | standalone: true, 12 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ButtonGroupComponent, ButtonDirective, RouterLink, ReactiveFormsModule, FormCheckLabelDirective, ButtonToolbarComponent, InputGroupComponent, InputGroupTextDirective, FormControlDirective, ThemeDirective, DropdownComponent, DropdownToggleDirective, DropdownMenuDirective, DropdownItemDirective, DropdownDividerDirective] 13 | }) 14 | export class ButtonGroupsComponent { 15 | 16 | formCheck1 = this.formBuilder.group({ 17 | checkbox1: false, 18 | checkbox2: false, 19 | checkbox3: false 20 | }); 21 | formRadio1 = new UntypedFormGroup({ 22 | radio1: new UntypedFormControl('Radio1') 23 | }); 24 | 25 | constructor( 26 | private formBuilder: UntypedFormBuilder 27 | ) { } 28 | 29 | setCheckBoxValue(controlName: string) { 30 | const prevValue = this.formCheck1.get(controlName)?.value; 31 | const value = this.formCheck1.value; 32 | value[controlName] = !prevValue; 33 | this.formCheck1.setValue(value); 34 | } 35 | 36 | setRadioValue(value: string): void { 37 | this.formRadio1.setValue({ radio1: value }); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/app/views/forms/validation/validation.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ReactiveFormsModule, FormsModule } from '@angular/forms'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, FormDirective, FormLabelDirective, FormControlDirective, FormFeedbackComponent, InputGroupComponent, InputGroupTextDirective, FormSelectDirective, FormCheckComponent, FormCheckInputDirective, FormCheckLabelDirective, ButtonDirective, ListGroupDirective, ListGroupItemDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-validation', 8 | templateUrl: './validation.component.html', 9 | styleUrls: ['./validation.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ReactiveFormsModule, FormsModule, FormDirective, FormLabelDirective, FormControlDirective, FormFeedbackComponent, InputGroupComponent, InputGroupTextDirective, FormSelectDirective, FormCheckComponent, FormCheckInputDirective, FormCheckLabelDirective, ButtonDirective, ListGroupDirective, ListGroupItemDirective] 12 | }) 13 | export class ValidationComponent implements OnInit { 14 | 15 | customStylesValidated = false; 16 | browserDefaultsValidated = false; 17 | tooltipValidated = false; 18 | 19 | constructor() { } 20 | 21 | ngOnInit(): void { } 22 | 23 | onSubmit1() { 24 | this.customStylesValidated = true; 25 | console.log('Submit... 1'); 26 | } 27 | 28 | onReset1() { 29 | this.customStylesValidated = false; 30 | console.log('Reset... 1'); 31 | } 32 | 33 | onSubmit2() { 34 | this.browserDefaultsValidated = true; 35 | console.log('Submit... 2'); 36 | } 37 | 38 | onReset2() { 39 | this.browserDefaultsValidated = false; 40 | console.log('Reset... 3'); 41 | } 42 | 43 | onSubmit3() { 44 | this.tooltipValidated = true; 45 | console.log('Submit... 3'); 46 | } 47 | 48 | onReset3() { 49 | this.tooltipValidated = false; 50 | console.log('Reset... 3'); 51 | } 52 | 53 | 54 | } 55 | -------------------------------------------------------------------------------- /src/app/views/forms/routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '', 6 | data: { 7 | title: 'Forms' 8 | }, 9 | children: [ 10 | { 11 | path: '', 12 | redirectTo: 'form-control', 13 | pathMatch: 'full' 14 | }, 15 | { 16 | path: 'form-control', 17 | loadComponent: () => import('./form-controls/form-controls.component').then(m => m.FormControlsComponent), 18 | data: { 19 | title: 'Form Control' 20 | } 21 | }, 22 | { 23 | path: 'select', 24 | loadComponent: () => import('./select/select.component').then(m => m.SelectComponent), 25 | data: { 26 | title: 'Select' 27 | } 28 | }, 29 | { 30 | path: 'checks-radios', 31 | loadComponent: () => import('./checks-radios/checks-radios.component').then(m => m.ChecksRadiosComponent), 32 | data: { 33 | title: 'Checks & Radios' 34 | } 35 | }, 36 | { 37 | path: 'range', 38 | loadComponent: () => import('./ranges/ranges.component').then(m => m.RangesComponent), 39 | data: { 40 | title: 'Range' 41 | } 42 | }, 43 | { 44 | path: 'input-group', 45 | loadComponent: () => import('./input-groups/input-groups.component').then(m => m.InputGroupsComponent), 46 | data: { 47 | title: 'Input Group' 48 | } 49 | }, 50 | { 51 | path: 'floating-labels', 52 | loadComponent: () => import('./floating-labels/floating-labels.component').then(m => m.FloatingLabelsComponent), 53 | data: { 54 | title: 'Floating Labels' 55 | } 56 | }, 57 | { 58 | path: 'layout', 59 | loadComponent: () => import('./layout/layout.component').then(m => m.LayoutComponent), 60 | data: { 61 | title: 'Layout' 62 | } 63 | }, 64 | { 65 | path: 'validation', 66 | loadComponent: () => import('./validation/validation.component').then(m => m.ValidationComponent), 67 | data: { 68 | title: 'Validation' 69 | } 70 | } 71 | ] 72 | } 73 | ]; 74 | -------------------------------------------------------------------------------- /src/app/views/base/list-groups/list-groups.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { UntypedFormBuilder, ReactiveFormsModule } from '@angular/forms'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, ListGroupDirective, ListGroupItemDirective, BadgeComponent, FormDirective, FormCheckComponent, FormCheckInputDirective, FormCheckLabelDirective, ButtonDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-list-groups', 8 | templateUrl: './list-groups.component.html', 9 | styleUrls: ['./list-groups.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, ListGroupDirective, ListGroupItemDirective, BadgeComponent, ReactiveFormsModule, FormDirective, FormCheckComponent, FormCheckInputDirective, FormCheckLabelDirective, ButtonDirective] 12 | }) 13 | export class ListGroupsComponent { 14 | 15 | constructor( 16 | private formBuilder: UntypedFormBuilder 17 | ) { } 18 | 19 | readonly breakpoints: (string | boolean)[] = [true, 'sm', 'md', 'lg', 'xl', 'xxl']; 20 | readonly colors: string[] = ['primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark']; 21 | 22 | readonly checkBoxes = this.formBuilder.group({ 23 | one: false, 24 | two: false, 25 | three: true, 26 | four: true, 27 | five: { value: false, disabled: true } 28 | }); 29 | 30 | readonly sampleList: string[] = [ 31 | 'Cras justo odio', 32 | 'Dapibus ac facilisis in', 33 | 'Morbi leo risus', 34 | 'Porta ac consectetur ac', 35 | 'Vestibulum at eros' 36 | ]; 37 | 38 | setValue(controlName: string) { 39 | const prevValue = this.checkBoxes.get(controlName)?.value; 40 | const value = this.checkBoxes.getRawValue(); 41 | value[controlName] = !prevValue; 42 | this.checkBoxes.setValue(value); 43 | } 44 | 45 | logValue() { 46 | console.log(this.checkBoxes.value); 47 | this.checkBoxes.reset(); 48 | } 49 | 50 | getValue(controlName: string) { 51 | return this.checkBoxes.get(controlName); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coreui-free-angular-admin-template", 3 | "version": "5.0.0", 4 | "copyright": "Copyright 2024 creativeLabs Łukasz Holeczek", 5 | "license": "MIT", 6 | "author": "The CoreUI Team (https://github.com/orgs/coreui/people) and contributors", 7 | "homepage": "https://coreui.io/angular", 8 | "config": { 9 | "theme": "default", 10 | "coreui_library_short_version": "5.0", 11 | "coreui_library_docs_url": "https://coreui.io/angular/docs/" 12 | }, 13 | "scripts": { 14 | "ng": "ng", 15 | "start": "ng serve", 16 | "build": "ng build", 17 | "watch": "ng build --watch --configuration development", 18 | "test": "ng test" 19 | }, 20 | "private": true, 21 | "dependencies": { 22 | "@angular/animations": "^17.3.1", 23 | "@angular/cdk": "^17.3.1", 24 | "@angular/common": "^17.3.1", 25 | "@angular/compiler": "^17.3.1", 26 | "@angular/core": "^17.3.1", 27 | "@angular/forms": "^17.3.1", 28 | "@angular/language-service": "^17.3.1", 29 | "@angular/platform-browser": "^17.3.1", 30 | "@angular/platform-browser-dynamic": "^17.3.1", 31 | "@angular/router": "^17.3.1", 32 | "@coreui/angular": "~5.0.0", 33 | "@coreui/angular-chartjs": "~5.0.0", 34 | "@coreui/chartjs": "~4.0.0", 35 | "@coreui/coreui": "~5.0.0", 36 | "@coreui/icons": "^3.0.1", 37 | "@coreui/icons-angular": "~5.0.0", 38 | "@coreui/utils": "^2.0.2", 39 | "chart.js": "^4.4.2", 40 | "lodash-es": "^4.17.21", 41 | "ngx-scrollbar": "^13.0.3", 42 | "rxjs": "~7.8.1", 43 | "tslib": "^2.6.2", 44 | "zone.js": "~0.14.4" 45 | }, 46 | "devDependencies": { 47 | "@angular-devkit/build-angular": "^17.3.2", 48 | "@angular/cli": "^17.3.2", 49 | "@angular/compiler-cli": "^17.3.1", 50 | "@angular/localize": "^17.3.1", 51 | "@types/jasmine": "^5.1.4", 52 | "@types/lodash-es": "^4.17.12", 53 | "@types/node": "^20.11.30", 54 | "jasmine-core": "^5.1.2", 55 | "karma": "^6.4.3", 56 | "karma-chrome-launcher": "^3.2.0", 57 | "karma-coverage": "^2.2.1", 58 | "karma-jasmine": "^5.1.0", 59 | "karma-jasmine-html-reporter": "^2.1.0", 60 | "typescript": "~5.3.3" 61 | }, 62 | "engines": { 63 | "node": "^18.13.0 || ^20.9.0", 64 | "npm": ">= 9" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/scss/_examples.scss: -------------------------------------------------------------------------------- 1 | /* stylelint-disable declaration-no-important, scss/selector-no-redundant-nesting-selector */ 2 | $enable-deprecation-messages: false; /* stylelint-disable-line scss/dollar-variable-default */ 3 | 4 | .example { 5 | &:not(:first-child) { 6 | margin-top: 1.5rem; 7 | } 8 | 9 | .tab-content { 10 | background-color: var(--#{$prefix}tertiary-bg); 11 | //background-color: rgba(var(--#{$prefix}tertiary-bg-rgb), var(--#{$prefix}bg-opacity, 1)) !important; 12 | } 13 | 14 | & + p { 15 | margin-top: 1.5rem; 16 | } 17 | 18 | // Components examples 19 | .preview { 20 | + p { 21 | margin-top: 2rem; 22 | } 23 | 24 | > .form-control { 25 | + .form-control { 26 | margin-top: .5rem; 27 | } 28 | } 29 | 30 | > .nav + .nav, 31 | > .alert + .alert, 32 | > .navbar + .navbar, 33 | > .progress + .progress { 34 | margin-top: 1rem; 35 | } 36 | 37 | > .dropdown-menu { 38 | position: static; 39 | display: block; 40 | } 41 | 42 | > :last-child { 43 | margin-bottom: 0; 44 | } 45 | 46 | // Images 47 | > svg + svg, 48 | > img + img { 49 | margin-left: .5rem; 50 | } 51 | 52 | // Buttons 53 | .col > .btn, 54 | .col-auto > .btn, 55 | .d-md-block > .btn, 56 | > .btn, 57 | > .btn-group { 58 | margin: .25rem .125rem; 59 | } 60 | 61 | > .btn-toolbar + .btn-toolbar { 62 | margin-top: .5rem; 63 | } 64 | 65 | // List groups 66 | > .list-group { 67 | max-width: 400px; 68 | } 69 | 70 | > [class*="list-group-horizontal"] { 71 | max-width: 100%; 72 | } 73 | 74 | // Navbars 75 | .fixed-top, 76 | .sticky-top { 77 | position: static; 78 | margin: -1rem -1rem 1rem; 79 | } 80 | 81 | .fixed-bottom { 82 | position: static; 83 | margin: 1rem -1rem -1rem; 84 | } 85 | 86 | @include media-breakpoint-up(sm) { 87 | .fixed-top, 88 | .sticky-top { 89 | margin: -1.5rem -1.5rem 1rem; 90 | } 91 | .fixed-bottom { 92 | margin: 1rem -1.5rem -1.5rem; 93 | } 94 | } 95 | 96 | // Pagination 97 | .pagination { 98 | margin-top: .5rem; 99 | margin-bottom: .5rem; 100 | } 101 | 102 | .docs-example-modal { 103 | .modal { 104 | position: static; 105 | display: block; 106 | } 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/app/views/pages/login/login.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 |

Login

10 |

Sign In to your account

11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 28 | 29 | 30 | 33 | 34 | 35 | 38 | 39 | 40 |
41 |
42 |
43 | 44 | 45 |
46 |

Sign up

47 |

48 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 49 | tempor incididunt ut labore et dolore magna aliqua. 50 |

51 | 54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | -------------------------------------------------------------------------------- /src/app/views/forms/checks-radios/checks-radios.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { FormControl, UntypedFormBuilder, ReactiveFormsModule } from '@angular/forms'; 3 | import { DocsExampleComponent } from '@docs-components/public-api'; 4 | import { RowComponent, FormDirective, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, FormCheckComponent, FormCheckInputDirective, FormCheckLabelDirective, ButtonGroupComponent, ButtonDirective } from '@coreui/angular'; 5 | 6 | @Component({ 7 | selector: 'app-checks-radios', 8 | templateUrl: './checks-radios.component.html', 9 | styleUrls: ['./checks-radios.component.scss'], 10 | standalone: true, 11 | imports: [RowComponent, ReactiveFormsModule, FormDirective, ColComponent, TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, DocsExampleComponent, FormCheckComponent, FormCheckInputDirective, FormCheckLabelDirective, ButtonGroupComponent, ButtonDirective] 12 | }) 13 | export class ChecksRadiosComponent { 14 | 15 | inputDisabled: null = null; 16 | 17 | formGroup = this.formBuilder.group({ 18 | flexRadioGroup: this.formBuilder.group({ 19 | flexRadioDefault: this.formBuilder.control('two') 20 | }), 21 | flexRadioGroupDisabled: this.formBuilder.group({ 22 | flexRadioDefault: this.formBuilder.control({ value: 'two', disabled: true }) 23 | }), 24 | flexCheckGroup: this.formBuilder.group({ 25 | checkOne: [false], 26 | checkTwo: [true] 27 | }), 28 | flexCheckGroupDisabled: this.formBuilder.group({ 29 | checkThree: [{ value: false, disabled: true }], 30 | checkFour: [{ value: true, disabled: true }] 31 | }), 32 | btnCheckGroup: this.formBuilder.group({ 33 | checkbox1: [true], 34 | checkbox2: [false], 35 | checkbox3: [{value: false, disabled: true}] 36 | }), 37 | btnRadioGroup: this.formBuilder.group({ 38 | radio1: this.formBuilder.control({ value: 'Radio2' }) 39 | }) 40 | }); 41 | 42 | 43 | constructor( 44 | private formBuilder: UntypedFormBuilder 45 | ) { } 46 | 47 | setCheckBoxValue(controlName: string) { 48 | const btnCheckGroup = this.formGroup.controls['btnCheckGroup']; 49 | const prevValue = btnCheckGroup.get(controlName)?.value; 50 | const groupValue = {...btnCheckGroup.value}; 51 | groupValue[controlName] = !prevValue; 52 | btnCheckGroup.patchValue(groupValue); 53 | } 54 | 55 | setRadioValue(value: string): void { 56 | const group = this.formGroup.controls['btnRadioGroup']; 57 | group.setValue({ radio1: value }); 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | import { DefaultLayoutComponent } from './layout'; 3 | 4 | export const routes: Routes = [ 5 | { 6 | path: '', 7 | redirectTo: 'dashboard', 8 | pathMatch: 'full' 9 | }, 10 | { 11 | path: '', 12 | component: DefaultLayoutComponent, 13 | data: { 14 | title: 'Home' 15 | }, 16 | children: [ 17 | { 18 | path: 'dashboard', 19 | loadChildren: () => import('./views/dashboard/routes').then((m) => m.routes) 20 | }, 21 | { 22 | path: 'theme', 23 | loadChildren: () => import('./views/theme/routes').then((m) => m.routes) 24 | }, 25 | { 26 | path: 'base', 27 | loadChildren: () => import('./views/base/routes').then((m) => m.routes) 28 | }, 29 | { 30 | path: 'buttons', 31 | loadChildren: () => import('./views/buttons/routes').then((m) => m.routes) 32 | }, 33 | { 34 | path: 'forms', 35 | loadChildren: () => import('./views/forms/routes').then((m) => m.routes) 36 | }, 37 | { 38 | path: 'icons', 39 | loadChildren: () => import('./views/icons/routes').then((m) => m.routes) 40 | }, 41 | { 42 | path: 'notifications', 43 | loadChildren: () => import('./views/notifications/routes').then((m) => m.routes) 44 | }, 45 | { 46 | path: 'widgets', 47 | loadChildren: () => import('./views/widgets/routes').then((m) => m.routes) 48 | }, 49 | { 50 | path: 'charts', 51 | loadChildren: () => import('./views/charts/routes').then((m) => m.routes) 52 | }, 53 | { 54 | path: 'pages', 55 | loadChildren: () => import('./views/pages/routes').then((m) => m.routes) 56 | } 57 | ] 58 | }, 59 | { 60 | path: '404', 61 | loadComponent: () => import('./views/pages/page404/page404.component').then(m => m.Page404Component), 62 | data: { 63 | title: 'Page 404' 64 | } 65 | }, 66 | { 67 | path: '500', 68 | loadComponent: () => import('./views/pages/page500/page500.component').then(m => m.Page500Component), 69 | data: { 70 | title: 'Page 500' 71 | } 72 | }, 73 | { 74 | path: 'login', 75 | loadComponent: () => import('./views/pages/login/login.component').then(m => m.LoginComponent), 76 | data: { 77 | title: 'Login Page' 78 | } 79 | }, 80 | { 81 | path: 'register', 82 | loadComponent: () => import('./views/pages/register/register.component').then(m => m.RegisterComponent), 83 | data: { 84 | title: 'Register Page' 85 | } 86 | }, 87 | { path: '**', redirectTo: 'dashboard' } 88 | ]; 89 | -------------------------------------------------------------------------------- /src/app/views/theme/colors.component.ts: -------------------------------------------------------------------------------- 1 | import { AfterViewInit, Component, HostBinding, Inject, Input, OnInit, Renderer2, forwardRef } from '@angular/core'; 2 | import { DOCUMENT, NgClass } from '@angular/common'; 3 | 4 | import { getStyle, rgbToHex } from '@coreui/utils'; 5 | import { TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, RowComponent, ColComponent } from '@coreui/angular'; 6 | 7 | @Component({ 8 | templateUrl: 'colors.component.html', 9 | standalone: true, 10 | imports: [TextColorDirective, CardComponent, CardHeaderComponent, CardBodyComponent, RowComponent, forwardRef(() => ThemeColorComponent)] 11 | }) 12 | export class ColorsComponent implements OnInit, AfterViewInit { 13 | 14 | constructor( 15 | @Inject(DOCUMENT) private document: Document, 16 | private renderer: Renderer2 17 | ) { 18 | } 19 | 20 | public themeColors(): void { 21 | Array.from(this.document.querySelectorAll('.theme-color')).forEach( 22 | (element: Element) => { 23 | const htmlElement = element as HTMLElement; 24 | const background = getStyle('background-color', htmlElement) ?? '#fff'; 25 | const table = this.renderer.createElement('table'); 26 | table.innerHTML = ` 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
HEX:${rgbToHex(background)}
RGB:${background}
37 | `; 38 | this.renderer.appendChild(htmlElement.parentNode, table); 39 | // @ts-ignore 40 | // el.parentNode.appendChild(table); 41 | } 42 | ); 43 | } 44 | 45 | ngOnInit(): void {} 46 | 47 | ngAfterViewInit(): void { 48 | this.themeColors(); 49 | } 50 | } 51 | 52 | @Component({ 53 | selector: 'app-theme-color', 54 | template: ` 55 | 56 |
57 | 58 |
59 | `, 60 | standalone: true, 61 | imports: [ColComponent, NgClass], 62 | }) 63 | export class ThemeColorComponent implements OnInit { 64 | @Input() color = ''; 65 | public colorClasses = { 66 | 'theme-color w-75 rounded mb-3': true 67 | }; 68 | 69 | @HostBinding('style.display') display = 'contents'; 70 | 71 | ngOnInit(): void { 72 | this.colorClasses = { 73 | ...this.colorClasses, 74 | [`bg-${this.color}`]: !!this.color 75 | }; 76 | } 77 | } 78 | 79 | -------------------------------------------------------------------------------- /src/assets/brand/coreui-base.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | Base 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/assets/brand/coreui-base-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | Base_negative 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/app/views/base/tooltips/tooltips.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Angular Tooltip Basic example 6 | 7 | 8 |

9 | Hover over the links below to see tooltips: 10 |

11 | 12 |

13 | Tight pants next level keffiyeh 14 | you probably 15 | haven'theard of them. Photo booth beard raw denim letterpress vegan messenger 16 | bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit 17 | american apparel 18 | have a 19 | terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo 20 | thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney''s 21 | cleanse vegan chambray. A really ironic artisan 22 | whatever keytar 23 | scenester farm-to-table banksy Austin 24 | twitter handle 25 | freegan cred raw denim single-origin coffee viral. 26 |

27 |
28 |

29 | Hover over the buttons below to see the four tooltips directions: top, right, bottom, 30 | and left. 31 |

32 | 33 | 37 | 41 | 46 | 52 | 53 |
54 |
55 |
56 |
57 | -------------------------------------------------------------------------------- /src/app/views/base/popovers/popovers.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Angular Popover Basic example 6 | 7 | 8 | 9 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | Angular Popover Four directions 35 | 36 | 37 |

38 | Four options are available: top, right, bottom, and left aligned. 39 |

40 | 41 | 50 | 55 | 60 | 65 | 66 |
67 |
68 |
69 |
70 | -------------------------------------------------------------------------------- /.github/COMMIT_CONVENTION.md: -------------------------------------------------------------------------------- 1 | ## Git Commit Message Convention 2 | 3 | > This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-angular/convention.md). 4 | 5 | #### Examples 6 | 7 | Appears under "Features" header, `compiler` subheader: 8 | 9 | ``` 10 | feat(compiler): add 'comments' option 11 | ``` 12 | 13 | Appears under "Bug Fixes" header, `sidebar` subheader, with a link to issue #28: 14 | 15 | ``` 16 | fix(sidebar): handle events on blur 17 | 18 | close #28 19 | ``` 20 | 21 | Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation: 22 | 23 | ``` 24 | perf(core): improve vdom diffing by removing 'foo' option 25 | 26 | BREAKING CHANGE: The 'foo' option has been removed. 27 | ``` 28 | 29 | The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header. 30 | 31 | ``` 32 | revert: feat(compiler): add 'comments' option 33 | 34 | This reverts commit 667ecc1654a317a13331b17617d973392f415f02. 35 | ``` 36 | 37 | ### Full Message Format 38 | 39 | A commit message consists of a **header**, **body** and **footer**. The header has a **type**, **scope** and **subject**: 40 | 41 | ``` 42 | (): 43 | 44 | 45 | 46 |