RSS Git Download  Clone
Raw Blame History 16kB 310 lines
// Per-theme custom CSS properties
//
// Replaces the dynamic CSS injected via jQuery in p3xr-theme.js:
//   $('head').append('<style id="p3xr-theme-styles">' + styles + '</style>')
//
// Uses the Layout sub-theme for border/toolbar colors (matching AngularJS usage of themeLayout)
// Uses the Main sub-theme for content-area colors
// Uses the Common sub-theme for status/indicator colors

@use '@angular/material' as mat;
@use 'theme-definitions' as defs;

// ============================================================================
// Shared dark/light mixins
// ============================================================================

@mixin p3xr-dark-custom-props($layout-theme, $main-theme, $common-theme) {
  // Layout toolbar (primary default hue — header/footer)
  --p3xr-toolbar-bg: #{mat.get-theme-color($layout-theme, neutral-variant, 40)};
  --p3xr-toolbar-color: #{mat.get-theme-color($layout-theme, neutral-variant, 90)};
  --p3xr-toolbar-strong-bg: #{mat.get-theme-color($layout-theme, primary, 20)};
  --p3xr-toolbar-strong-color: #{mat.get-theme-color($layout-theme, neutral, 98)};
  // Accordion toolbar (primary hue-1 — content area section headers)
  --p3xr-accordion-bg: #{mat.get-theme-color($layout-theme, neutral-variant, 60)};
  --p3xr-accordion-color: #{mat.get-theme-color($layout-theme, neutral-variant, 10)};
  // Button colors from Main sub-theme: primary, accent(tertiary), warn(error)
  --p3xr-btn-primary-bg: #{mat.get-theme-color($main-theme, primary, 80)};
  --p3xr-btn-primary-color: rgba(0, 0, 0, 0.87);
  --p3xr-btn-accent-bg: #{mat.get-theme-color($main-theme, tertiary, 80)};
  --p3xr-btn-accent-color: rgba(0, 0, 0, 0.87);
  --p3xr-btn-warn-bg: #{mat.get-theme-color($main-theme, error, 80)};
  --p3xr-btn-warn-color: rgba(0, 0, 0, 0.87);
  --p3xr-common-btn-primary-bg: #{mat.get-theme-color($common-theme, primary, 80)};
  --p3xr-common-btn-primary-color: rgba(0, 0, 0, 0.87);
  --p3xr-plain-button-color: rgba(255, 255, 255, 0.87);
  --p3xr-hover-bg: rgba(255, 255, 255, 0.1);
  --p3xr-hover-bg-inverse: rgba(0, 0, 0, 0.1);
  --p3xr-border-color: #{mat.get-theme-color($layout-theme, primary, 50)};
  --p3xr-input-border-color: #{mat.get-theme-color($layout-theme, primary, 50)};
  --p3xr-content-border-color: rgba(255, 255, 255, 0.12);
  --p3xr-content-border-toolbar-color: rgba(255, 255, 255, 0.12);
  --p3xr-dialog-surface-bg: var(--p3xr-content-bg);
  --p3xr-toast-bg: #{mat.get-theme-color($common-theme, neutral, 10)};
  --p3xr-toast-border: rgba(255, 255, 255, 0.5);
  --p3xr-toast-shadow: 0 0 10px rgba(0, 0, 0, 0.6);
  --p3xr-tree-branch-color: #{mat.get-theme-color($main-theme, tertiary, 80)};
  --p3xr-tree-branch-shadow: 1px 1px 1px rgba(55, 29, 27, 0.5);
  --p3xr-list-odd-bg: rgba(255, 255, 255, 0.05);
  --p3xr-list-border: rgba(255, 255, 255, 0.05);
  --p3xr-autofill-bg: rgb(66, 66, 66, 0.9);
  --p3xr-autofill-color: white;
  --p3xr-input-bg: rgba(64, 64, 64, 1);
  --p3xr-input-color: white;
  --p3xr-fieldset-border: rgba(255, 255, 255, 0.25);
  --p3xr-selection-color: white;
  --p3xr-selection-bg: black;
  --p3xr-placeholder-color: rgba(255, 255, 255, 0.75);
  --p3xr-menu-selected-bg: rgba(255, 255, 255, 0.1);
  --p3xr-json-key-color: white;
  --p3xr-json-value-string: var(--p3xr-btn-accent-bg);
  --p3xr-json-value-number: var(--p3xr-btn-primary-bg);
  --p3xr-json-value-boolean: var(--p3xr-btn-warn-bg);
  --p3xr-json-value-null: rgba(255, 255, 255, 0.4);
  --p3xr-treecontrol-icon-color: rgba(255, 255, 255, 0.7);
  --p3xr-link-color: #82b1ff;
  --p3xr-common-warn-color: var(--p3xr-btn-warn-bg);
}

// Accordion/toolbar background colors matching AngularJS md-toolbar with Layout sub-theme
// AngularJS used md-theme="themeLayout" + class="md-primary md-hue-1"
// These are the exact colors from the AngularJS Material palette definitions

@mixin p3xr-light-custom-props($layout-theme, $main-theme, $common-theme) {
  // Layout toolbar (primary default hue — header/footer)
  --p3xr-toolbar-bg: #{mat.get-theme-color($layout-theme, neutral-variant, 60)};
  --p3xr-toolbar-color: #{mat.get-theme-color($layout-theme, neutral-variant, 10)};
  --p3xr-toolbar-strong-bg: #{mat.get-theme-color($layout-theme, primary, 20)};
  --p3xr-toolbar-strong-color: #{mat.get-theme-color($layout-theme, neutral, 98)};
  // Accordion toolbar (primary hue-1 — content area section headers)
  --p3xr-accordion-bg: #{mat.get-theme-color($layout-theme, neutral-variant, 40)};
  --p3xr-accordion-color: #{mat.get-theme-color($layout-theme, neutral-variant, 90)};
  // Button colors from Main sub-theme: primary, accent(tertiary), warn(error)
  --p3xr-btn-primary-bg: #{mat.get-theme-color($main-theme, primary, 40)};
  --p3xr-btn-primary-color: white;
  --p3xr-btn-accent-bg: #{mat.get-theme-color($main-theme, tertiary, 40)};
  --p3xr-btn-accent-color: white;
  --p3xr-btn-warn-bg: #{mat.get-theme-color($main-theme, error, 40)};
  --p3xr-btn-warn-color: white;
  --p3xr-common-btn-primary-bg: #{mat.get-theme-color($common-theme, primary, 40)};
  --p3xr-common-btn-primary-color: white;
  --p3xr-plain-button-color: rgba(0, 0, 0, 0.87);
  --p3xr-hover-bg: rgba(0, 0, 0, 0.1);
  --p3xr-hover-bg-inverse: rgba(255, 255, 255, 0.1);
  --p3xr-border-color: #{mat.get-theme-color($layout-theme, primary, 50)};
  --p3xr-input-border-color: #{mat.get-theme-color($layout-theme, primary, 50)};
  --p3xr-content-border-color: transparent;
  --p3xr-content-border-toolbar-color: #{mat.get-theme-color($layout-theme, primary, 50)};
  --p3xr-dialog-surface-bg: var(--p3xr-content-bg);
  --p3xr-toast-bg: auto;
  --p3xr-toast-border: auto;
  --p3xr-toast-shadow: none;
  --p3xr-tree-branch-color: #{mat.get-theme-color($main-theme, tertiary, 40)};
  --p3xr-tree-branch-shadow: 1px 1px 0px rgba(55, 11, 0, 0.5);
  --p3xr-list-odd-bg: rgba(0, 0, 0, 0.04);
  --p3xr-list-border: rgba(0, 0, 0, 0.06);
  --p3xr-autofill-bg: rgba(255, 255, 255, 0.5);
  --p3xr-autofill-color: black;
  --p3xr-input-bg: white;
  --p3xr-input-color: black;
  --p3xr-fieldset-border: rgba(0, 0, 0, 0.5);
  --p3xr-selection-color: inherit;
  --p3xr-selection-bg: highlight;
  --p3xr-placeholder-color: inherit;
  --p3xr-menu-selected-bg: rgba(0, 0, 0, 0.1);
  --p3xr-json-key-color: black;
  --p3xr-json-value-string: var(--p3xr-btn-accent-bg);
  --p3xr-json-value-number: var(--p3xr-btn-primary-bg);
  --p3xr-json-value-boolean: var(--p3xr-btn-warn-bg);
  --p3xr-json-value-null: rgba(0, 0, 0, 0.4);
  --p3xr-treecontrol-icon-color: rgba(0, 0, 0, 0.87);
  --p3xr-link-color: #1a73e8;
  --p3xr-common-warn-color: var(--p3xr-btn-warn-bg);
}

// ============================================================================
// Per-theme CSS custom properties (using all 3 sub-themes)
// ============================================================================

// ============================================================================
// Per-theme EXACT colors from AngularJS Material palette definitions
// These override the mixin-generated M3 values with the production hex values
// Source: angular-material/angular-material.js palette definitions
// ============================================================================

body.p3xr-mat-theme-enterprise {
  @include p3xr-light-custom-props(defs.$p3xr-theme-enterprise-layout, defs.$p3xr-theme-enterprise, defs.$p3xr-theme-enterprise-common);
  // Enterprise: Layout primary=grey default:800, hue-1:500
  --p3xr-toolbar-bg: #424242;          // grey-800 (primary default — header/footer)
  --p3xr-toolbar-color: rgba(255,255,255,0.87);
  --p3xr-toolbar-strong-bg: #212121;   // grey-900
  --p3xr-toolbar-strong-color: rgba(255,255,255,0.87);
  --p3xr-accordion-bg: #9e9e9e;       // grey-500 (primary hue-1 — accordion headers)
  --p3xr-accordion-color: rgba(0,0,0,0.87);
  --p3xr-btn-primary-bg: #3f51b5;      // indigo-500
  --p3xr-btn-primary-color: white;
  --p3xr-btn-accent-bg: #1976d2;       // blue-700
  --p3xr-btn-accent-color: white;
  --p3xr-btn-warn-bg: #d32f2f;         // red-700
  --p3xr-btn-warn-color: white;
  --p3xr-common-btn-primary-bg: #4caf50; // green-500
  --p3xr-common-btn-primary-color: white;
  --p3xr-border-color: #424242;
  --p3xr-input-border-color: #9e9e9e;
  --p3xr-dialog-surface-bg: #ffffff;
  --p3xr-content-bg: #fafafa;         // near-white (default light bg)
  --p3xr-body-bg: #e0e0e0;           // grey-300 (body background)
  --p3xr-common-warn-color: #03a9f4; // light-blue-500
}

body.p3xr-mat-theme-light {
  @include p3xr-light-custom-props(defs.$p3xr-theme-light-layout, defs.$p3xr-theme-light, defs.$p3xr-theme-light-common);
  // Light: Layout primary=blue-grey default:800, hue-1:200
  --p3xr-toolbar-bg: #37474f;          // blue-grey-800 (primary default — header/footer)
  --p3xr-toolbar-color: rgba(255,255,255,0.87);
  --p3xr-toolbar-strong-bg: #263238;   // blue-grey-900
  --p3xr-toolbar-strong-color: rgba(255,255,255,0.87);
  --p3xr-accordion-bg: #b0bec5;       // blue-grey-200 (primary hue-1 — accordion headers)
  --p3xr-accordion-color: rgba(0,0,0,0.87);
  --p3xr-btn-primary-bg: #673ab7;      // deep-purple-500
  --p3xr-btn-primary-color: white;
  --p3xr-btn-accent-bg: #9c27b0;       // purple-500
  --p3xr-btn-accent-color: white;
  --p3xr-btn-warn-bg: #d32f2f;         // red-700
  --p3xr-btn-warn-color: white;
  --p3xr-common-btn-primary-bg: #4caf50; // green-500
  --p3xr-common-btn-primary-color: white;
  --p3xr-border-color: #37474f;
  --p3xr-input-border-color: #b0bec5;
  --p3xr-dialog-surface-bg: #cfd8dc;  // blue-grey-100 (legacy md-dialog paper)
  --p3xr-content-bg: #eceff1;         // blue-grey-50
  --p3xr-body-bg: #cfd8dc;           // blue-grey-100 (body background)
  --p3xr-common-warn-color: #607d8b; // blue-grey-500
}

body.p3xr-mat-theme-redis {
  @include p3xr-light-custom-props(defs.$p3xr-theme-redis-layout, defs.$p3xr-theme-redis, defs.$p3xr-theme-redis-common);
  // Redis: Layout primary=red default:800, hue-1:200
  --p3xr-toolbar-bg: #c62828;          // red-800 (primary default — header/footer)
  --p3xr-toolbar-color: rgba(255,255,255,0.87);
  --p3xr-accordion-bg: #ef9a9a;       // red-200 (primary hue-1 — accordion headers)
  --p3xr-accordion-color: rgba(0,0,0,0.87);
  --p3xr-toolbar-strong-bg: #b71c1c;   // red-900
  --p3xr-toolbar-strong-color: rgba(255,255,255,0.87);
  --p3xr-btn-primary-bg: #212121;      // grey-900
  --p3xr-btn-primary-color: rgba(255,255,255,0.87);
  --p3xr-btn-accent-bg: #757575;       // grey-600
  --p3xr-btn-accent-color: white;
  --p3xr-btn-warn-bg: #ffc107;         // amber-500
  --p3xr-btn-warn-color: white;
  --p3xr-common-btn-primary-bg: #4caf50; // green-500
  --p3xr-common-btn-primary-color: white;
  --p3xr-border-color: #c62828;
  --p3xr-input-border-color: #ef9a9a;
  --p3xr-dialog-surface-bg: #ffffff;
  --p3xr-content-bg: #fafafa;         // near-white (default light bg)
  --p3xr-body-bg: #ffcdd2;           // red-100 (body background)
  --p3xr-common-warn-color: #f44336; // red-500
}

body.p3xr-mat-theme-dark {
  @include p3xr-dark-custom-props(defs.$p3xr-theme-dark-layout, defs.$p3xr-theme-dark, defs.$p3xr-theme-dark-common);
  // Dark: Layout primary=grey default:800, hue-1:500
  --p3xr-toolbar-bg: #424242;          // grey-800 (primary default — header/footer)
  --p3xr-toolbar-color: rgba(255,255,255,0.87);
  --p3xr-accordion-bg: #9e9e9e;       // grey-500 (primary hue-1 — accordion headers)
  --p3xr-accordion-color: rgba(0,0,0,0.87);
  --p3xr-toolbar-strong-bg: #212121;   // grey-900
  --p3xr-toolbar-strong-color: rgba(255,255,255,0.87);
  --p3xr-btn-primary-bg: #7986cb;      // indigo-300
  --p3xr-btn-primary-color: rgba(0,0,0,0.87);
  --p3xr-btn-accent-bg: #2196f3;       // blue-500
  --p3xr-btn-accent-color: rgba(0,0,0,0.87);
  --p3xr-btn-warn-bg: #ff9800;         // orange-500
  --p3xr-btn-warn-color: rgba(0,0,0,0.87);
  --p3xr-common-btn-primary-bg: #4caf50; // green-500
  --p3xr-common-btn-primary-color: rgba(0,0,0,0.87);
  --p3xr-border-color: #424242;
  --p3xr-input-border-color: #9e9e9e;
  --p3xr-dialog-surface-bg: #424242;  // legacy dark md-dialog paper
  --p3xr-content-bg: #303030;         // grey-A400 (dark mode md-content bg)
  --p3xr-body-bg: #212121;           // grey-900 (body background)
  --p3xr-common-warn-color: #9fa8da; // indigo-200
}

body.p3xr-mat-theme-dark-neu {
  @include p3xr-dark-custom-props(defs.$p3xr-theme-dark-neu-layout, defs.$p3xr-theme-dark-neu, defs.$p3xr-theme-dark-neu-common);
  // DarkNeu: Layout primary=blue-grey default:800, hue-1:300
  --p3xr-toolbar-bg: #37474f;          // blue-grey-800 (primary default — header/footer)
  --p3xr-toolbar-color: rgba(255,255,255,0.87);
  --p3xr-accordion-bg: #90a4ae;       // blue-grey-300 (primary hue-1 — accordion headers)
  --p3xr-accordion-color: rgba(0,0,0,0.87);
  --p3xr-toolbar-strong-bg: #263238;   // blue-grey-900
  --p3xr-toolbar-strong-color: rgba(255,255,255,0.87);
  --p3xr-btn-primary-bg: #00bcd4;      // cyan-500
  --p3xr-btn-primary-color: rgba(0,0,0,0.87);
  --p3xr-btn-accent-bg: #2196f3;       // blue-500
  --p3xr-btn-accent-color: rgba(0,0,0,0.87);
  --p3xr-btn-warn-bg: #ffeb3b;         // yellow-500
  --p3xr-btn-warn-color: rgba(0,0,0,0.87);
  --p3xr-common-btn-primary-bg: #4caf50; // green-500
  --p3xr-common-btn-primary-color: rgba(0,0,0,0.87);
  --p3xr-border-color: #37474f;
  --p3xr-input-border-color: #90a4ae;
  --p3xr-dialog-surface-bg: #424242;
  --p3xr-content-bg: #303030;         // dark mode md-content bg
  --p3xr-body-bg: #263238;           // blue-grey-900 (body background)
  --p3xr-common-warn-color: #2196f3; // blue-500
}

body.p3xr-mat-theme-darko-bluo {
  @include p3xr-dark-custom-props(defs.$p3xr-theme-darko-bluo-layout, defs.$p3xr-theme-darko-bluo, defs.$p3xr-theme-darko-bluo-common);
  // DarkoBluo: Layout primary=indigo default:900, hue-1:500
  --p3xr-toolbar-bg: #1a237e;          // indigo-900 (primary default — header/footer)
  --p3xr-toolbar-color: rgba(255,255,255,0.87);
  --p3xr-accordion-bg: #3f51b5;       // indigo-500 (primary hue-1 — accordion headers)
  --p3xr-accordion-color: white;
  --p3xr-toolbar-strong-bg: #1a237e;   // indigo-900
  --p3xr-toolbar-strong-color: rgba(255,255,255,0.87);
  --p3xr-btn-primary-bg: #7986cb;      // indigo-300
  --p3xr-btn-primary-color: rgba(0,0,0,0.87);
  --p3xr-btn-accent-bg: #2196f3;       // blue-500
  --p3xr-btn-accent-color: rgba(0,0,0,0.87);
  --p3xr-btn-warn-bg: #ff9800;         // orange-500
  --p3xr-btn-warn-color: rgba(0,0,0,0.87);
  --p3xr-common-btn-primary-bg: #4caf50; // green-500
  --p3xr-common-btn-primary-color: rgba(0,0,0,0.87);
  --p3xr-border-color: #1a237e;
  --p3xr-input-border-color: #3f51b5;
  --p3xr-dialog-surface-bg: #424242;
  --p3xr-content-bg: #303030;         // dark mode md-content bg
  --p3xr-body-bg: #283593;           // indigo-800 (body background)
  --p3xr-common-warn-color: #03a9f4; // light-blue-500
}

body.p3xr-mat-theme-matrix {
  @include p3xr-dark-custom-props(defs.$p3xr-theme-matrix-layout, defs.$p3xr-theme-matrix, defs.$p3xr-theme-matrix-common);
  // Matrix: Layout primary=light-green default:A400, hue-1:A400
  --p3xr-toolbar-bg: #76ff03;          // light-green-A400 (primary default — header/footer)
  --p3xr-toolbar-color: rgba(0,0,0,0.87);
  --p3xr-accordion-bg: #76ff03;       // light-green-A400 (primary hue-1 — accordion headers, same)
  --p3xr-accordion-color: rgba(0,0,0,0.87);
  --p3xr-toolbar-strong-bg: #33691e;   // light-green-900
  --p3xr-toolbar-strong-color: rgba(255,255,255,0.87);
  --p3xr-btn-primary-bg: #76ff03;      // light-green-A400
  --p3xr-btn-primary-color: rgba(0,0,0,0.87);
  --p3xr-btn-accent-bg: #c6ff00;       // lime-A400
  --p3xr-btn-accent-color: rgba(0,0,0,0.87);
  --p3xr-btn-warn-bg: #00c853;         // green-A700
  --p3xr-btn-warn-color: rgba(0,0,0,0.87);
  --p3xr-common-btn-primary-bg: #76ff03; // light-green-A400
  --p3xr-common-btn-primary-color: rgba(0,0,0,0.87);
  --p3xr-border-color: #76ff03;
  --p3xr-tree-branch-color: #76ff03;
  --p3xr-input-border-color: #76ff03;
  --p3xr-dialog-surface-bg: #424242;
  --p3xr-content-bg: #303030;         // dark mode md-content bg
  --p3xr-body-bg: #1b5e20;           // green-900 (body background)
  --p3xr-common-warn-color: #4caf50; // green-500
}