-
Category
-
-
+
`,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [MessageService, ConfirmationService]
})
-export class ProductsDoc implements OnInit {
+export class ProductsDoc {
productDialog: boolean = false;
products!: Product[];
@@ -169,7 +171,7 @@ export class ProductsDoc implements OnInit {
constructor(private productService: ProductService, private messageService: MessageService, private confirmationService: ConfirmationService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProducts().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/radiobuttonselectiondoc.ts b/src/app/showcase/doc/table/radiobuttonselectiondoc.ts
index 9b74b40711a..dccb0b788d8 100644
--- a/src/app/showcase/doc/table/radiobuttonselectiondoc.ts
+++ b/src/app/showcase/doc/table/radiobuttonselectiondoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Product } from '../../domain/product';
import { ProductService } from '../../service/productservice';
@@ -8,41 +8,43 @@ import { ProductService } from '../../service/productservice';
template: `
Single selection can also be handled using radio buttons.
-
-
-
-
-
- Code
- Name
- Category
- Quantity
-
-
-
-
-
-
-
- {{ product.code }}
- {{ product.name }}
- {{ product.category }}
- {{ product.quantity }}
-
-
-
-
+
+
+
+
+
+
+ Code
+ Name
+ Category
+ Quantity
+
+
+
+
+
+
+
+ {{ product.code }}
+ {{ product.name }}
+ {{ product.category }}
+ {{ product.quantity }}
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class RadioButtonSelectionDoc implements OnInit {
+export class RadioButtonSelectionDoc {
products!: Product[];
selectedProduct!: Product;
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/reorderdoc.ts b/src/app/showcase/doc/table/reorderdoc.ts
index 79a8e07760d..9c26405f5c6 100644
--- a/src/app/showcase/doc/table/reorderdoc.ts
+++ b/src/app/showcase/doc/table/reorderdoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Product } from '../../domain/product';
import { ProductService } from '../../service/productservice';
@@ -17,39 +17,41 @@ interface Column {
reorder completes.
-
-
-
-
-
-
- {{ col.header }}
-
-
-
-
-
-
-
-
-
- {{ rowData[col.field] }}
-
-
-
-
-
+
+
+
+
+
+
+
+ {{ col.header }}
+
+
+
+
+
+
+
+
+
+ {{ rowData[col.field] }}
+
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class ReorderDoc implements OnInit {
+export class ReorderDoc {
products!: Product[];
cols!: Column[];
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsSmall().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/responsivescrolldoc.ts b/src/app/showcase/doc/table/responsivescrolldoc.ts
index 48687abdd63..356b4efee11 100644
--- a/src/app/showcase/doc/table/responsivescrolldoc.ts
+++ b/src/app/showcase/doc/table/responsivescrolldoc.ts
@@ -14,43 +14,45 @@ interface Column {
When there is not enough space for the table to fit all the content efficiently, table displays a horizontal scrollbar. It is suggested to give a min-width to the table to avoid design issues due wrapping of cell contents.
Following table displays a horizontal scrollbar when viewport is smaller than 50rem.
-
-
-
-
- Name
- Price
- Category
- Quantity
- Status
- Reviews
-
-
-
-
- {{ product.name }}
- {{ product.price | currency : 'USD' }}
- {{ product.category }}
- {{ product.quantity }}
-
-
-
-
-
-
-
-
+
+
+
+
+
+ Name
+ Price
+ Category
+ Quantity
+ Status
+ Reviews
+
+
+
+
+ {{ product.name }}
+ {{ product.price | currency : 'USD' }}
+ {{ product.category }}
+ {{ product.quantity }}
+
+
+
+
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class ResponsiveScrollDoc implements OnInit {
+export class ResponsiveScrollDoc {
products!: Product[];
cols!: Column[];
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData(){
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/responsivestackdoc.ts b/src/app/showcase/doc/table/responsivestackdoc.ts
index e4e4196bd1e..1a0d2dda612 100644
--- a/src/app/showcase/doc/table/responsivestackdoc.ts
+++ b/src/app/showcase/doc/table/responsivestackdoc.ts
@@ -16,41 +16,43 @@ interface Column {
p-column-title style class to the body cells.
-
-
-
-
- Name
- Price
- Category
- Quantity
- Status
- Reviews
-
-
-
-
- Name {{ product.name }}
- Price {{ product.price | currency : 'USD' }}
- Category {{ product.category }}
- Quantity {{ product.quantity }}
-
- Reviews
-
-
-
-
+
+
+
+
+
+ Name
+ Price
+ Category
+ Quantity
+ Status
+ Reviews
+
+
+
+
+ Name {{ product.name }}
+ Price {{ product.price | currency : 'USD' }}
+ Category {{ product.category }}
+ Quantity {{ product.quantity }}
+
+ Reviews
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class ResponsiveStackDoc implements OnInit {
+export class ResponsiveStackDoc{
products!: Product[];
cols!: Column[];
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData(){
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/roweditdoc.ts b/src/app/showcase/doc/table/roweditdoc.ts
index b61a2e7faa2..82fb996497d 100644
--- a/src/app/showcase/doc/table/roweditdoc.ts
+++ b/src/app/showcase/doc/table/roweditdoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { MessageService, SelectItem } from 'primeng/api';
import { Code } from '../../domain/code';
import { Product } from '../../domain/product';
@@ -21,76 +21,78 @@ import { ProductService } from '../../service/productservice';
whose key is the dataKey of the record where the value is any arbitrary number greater than zero.
-
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [MessageService]
})
-export class RowEditDoc implements OnInit {
+export class RowEditDoc {
products!: Product[];
statuses!: SelectItem[];
@@ -99,7 +101,7 @@ export class RowEditDoc implements OnInit {
constructor(private productService: ProductService, private messageService: MessageService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/rowexpanddoc.ts b/src/app/showcase/doc/table/rowexpanddoc.ts
index 474ef4c3380..2c06eedf5d8 100644
--- a/src/app/showcase/doc/table/rowexpanddoc.ts
+++ b/src/app/showcase/doc/table/rowexpanddoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Product } from '../../domain/product';
import { ProductService } from '../../service/productservice';
@@ -12,6 +12,7 @@ import { ProductService } from '../../service/productservice';
event for the element.
+
@@ -79,15 +80,16 @@ import { ProductService } from '../../service/productservice';
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class RowExpandDoc implements OnInit {
+export class RowExpandDoc {
products!: Product[];
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsWithOrdersSmall().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/rowspangroupingdoc.ts b/src/app/showcase/doc/table/rowspangroupingdoc.ts
index d21d5216966..6a919ca0d2b 100644
--- a/src/app/showcase/doc/table/rowspangroupingdoc.ts
+++ b/src/app/showcase/doc/table/rowspangroupingdoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Customer } from '../../domain/customer';
import { CustomerService } from '../../service/customerservice';
@@ -8,55 +8,57 @@ import { CustomerService } from '../../service/customerservice';
template: `
When rowGroupMode is configured to be rowspan , the grouping column spans multiple rows.
-
-
-
-
- #
- Representative
- Name
- Country
- Company
- Status
- Date
-
-
-
-
- {{ rowIndex }}
-
-
- {{ customer.representative.name }}
-
-
- {{ customer.name }}
-
-
-
- {{ customer.country.name }}
-
-
- {{ customer.company }}
-
-
-
-
-
- {{ customer.date }}
-
-
-
-
-
+
+
+
+
+
+ #
+ Representative
+ Name
+ Country
+ Company
+ Status
+ Date
+
+
+
+
+ {{ rowIndex }}
+
+
+ {{ customer.representative.name }}
+
+
+ {{ customer.name }}
+
+
+
+ {{ customer.country.name }}
+
+
+ {{ customer.company }}
+
+
+
+
+
+ {{ customer.date }}
+
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class RowspanGroupingDoc implements OnInit {
+export class RowspanGroupingDoc {
customers!: Customer[];
constructor(private customerService: CustomerService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.customerService.getCustomersMedium().then((data) => {
this.customers = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/selectioneventsdoc.ts b/src/app/showcase/doc/table/selectioneventsdoc.ts
index b24a25a9938..d96ca39eb50 100644
--- a/src/app/showcase/doc/table/selectioneventsdoc.ts
+++ b/src/app/showcase/doc/table/selectioneventsdoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { MessageService } from 'primeng/api';
import { Code } from '../../domain/code';
import { Product } from '../../domain/product';
@@ -9,6 +9,7 @@ import { ProductService } from '../../service/productservice';
template: `
Table provides onRowSelect and onRowUnselect events to listen selection events.
+
@@ -30,18 +31,19 @@ import { ProductService } from '../../service/productservice';
+
`,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [MessageService]
})
-export class SelectionEventsDoc implements OnInit {
+export class SelectionEventsDoc {
products!: Product[];
selectedProduct!: Product;
constructor(private productService: ProductService, private messageService: MessageService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData(){
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/singlecolumnsortdoc.ts b/src/app/showcase/doc/table/singlecolumnsortdoc.ts
index aabda069fa0..7c89579e650 100644
--- a/src/app/showcase/doc/table/singlecolumnsortdoc.ts
+++ b/src/app/showcase/doc/table/singlecolumnsortdoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Product } from '../../domain/product';
import { ProductService } from '../../service/productservice';
@@ -12,6 +12,7 @@ import { ProductService } from '../../service/productservice';
Default sorting is executed on a single column, in order to enable multiple field sorting, set sortMode property to "multiple" and use metakey when clicking on another column.
+
@@ -34,15 +35,16 @@ import { ProductService } from '../../service/productservice';
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class SingleColumnSortDoc implements OnInit {
+export class SingleColumnSortDoc {
products!: Product[];
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData(){
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/singleselectiondoc.ts b/src/app/showcase/doc/table/singleselectiondoc.ts
index 170791b622a..ae0e9741aaf 100644
--- a/src/app/showcase/doc/table/singleselectiondoc.ts
+++ b/src/app/showcase/doc/table/singleselectiondoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Product } from '../../domain/product';
import { ProductService } from '../../service/productservice';
@@ -15,37 +15,39 @@ import { ProductService } from '../../service/productservice';
setting it to false.
-
-
-
-
- Code
- Name
- Category
- Quantity
-
-
-
-
- {{ product.code }}
- {{ product.name }}
- {{ product.category }}
- {{ product.quantity }}
-
-
-
-
+
+
+
+
+
+ Code
+ Name
+ Category
+ Quantity
+
+
+
+
+ {{ product.code }}
+ {{ product.name }}
+ {{ product.category }}
+ {{ product.quantity }}
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class SingleSelectionDoc implements OnInit {
+export class SingleSelectionDoc {
products!: Product[];
selectedProduct!: Product;
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/sizedoc.ts b/src/app/showcase/doc/table/sizedoc.ts
index f2cf54c2556..b828c9691fa 100644
--- a/src/app/showcase/doc/table/sizedoc.ts
+++ b/src/app/showcase/doc/table/sizedoc.ts
@@ -8,29 +8,31 @@ import { ProductService } from '../../service/productservice';
template: `
In addition to a regular table, alternatives with alternative sizes are available.
-
-
-
+
+
+
+
+
+
+ Code
+ Name
+ Category
+ Quantity
+
+
+
+
+ {{ product.code }}
+ {{ product.name }}
+ {{ product.category }}
+ {{ product.quantity }}
+
+
+
-
-
-
- Code
- Name
- Category
- Quantity
-
-
-
-
- {{ product.code }}
- {{ product.name }}
- {{ product.category }}
- {{ product.quantity }}
-
-
-
-
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
@@ -43,7 +45,7 @@ export class SizeDoc {
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/statefuldoc.ts b/src/app/showcase/doc/table/statefuldoc.ts
index 8c196c186a4..46ff3de6f62 100644
--- a/src/app/showcase/doc/table/statefuldoc.ts
+++ b/src/app/showcase/doc/table/statefuldoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Customer } from '../../domain/customer';
import { CustomerService } from '../../service/customerservice';
@@ -12,6 +12,7 @@ import { CustomerService } from '../../service/customerservice';
browser is closed. Other alternative is
local referring to
localStorage for an extended lifetime.
+
@@ -65,17 +66,18 @@ import { CustomerService } from '../../service/customerservice';
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class StatefulDoc implements OnInit {
+export class StatefulDoc {
customers!: Customer[];
selectedCustomers!: Customer;
constructor(private customerService: CustomerService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.customerService.getCustomersMini().then((data) => {
this.customers = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/stripeddoc.ts b/src/app/showcase/doc/table/stripeddoc.ts
index 2bcbb8f7d2e..173dd8b3920 100644
--- a/src/app/showcase/doc/table/stripeddoc.ts
+++ b/src/app/showcase/doc/table/stripeddoc.ts
@@ -8,26 +8,28 @@ import { ProductService } from '../../service/productservice';
template: `
Adding p-datatable-striped class displays striped rows.
-
-
-
-
- Code
- Name
- Category
- Quantity
-
-
-
-
- {{ product.code }}
- {{ product.name }}
- {{ product.category }}
- {{ product.quantity }}
-
-
-
-
+
+
+
+
+
+ Code
+ Name
+ Category
+ Quantity
+
+
+
+
+ {{ product.code }}
+ {{ product.name }}
+ {{ product.category }}
+ {{ product.quantity }}
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
@@ -36,7 +38,7 @@ export class StripedDoc {
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/styledoc.ts b/src/app/showcase/doc/table/styledoc.ts
index 55cf647938f..8155d893a46 100644
--- a/src/app/showcase/doc/table/styledoc.ts
+++ b/src/app/showcase/doc/table/styledoc.ts
@@ -8,30 +8,32 @@ import { ProductService } from '../../service/productservice';
template: `
Certain rows or cells can easily be styled based on conditions.
-
-
-
-
- Code
- Name
- Category
- Quantity
-
-
-
-
- {{ product.code }}
- {{ product.name }}
- {{ product.category }}
-
- 0 && product.quantity < 10, instock: product.quantity > 10 }">
- {{ product.quantity }}
-
-
-
-
-
-
+
+
+
+
+
+ Code
+ Name
+ Category
+ Quantity
+
+
+
+
+ {{ product.code }}
+ {{ product.name }}
+ {{ product.category }}
+
+ 0 && product.quantity < 10, instock: product.quantity > 10 }">
+ {{ product.quantity }}
+
+
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [
@@ -58,12 +60,12 @@ import { ProductService } from '../../service/productservice';
`
]
})
-export class StyleDoc implements OnInit {
+export class StyleDoc {
products!: Product[];
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/subheadergroupingdoc.ts b/src/app/showcase/doc/table/subheadergroupingdoc.ts
index be2a4dea9dd..72d68b02d64 100644
--- a/src/app/showcase/doc/table/subheadergroupingdoc.ts
+++ b/src/app/showcase/doc/table/subheadergroupingdoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Customer } from '../../domain/customer';
import { CustomerService } from '../../service/customerservice';
@@ -11,61 +11,63 @@ import { CustomerService } from '../../service/customerservice';
footer with
groupfooter templates.
-
-
-
-
- Name
- Country
- Company
- Status
- Date
-
-
-
-
-
-
- {{ customer.representative.name }}
-
-
-
-
-
- Total Customers: {{ calculateCustomerTotal(customer.representative.name) }}
-
-
-
-
-
- {{ customer.name }}
-
-
-
- {{ customer.country.name }}
-
-
- {{ customer.company }}
-
-
-
-
-
- {{ customer.date }}
-
-
-
-
-
+
+
+
+
+
+ Name
+ Country
+ Company
+ Status
+ Date
+
+
+
+
+
+
+ {{ customer.representative.name }}
+
+
+
+
+
+ Total Customers: {{ calculateCustomerTotal(customer.representative.name) }}
+
+
+
+
+
+ {{ customer.name }}
+
+
+
+ {{ customer.country.name }}
+
+
+ {{ customer.company }}
+
+
+
+
+
+ {{ customer.date }}
+
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class SubheaderGroupingDoc implements OnInit {
+export class SubheaderGroupingDoc {
customers!: Customer[];
constructor(private customerService: CustomerService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.customerService.getCustomersMedium().then((data) => {
this.customers = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/tabledoc.module.ts b/src/app/showcase/doc/table/tabledoc.module.ts
index 2f8439f32f0..5bc4c656249 100644
--- a/src/app/showcase/doc/table/tabledoc.module.ts
+++ b/src/app/showcase/doc/table/tabledoc.module.ts
@@ -81,6 +81,7 @@ import { StylingDoc } from './stylingdoc';
import { SelectionEventsDoc } from './selectioneventsdoc';
import { AccessibilityDoc } from './accessibilitydoc';
import { PaginatorLocaleDoc } from './paginatorlocaledoc';
+import { DeferredDemo } from '../../demo/deferreddemo';
@NgModule({
imports: [
@@ -112,7 +113,8 @@ import { PaginatorLocaleDoc } from './paginatorlocaledoc';
SkeletonModule,
SelectButtonModule,
AppCodeModule,
- AppDocModule
+ AppDocModule,
+ DeferredDemo
],
declarations: [
ImportDoc,
diff --git a/src/app/showcase/doc/table/templatedoc.ts b/src/app/showcase/doc/table/templatedoc.ts
index eb84559c35a..8200e98ad42 100644
--- a/src/app/showcase/doc/table/templatedoc.ts
+++ b/src/app/showcase/doc/table/templatedoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Product } from '../../domain/product';
import { ProductService } from '../../service/productservice';
@@ -13,52 +13,54 @@ interface Column {
template: `
Custom content at header , body and footer sections are supported via templating.
-
-
-
-
-
-
-
- Name
- Image
- Price
- Category
- Reviews
- Status
-
-
-
-
- {{ product.name }}
-
- {{ product.price | currency : 'USD' }}
- {{ product.category }}
-
-
-
-
-
-
-
- In total there are {{ products ? products.length : 0 }} products.
-
-
-
+
+
+
+
+
+
+
+
+ Name
+ Image
+ Price
+ Category
+ Reviews
+ Status
+
+
+
+
+ {{ product.name }}
+
+ {{ product.price | currency : 'USD' }}
+ {{ product.category }}
+
+
+
+
+
+
+
+ In total there are {{ products ? products.length : 0 }} products.
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class TemplateDoc implements OnInit {
+export class TemplateDoc {
products!: Product[];
cols!: Column[];
constructor(private productService: ProductService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.productService.getProductsMini().then((data) => {
this.products = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/verticalscrolldoc.ts b/src/app/showcase/doc/table/verticalscrolldoc.ts
index 263b50de847..58659e26fa0 100644
--- a/src/app/showcase/doc/table/verticalscrolldoc.ts
+++ b/src/app/showcase/doc/table/verticalscrolldoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
import { Code } from '../../domain/code';
import { Customer } from '../../domain/customer';
import { CustomerService } from '../../service/customerservice';
@@ -8,35 +8,37 @@ import { CustomerService } from '../../service/customerservice';
template: `
Adding scrollable property along with a scrollHeight for the data viewport enables vertical scrolling with fixed headers.
-
-
-
-
- Name
- Country
- Company
- Representative
-
-
-
-
- {{ customer.name }}
- {{ customer.country.name }}
- {{ customer.company }}
- {{ customer.representative.name }}
-
-
-
-
+
+
+
+
+
+ Name
+ Country
+ Company
+ Representative
+
+
+
+
+ {{ customer.name }}
+ {{ customer.country.name }}
+ {{ customer.company }}
+ {{ customer.representative.name }}
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class VerticalScrollDoc implements OnInit {
+export class VerticalScrollDoc {
customers!: Customer[];
constructor(private customerService: CustomerService, private cd: ChangeDetectorRef) {}
- ngOnInit() {
+ loadDemoData() {
this.customerService.getCustomersMedium().then((data) => {
this.customers = data;
this.cd.markForCheck();
diff --git a/src/app/showcase/doc/table/virtualscrolldoc.ts b/src/app/showcase/doc/table/virtualscrolldoc.ts
index 495559cc579..3bbb1c6f04c 100644
--- a/src/app/showcase/doc/table/virtualscrolldoc.ts
+++ b/src/app/showcase/doc/table/virtualscrolldoc.ts
@@ -1,4 +1,4 @@
-import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
+import { ChangeDetectionStrategy, Component } from '@angular/core';
import { Car } from '../../domain/car';
import { Code } from '../../domain/code';
import { CarService } from '../../service/carservice';
@@ -16,6 +16,7 @@ interface Column {
suggested to use the same
virtualScrollItemSize value on the tr element inside the body template.
+
@@ -34,10 +35,11 @@ interface Column {
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class VirtualScrollDoc implements OnInit {
+export class VirtualScrollDoc {
cars!: Car[];
virtualCars!: Car[];
@@ -46,7 +48,7 @@ export class VirtualScrollDoc implements OnInit {
constructor(private carService: CarService) {}
- ngOnInit() {
+ loadDemoData() {
this.cols = [
{ field: 'id', header: 'Id' },
{ field: 'vin', header: 'Vin' },
diff --git a/src/app/showcase/doc/table/virtualscrolllazydoc.ts b/src/app/showcase/doc/table/virtualscrolllazydoc.ts
index 7fdc9c34a56..e24c8847528 100644
--- a/src/app/showcase/doc/table/virtualscrolllazydoc.ts
+++ b/src/app/showcase/doc/table/virtualscrolllazydoc.ts
@@ -17,35 +17,37 @@ interface Column {
suggested to use the same
virtualScrollItemSize value on the tr element inside the body template.
-
-
-
-
-
- {{ col.header }}
-
-
-
-
-
-
- {{ rowData[col.field] }}
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ {{ col.header }}
+
+
+
+
+
+
+ {{ rowData[col.field] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
-export class VirtualScrollLazyDoc implements OnInit {
+export class VirtualScrollLazyDoc {
cars!: Car[];
virtualCars!: Car[];
@@ -54,7 +56,7 @@ export class VirtualScrollLazyDoc implements OnInit {
constructor(private carService: CarService) {}
- ngOnInit() {
+ loadDemoData() {
this.cols = [
{ field: 'id', header: 'Id' },
{ field: 'vin', header: 'Vin' },
diff --git a/src/app/showcase/domain/appconfig.ts b/src/app/showcase/domain/appconfig.ts
index 8e1e7e05afd..1e998ebd93f 100644
--- a/src/app/showcase/domain/appconfig.ts
+++ b/src/app/showcase/domain/appconfig.ts
@@ -3,4 +3,6 @@ export interface AppConfig {
darkMode?: boolean;
theme?: string;
ripple?: boolean;
+ scale?: number;
+ tableTheme?: string;
}
diff --git a/src/app/showcase/layout/app.component.ts b/src/app/showcase/layout/app.component.ts
index 1b9854e45f2..0e82afa168e 100644
--- a/src/app/showcase/layout/app.component.ts
+++ b/src/app/showcase/layout/app.component.ts
@@ -1,6 +1,6 @@
-import { DOCUMENT } from '@angular/common';
+import { DOCUMENT, isPlatformBrowser } from '@angular/common';
import { HttpClientModule } from '@angular/common/http';
-import { Component, Inject, OnDestroy, OnInit, Renderer2, afterNextRender } from '@angular/core';
+import { Component, Inject, OnDestroy, OnInit, PLATFORM_ID, Renderer2, afterNextRender } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NavigationEnd, Router, RouterOutlet } from '@angular/router';
import { PrimeNGConfig } from 'primeng/api';
@@ -21,6 +21,7 @@ import { AppConfigComponent } from './config/app.config.component';
import { AppMenuComponent } from './menu/app.menu.component';
import { AppNewsComponent } from './news/app.news.component';
import { AppTopBarComponent } from './topbar/app.topbar.component';
+import { AppConfig } from '../domain/appconfig';
@Component({
selector: 'app-root',
@@ -29,8 +30,8 @@ import { AppTopBarComponent } from './topbar/app.topbar.component';
imports: [RouterOutlet, FormsModule, ReactiveFormsModule, HttpClientModule, AppMainComponent, LandingComponent, AppNewsComponent, AppConfigComponent, AppTopBarComponent, AppMenuComponent],
providers: [CarService, CountryService, EventService, NodeService, IconService, CustomerService, PhotoService, AppConfigService, ProductService]
})
-export class AppComponent implements OnInit, OnDestroy {
- constructor(@Inject(DOCUMENT) private document: Document, private renderer: Renderer2, private primeng: PrimeNGConfig, private configService: AppConfigService, private router: Router) {
+export class AppComponent implements OnInit {
+ constructor(@Inject(DOCUMENT) private document: Document, private renderer: Renderer2, private primeng: PrimeNGConfig, private configService: AppConfigService, private router: Router, @Inject(PLATFORM_ID) private platformId: any) {
afterNextRender(() => {
if (process.env.NODE_ENV === 'production') {
this.injectScripts();
@@ -40,14 +41,20 @@ export class AppComponent implements OnInit, OnDestroy {
});
}
- themeChangeSubscription: Subscription;
-
- ngOnInit() {
+ ngOnInit(): void {
this.primeng.ripple = true;
+ if (isPlatformBrowser(this.platformId)) {
+ this.checkAppState();
+ }
+ }
- this.themeChangeSubscription = this.configService.themeChange$.subscribe((theme: Theme) => {
- this.switchTheme(theme);
- });
+ checkAppState() {
+ const stored = localStorage.getItem('layout-config');
+ let _config!: AppConfig;
+ if (stored) {
+ _config = JSON.parse(stored) as AppConfig;
+ this.configService.config.set(_config);
+ }
}
injectScripts() {
@@ -77,39 +84,12 @@ export class AppComponent implements OnInit, OnDestroy {
});
}
- const { theme, darkMode } = this.configService.config;
+ const { theme, darkMode } = this.configService.config();
const landingTheme = darkMode ? 'lara-dark-blue' : 'lara-light-blue';
if (event.urlAfterRedirects === '/' && theme !== landingTheme) {
- this.switchTheme({ name: landingTheme, dark: darkMode });
+ this.configService.config.update((config) => ({ ...config, theme: landingTheme, dark: darkMode }));
}
}
});
}
-
- switchTheme(theme: Theme) {
- const id = 'theme-link';
- const linkElement =
this.document.getElementById(id);
- const cloneLinkElement = linkElement.cloneNode(true);
-
- cloneLinkElement.setAttribute('href', linkElement.getAttribute('href').replace(this.configService.config.theme, theme.name));
- cloneLinkElement.setAttribute('id', id + '-clone');
-
- linkElement.parentNode.insertBefore(cloneLinkElement, linkElement.nextSibling);
-
- cloneLinkElement.addEventListener('load', () => {
- linkElement.remove();
- cloneLinkElement.setAttribute('id', id);
- this.configService.updateConfig({
- theme: theme.name,
- darkMode: theme.dark
- });
- this.configService.completeThemeChange(theme);
- });
- }
-
- ngOnDestroy() {
- if (this.themeChangeSubscription) {
- this.themeChangeSubscription.unsubscribe();
- }
- }
}
diff --git a/src/app/showcase/layout/app.main.component.ts b/src/app/showcase/layout/app.main.component.ts
index 8f763bf77bc..36387dd142b 100644
--- a/src/app/showcase/layout/app.main.component.ts
+++ b/src/app/showcase/layout/app.main.component.ts
@@ -37,15 +37,15 @@ export class AppMainComponent {
}
get isInputFilled(): boolean {
- return this.configService.config.inputStyle === 'filled';
+ return this.configService.config().inputStyle === 'filled';
}
get isDarkMode(): boolean {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
get isRippleDisabled(): boolean {
- return this.configService.config.ripple === false;
+ return this.configService.config().ripple === false;
}
get isMenuActive(): boolean {
@@ -53,7 +53,7 @@ export class AppMainComponent {
}
get theme(): string {
- return this.configService.config.theme;
+ return this.configService.config().theme;
}
get containerClass() {
@@ -68,7 +68,7 @@ export class AppMainComponent {
toggleDarkMode() {
let newTheme = null;
- const { theme, darkMode } = this.configService.config;
+ const { theme, darkMode } = this.configService.config();
if (darkMode) {
newTheme = theme.replace('dark', 'light');
@@ -76,8 +76,7 @@ export class AppMainComponent {
if (theme.includes('light') && theme !== 'fluent-light') newTheme = theme.replace('light', 'dark');
else newTheme = 'lara-dark-blue';
}
-
- this.configService.changeTheme({ name: newTheme, dark: !darkMode });
+ this.configService.config.update((config) => ({ ...config, darkMode: !darkMode, theme: newTheme }));
}
hideMenu() {
diff --git a/src/app/showcase/layout/config/app.config.component.ts b/src/app/showcase/layout/config/app.config.component.ts
index cc664fd77f5..6345016f6b3 100644
--- a/src/app/showcase/layout/config/app.config.component.ts
+++ b/src/app/showcase/layout/config/app.config.component.ts
@@ -15,7 +15,6 @@ import { AppConfigService } from '../../service/appconfigservice';
imports: [CommonModule, FormsModule, SidebarModule, InputSwitchModule, ButtonModule, RadioButtonModule, SelectButtonModule]
})
export class AppConfigComponent {
- scale: number = 14;
inputStyles = [
{ label: 'Outlined', value: 'outlined' },
{ label: 'Filled', value: 'filled' }
@@ -35,19 +34,32 @@ export class AppConfigComponent {
}
get isDarkToggleDisabled(): boolean {
- return this.lightOnlyThemes.includes(this.configService.config.theme);
+ return this.lightOnlyThemes.includes(this.configService.config().theme);
}
get isDarkMode(): boolean {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
get inputStyle(): string {
- return this.configService.config.inputStyle;
+ return this.configService.config().inputStyle;
+ }
+ set inputStyle(val: string) {
+ this.configService.config.update((config) => ({ ...config, inputStyle: val }));
}
get ripple(): boolean {
- return this.configService.config.ripple;
+ return this.configService.config().ripple;
+ }
+ set ripple(val: boolean) {
+ this.configService.config.update((config) => ({ ...config, ripple: val }));
+ }
+
+ get scale(): number {
+ return this.configService.config().scale;
+ }
+ set scale(val: number) {
+ this.configService.config.update((config) => ({ ...config, scale: val }));
}
onVisibleChange(value: boolean) {
@@ -57,7 +69,7 @@ export class AppConfigComponent {
}
onCompactMaterialChange() {
- const theme = this.configService.config.theme;
+ const theme = this.configService.config().theme;
if (theme.startsWith('md')) {
let tokens = theme.split('-');
@@ -83,7 +95,7 @@ export class AppConfigComponent {
themeName += '-' + color;
}
- return this.configService.config.theme === themeName;
+ return this.configService.config().theme === themeName;
}
changeTheme(theme: string, color?: string) {
@@ -106,28 +118,22 @@ export class AppConfigComponent {
darkMode = this.isDarkMode;
}
- this.configService.changeTheme({ name: newTheme, dark: darkMode });
+ this.configService.config.update((config) => ({ ...config, dark: darkMode, theme: newTheme }));
}
- onInputStyleChange(event: SelectButtonChangeEvent) {
- this.configService.setInputStyle(event.value);
+ decrementScale() {
+ this.scale--;
}
- onRippleChange(event: InputSwitchChangeEvent) {
- this.configService.setRipple(event.checked);
+ onRippleChange(event) {
+ this.ripple = event.checked;
}
- decrementScale() {
- this.scale--;
- this.applyScale();
+ onInputStyleChange(event) {
+ this.inputStyle = event.value;
}
incrementScale() {
this.scale++;
- this.applyScale();
- }
-
- applyScale() {
- this.renderer.setStyle(this.document.documentElement, 'font-size', this.scale + 'px');
}
}
diff --git a/src/app/showcase/layout/doc/app.docapitable.component.ts b/src/app/showcase/layout/doc/app.docapitable.component.ts
index b78b4151229..4ff25bb7616 100644
--- a/src/app/showcase/layout/doc/app.docapitable.component.ts
+++ b/src/app/showcase/layout/doc/app.docapitable.component.ts
@@ -109,7 +109,7 @@ export class AppDocApiTable {
constructor(public viewContainerRef: ViewContainerRef, public router: Router, public location: Location, private configService: AppConfigService) {}
get isDarkMode(): boolean {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
navigate(event, param) {
diff --git a/src/app/showcase/layout/topbar/app.topbar.component.ts b/src/app/showcase/layout/topbar/app.topbar.component.ts
index 7e0d546b041..e993e36cca1 100644
--- a/src/app/showcase/layout/topbar/app.topbar.component.ts
+++ b/src/app/showcase/layout/topbar/app.topbar.component.ts
@@ -37,7 +37,7 @@ export class AppTopBarComponent implements OnDestroy {
}
get isDarkMode() {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
toggleMenu() {
diff --git a/src/app/showcase/pages/landing/featuressection.component.ts b/src/app/showcase/pages/landing/featuressection.component.ts
index d2b2081c500..a402299fa95 100644
--- a/src/app/showcase/pages/landing/featuressection.component.ts
+++ b/src/app/showcase/pages/landing/featuressection.component.ts
@@ -79,6 +79,6 @@ export class FeaturesSectionComponent {
constructor(private configService: AppConfigService) {}
get isDarkMode() {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
}
diff --git a/src/app/showcase/pages/landing/herosection.component.ts b/src/app/showcase/pages/landing/herosection.component.ts
index 0816ef1d881..0831ab4805e 100644
--- a/src/app/showcase/pages/landing/herosection.component.ts
+++ b/src/app/showcase/pages/landing/herosection.component.ts
@@ -14,7 +14,7 @@ import { RadioButtonModule } from 'primeng/radiobutton';
import { SelectButtonModule } from 'primeng/selectbutton';
import { SliderModule } from 'primeng/slider';
import { TabMenuModule } from 'primeng/tabmenu';
-import { Subscription } from 'rxjs';
+import { Subscription, debounceTime } from 'rxjs';
import { AppConfigService } from '../../service/appconfigservice';
@Component({
@@ -173,7 +173,7 @@ export class HeroSectionComponent implements OnInit, OnDestroy {
rangeValues = [20, 80];
- themeChangeCompleteSubscription: Subscription;
+ subscription!: Subscription;
constructor(private configService: AppConfigService, @Inject(PLATFORM_ID) private platformId: any) {}
@@ -199,7 +199,7 @@ export class HeroSectionComponent implements OnInit, OnDestroy {
{ name: 'Onyama Limba', image: 'onyamalimba.png' }
];
- this.themeChangeCompleteSubscription = this.configService.themeChangeComplete$.subscribe(() => {
+ this.subscription = this.configService.configUpdate$.pipe(debounceTime(25)).subscribe((config) => {
this.setChartOptions();
});
}
@@ -258,9 +258,9 @@ export class HeroSectionComponent implements OnInit, OnDestroy {
}
ngOnDestroy(): void {
- if (this.themeChangeCompleteSubscription) {
- this.themeChangeCompleteSubscription.unsubscribe();
- this.themeChangeCompleteSubscription = null;
+ if (this.subscription) {
+ this.subscription.unsubscribe();
+ this.subscription = null;
}
}
}
diff --git a/src/app/showcase/pages/landing/landing.component.ts b/src/app/showcase/pages/landing/landing.component.ts
index 3141567de0f..c17234f4901 100644
--- a/src/app/showcase/pages/landing/landing.component.ts
+++ b/src/app/showcase/pages/landing/landing.component.ts
@@ -11,6 +11,7 @@ import { HeroSectionComponent } from './herosection.component';
import { TemplateSectionComponent } from './templatesection.component';
import { ThemeSectionComponent } from './themesection.component';
import { UsersSectionComponent } from './userssection.component';
+import { Subscription } from 'rxjs';
@Component({
selector: 'landing',
@@ -19,16 +20,14 @@ import { UsersSectionComponent } from './userssection.component';
imports: [CommonModule, NgOptimizedImage, AppNewsComponent, AppTopBarComponent, HeroSectionComponent, FeaturesSectionComponent, UsersSectionComponent, ThemeSectionComponent, BlockSectionComponent, TemplateSectionComponent, FooterSectionComponent]
})
export class LandingComponent implements OnInit {
- private tableTheme = 'lara-light-blue';
-
- constructor(private configService: AppConfigService, private metaService: Meta, private titleService: Title) {
- afterNextRender(() => {
- if (this.configService.config.theme !== this.tableTheme) {
- this.changeTableTheme(this.configService.config.darkMode ? 'lara-dark-blue' : 'lara-light-blue');
- }
- });
+ get tableTheme() {
+ return this.configService.config().tableTheme;
}
+ subscription!: Subscription;
+
+ constructor(private configService: AppConfigService, private metaService: Meta, private titleService: Title) {}
+
get landingClass() {
return {
'layout-dark': this.isDarkMode,
@@ -38,7 +37,7 @@ export class LandingComponent implements OnInit {
}
get isDarkMode() {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
get isNewsActive() {
@@ -51,37 +50,8 @@ export class LandingComponent implements OnInit {
}
toggleDarkMode() {
- const theme = this.isDarkMode ? 'lara-light-blue' : 'lara-dark-blue';
- const newTableTheme = this.isDarkMode ? this.tableTheme.replace('dark', 'light') : this.tableTheme.replace('light', 'dark');
-
- this.configService.changeTheme({ name: theme, dark: !this.isDarkMode });
- this.replaceTableTheme(newTableTheme);
- }
-
- changeTableTheme(value: string) {
- this.replaceTableTheme(value);
- }
-
- replaceTableTheme(newTheme: string) {
- const elementId = 'home-table-link';
- const linkElement = document.getElementById(elementId);
- const tableThemeTokens = linkElement?.getAttribute('href').split('/') || null;
- const currentTableTheme = tableThemeTokens ? tableThemeTokens[tableThemeTokens.length - 2] : null;
-
- if (currentTableTheme !== newTheme && tableThemeTokens) {
- const newThemeUrl = linkElement.getAttribute('href').replace(currentTableTheme, newTheme);
-
- const cloneLinkElement = linkElement.cloneNode(true);
-
- cloneLinkElement.setAttribute('id', elementId + '-clone');
- cloneLinkElement.setAttribute('href', newThemeUrl);
- cloneLinkElement.addEventListener('load', () => {
- linkElement.remove();
- cloneLinkElement.setAttribute('id', elementId);
- });
- linkElement.parentNode?.insertBefore(cloneLinkElement, linkElement.nextSibling);
-
- this.tableTheme = newTheme;
- }
+ const dark = !this.isDarkMode;
+ const newTableTheme = !dark ? this.tableTheme.replace('dark', 'light') : this.tableTheme.replace('light', 'dark');
+ this.configService.config.update((config) => ({ ...config, darkMode: dark, theme: dark ? 'lara-dark-blue' : 'lara-light-blue', tableTheme: newTableTheme }));
}
}
diff --git a/src/app/showcase/pages/landing/templatesection.component.ts b/src/app/showcase/pages/landing/templatesection.component.ts
index f343223938f..abae8c2a40a 100644
--- a/src/app/showcase/pages/landing/templatesection.component.ts
+++ b/src/app/showcase/pages/landing/templatesection.component.ts
@@ -140,6 +140,6 @@ export class TemplateSectionComponent {
constructor(private configService: AppConfigService) {}
get isDarkMode() {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
}
diff --git a/src/app/showcase/pages/landing/themesection.component.ts b/src/app/showcase/pages/landing/themesection.component.ts
index 3ac215894bd..85439bfe67f 100644
--- a/src/app/showcase/pages/landing/themesection.component.ts
+++ b/src/app/showcase/pages/landing/themesection.component.ts
@@ -8,6 +8,7 @@ import { Customer } from '../../domain/customer';
import { AppComponent } from '../../layout/app.component';
import { AppConfigService } from '../../service/appconfigservice';
import { CustomerService } from '../../service/customerservice';
+import { Subscription } from 'rxjs';
@Component({
selector: 'theme-section',
@@ -161,7 +162,12 @@ export class ThemeSectionComponent {
@ViewChild('dt') table: Table;
- tableTheme: string = 'lara-light-blue';
+ get tableTheme() {
+ return this.configService.config().tableTheme;
+ }
+ set tableTheme(value: string) {
+ this.configService.config.update((config) => ({ ...config, tableTheme: value }));
+ }
customers: Customer[];
@@ -170,46 +176,20 @@ export class ThemeSectionComponent {
loading: boolean = true;
get isDarkMode() {
- return this.configService.config.darkMode;
- }
-
- changeTableTheme(value: string) {
- if (isPlatformBrowser(this.platformId)) {
- this.replaceTableTheme(value);
- }
- }
- replaceTableTheme(newTheme: string) {
- const elementId = 'home-table-link';
- const linkElement = document.getElementById(elementId);
- const tableThemeTokens = linkElement?.getAttribute('href').split('/') || null;
- const currentTableTheme = tableThemeTokens ? tableThemeTokens[tableThemeTokens.length - 2] : null;
-
- if (currentTableTheme !== newTheme && tableThemeTokens) {
- const newThemeUrl = linkElement.getAttribute('href').replace(currentTableTheme, newTheme);
-
- const cloneLinkElement = linkElement.cloneNode(true);
-
- cloneLinkElement.setAttribute('id', elementId + '-clone');
- cloneLinkElement.setAttribute('href', newThemeUrl);
- cloneLinkElement.addEventListener('load', () => {
- linkElement.remove();
- cloneLinkElement.setAttribute('id', elementId);
- });
- linkElement.parentNode?.insertBefore(cloneLinkElement, linkElement.nextSibling);
-
- this.tableTheme = newTheme;
- }
+ return this.configService.config().darkMode;
}
ngOnInit() {
- this.changeTableTheme(this.configService.config.darkMode ? 'lara-dark-blue' : 'lara-light-blue');
-
this.customerService.getCustomersLarge().then((customers) => {
this.customers = customers;
this.loading = false;
});
}
+ changeTableTheme(value: string) {
+ this.tableTheme = value;
+ }
+
getSeverity(status) {
switch (status) {
case 'unqualified':
diff --git a/src/app/showcase/pages/landing/userssection.component.ts b/src/app/showcase/pages/landing/userssection.component.ts
index fbb12681159..6eddb660048 100644
--- a/src/app/showcase/pages/landing/userssection.component.ts
+++ b/src/app/showcase/pages/landing/userssection.component.ts
@@ -76,6 +76,6 @@ export class UsersSectionComponent {
];
get isDarkMode() {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
}
diff --git a/src/app/showcase/pages/uikit/uikit.component.ts b/src/app/showcase/pages/uikit/uikit.component.ts
index 06140bd962a..3e73387cd4e 100755
--- a/src/app/showcase/pages/uikit/uikit.component.ts
+++ b/src/app/showcase/pages/uikit/uikit.component.ts
@@ -15,6 +15,6 @@ export class UIKitComponent {
}
get isDarkMode(): boolean {
- return this.configService.config.darkMode;
+ return this.configService.config().darkMode;
}
}
diff --git a/src/app/showcase/service/appconfigservice.ts b/src/app/showcase/service/appconfigservice.ts
index a05b72e40f5..1047c696b9c 100644
--- a/src/app/showcase/service/appconfigservice.ts
+++ b/src/app/showcase/service/appconfigservice.ts
@@ -1,18 +1,20 @@
-import { Injectable } from '@angular/core';
+import { Inject, Injectable, PLATFORM_ID, effect, signal } from '@angular/core';
import { Subject } from 'rxjs';
import { AppConfig } from '../domain/appconfig';
import { AppState } from '../domain/appstate';
-import { Theme } from '../domain/theme';
+import { isPlatformBrowser } from '@angular/common';
@Injectable({
providedIn: 'root'
})
export class AppConfigService {
- config: AppConfig = {
+ _config: AppConfig = {
theme: 'lara-light-blue',
darkMode: false,
inputStyle: 'outlined',
- ripple: true
+ ripple: true,
+ scale: 14,
+ tableTheme: 'lara-light-blue'
};
state: AppState = {
@@ -21,28 +23,37 @@ export class AppConfigService {
newsActive: false
};
- private themeChange = new Subject();
-
- themeChange$ = this.themeChange.asObservable();
-
- private themeChangeComplete = new Subject();
-
- themeChangeComplete$ = this.themeChangeComplete.asObservable();
-
- changeTheme(theme: Theme) {
- this.themeChange.next(theme);
- }
-
- completeThemeChange(theme: Theme) {
- this.themeChangeComplete.next(theme);
+ config = signal(this._config);
+
+ private configUpdate = new Subject();
+
+ configUpdate$ = this.configUpdate.asObservable();
+
+ constructor(@Inject(PLATFORM_ID) private platformId: any) {
+ effect(() => {
+ const config = this.config();
+ if (isPlatformBrowser(this.platformId)) {
+ if (this.updateStyle(config)) {
+ this.changeTheme();
+ const newTableTheme = !config.darkMode ? config.tableTheme.replace('dark', 'light') : config.tableTheme.replace('light', 'dark');
+ this.replaceTableTheme(newTableTheme);
+ }
+ this.changeScale(config.scale);
+ this.onConfigUpdate();
+ }
+ });
}
- updateConfig(config: AppConfig) {
- this.config = { ...this.config, ...config };
+ updateStyle(config: AppConfig) {
+ return config.theme !== this._config.theme || config.darkMode !== this._config.darkMode || config.tableTheme !== this._config.tableTheme;
}
- getConfig() {
- return this.config;
+ onConfigUpdate() {
+ const config = this.config();
+ config.tableTheme = !config.darkMode ? config.tableTheme.replace('light', 'dark') : config.tableTheme.replace('dark', 'light');
+ this._config = { ...config };
+ this.configUpdate.next(this.config());
+ localStorage.setItem('layout-config', JSON.stringify(config));
}
showMenu() {
@@ -61,14 +72,6 @@ export class AppConfigService {
this.state.configActive = false;
}
- setRipple(value: boolean) {
- this.config.ripple = value;
- }
-
- setInputStyle(value: string) {
- this.config.inputStyle = value;
- }
-
showNews() {
this.state.newsActive = true;
}
@@ -76,4 +79,57 @@ export class AppConfigService {
hideNews() {
this.state.newsActive = false;
}
+
+ changeTheme() {
+ const config = this.config();
+ const themeLink = document.getElementById('theme-link');
+ const themeLinkHref = themeLink.getAttribute('href')!;
+ const newHref = themeLinkHref
+ .split('/')
+ .map((el) => (el == this._config.theme ? (el = config.theme) : el == `theme-${this._config.darkMode}` ? (el = `theme-${config.darkMode}`) : el))
+ .join('/');
+
+ this.replaceThemeLink(newHref);
+ }
+
+ replaceThemeLink(href: string) {
+ const id = 'theme-link';
+ let themeLink = document.getElementById(id);
+ const cloneLinkElement = themeLink.cloneNode(true);
+
+ cloneLinkElement.setAttribute('href', href);
+ cloneLinkElement.setAttribute('id', id + '-clone');
+
+ themeLink.parentNode!.insertBefore(cloneLinkElement, themeLink.nextSibling);
+ cloneLinkElement.addEventListener('load', () => {
+ themeLink.remove();
+ cloneLinkElement.setAttribute('id', id);
+ });
+ }
+
+ replaceTableTheme(newTheme: string) {
+ const elementId = 'home-table-link';
+ const linkElement = document.getElementById(elementId);
+ const tableThemeTokens = linkElement?.getAttribute('href').split('/') || null;
+ const currentTableTheme = tableThemeTokens ? tableThemeTokens[tableThemeTokens.length - 2] : null;
+ if (currentTableTheme !== newTheme && tableThemeTokens) {
+ const newThemeUrl = linkElement.getAttribute('href').replace(currentTableTheme, newTheme);
+
+ const cloneLinkElement = linkElement.cloneNode(true);
+
+ cloneLinkElement.setAttribute('id', elementId + '-clone');
+ cloneLinkElement.setAttribute('href', newThemeUrl);
+ cloneLinkElement.addEventListener('load', () => {
+ linkElement.remove();
+ cloneLinkElement.setAttribute('id', elementId);
+ });
+ linkElement.parentNode?.insertBefore(cloneLinkElement, linkElement.nextSibling);
+ }
+ }
+
+ changeScale(value: number) {
+ if (isPlatformBrowser(this.platformId)) {
+ document.documentElement.style.fontSize = `${value}px`;
+ }
+ }
}
diff --git a/src/assets/components/themes/arya-blue/theme.css b/src/assets/components/themes/arya-blue/theme.css
index 4c9d83dcc61..ee1941436de 100644
--- a/src/assets/components/themes/arya-blue/theme.css
+++ b/src/assets/components/themes/arya-blue/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #383838;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #93cbf9;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #383838;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #93cbf9;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #383838;
}
diff --git a/src/assets/components/themes/arya-green/theme.css b/src/assets/components/themes/arya-green/theme.css
index 1c2446bb36e..705f3658a12 100644
--- a/src/assets/components/themes/arya-green/theme.css
+++ b/src/assets/components/themes/arya-green/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #383838;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #a7d8a9;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #383838;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #a7d8a9;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #383838;
}
diff --git a/src/assets/components/themes/arya-orange/theme.css b/src/assets/components/themes/arya-orange/theme.css
index c94826a372a..ae4fd4584a3 100644
--- a/src/assets/components/themes/arya-orange/theme.css
+++ b/src/assets/components/themes/arya-orange/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #383838;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #ffe284;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #383838;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #ffe284;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #383838;
}
diff --git a/src/assets/components/themes/arya-purple/theme.css b/src/assets/components/themes/arya-purple/theme.css
index 7974b53ca57..3180330ea9d 100644
--- a/src/assets/components/themes/arya-purple/theme.css
+++ b/src/assets/components/themes/arya-purple/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #383838;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #cf95d9;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #383838;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #cf95d9;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #383838;
}
diff --git a/src/assets/components/themes/bootstrap4-dark-blue/theme.css b/src/assets/components/themes/bootstrap4-dark-blue/theme.css
index 42bc7e54dd5..7b7fcf84cdf 100644
--- a/src/assets/components/themes/bootstrap4-dark-blue/theme.css
+++ b/src/assets/components/themes/bootstrap4-dark-blue/theme.css
@@ -4236,6 +4236,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #3f4b5b;
border: 0 none;
+ transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #e3f3fe;
}
.p-splitter {
@@ -4251,6 +4257,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #3f4b5b;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #e3f3fe;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #3f4b5b;
}
diff --git a/src/assets/components/themes/bootstrap4-dark-purple/theme.css b/src/assets/components/themes/bootstrap4-dark-purple/theme.css
index 75bfa35a8e7..b0a3a9736e3 100644
--- a/src/assets/components/themes/bootstrap4-dark-purple/theme.css
+++ b/src/assets/components/themes/bootstrap4-dark-purple/theme.css
@@ -4236,6 +4236,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #3f4b5b;
border: 0 none;
+ transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #f0e6f5;
}
.p-splitter {
@@ -4251,6 +4257,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #3f4b5b;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #f0e6f5;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #3f4b5b;
}
diff --git a/src/assets/components/themes/bootstrap4-light-blue/theme.css b/src/assets/components/themes/bootstrap4-light-blue/theme.css
index 91dbf66b46c..8e2e1f922c0 100644
--- a/src/assets/components/themes/bootstrap4-light-blue/theme.css
+++ b/src/assets/components/themes/bootstrap4-light-blue/theme.css
@@ -4236,6 +4236,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #efefef;
border: 0 none;
+ transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);
}
.p-splitter {
@@ -4251,6 +4257,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dee2e6;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dee2e6;
}
diff --git a/src/assets/components/themes/bootstrap4-light-purple/theme.css b/src/assets/components/themes/bootstrap4-light-purple/theme.css
index bd21b40e6e2..cf47b51e0d0 100644
--- a/src/assets/components/themes/bootstrap4-light-purple/theme.css
+++ b/src/assets/components/themes/bootstrap4-light-purple/theme.css
@@ -4236,6 +4236,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #efefef;
border: 0 none;
+ transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(136, 60, 174, 0.5);
}
.p-splitter {
@@ -4251,6 +4257,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dee2e6;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(136, 60, 174, 0.5);
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dee2e6;
}
diff --git a/src/assets/components/themes/fluent-light/theme.css b/src/assets/components/themes/fluent-light/theme.css
index 5522786a895..3bbef300a37 100644
--- a/src/assets/components/themes/fluent-light/theme.css
+++ b/src/assets/components/themes/fluent-light/theme.css
@@ -4200,6 +4200,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f3f2f1;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: inset 0 0 0 1px #605e5c;
}
.p-splitter {
@@ -4215,6 +4221,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #edebe9;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: inset 0 0 0 1px #605e5c;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #edebe9;
}
diff --git a/src/assets/components/themes/lara-dark-blue/theme.css b/src/assets/components/themes/lara-dark-blue/theme.css
index a8d9f1d15c0..1e862ac6ba5 100644
--- a/src/assets/components/themes/lara-dark-blue/theme.css
+++ b/src/assets/components/themes/lara-dark-blue/theme.css
@@ -4217,6 +4217,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #424b57;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(96, 165, 250, 0.2);
}
.p-splitter {
@@ -4232,6 +4238,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #424b57;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(96, 165, 250, 0.2);
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #424b57;
}
diff --git a/src/assets/components/themes/lara-dark-indigo/theme.css b/src/assets/components/themes/lara-dark-indigo/theme.css
index 8ed52a7cbb3..cc45dfdf449 100644
--- a/src/assets/components/themes/lara-dark-indigo/theme.css
+++ b/src/assets/components/themes/lara-dark-indigo/theme.css
@@ -4217,6 +4217,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #424b57;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(129, 140, 248, 0.2);
}
.p-splitter {
@@ -4232,6 +4238,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #424b57;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(129, 140, 248, 0.2);
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #424b57;
}
diff --git a/src/assets/components/themes/lara-dark-purple/theme.css b/src/assets/components/themes/lara-dark-purple/theme.css
index 2bc9c0e7553..03f8d7dcbcb 100644
--- a/src/assets/components/themes/lara-dark-purple/theme.css
+++ b/src/assets/components/themes/lara-dark-purple/theme.css
@@ -4217,6 +4217,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #424b57;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(167, 139, 250, 0.2);
}
.p-splitter {
@@ -4232,6 +4238,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #424b57;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(167, 139, 250, 0.2);
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #424b57;
}
diff --git a/src/assets/components/themes/lara-dark-teal/theme.css b/src/assets/components/themes/lara-dark-teal/theme.css
index a9e087d9aaa..d32ef3d2e42 100644
--- a/src/assets/components/themes/lara-dark-teal/theme.css
+++ b/src/assets/components/themes/lara-dark-teal/theme.css
@@ -4217,6 +4217,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #424b57;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(45, 212, 191, 0.2);
}
.p-splitter {
@@ -4232,6 +4238,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #424b57;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem rgba(45, 212, 191, 0.2);
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #424b57;
}
diff --git a/src/assets/components/themes/lara-light-blue/theme.css b/src/assets/components/themes/lara-light-blue/theme.css
index 37a9f92bcf0..6597de50c42 100644
--- a/src/assets/components/themes/lara-light-blue/theme.css
+++ b/src/assets/components/themes/lara-light-blue/theme.css
@@ -4217,6 +4217,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f9fafb;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #BFDBFE;
}
.p-splitter {
@@ -4232,6 +4238,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #e5e7eb;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #BFDBFE;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #e5e7eb;
}
diff --git a/src/assets/components/themes/lara-light-indigo/theme.css b/src/assets/components/themes/lara-light-indigo/theme.css
index 8f24cb79d52..d37df826d5d 100644
--- a/src/assets/components/themes/lara-light-indigo/theme.css
+++ b/src/assets/components/themes/lara-light-indigo/theme.css
@@ -4217,6 +4217,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f9fafb;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #C7D2FE;
}
.p-splitter {
@@ -4232,6 +4238,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #e5e7eb;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #C7D2FE;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #e5e7eb;
}
diff --git a/src/assets/components/themes/lara-light-purple/theme.css b/src/assets/components/themes/lara-light-purple/theme.css
index 315dcbc0d0e..0224a722608 100644
--- a/src/assets/components/themes/lara-light-purple/theme.css
+++ b/src/assets/components/themes/lara-light-purple/theme.css
@@ -4217,6 +4217,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f9fafb;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #DDD6FE;
}
.p-splitter {
@@ -4232,6 +4238,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #e5e7eb;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #DDD6FE;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #e5e7eb;
}
diff --git a/src/assets/components/themes/lara-light-teal/theme.css b/src/assets/components/themes/lara-light-teal/theme.css
index 8dcaa24fe96..718f8927920 100644
--- a/src/assets/components/themes/lara-light-teal/theme.css
+++ b/src/assets/components/themes/lara-light-teal/theme.css
@@ -4217,6 +4217,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f9fafb;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #99f6e4;
}
.p-splitter {
@@ -4232,6 +4238,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #e5e7eb;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #99f6e4;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #e5e7eb;
}
diff --git a/src/assets/components/themes/luna-amber/theme.css b/src/assets/components/themes/luna-amber/theme.css
index 633bbec266f..af5f97c981a 100644
--- a/src/assets/components/themes/luna-amber/theme.css
+++ b/src/assets/components/themes/luna-amber/theme.css
@@ -4212,6 +4212,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #3f3f3f;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem white;
}
.p-splitter {
@@ -4227,6 +4233,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #4b4b4b;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem white;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #4b4b4b;
}
diff --git a/src/assets/components/themes/luna-blue/theme.css b/src/assets/components/themes/luna-blue/theme.css
index ba6b73fd471..541893139aa 100644
--- a/src/assets/components/themes/luna-blue/theme.css
+++ b/src/assets/components/themes/luna-blue/theme.css
@@ -4212,6 +4212,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #3f3f3f;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem white;
}
.p-splitter {
@@ -4227,6 +4233,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #4b4b4b;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem white;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #4b4b4b;
}
diff --git a/src/assets/components/themes/luna-green/theme.css b/src/assets/components/themes/luna-green/theme.css
index 9b4d841ac1c..1bc15bcfdd5 100644
--- a/src/assets/components/themes/luna-green/theme.css
+++ b/src/assets/components/themes/luna-green/theme.css
@@ -4212,6 +4212,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #3f3f3f;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem white;
}
.p-splitter {
@@ -4227,6 +4233,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #4b4b4b;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem white;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #4b4b4b;
}
diff --git a/src/assets/components/themes/luna-pink/theme.css b/src/assets/components/themes/luna-pink/theme.css
index c54d54b6340..fa68bf648dd 100644
--- a/src/assets/components/themes/luna-pink/theme.css
+++ b/src/assets/components/themes/luna-pink/theme.css
@@ -4212,6 +4212,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #3f3f3f;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem white;
}
.p-splitter {
@@ -4227,6 +4233,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #4b4b4b;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem white;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #4b4b4b;
}
diff --git a/src/assets/components/themes/md-dark-deeppurple/theme.css b/src/assets/components/themes/md-dark-deeppurple/theme.css
index 3270290573e..e99f49d3fe8 100644
--- a/src/assets/components/themes/md-dark-deeppurple/theme.css
+++ b/src/assets/components/themes/md-dark-deeppurple/theme.css
@@ -4247,6 +4247,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: rgba(255, 255, 255, 0.12);
border: 0 none;
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s, background-size 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
}
.p-splitter {
@@ -4262,6 +4268,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: rgba(255, 255, 255, 0.12);
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: rgba(255, 255, 255, 0.12);
}
@@ -7793,5 +7804,20 @@
.p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active {
background: rgba(239, 154, 154, 0.16);
}
+
+ .p-scrollpanel .p-scrollpanel-bar:focus {
+ box-shadow: 0 0 1px 4px rgba(165, 214, 167, 0.2);
+ }
+
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
+ transition: transform 0.2s, box-shadow 0.2s;
+ transform: scale(0.7);
+ }
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus {
+ box-shadow: 0 0 1px 6px rgba(165, 214, 167, 0.2);
+ }
+ .p-splitter .p-splitter-gutter.p-splitter-gutter-resizing .p-splitter-gutter-handle {
+ transform: scale(1);
+ }
}
/* Customizations to the designer theme should be defined here */
diff --git a/src/assets/components/themes/md-dark-indigo/theme.css b/src/assets/components/themes/md-dark-indigo/theme.css
index 70164fb508f..6d5c6f1a8d3 100644
--- a/src/assets/components/themes/md-dark-indigo/theme.css
+++ b/src/assets/components/themes/md-dark-indigo/theme.css
@@ -4247,6 +4247,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: rgba(255, 255, 255, 0.12);
border: 0 none;
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s, background-size 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
}
.p-splitter {
@@ -4262,6 +4268,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: rgba(255, 255, 255, 0.12);
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: rgba(255, 255, 255, 0.12);
}
@@ -7793,5 +7804,20 @@
.p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active {
background: rgba(239, 154, 154, 0.16);
}
+
+ .p-scrollpanel .p-scrollpanel-bar:focus {
+ box-shadow: 0 0 1px 4px rgba(244, 143, 177, 0.2);
+ }
+
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
+ transition: transform 0.2s, box-shadow 0.2s;
+ transform: scale(0.7);
+ }
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus {
+ box-shadow: 0 0 1px 6px rgba(244, 143, 177, 0.2);
+ }
+ .p-splitter .p-splitter-gutter.p-splitter-gutter-resizing .p-splitter-gutter-handle {
+ transform: scale(1);
+ }
}
/* Customizations to the designer theme should be defined here */
diff --git a/src/assets/components/themes/md-light-deeppurple/theme.css b/src/assets/components/themes/md-light-deeppurple/theme.css
index 4bc2cf309c4..a269478c010 100644
--- a/src/assets/components/themes/md-light-deeppurple/theme.css
+++ b/src/assets/components/themes/md-light-deeppurple/theme.css
@@ -4247,6 +4247,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: rgba(0, 0, 0, 0.12);
border: 0 none;
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s, background-size 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
}
.p-splitter {
@@ -4262,6 +4268,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: rgba(0, 0, 0, 0.12);
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: rgba(0, 0, 0, 0.12);
}
@@ -7793,5 +7804,20 @@
.p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active {
background: rgba(211, 47, 47, 0.16);
}
+
+ .p-scrollpanel .p-scrollpanel-bar:focus {
+ box-shadow: 0 0 1px 4px rgba(76, 175, 80, 0.2);
+ }
+
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
+ transition: transform 0.2s, box-shadow 0.2s;
+ transform: scale(0.7);
+ }
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus {
+ box-shadow: 0 0 1px 6px rgba(76, 175, 80, 0.2);
+ }
+ .p-splitter .p-splitter-gutter.p-splitter-gutter-resizing .p-splitter-gutter-handle {
+ transform: scale(1);
+ }
}
/* Customizations to the designer theme should be defined here */
diff --git a/src/assets/components/themes/md-light-indigo/theme.css b/src/assets/components/themes/md-light-indigo/theme.css
index 3332a11f954..a1973ce7abc 100644
--- a/src/assets/components/themes/md-light-indigo/theme.css
+++ b/src/assets/components/themes/md-light-indigo/theme.css
@@ -4247,6 +4247,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: rgba(0, 0, 0, 0.12);
border: 0 none;
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s, background-size 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
}
.p-splitter {
@@ -4262,6 +4268,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: rgba(0, 0, 0, 0.12);
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: rgba(0, 0, 0, 0.12);
}
@@ -7793,5 +7804,20 @@
.p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active {
background: rgba(211, 47, 47, 0.16);
}
+
+ .p-scrollpanel .p-scrollpanel-bar:focus {
+ box-shadow: 0 0 1px 4px rgba(255, 64, 129, 0.2);
+ }
+
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
+ transition: transform 0.2s, box-shadow 0.2s;
+ transform: scale(0.7);
+ }
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus {
+ box-shadow: 0 0 1px 6px rgba(255, 64, 129, 0.2);
+ }
+ .p-splitter .p-splitter-gutter.p-splitter-gutter-resizing .p-splitter-gutter-handle {
+ transform: scale(1);
+ }
}
/* Customizations to the designer theme should be defined here */
diff --git a/src/assets/components/themes/mdc-dark-deeppurple/theme.css b/src/assets/components/themes/mdc-dark-deeppurple/theme.css
index 1dd2ad665fc..b8a19c06df0 100644
--- a/src/assets/components/themes/mdc-dark-deeppurple/theme.css
+++ b/src/assets/components/themes/mdc-dark-deeppurple/theme.css
@@ -4247,6 +4247,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: rgba(255, 255, 255, 0.12);
border: 0 none;
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s, background-size 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
}
.p-splitter {
@@ -4262,6 +4268,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: rgba(255, 255, 255, 0.12);
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: rgba(255, 255, 255, 0.12);
}
@@ -7793,5 +7804,20 @@
.p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active {
background: rgba(239, 154, 154, 0.16);
}
+
+ .p-scrollpanel .p-scrollpanel-bar:focus {
+ box-shadow: 0 0 1px 4px rgba(165, 214, 167, 0.2);
+ }
+
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
+ transition: transform 0.2s, box-shadow 0.2s;
+ transform: scale(0.7);
+ }
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus {
+ box-shadow: 0 0 1px 6px rgba(165, 214, 167, 0.2);
+ }
+ .p-splitter .p-splitter-gutter.p-splitter-gutter-resizing .p-splitter-gutter-handle {
+ transform: scale(1);
+ }
}
/* Customizations to the designer theme should be defined here */
diff --git a/src/assets/components/themes/mdc-dark-indigo/theme.css b/src/assets/components/themes/mdc-dark-indigo/theme.css
index f17b9dae002..033b88ddda4 100644
--- a/src/assets/components/themes/mdc-dark-indigo/theme.css
+++ b/src/assets/components/themes/mdc-dark-indigo/theme.css
@@ -4247,6 +4247,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: rgba(255, 255, 255, 0.12);
border: 0 none;
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s, background-size 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
}
.p-splitter {
@@ -4262,6 +4268,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: rgba(255, 255, 255, 0.12);
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: rgba(255, 255, 255, 0.12);
}
@@ -7793,5 +7804,20 @@
.p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active {
background: rgba(239, 154, 154, 0.16);
}
+
+ .p-scrollpanel .p-scrollpanel-bar:focus {
+ box-shadow: 0 0 1px 4px rgba(244, 143, 177, 0.2);
+ }
+
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
+ transition: transform 0.2s, box-shadow 0.2s;
+ transform: scale(0.7);
+ }
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus {
+ box-shadow: 0 0 1px 6px rgba(244, 143, 177, 0.2);
+ }
+ .p-splitter .p-splitter-gutter.p-splitter-gutter-resizing .p-splitter-gutter-handle {
+ transform: scale(1);
+ }
}
/* Customizations to the designer theme should be defined here */
diff --git a/src/assets/components/themes/mdc-light-deeppurple/theme.css b/src/assets/components/themes/mdc-light-deeppurple/theme.css
index a39db1fa5f6..5c7ef4a1241 100644
--- a/src/assets/components/themes/mdc-light-deeppurple/theme.css
+++ b/src/assets/components/themes/mdc-light-deeppurple/theme.css
@@ -4247,6 +4247,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: rgba(0, 0, 0, 0.12);
border: 0 none;
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s, background-size 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
}
.p-splitter {
@@ -4262,6 +4268,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: rgba(0, 0, 0, 0.12);
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: rgba(0, 0, 0, 0.12);
}
@@ -7793,5 +7804,20 @@
.p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active {
background: rgba(211, 47, 47, 0.16);
}
+
+ .p-scrollpanel .p-scrollpanel-bar:focus {
+ box-shadow: 0 0 1px 4px rgba(76, 175, 80, 0.2);
+ }
+
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
+ transition: transform 0.2s, box-shadow 0.2s;
+ transform: scale(0.7);
+ }
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus {
+ box-shadow: 0 0 1px 6px rgba(76, 175, 80, 0.2);
+ }
+ .p-splitter .p-splitter-gutter.p-splitter-gutter-resizing .p-splitter-gutter-handle {
+ transform: scale(1);
+ }
}
/* Customizations to the designer theme should be defined here */
diff --git a/src/assets/components/themes/mdc-light-indigo/theme.css b/src/assets/components/themes/mdc-light-indigo/theme.css
index 0624082d3ab..0f76110d38c 100644
--- a/src/assets/components/themes/mdc-light-indigo/theme.css
+++ b/src/assets/components/themes/mdc-light-indigo/theme.css
@@ -4247,6 +4247,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: rgba(0, 0, 0, 0.12);
border: 0 none;
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, box-shadow 0.2s, background-size 0.2s cubic-bezier(0.64, 0.09, 0.08, 1);
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
}
.p-splitter {
@@ -4262,6 +4268,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: rgba(0, 0, 0, 0.12);
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: none;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: rgba(0, 0, 0, 0.12);
}
@@ -7793,5 +7804,20 @@
.p-splitbutton.p-button-danger.p-button-text > .p-button:not(:disabled):active, .p-splitbutton.p-button-danger.p-button-outlined > .p-button:not(:disabled):active {
background: rgba(211, 47, 47, 0.16);
}
+
+ .p-scrollpanel .p-scrollpanel-bar:focus {
+ box-shadow: 0 0 1px 4px rgba(255, 64, 129, 0.2);
+ }
+
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
+ transition: transform 0.2s, box-shadow 0.2s;
+ transform: scale(0.7);
+ }
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus {
+ box-shadow: 0 0 1px 6px rgba(255, 64, 129, 0.2);
+ }
+ .p-splitter .p-splitter-gutter.p-splitter-gutter-resizing .p-splitter-gutter-handle {
+ transform: scale(1);
+ }
}
/* Customizations to the designer theme should be defined here */
diff --git a/src/assets/components/themes/mira/theme.css b/src/assets/components/themes/mira/theme.css
index 1efe58dc063..5fda0d2ddb9 100644
--- a/src/assets/components/themes/mira/theme.css
+++ b/src/assets/components/themes/mira/theme.css
@@ -4250,6 +4250,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #eceff4;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #c0d0e0;
}
.p-splitter {
@@ -4265,6 +4271,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #c2c7d1;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #c0d0e0;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #c2c7d1;
}
diff --git a/src/assets/components/themes/nano/theme.css b/src/assets/components/themes/nano/theme.css
index bcc99dc4b37..589124d0105 100644
--- a/src/assets/components/themes/nano/theme.css
+++ b/src/assets/components/themes/nano/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f2f4f8;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #90c9f5;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dee2e6;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #90c9f5;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dee2e6;
}
diff --git a/src/assets/components/themes/nova-accent/theme.css b/src/assets/components/themes/nova-accent/theme.css
index 1e81110952d..f479e86a19d 100644
--- a/src/assets/components/themes/nova-accent/theme.css
+++ b/src/assets/components/themes/nova-accent/theme.css
@@ -4200,6 +4200,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f8f8f8;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #8dcdff;
}
.p-splitter {
@@ -4215,6 +4221,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #d8dae2;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #8dcdff;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #d8dae2;
}
diff --git a/src/assets/components/themes/nova-alt/theme.css b/src/assets/components/themes/nova-alt/theme.css
index 13b7ee5b864..ff503f8c934 100644
--- a/src/assets/components/themes/nova-alt/theme.css
+++ b/src/assets/components/themes/nova-alt/theme.css
@@ -4212,6 +4212,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f8f8f8;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #8dcdff;
}
.p-splitter {
@@ -4227,6 +4233,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #d8dae2;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #8dcdff;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #d8dae2;
}
diff --git a/src/assets/components/themes/nova/theme.css b/src/assets/components/themes/nova/theme.css
index bb4de300bb3..5466858f27c 100644
--- a/src/assets/components/themes/nova/theme.css
+++ b/src/assets/components/themes/nova/theme.css
@@ -4212,6 +4212,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f8f8f8;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #8dcdff;
}
.p-splitter {
@@ -4227,6 +4233,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #d8dae2;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #8dcdff;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #d8dae2;
}
diff --git a/src/assets/components/themes/rhea/theme.css b/src/assets/components/themes/rhea/theme.css
index 38bb737ef87..fe8b8034056 100644
--- a/src/assets/components/themes/rhea/theme.css
+++ b/src/assets/components/themes/rhea/theme.css
@@ -4200,6 +4200,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f8f8f8;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #e4e9ec;
}
.p-splitter {
@@ -4215,6 +4221,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dadada;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #e4e9ec;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dadada;
}
diff --git a/src/assets/components/themes/saga-blue/theme.css b/src/assets/components/themes/saga-blue/theme.css
index e0971f9fd4f..0310b0859c4 100644
--- a/src/assets/components/themes/saga-blue/theme.css
+++ b/src/assets/components/themes/saga-blue/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f8f9fa;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #a6d5fa;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dee2e6;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #a6d5fa;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dee2e6;
}
diff --git a/src/assets/components/themes/saga-green/theme.css b/src/assets/components/themes/saga-green/theme.css
index 4d91d1982b8..22b3571b6d2 100644
--- a/src/assets/components/themes/saga-green/theme.css
+++ b/src/assets/components/themes/saga-green/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f8f9fa;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #b7e0b8;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dee2e6;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #b7e0b8;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dee2e6;
}
diff --git a/src/assets/components/themes/saga-orange/theme.css b/src/assets/components/themes/saga-orange/theme.css
index 1f2dcc8a81f..d707742c8be 100644
--- a/src/assets/components/themes/saga-orange/theme.css
+++ b/src/assets/components/themes/saga-orange/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f8f9fa;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #ffe69c;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dee2e6;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #ffe69c;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dee2e6;
}
diff --git a/src/assets/components/themes/saga-purple/theme.css b/src/assets/components/themes/saga-purple/theme.css
index 6719eb0f53c..cda6af5d699 100644
--- a/src/assets/components/themes/saga-purple/theme.css
+++ b/src/assets/components/themes/saga-purple/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f8f9fa;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #df9eea;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dee2e6;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.2rem #df9eea;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dee2e6;
}
diff --git a/src/assets/components/themes/soho-dark/theme.css b/src/assets/components/themes/soho-dark/theme.css
index b4bedb3ab70..3904efbfbc7 100644
--- a/src/assets/components/themes/soho-dark/theme.css
+++ b/src/assets/components/themes/soho-dark/theme.css
@@ -4222,6 +4222,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #3e4053;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #e0d8fc;
}
.p-splitter {
@@ -4237,6 +4243,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #3e4053;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #e0d8fc;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #3e4053;
}
diff --git a/src/assets/components/themes/soho-light/theme.css b/src/assets/components/themes/soho-light/theme.css
index 0ae5b1fda90..c3742101659 100644
--- a/src/assets/components/themes/soho-light/theme.css
+++ b/src/assets/components/themes/soho-light/theme.css
@@ -4222,6 +4222,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #eff3f8;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #c7bbfa;
}
.p-splitter {
@@ -4237,6 +4243,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #dfe7ef;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #c7bbfa;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #dfe7ef;
}
diff --git a/src/assets/components/themes/tailwind-light/theme.css b/src/assets/components/themes/tailwind-light/theme.css
index 81f834fbfac..0f98ecc795d 100644
--- a/src/assets/components/themes/tailwind-light/theme.css
+++ b/src/assets/components/themes/tailwind-light/theme.css
@@ -4260,6 +4260,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #fafafa;
border: 0 none;
+ transition: none;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #6366f1;
}
.p-splitter {
@@ -4275,6 +4281,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #e5e7eb;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #6366f1;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #e5e7eb;
}
diff --git a/src/assets/components/themes/vela-blue/theme.css b/src/assets/components/themes/vela-blue/theme.css
index e349a5b927a..6b66a7bef1b 100644
--- a/src/assets/components/themes/vela-blue/theme.css
+++ b/src/assets/components/themes/vela-blue/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #304562;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #93cbf9;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #304562;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #93cbf9;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #304562;
}
diff --git a/src/assets/components/themes/vela-green/theme.css b/src/assets/components/themes/vela-green/theme.css
index a2ad4548927..5b4a490d646 100644
--- a/src/assets/components/themes/vela-green/theme.css
+++ b/src/assets/components/themes/vela-green/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #304562;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #a7d8a9;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #304562;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #a7d8a9;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #304562;
}
diff --git a/src/assets/components/themes/vela-orange/theme.css b/src/assets/components/themes/vela-orange/theme.css
index 9d79057675f..0c4dfac199d 100644
--- a/src/assets/components/themes/vela-orange/theme.css
+++ b/src/assets/components/themes/vela-orange/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #304562;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #ffe284;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #304562;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #ffe284;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #304562;
}
diff --git a/src/assets/components/themes/vela-purple/theme.css b/src/assets/components/themes/vela-purple/theme.css
index 3b3e992edbf..9761c8f19cb 100644
--- a/src/assets/components/themes/vela-purple/theme.css
+++ b/src/assets/components/themes/vela-purple/theme.css
@@ -4224,6 +4224,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #304562;
border: 0 none;
+ transition: background-color 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.2s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #cf95d9;
}
.p-splitter {
@@ -4239,6 +4245,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #304562;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #cf95d9;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #304562;
}
diff --git a/src/assets/components/themes/viva-dark/theme.css b/src/assets/components/themes/viva-dark/theme.css
index 871a5363dd0..3c26fd8dab7 100644
--- a/src/assets/components/themes/viva-dark/theme.css
+++ b/src/assets/components/themes/viva-dark/theme.css
@@ -4254,6 +4254,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #263238;
border: 0 none;
+ transition: background-color 0.3s, color 0.3s, border-color 0.3s, box-shadow 0.3s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #9eade6;
}
.p-splitter {
@@ -4269,6 +4275,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #263238;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 1px #9eade6;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #263238;
}
diff --git a/src/assets/components/themes/viva-light/theme.css b/src/assets/components/themes/viva-light/theme.css
index dbf9236fadc..f3c92374540 100644
--- a/src/assets/components/themes/viva-light/theme.css
+++ b/src/assets/components/themes/viva-light/theme.css
@@ -4255,6 +4255,12 @@
.p-scrollpanel .p-scrollpanel-bar {
background: #f5f5f5;
border: 0 none;
+ transition: background-color 0.3s, color 0.3s, border-color 0.3s, box-shadow 0.3s;
+ }
+ .p-scrollpanel .p-scrollpanel-bar:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem #bbc7ee;
}
.p-splitter {
@@ -4270,6 +4276,11 @@
.p-splitter .p-splitter-gutter .p-splitter-gutter-handle {
background: #ebebeb;
}
+ .p-splitter .p-splitter-gutter .p-splitter-gutter-handle:focus-visible {
+ outline: 0 none;
+ outline-offset: 0;
+ box-shadow: 0 0 0 0.1rem #bbc7ee;
+ }
.p-splitter .p-splitter-gutter-resizing {
background: #ebebeb;
}