[NIFI-12655] theme NiFi following Material Design spec and leveraging Angular Material themes (#8294)

* [NIFI-12655] theme nifi following Material Design and leveraging Angular Material themes

* update accent palette usage to $nifi-canvas-accent-light-palette

* fix layout of create process group dialog

This closes #8294
This commit is contained in:
Scott Aslan 2024-01-30 08:54:56 -05:00 committed by GitHub
parent 13271d198f
commit 8b2758cd18
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
161 changed files with 3530 additions and 1045 deletions

View File

@ -30,6 +30,12 @@
<node.version>v20.5.1</node.version> <node.version>v20.5.1</node.version>
<frontend.source>${basedir}/src/main/nifi</frontend.source> <frontend.source>${basedir}/src/main/nifi</frontend.source>
<frontend.working.dir>${project.build.directory}/frontend-working-directory</frontend.working.dir> <frontend.working.dir>${project.build.directory}/frontend-working-directory</frontend.working.dir>
<copy-rename-maven-plugin.version>1.0</copy-rename-maven-plugin.version>
<!--
String name of the theme file to be used.
Ex: 'purple' // will overwrite the nifi.scss theme file with the 'purple' theme.
-->
<frontend.theme>nifi</frontend.theme>
</properties> </properties>
<build> <build>
@ -85,6 +91,27 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>com.coderplus.maven.plugins</groupId>
<artifactId>copy-rename-maven-plugin</artifactId>
<version>${copy-rename-maven-plugin.version}</version>
<executions>
<!--
Copy theme.
-->
<execution>
<id>copy-theme</id>
<phase>initialize</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<sourceFile>${frontend.working.dir}/src/assets/themes/${frontend.theme}.scss</sourceFile>
<destinationFile>${frontend.working.dir}/src/assets/themes/nifi.scss</destinationFile>
</configuration>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>com.github.eirslett</groupId> <groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId> <artifactId>frontend-maven-plugin</artifactId>

View File

@ -0,0 +1,34 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.splash {
background-color: $primary-palette-500;
}
}

View File

@ -17,8 +17,10 @@
<div class="splash h-screen p-20" *ngIf="guardLoading"> <div class="splash h-screen p-20" *ngIf="guardLoading">
<div class="splash-img h-full flex items-center justify-center"> <div class="splash-img h-full flex items-center justify-center">
<mat-spinner color="warn"></mat-spinner> <mat-spinner color="primary"></mat-spinner>
</div> </div>
</div> </div>
<router-outlet></router-outlet> <div class="mat-app-background">
<router-outlet></router-outlet>
</div>

View File

@ -16,8 +16,6 @@
*/ */
.splash { .splash {
background-color: #7098ad;
.splash-img { .splash-img {
background: transparent url(../assets/icons/nifi-drop-splash.svg) no-repeat center center; background: transparent url(../assets/icons/nifi-drop-splash.svg) no-repeat center center;
} }

View File

@ -0,0 +1,34 @@
/*!
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.access-policies-header {
color: $primary-palette-500;
}
}

View File

@ -14,7 +14,3 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
.access-policies-header {
color: #728e9b;
}

View File

@ -0,0 +1,36 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-A400: mat.get-color-from-palette($primary-palette, 'A400');
.add-tenant-to-policy-form {
.fa {
color: $primary-palette-A400;
}
}
}

View File

@ -42,7 +42,7 @@
</div> </div>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button mat-raised-button mat-dialog-close color="accent">Cancel</button> <button mat-stroked-button mat-dialog-close color="primary">Cancel</button>
<button <button
mat-raised-button mat-raised-button
[disabled]="addTenantsForm.invalid || saving.value" [disabled]="addTenantsForm.invalid || saving.value"

View File

@ -20,10 +20,6 @@
.add-tenant-to-policy-form { .add-tenant-to-policy-form {
@include mat.button-density(-1); @include mat.button-density(-1);
.fa {
color: #004849;
}
mat-selection-list { mat-selection-list {
max-height: 250px; max-height: 250px;
overflow: auto; overflow: auto;

View File

@ -37,7 +37,7 @@ export interface TenantItem {
standalone: true, standalone: true,
templateUrl: './policy-table.component.html', templateUrl: './policy-table.component.html',
imports: [MatTableModule, MatSortModule, NgIf], imports: [MatTableModule, MatSortModule, NgIf],
styleUrls: ['./policy-table.component.scss', '../../../../../../assets/styles/listing-table.scss'] styleUrls: ['./policy-table.component.scss']
}) })
export class PolicyTable { export class PolicyTable {
displayedColumns: string[] = ['user', 'actions']; displayedColumns: string[] = ['user', 'actions'];

View File

@ -0,0 +1,51 @@
/*!
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$warn-palette: map.get($color-config, 'warn');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
$warn-palette-A200: mat.get-color-from-palette($warn-palette, 'A200');
$canvas-primary-palette-A200: mat.get-color-from-palette($canvas-primary-palette, 'A200');
.component-access-policies {
.operation-context-logo {
.icon {
color: $warn-palette-A200;
}
}
.operation-context-name {
color: $canvas-primary-palette-A200;
}
.operation-context-type {
color: $primary-palette-500;
}
}
}

View File

@ -29,20 +29,14 @@
.operation-context-logo { .operation-context-logo {
.icon { .icon {
font-size: 36px; font-size: 36px;
color: #ad9897;
} }
} }
.operation-context-name { .operation-context-name {
font-size: 18px; font-size: 18px;
color: #262626;
width: 370px; width: 370px;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
} }
.operation-context-type {
color: #728e9b;
}
} }

View File

@ -0,0 +1,34 @@
/*!
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.bulletin-board-header {
color: $primary-palette-500;
}
}

View File

@ -14,7 +14,3 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
.bulletin-board-header {
color: #728e9b;
}

View File

@ -0,0 +1,46 @@
/*!
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$warn-palette: map.get($color-config, 'warn');
$canvas-accent-palette: map.get($canvas-color-config, 'accent');
// Get hues from palette
$canvas-accent-palette-700: mat.get-color-from-palette($canvas-accent-palette, 700);
$canvas-accent-palette-A400: mat.get-color-from-palette($canvas-accent-palette, 'A400');
$warn-palette-600: mat.get-color-from-palette($warn-palette, 600);
.bulletin-error {
color: $warn-palette-600;
}
.bulletin-warn {
color: $canvas-accent-palette-A400;
}
.bulletin-normal {
color: $canvas-accent-palette-700;
}
}

View File

@ -15,18 +15,6 @@
* limitations under the License. * limitations under the License.
*/ */
.bulletin-error {
color: #ec3030;
}
.bulletin-warn {
color: #bda500;
}
.bulletin-normal {
color: #016131;
}
.link { .link {
font-size: 16px; font-size: 16px;
} }

View File

@ -0,0 +1,34 @@
/*!
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.counter-header {
color: $primary-palette-500;
}
}

View File

@ -1,20 +1,16 @@
/*! /*
* Licensed to the Apache Software Foundation (ASF) under one or more * Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with * contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. * this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0 * The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with * (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at * the License. You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
.counter-header {
color: #728e9b;
}

View File

@ -26,7 +26,7 @@ import { NiFiCommon } from '../../../../../service/nifi-common.service';
@Component({ @Component({
selector: 'counter-table', selector: 'counter-table',
templateUrl: './counter-table.component.html', templateUrl: './counter-table.component.html',
styleUrls: ['./counter-table.component.scss', '../../../../../../assets/styles/listing-table.scss'] styleUrls: ['./counter-table.component.scss']
}) })
export class CounterTable implements AfterViewInit { export class CounterTable implements AfterViewInit {
private _canModifyCounters: boolean = false; private _canModifyCounters: boolean = false;

View File

@ -1229,11 +1229,11 @@ export class CanvasUtils {
const bBox = activeThreadCount.node().getBBox(); const bBox = activeThreadCount.node().getBBox();
return d.dimensions.width - bBox.width - 20; return d.dimensions.width - bBox.width - 20;
}) })
.style('fill', function () { .attr('class', function () {
if (terminatedThreads > 0) { if (terminatedThreads > 0) {
return '#ba554a'; return `active-thread-count-icon warn-400`;
} else { } else {
return '#728e9b'; return `active-thread-count-icon primary-500`;
} }
}) })
.style('display', 'block') .style('display', 'block')

View File

@ -1432,18 +1432,18 @@ export class ConnectionManager {
// update the coloring of the backgrounds // update the coloring of the backgrounds
backgrounds.forEach((background, i) => { backgrounds.forEach((background, i) => {
if (i % 2 === 0) { if (i % 2 === 0) {
background.attr('fill', '#f4f6f7'); background.attr('class', 'primary-contrast-800');
} else { } else {
background.attr('fill', '#ffffff'); background.attr('class', 'primary-contrast-900');
} }
}); });
// update the coloring of the label borders // update the coloring of the label borders
borders.forEach((border, i) => { borders.forEach((border, i) => {
if (i > 0) { if (i > 0) {
border.attr('fill', '#c7d2d7'); border.attr('class', 'primary-200');
} else { } else {
border.attr('fill', 'transparent'); border.attr('class', 'transparent');
} }
}); });

View File

@ -151,7 +151,6 @@ export class PortManager {
.attr('class', 'remote-banner') .attr('class', 'remote-banner')
.attr('width', this.remotePortDimensions.width) .attr('width', this.remotePortDimensions.width)
.attr('height', PortManager.OFFSET_VALUE) .attr('height', PortManager.OFFSET_VALUE)
.attr('fill', '#e3e8eb')
.classed('hidden', this.isLocalPort); .classed('hidden', this.isLocalPort);
// port icon // port icon
@ -386,18 +385,18 @@ export class PortManager {
// update the run status // update the run status
updated updated
.select('text.run-status-icon') .select('text.run-status-icon')
.attr('fill', function (d: any) { .attr('class', function (d: any) {
let fill: string = '#728e9b'; let clazz: string = 'primary-500';
if (d.status.aggregateSnapshot.runStatus === 'Invalid') { if (d.status.aggregateSnapshot.runStatus === 'Invalid') {
fill = '#cf9f5d'; clazz = 'canvas-accent-A200';
} else if (d.status.aggregateSnapshot.runStatus === 'Running') { } else if (d.status.aggregateSnapshot.runStatus === 'Running') {
fill = '#7dc7a0'; clazz = 'canvas-accent-200';
} else if (d.status.aggregateSnapshot.runStatus === 'Stopped') { } else if (d.status.aggregateSnapshot.runStatus === 'Stopped') {
fill = '#d18686'; clazz = 'warn-200';
} }
return fill; return `run-status-icon ${clazz}`;
}) })
.attr('font-family', function (d: any) { .attr('font-family', function (d: any) {
let family: string = 'FontAwesome'; let family: string = 'FontAwesome';

View File

@ -121,11 +121,11 @@ export class ProcessGroupManager {
// process group name background // process group name background
processGroup processGroup
.append('rect') .append('rect')
.attr('class', 'process-group-banner')
.attr('width', function (d: any) { .attr('width', function (d: any) {
return d.dimensions.width; return d.dimensions.width;
}) })
.attr('height', 32) .attr('height', 32);
.attr('fill', '#b8c6cd');
// process group name // process group name
processGroup processGroup
@ -227,16 +227,17 @@ export class ProcessGroupManager {
details details
.append('rect') .append('rect')
.attr('class', 'process-group-details-banner')
.attr('x', 0) .attr('x', 0)
.attr('y', 32) .attr('y', 32)
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 24) .attr('height', 24);
.attr('fill', '#e3e8eb');
details details
.append('rect') .append('rect')
.attr('class', 'process-group-details-banner')
.attr('x', 0) .attr('x', 0)
.attr('y', function () { .attr('y', function () {
return processGroupData.dimensions.height - 24; return processGroupData.dimensions.height - 24;
@ -244,8 +245,7 @@ export class ProcessGroupManager {
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 24) .attr('height', 24);
.attr('fill', '#e3e8eb');
// -------- // --------
// contents // contents
@ -456,79 +456,79 @@ export class ProcessGroupManager {
// queued // queued
details details
.append('rect') .append('rect')
.attr('class', 'process-group-queued-stats')
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 66) .attr('y', 66);
.attr('fill', '#f4f6f7');
// border // border
details details
.append('rect') .append('rect')
.attr('class', 'process-group-stats-border')
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 1) .attr('height', 1)
.attr('x', 0) .attr('x', 0)
.attr('y', 84) .attr('y', 84);
.attr('fill', '#c7d2d7');
// in // in
details details
.append('rect') .append('rect')
.attr('class', 'process-group-stats-in-out')
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 85) .attr('y', 85);
.attr('fill', '#ffffff');
// border // border
details details
.append('rect') .append('rect')
.attr('class', 'process-group-stats-border')
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 1) .attr('height', 1)
.attr('x', 0) .attr('x', 0)
.attr('y', 103) .attr('y', 103);
.attr('fill', '#c7d2d7');
// read/write // read/write
details details
.append('rect') .append('rect')
.attr('class', 'process-group-read-write-stats')
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 104) .attr('y', 104);
.attr('fill', '#f4f6f7');
// border // border
details details
.append('rect') .append('rect')
.attr('class', 'process-group-stats-border')
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 1) .attr('height', 1)
.attr('x', 0) .attr('x', 0)
.attr('y', 122) .attr('y', 122);
.attr('fill', '#c7d2d7');
// out // out
details details
.append('rect') .append('rect')
.attr('class', 'process-group-stats-in-out')
.attr('width', function () { .attr('width', function () {
return processGroupData.dimensions.width; return processGroupData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 123) .attr('y', 123);
.attr('fill', '#ffffff');
// ----- // -----
// stats // stats
@ -1075,22 +1075,22 @@ export class ProcessGroupManager {
const versionControl = processGroup const versionControl = processGroup
.select('text.version-control') .select('text.version-control')
.style('visibility', self.isUnderVersionControl(processGroupData) ? 'visible' : 'hidden') .style('visibility', self.isUnderVersionControl(processGroupData) ? 'visible' : 'hidden')
.style('fill', function () { .attr('class', function () {
if (self.isUnderVersionControl(processGroupData)) { if (self.isUnderVersionControl(processGroupData)) {
const vciState = processGroupData.versionedFlowState; const vciState = processGroupData.versionedFlowState;
if (vciState === 'SYNC_FAILURE') { if (vciState === 'SYNC_FAILURE') {
return '#666666'; return `version-control primary-contrast-A700`;
} else if (vciState === 'LOCALLY_MODIFIED_AND_STALE') { } else if (vciState === 'LOCALLY_MODIFIED_AND_STALE') {
return '#BA554A'; return `version-control warn-400`;
} else if (vciState === 'STALE') { } else if (vciState === 'STALE') {
return '#BA554A'; return `version-control warn-400`;
} else if (vciState === 'LOCALLY_MODIFIED') { } else if (vciState === 'LOCALLY_MODIFIED') {
return '#666666'; return `version-control primary-contrast-A700`;
} else { } else {
return '#1A9964'; return `version-control canvas-accent-600`;
} }
} else { } else {
return '#000'; return 'version-control primary-contrast-200';
} }
}) })
.text(function () { .text(function () {

View File

@ -228,79 +228,79 @@ export class ProcessorManager {
// in // in
details details
.append('rect') .append('rect')
.attr('class', 'processor-stats-in-out')
.attr('width', function () { .attr('width', function () {
return processorData.dimensions.width; return processorData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 50) .attr('y', 50);
.attr('fill', '#f4f6f7');
// border // border
details details
.append('rect') .append('rect')
.attr('class', 'processor-stats-border')
.attr('width', function () { .attr('width', function () {
return processorData.dimensions.width; return processorData.dimensions.width;
}) })
.attr('height', 1) .attr('height', 1)
.attr('x', 0) .attr('x', 0)
.attr('y', 68) .attr('y', 68);
.attr('fill', '#c7d2d7');
// read/write // read/write
details details
.append('rect') .append('rect')
.attr('class', 'processor-read-write-stats')
.attr('width', function () { .attr('width', function () {
return processorData.dimensions.width; return processorData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 69) .attr('y', 69);
.attr('fill', '#ffffff');
// border // border
details details
.append('rect') .append('rect')
.attr('class', 'processor-stats-border')
.attr('width', function () { .attr('width', function () {
return processorData.dimensions.width; return processorData.dimensions.width;
}) })
.attr('height', 1) .attr('height', 1)
.attr('x', 0) .attr('x', 0)
.attr('y', 87) .attr('y', 87);
.attr('fill', '#c7d2d7');
// out // out
details details
.append('rect') .append('rect')
.attr('class', 'processor-stats-in-out')
.attr('width', function () { .attr('width', function () {
return processorData.dimensions.width; return processorData.dimensions.width;
}) })
.attr('height', 20) .attr('height', 20)
.attr('x', 0) .attr('x', 0)
.attr('y', 88) .attr('y', 88);
.attr('fill', '#f4f6f7');
// border // border
details details
.append('rect') .append('rect')
.attr('class', 'processor-stats-border')
.attr('width', function () { .attr('width', function () {
return processorData.dimensions.width; return processorData.dimensions.width;
}) })
.attr('height', 1) .attr('height', 1)
.attr('x', 0) .attr('x', 0)
.attr('y', 106) .attr('y', 106);
.attr('fill', '#c7d2d7');
// tasks/time // tasks/time
details details
.append('rect') .append('rect')
.attr('class', 'processor-read-write-stats')
.attr('width', function () { .attr('width', function () {
return processorData.dimensions.width; return processorData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 107) .attr('y', 107);
.attr('fill', '#ffffff');
// stats label container // stats label container
const processorStatsLabel = details.append('g').attr('transform', 'translate(10, 55)'); const processorStatsLabel = details.append('g').attr('transform', 'translate(10, 55)');
@ -669,20 +669,20 @@ export class ProcessorManager {
// update the run status // update the run status
updated updated
.select('text.run-status-icon') .select('text.run-status-icon')
.attr('fill', function (d: any) { .attr('class', function (d: any) {
let fill: string = '#728e9b'; let clazz: string = 'primary-500';
if (d.status.aggregateSnapshot.runStatus === 'Validating') { if (d.status.aggregateSnapshot.runStatus === 'Validating') {
fill = '#a8a8a8'; clazz = 'warn-contrast-300';
} else if (d.status.aggregateSnapshot.runStatus === 'Invalid') { } else if (d.status.aggregateSnapshot.runStatus === 'Invalid') {
fill = '#cf9f5d'; clazz = 'canvas-accent-A400';
} else if (d.status.aggregateSnapshot.runStatus === 'Running') { } else if (d.status.aggregateSnapshot.runStatus === 'Running') {
fill = '#7dc7a0'; clazz = 'canvas-accent-200';
} else if (d.status.aggregateSnapshot.runStatus === 'Stopped') { } else if (d.status.aggregateSnapshot.runStatus === 'Stopped') {
fill = '#d18686'; clazz = 'warn-200';
} }
return fill; return `run-status-icon ${clazz}`;
}) })
.attr('font-family', function (d: any) { .attr('font-family', function (d: any) {
let family: string = 'FontAwesome'; let family: string = 'FontAwesome';

View File

@ -120,11 +120,11 @@ export class RemoteProcessGroupManager {
// remote process group name background // remote process group name background
remoteProcessGroup remoteProcessGroup
.append('rect') .append('rect')
.attr('class', 'remote-process-group-banner')
.attr('width', function (d: any) { .attr('width', function (d: any) {
return d.dimensions.width; return d.dimensions.width;
}) })
.attr('height', 32) .attr('height', 32);
.attr('fill', '#b8c6cd');
// remote process group name // remote process group name
remoteProcessGroup remoteProcessGroup
@ -182,13 +182,13 @@ export class RemoteProcessGroupManager {
details details
.append('rect') .append('rect')
.attr('class', 'remote-process-group-details-banner')
.attr('x', 0) .attr('x', 0)
.attr('y', 32) .attr('y', 32)
.attr('width', function () { .attr('width', function () {
return remoteProcessGroupData.dimensions.width; return remoteProcessGroupData.dimensions.width;
}) })
.attr('height', 24) .attr('height', 24);
.attr('fill', '#e3e8eb');
// ------- // -------
// details // details
@ -217,35 +217,35 @@ export class RemoteProcessGroupManager {
// sent // sent
details details
.append('rect') .append('rect')
.attr('class', 'remote-process-group-sent-stats')
.attr('width', function () { .attr('width', function () {
return remoteProcessGroupData.dimensions.width; return remoteProcessGroupData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 66) .attr('y', 66);
.attr('fill', '#f4f6f7');
// border // border
details details
.append('rect') .append('rect')
.attr('class', 'remote-process-group-stats-border')
.attr('width', function () { .attr('width', function () {
return remoteProcessGroupData.dimensions.width; return remoteProcessGroupData.dimensions.width;
}) })
.attr('height', 1) .attr('height', 1)
.attr('x', 0) .attr('x', 0)
.attr('y', 84) .attr('y', 84);
.attr('fill', '#c7d2d7');
// received // received
details details
.append('rect') .append('rect')
.attr('class', 'remote-process-group-received-stats')
.attr('width', function () { .attr('width', function () {
return remoteProcessGroupData.dimensions.width; return remoteProcessGroupData.dimensions.width;
}) })
.attr('height', 19) .attr('height', 19)
.attr('x', 0) .attr('x', 0)
.attr('y', 85) .attr('y', 85);
.attr('fill', '#ffffff');
// ----- // -----
// stats // stats
@ -342,6 +342,7 @@ export class RemoteProcessGroupManager {
details details
.append('rect') .append('rect')
.attr('class', 'remote-process-group-last-refresh-rect')
.attr('x', 0) .attr('x', 0)
.attr('y', function () { .attr('y', function () {
return remoteProcessGroupData.dimensions.height - 24; return remoteProcessGroupData.dimensions.height - 24;
@ -349,8 +350,7 @@ export class RemoteProcessGroupManager {
.attr('width', function () { .attr('width', function () {
return remoteProcessGroupData.dimensions.width; return remoteProcessGroupData.dimensions.width;
}) })
.attr('height', 24) .attr('height', 24);
.attr('fill', '#e3e8eb');
details details
.append('text') .append('text')

View File

@ -0,0 +1,537 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$warn-palette: map.get($color-config, 'warn');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
$canvas-accent-palette: map.get($canvas-color-config, 'accent');
// Get hues from palette
$primary-palette-100: mat.get-color-from-palette($primary-palette, 100);
$primary-palette-200: mat.get-color-from-palette($primary-palette, 200);
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
$primary-palette-A200: mat.get-color-from-palette($primary-palette, 'A200');
$primary-palette-A400: mat.get-color-from-palette($primary-palette, 'A400');
$canvas-primary-palette-50: mat.get-color-from-palette($canvas-primary-palette, 50);
$canvas-primary-palette-200: mat.get-color-from-palette($canvas-primary-palette, 200);
$canvas-primary-palette-300: mat.get-color-from-palette($canvas-primary-palette, 300);
$canvas-primary-palette-400: mat.get-color-from-palette($canvas-primary-palette, 400);
$canvas-primary-palette-500: mat.get-color-from-palette($canvas-primary-palette, 500);
$canvas-primary-palette-600: mat.get-color-from-palette($canvas-primary-palette, 600);
$canvas-primary-palette-700: mat.get-color-from-palette($canvas-primary-palette, 700);
$canvas-primary-palette-800: mat.get-color-from-palette($canvas-primary-palette, 800);
$canvas-primary-palette-900: mat.get-color-from-palette($canvas-primary-palette, 900);
$canvas-primary-palette-A200: mat.get-color-from-palette($canvas-primary-palette, 'A200');
$canvas-primary-palette-A400: mat.get-color-from-palette($canvas-primary-palette, 'A400');
$canvas-primary-palette-A700: mat.get-color-from-palette($canvas-primary-palette, 'A700');
$canvas-accent-palette-200: mat.get-color-from-palette($canvas-accent-palette, 200);
$canvas-accent-palette-300: mat.get-color-from-palette($canvas-accent-palette, 300);
$canvas-accent-palette-600: mat.get-color-from-palette($canvas-accent-palette, 600);
$canvas-accent-palette-800: mat.get-color-from-palette($canvas-accent-palette, 800);
$canvas-accent-palette-900: mat.get-color-from-palette($canvas-accent-palette, 900);
$canvas-accent-palette-A200: mat.get-color-from-palette($canvas-accent-palette, 'A200');
$canvas-accent-palette-A400: mat.get-color-from-palette($canvas-accent-palette, 'A400');
$canvas-accent-palette-A700: mat.get-color-from-palette($canvas-accent-palette, 'A700');
$warn-palette-200: mat.get-color-from-palette($warn-palette, 200);
$warn-palette-400: mat.get-color-from-palette($warn-palette, 400);
$warn-palette-800: mat.get-color-from-palette($warn-palette, 800);
$warn-palette-A200: mat.get-color-from-palette($warn-palette, 'A200');
$warn-palette-A400: mat.get-color-from-palette($warn-palette, 'A400');
$warn-palette-A700: mat.get-color-from-palette($warn-palette, 'A700');
.canvas-background {
background-color: $canvas-primary-palette-600;
background-image: linear-gradient(to right, $canvas-primary-palette-700 1px, transparent 1px),
linear-gradient(to bottom, $canvas-primary-palette-700 1px, transparent 1px);
}
/* svg styles */
svg.canvas-svg {
text.unset {
fill: $canvas-primary-palette-400;
}
/*
All components
*/
.transparent {
fill: transparent
}
.warn-200 {
fill: $warn-palette-200;
}
.warn-400 {
fill: $warn-palette-400;
}
.warn-A700 {
fill: $warn-palette-A700;
}
.warn-contrast-300 {
fill: $canvas-primary-palette-400;
}
.canvas-accent-200 {
fill: $canvas-accent-palette-200;
}
.canvas-accent-600 {
fill: $canvas-accent-palette-600;
}
.canvas-accent-A200 {
fill: $canvas-accent-palette-A200;
}
.canvas-accent-A400 {
fill: $canvas-accent-palette-A400;
}
.primary-200 {
fill: $primary-palette-200;
}
.primary-500 {
fill: $primary-palette-500;
}
.primary-contrast-200 {
fill: $canvas-primary-palette-200;
}
.primary-contrast-300 {
fill: $canvas-primary-palette-300;
}
.primary-contrast-800 {
fill: $canvas-primary-palette-800;
}
.primary-contrast-900 {
fill: $canvas-primary-palette-900;
}
.primary-contrast-A700 {
fill: $canvas-primary-palette-A700;
}
g.component rect.body {
fill: $canvas-primary-palette-900;
}
g.component rect.body.unauthorized {
fill: $canvas-primary-palette-700;
}
g.component rect.border {
stroke: $canvas-primary-palette-50;
}
g.component rect.border.unauthorized {
stroke: $warn-palette-400 !important;
}
g.component rect.border.ghost {
stroke: $canvas-primary-palette-400 !important;
}
g.component rect.processor-icon-container.unauthorized {
fill: $canvas-primary-palette-700 !important;
}
g.component.selected rect.border {
stroke: $primary-palette-A400 !important;
}
text.stats-label {
fill: $canvas-primary-palette-A200;
}
text.stats-value {
fill: $warn-palette-A400;
}
text.stats-info {
fill: $primary-palette-500;
}
text.bulletin-icon {
fill: $canvas-primary-palette-900;
}
rect.bulletin-background {
fill: $warn-palette-400;
}
text.active-thread-count-icon {
fill: $primary-palette-500;
}
text.active-thread-count {
fill: $warn-palette-A400;
}
path.component-comments {
fill: $canvas-primary-palette-50;
stroke: $canvas-primary-palette-50;
}
/*
Selection
*/
g.component.connectable-destination rect.border {
stroke: $canvas-accent-palette-900;
}
rect.component-selection,
rect.drag-selection,
rect.label-drag {
stroke: $canvas-primary-palette-A400;
fill: transparent;
}
text.add-connect {
fill: $primary-palette-A400;
}
/*
Processor
*/
#component-drop-shadow feFlood {
flood-color: $canvas-primary-palette-200;
}
#connection-full-drop-shadow feFlood {
flood-color: $warn-palette-400;
}
rect.processor-read-write-stats {
fill: $canvas-primary-palette-900;
}
rect.processor-stats-border {
fill: $primary-palette-200;
}
rect.processor-stats-in-out {
fill: $canvas-primary-palette-800;
}
text.processor-name {
fill: $canvas-primary-palette-A200;
}
text.processor-type {
fill: $primary-palette-500;
}
text.processor-bundle {
fill: $canvas-primary-palette-A700;
}
rect.processor-icon-container {
fill: $canvas-primary-palette-900;
}
circle.restricted-background,
circle.is-primary-background {
fill: $canvas-primary-palette-900;
}
text.restricted {
fill: $warn-palette-400;
}
/*
Connection
*/
g.connection rect.body {
fill: $canvas-primary-palette-900;
}
g.connection rect.body.unauthorized {
fill: $canvas-primary-palette-700;
}
g.connection rect.border.unauthorized {
stroke: $warn-palette-400;
}
g.connection rect.border.full {
stroke: $warn-palette-A700;
}
g.connection.selected rect.border {
stroke: $canvas-accent-palette-A700;
}
path.connector {
stroke: $warn-palette-800;
}
path.connector.connectable {
stroke: $canvas-accent-palette-900;
}
g.connection path.connection-path {
fill: none;
stroke: $canvas-primary-palette-50;
}
g.connection path.connection-path.full {
stroke: $warn-palette-400;
}
g.connection path.connection-path.unauthorized {
stroke: $warn-palette-400;
}
text.connection-from-run-status,
text.connection-to-run-status,
text.expiration-icon,
text.load-balance-icon,
text.penalized-icon {
fill: $primary-palette-500;
text-shadow: 0 0 4px $canvas-primary-palette-900;
}
text.load-balance-icon-active {
fill: $primary-palette-A200;
}
text.connection-from-run-status.is-missing-port,
text.connection-to-run-status.is-missing-port {
fill: $canvas-accent-palette-A200;
}
g.connection rect.backpressure-tick {
fill: transparent;
}
g.connection rect.backpressure-tick.data-size-prediction.prediction-down,
g.connection rect.backpressure-tick.object-prediction.prediction-down {
fill: $canvas-primary-palette-900;
}
g.connection rect.backpressure-tick.data-size-prediction,
g.connection rect.backpressure-tick.object-prediction {
fill: $canvas-primary-palette-50;
}
g.connection rect.backpressure-tick.data-size-prediction.not-configured,
g.connection rect.backpressure-tick.object-prediction.not-configured,
g.connection rect.backpressure-tick.data-size-prediction.prediction-down.not-configured,
g.connection rect.backpressure-tick.object-prediction.prediction-down.not-configured {
fill: transparent;
}
g.connection rect.backpressure-tick.not-configured {
fill: $canvas-primary-palette-400;
}
g.connection rect.backpressure-object,
g.connection rect.backpressure-data-size {
fill: $canvas-primary-palette-500
}
g.connection rect.backpressure-object.not-configured,
g.connection rect.backpressure-data-size.not-configured {
fill: transparent;
}
g.connection rect.backpressure-percent {
fill: $canvas-accent-palette-300;
}
g.connection rect.backpressure-percent.warning {
fill: $canvas-accent-palette-A400;
}
g.connection rect.backpressure-percent.error {
fill: $warn-palette-400;
}
/* ghost connection */
g.connection.ghost path.connection-path,
g.connection.ghost rect.connection-label {
stroke: $canvas-primary-palette-400;
}
g.connection path.connection-selection-path {
stroke: $canvas-accent-palette-A700;
fill: none;
}
g.connection path.connection-path-selectable {
fill: none;
}
g.connection rect.startpoint {
stroke: $warn-palette-800;
fill: $warn-palette-800;
}
g.connection rect.midpoint {
stroke: $canvas-accent-palette-A700;
fill: $canvas-accent-palette-A700;
}
g.connection rect.endpoint {
stroke: $canvas-accent-palette-800;
fill: $canvas-accent-palette-800;
}
/* labels */
g.label rect.labelpoint {
stroke: $canvas-accent-palette-A700;
fill: $canvas-accent-palette-A700;
}
/* funnels */
text.funnel-icon {
fill: $warn-palette-A200;
}
/* ports */
text.port-name {
fill: $canvas-primary-palette-A200;
}
text.port-icon {
fill: $warn-palette-A200;
}
rect.remote-banner {
fill: $primary-palette-100;
}
text.port-transmission-icon {
fill: $primary-palette-500;
}
/* process groups */
rect.process-group-stats-in-out {
fill: $canvas-primary-palette-900;
}
rect.process-group-stats-border {
fill: $primary-palette-200;
}
rect.process-group-queued-stats {
fill: $canvas-primary-palette-800;
}
rect.process-group-read-write-stats {
fill: $canvas-primary-palette-800;
}
rect.process-group-details-banner {
fill: $primary-palette-100;
}
text.process-group-name {
fill: $canvas-primary-palette-A200;
}
text.version-control {
text-shadow: 0 0 4px $canvas-primary-palette-900;
}
rect.process-group-banner {
fill: $primary-palette-200;
}
text.process-group-contents-count {
fill: $warn-palette-A400;
}
g.process-group.drop rect.border {
stroke: $canvas-accent-palette-800;
}
text.process-group-contents-icon {
fill: $primary-palette-500;
}
/* remote process group */
rect.remote-process-group-stats-border {
fill: $primary-palette-200;
}
rect.remote-process-group-sent-stats {
fill: $canvas-primary-palette-800;
}
rect.remote-process-group-received-stats {
fill: $canvas-primary-palette-900;
}
rect.remote-process-group-details-banner {
fill: $primary-palette-100;
}
rect.remote-process-group-last-refresh-rect {
fill: $primary-palette-100;
}
text.remote-process-group-name {
fill: $canvas-primary-palette-A200;
}
text.remote-process-group-uri {
fill: $primary-palette-A400;
}
rect.remote-process-group-banner {
fill: $primary-palette-200;
}
text.remote-process-group-transmission-status {
fill: $primary-palette-500;
}
text.remote-process-group-transmission-secure {
fill: $primary-palette-A400;
}
text.remote-process-group-last-refresh {
fill: $primary-palette-500;
}
}
}

View File

@ -16,10 +16,7 @@
*/ */
.canvas-background { .canvas-background {
background-color: #f9fafb;
background-size: 14px 14px; background-size: 14px 14px;
background-image: linear-gradient(to right, rgba(229, 235, 237, 1) 1px, transparent 1px),
linear-gradient(to bottom, rgba(229, 235, 237, 1) 1px, transparent 1px);
z-index: 1; z-index: 1;
overflow: hidden; overflow: hidden;
} }
@ -36,7 +33,6 @@
text.unset { text.unset {
font-style: italic; font-style: italic;
font-weight: normal; font-weight: normal;
fill: #aaa;
} }
.moveable { .moveable {
@ -51,48 +47,30 @@
font-family: Roboto; font-family: Roboto;
} }
g.component rect.body {
fill: #ffffff;
}
g.component rect.body.unauthorized {
fill: #f4f6f7;
}
g.component rect.border { g.component rect.border {
stroke: rgba(0, 0, 0, 0.25);
stroke-width: 1; stroke-width: 1;
} }
g.component rect.border.unauthorized { g.component rect.border.unauthorized {
stroke-width: 3; stroke-width: 3;
stroke: #ba554a !important;
stroke-dasharray: 4; stroke-dasharray: 4;
} }
g.component rect.border.ghost { g.component rect.border.ghost {
stroke-width: 3; stroke-width: 3;
stroke: #aaaaaa !important;
stroke-dasharray: 4; stroke-dasharray: 4;
} }
g.component rect.processor-icon-container.unauthorized {
fill: #f4f6f7 !important;
}
g.component.selected rect.border { g.component.selected rect.border {
stroke: #004849 !important;
stroke-width: 3; stroke-width: 3;
} }
text.stats-label { text.stats-label {
fill: #262626;
font-size: 12px; font-size: 12px;
font-family: Roboto Slab; font-family: Roboto Slab;
} }
text.stats-value { text.stats-value {
fill: #775351;
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: bold;
} }
@ -104,38 +82,25 @@
} }
text.stats-info { text.stats-info {
fill: #728e9b;
font-size: 12px; font-size: 12px;
} }
text.bulletin-icon { text.bulletin-icon {
font-size: 13px; font-size: 13px;
font-family: FontAwesome; font-family: FontAwesome;
fill: #ffffff;
}
rect.bulletin-background {
fill: #ba554a;
} }
text.active-thread-count-icon { text.active-thread-count-icon {
font-family: flowfont; font-family: flowfont;
font-size: 12px; font-size: 12px;
fill: #728e9b;
text-anchor: end; text-anchor: end;
} }
text.active-thread-count { text.active-thread-count {
fill: #775351;
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: bold;
} }
path.component-comments {
fill: #000;
stroke: #000;
}
text.spin { text.spin {
-webkit-animation-name: rotate; -webkit-animation-name: rotate;
-webkit-animation-duration: 2s; -webkit-animation-duration: 2s;
@ -183,23 +148,19 @@
*/ */
g.component.connectable-destination rect.border { g.component.connectable-destination rect.border {
stroke: #00ff00;
stroke-width: 3; stroke-width: 3;
} }
rect.component-selection, rect.component-selection,
rect.drag-selection, rect.drag-selection,
rect.label-drag { rect.label-drag {
stroke: #444444;
stroke-opacity: 0.5; stroke-opacity: 0.5;
fill: transparent;
} }
text.add-connect { text.add-connect {
cursor: pointer; cursor: pointer;
font-family: flowfont; font-family: flowfont;
font-size: 28px; font-size: 28px;
fill: #004849;
} }
/* /*
@ -207,24 +168,17 @@
*/ */
text.processor-name { text.processor-name {
fill: #262626;
font-size: 14px; font-size: 14px;
} }
text.processor-type { text.processor-type {
fill: #728e9b;
font-size: 12px; font-size: 12px;
} }
text.processor-bundle { text.processor-bundle {
fill: #666;
font-size: 10px; font-size: 10px;
} }
rect.processor-icon-container {
fill: #ffffff;
}
text.processor-icon { text.processor-icon {
font-family: flowfont; font-family: flowfont;
font-size: 30px; font-size: 30px;
@ -233,14 +187,12 @@
circle.restricted-background, circle.restricted-background,
circle.is-primary-background { circle.is-primary-background {
visibility: hidden; visibility: hidden;
fill: rgba(255, 255, 255, 0.9);
} }
text.restricted { text.restricted {
visibility: hidden; visibility: hidden;
font-family: FontAwesome; font-family: FontAwesome;
font-size: 12px; font-size: 12px;
fill: #ba554a;
} }
text.is-primary { text.is-primary {
@ -262,59 +214,38 @@
font-family: Roboto; font-family: Roboto;
} }
g.connection rect.body {
fill: #ffffff;
}
g.connection rect.body.unauthorized {
fill: #f4f6f7;
}
g.connection rect.border.unauthorized { g.connection rect.border.unauthorized {
stroke-width: 1.5; stroke-width: 1.5;
stroke: #ba554a;
stroke-dasharray: 3, 3; stroke-dasharray: 3, 3;
} }
g.connection rect.border.full { g.connection rect.border.full {
stroke: rgba(186, 85, 74, 0.65);
stroke-width: 1; stroke-width: 1;
} }
g.connection.selected rect.border { g.connection.selected rect.border {
/*stroke: #004849;*/
stroke: #ffcc00;
stroke-width: 3; stroke-width: 3;
} }
path.connector { path.connector {
fill: none; fill: none;
pointer-events: none; pointer-events: none;
stroke: #ff0000;
stroke-width: 3; stroke-width: 3;
stroke-opacity: 0.5; stroke-opacity: 0.5;
stroke-dasharray: 2; stroke-dasharray: 2;
} }
path.connector.connectable { path.connector.connectable {
stroke: #00ff00;
stroke-width: 3; stroke-width: 3;
stroke-dasharray: 4; stroke-dasharray: 4;
} }
g.connection path.connection-path { g.connection path.connection-path {
fill: none;
stroke: #000000;
stroke-width: 2; stroke-width: 2;
cursor: pointer; cursor: pointer;
} }
g.connection path.connection-path.full {
stroke: #ba554a;
}
g.connection path.connection-path.unauthorized { g.connection path.connection-path.unauthorized {
stroke: #ba554a;
stroke-dasharray: 3, 3; stroke-dasharray: 3, 3;
} }
@ -323,14 +254,8 @@
text.expiration-icon, text.expiration-icon,
text.load-balance-icon, text.load-balance-icon,
text.penalized-icon { text.penalized-icon {
fill: #728e9b;
font-family: FontAwesome; font-family: FontAwesome;
font-size: 12px; font-size: 12px;
text-shadow: 0 0 4px rgba(255, 255, 255, 1);
}
text.load-balance-icon-active {
fill: #44a3cf;
} }
text.load-balance-icon-184 { text.load-balance-icon-184 {
@ -341,67 +266,15 @@
transform-origin: 213px 10px 0; transform-origin: 213px 10px 0;
} }
text.connection-from-run-status.is-missing-port,
text.connection-to-run-status.is-missing-port {
fill: #cf9f5d;
}
g.connection rect.backpressure-tick {
fill: transparent;
}
g.connection rect.backpressure-tick.data-size-prediction.prediction-down,
g.connection rect.backpressure-tick.object-prediction.prediction-down {
fill: white;
}
g.connection rect.backpressure-tick.data-size-prediction,
g.connection rect.backpressure-tick.object-prediction {
fill: black;
}
g.connection rect.backpressure-tick.data-size-prediction.not-configured,
g.connection rect.backpressure-tick.object-prediction.not-configured,
g.connection rect.backpressure-tick.data-size-prediction.prediction-down.not-configured,
g.connection rect.backpressure-tick.object-prediction.prediction-down.not-configured {
fill: transparent;
}
g.connection rect.backpressure-tick.not-configured {
fill: #acacac;
}
g.connection rect.backpressure-object,
g.connection rect.backpressure-data-size {
fill: #d8d8d8;
}
/**/
g.connection rect.backpressure-object > title > tspan, g.connection rect.backpressure-object > title > tspan,
g.connection rect.backpressure-data-size > title > tspan { g.connection rect.backpressure-data-size > title > tspan {
display: block; display: block;
} }
/**/
g.connection rect.backpressure-object.not-configured,
g.connection rect.backpressure-data-size.not-configured {
fill: transparent;
}
g.connection rect.backpressure-percent { g.connection rect.backpressure-percent {
fill: #67b796;
pointer-events: none; pointer-events: none;
} }
g.connection rect.backpressure-percent.warning {
fill: #cea958;
}
g.connection rect.backpressure-percent.error {
fill: #ba554a;
}
/* grouped connection */ /* grouped connection */
g.connection.grouped path.connection-path, g.connection.grouped path.connection-path,
@ -413,21 +286,17 @@
g.connection.ghost path.connection-path, g.connection.ghost path.connection-path,
g.connection.ghost rect.connection-label { g.connection.ghost rect.connection-label {
stroke: #aaaaaa;
stroke-dasharray: 4; stroke-dasharray: 4;
} }
g.connection path.connection-selection-path { g.connection path.connection-selection-path {
visibility: hidden; visibility: hidden;
stroke-width: 1; stroke-width: 1;
stroke: #ffcc00;
fill: none;
} }
g.connection path.connection-path-selectable { g.connection path.connection-path-selectable {
visibility: hidden; visibility: hidden;
stroke-width: 20; stroke-width: 20;
fill: none;
cursor: pointer; cursor: pointer;
} }
@ -444,20 +313,11 @@
visibility: visible; visibility: visible;
} }
g.connection rect.startpoint {
stroke: #ff0000;
fill: #ff0000;
}
g.connection rect.midpoint { g.connection rect.midpoint {
stroke: #ffcc00;
fill: #ffcc00;
cursor: pointer; cursor: pointer;
} }
g.connection rect.endpoint { g.connection rect.endpoint {
stroke: #0000ff;
fill: #0000ff;
cursor: pointer; cursor: pointer;
} }
@ -466,8 +326,6 @@
g.label rect.labelpoint { g.label rect.labelpoint {
display: none; display: none;
stroke-width: 1; stroke-width: 1;
stroke: #ffcc00;
fill: #ffcc00;
cursor: se-resize; cursor: se-resize;
} }
@ -478,7 +336,6 @@
/* funnels */ /* funnels */
text.funnel-icon { text.funnel-icon {
fill: #ad9897;
font-family: flowfont; font-family: flowfont;
font-size: 30px; font-size: 30px;
} }
@ -486,19 +343,16 @@
/* ports */ /* ports */
text.port-name { text.port-name {
fill: #262626;
font-size: 14px; font-size: 14px;
} }
text.port-icon { text.port-icon {
fill: #ad9897;
font-family: flowfont; font-family: flowfont;
font-size: 30px; font-size: 30px;
} }
text.port-transmission-icon { text.port-transmission-icon {
font-size: 15px; font-size: 15px;
fill: #728e9b;
} }
/* active thread count */ /* active thread count */
@ -510,59 +364,49 @@
/* process groups */ /* process groups */
text.process-group-name { text.process-group-name {
fill: #262626;
font-size: 14px; font-size: 14px;
} }
text.version-control { text.version-control {
font-family: FontAwesome; font-family: FontAwesome;
font-size: 18px; font-size: 18px;
text-shadow: 0 0 4px rgba(255, 255, 255, 1);
visibility: hidden; visibility: hidden;
} }
text.process-group-contents-count { text.process-group-contents-count {
fill: #775351;
font-size: 15px; font-size: 15px;
font-weight: 500; font-weight: 500;
font-family: Roboto, sans-serif; font-family: Roboto, sans-serif;
} }
g.process-group.drop rect.border { g.process-group.drop rect.border {
stroke: #0000ff;
stroke-width: 3; stroke-width: 3;
} }
text.process-group-contents-icon { text.process-group-contents-icon {
font-size: 15px; font-size: 15px;
fill: #728e9b;
} }
/* remote process group */ /* remote process group */
text.remote-process-group-name { text.remote-process-group-name {
fill: #262626;
font-size: 14px; font-size: 14px;
} }
text.remote-process-group-uri { text.remote-process-group-uri {
fill: #004849;
font-size: 12px; font-size: 12px;
} }
text.remote-process-group-transmission-status { text.remote-process-group-transmission-status {
font-size: 15px; font-size: 15px;
fill: #728e9b;
} }
text.remote-process-group-transmission-secure { text.remote-process-group-transmission-secure {
font-family: FontAwesome; font-family: FontAwesome;
font-size: 13px; font-size: 13px;
fill: #004849;
} }
text.remote-process-group-last-refresh { text.remote-process-group-last-refresh {
fill: #728e9b;
font-size: 10px; font-size: 10px;
} }
} }

View File

@ -313,15 +313,15 @@ export class Canvas implements OnInit, OnDestroy {
.attr('markerWidth', 6) .attr('markerWidth', 6)
.attr('markerHeight', 6) .attr('markerHeight', 6)
.attr('orient', 'auto') .attr('orient', 'auto')
.attr('fill', function (d: string) { .attr('class', function (d: string) {
if (d === 'ghost') { if (d === 'ghost') {
return '#aaaaaa'; return 'primary-contrast-300';
} else if (d === 'unauthorized') { } else if (d === 'unauthorized') {
return '#ba554a'; return 'warn-400';
} else if (d === 'full') { } else if (d === 'full') {
return '#ba554a'; return 'warn-400';
} else { } else {
return '#000000'; return 'primary-contrast-200';
} }
}) })
.append('path') .append('path')
@ -352,7 +352,6 @@ export class Canvas implements OnInit, OnDestroy {
// color/opacity // color/opacity
componentDropShadowFilter componentDropShadowFilter
.append('feFlood') .append('feFlood')
.attr('flood-color', '#000000')
.attr('flood-opacity', 0.4) .attr('flood-opacity', 0.4)
.attr('result', 'offsetColor'); .attr('result', 'offsetColor');
@ -394,7 +393,6 @@ export class Canvas implements OnInit, OnDestroy {
// color/opacity // color/opacity
connectionFullDropShadowFilter connectionFullDropShadowFilter
.append('feFlood') .append('feFlood')
.attr('flood-color', '#ba554a')
.attr('flood-opacity', 1) .attr('flood-opacity', 1)
.attr('result', 'offsetColor'); .attr('result', 'offsetColor');

View File

@ -0,0 +1,42 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-300: mat.get-color-from-palette($primary-palette, 300);
$primary-palette-600: mat.get-color-from-palette($primary-palette, 600);
$canvas-primary-palette-50: mat.get-color-from-palette($canvas-primary-palette, 50);
$canvas-primary-palette-900: mat.get-color-from-palette($canvas-primary-palette, 900);
.breadcrumb-container {
box-shdowa: 0 1px 6px $canvas-primary-palette-50;
background-color: $canvas-primary-palette-900;
border-top: 1px solid $primary-palette-300;
color: $primary-palette-600;
}
}

View File

@ -16,7 +16,7 @@
--> -->
<footer> <footer>
<div class="bg-nifi-accent breadcrumb-container"> <div class="breadcrumb-container">
<breadcrumbs <breadcrumbs
[entity]="(breadcrumbs$ | async)!" [entity]="(breadcrumbs$ | async)!"
[currentProcessGroupId]="(currentProcessGroupId$ | async)!"></breadcrumbs> [currentProcessGroupId]="(currentProcessGroupId$ | async)!"></breadcrumbs>

View File

@ -16,9 +16,5 @@
*/ */
.breadcrumb-container { .breadcrumb-container {
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.25);
background-color: rgba(249, 250, 251, 0.9);
border-top: 1px solid #aabbc3;
color: #598599;
z-index: 3; z-index: 3;
} }

View File

@ -0,0 +1,61 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-100: mat.get-color-from-palette($primary-palette, 100);
$primary-palette-300: mat.get-color-from-palette($primary-palette, 300);
$primary-palette-A400: mat.get-color-from-palette($primary-palette, 'A400');
$canvas-primary-palette-50: mat.get-color-from-palette($canvas-primary-palette, 50);
$canvas-primary-palette-600: mat.get-color-from-palette($canvas-primary-palette, 600);
$canvas-primary-palette-A100: mat.get-color-from-palette($canvas-primary-palette, 'A100');
$canvas-primary-palette-A200: mat.get-color-from-palette($canvas-primary-palette, 'A200');
div.navigation-control {
box-shadow: 0 1px 6px $canvas-primary-palette-50;
background-color: $canvas-primary-palette-600;
border-top: 1px solid $primary-palette-300;
border-right: 1px solid $primary-palette-300;
border-bottom: 1px solid $primary-palette-300;
.fa,
.icon {
color: $primary-palette-A400;
}
.navigation-control-header {
&:hover {
background: linear-gradient(90deg, $canvas-primary-palette-A100 252px, $primary-palette-100 34px);
}
}
.navigation-control-title {
color: $canvas-primary-palette-A200;
}
}
}

View File

@ -0,0 +1,44 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-600: mat.get-color-from-palette($primary-palette, 600);
$canvas-primary-palette-700: mat.get-color-from-palette($canvas-primary-palette, 700);
$canvas-primary-palette-900: mat.get-color-from-palette($canvas-primary-palette, 900);
#birdseye {
background: $canvas-primary-palette-900;
border: 1px solid $canvas-primary-palette-700;
rect.birdseye-brush {
stroke: $primary-palette-600;
fill: transparent;
}
}
}

View File

@ -18,9 +18,7 @@
:host ::ng-deep #birdseye { :host ::ng-deep #birdseye {
width: 266px; width: 266px;
height: 150px; height: 150px;
background: #fff;
overflow: hidden; overflow: hidden;
border: 1px solid #e5ebed;
box-sizing: content-box; box-sizing: content-box;
canvas, canvas,
@ -28,9 +26,4 @@
position: absolute; position: absolute;
overflow: hidden; overflow: hidden;
} }
rect.birdseye-brush {
stroke: #7098ad;
fill: transparent;
}
} }

View File

@ -16,17 +16,11 @@
*/ */
div.navigation-control { div.navigation-control {
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.25);
background-color: rgba(249, 250, 251, 0.9);
border-top: 1px solid #aabbc3;
border-right: 1px solid #aabbc3;
border-bottom: 1px solid #aabbc3;
margin-bottom: 2px; margin-bottom: 2px;
.fa, .fa,
.icon { .icon {
font-size: 18px; font-size: 18px;
color: #004849;
} }
.navigation-control-header { .navigation-control-header {
@ -36,16 +30,11 @@ div.navigation-control {
line-height: 34px; line-height: 34px;
text-align: center; text-align: center;
} }
&:hover {
background: linear-gradient(90deg, rgba(227, 232, 235, 0) 252px, rgba(227, 232, 235, 1) 34px);
}
} }
.navigation-control-title { .navigation-control-title {
font-size: 12px; font-size: 12px;
font-family: 'Roboto Slab'; font-family: 'Roboto Slab';
color: #262626;
letter-spacing: 0.05rem; letter-spacing: 0.05rem;
} }
} }

View File

@ -0,0 +1,79 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$warn-palette: map.get($color-config, 'warn');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-100: mat.get-color-from-palette($primary-palette, 100);
$primary-palette-300: mat.get-color-from-palette($primary-palette, 300);
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
$primary-palette-A400: mat.get-color-from-palette($primary-palette, 'A400');
$warn-palette-A200: mat.get-color-from-palette($warn-palette, 'A200');
$warn-palette-A400: mat.get-color-from-palette($warn-palette, 'A400');
$canvas-primary-palette-50: mat.get-color-from-palette($canvas-primary-palette, 50);
$canvas-primary-palette-600: mat.get-color-from-palette($canvas-primary-palette, 600);
$canvas-primary-palette-A100: mat.get-color-from-palette($canvas-primary-palette, 'A100');
$canvas-primary-palette-A200: mat.get-color-from-palette($canvas-primary-palette, 'A200');
div.operation-control {
box-shadow: 0 1px 6px $canvas-primary-palette-50;
background-color: $canvas-primary-palette-600;
border-top: 1px solid $primary-palette-300;
border-right: 1px solid $primary-palette-300;
border-bottom: 1px solid $primary-palette-300;
.fa,
.icon {
color: $primary-palette-A400;
}
.operation-control-header {
&:hover {
background: linear-gradient(90deg, $canvas-primary-palette-A100 252px, $primary-palette-100 34px);
}
}
.operation-control-title {
color: $canvas-primary-palette-A200;
}
.operation-context-logo {
.icon {
color: $warn-palette-A200;
}
}
.operation-context-name {
color: $canvas-primary-palette-A200;
}
.operation-context-type {
color: $primary-palette-500;
}
}
}

View File

@ -16,17 +16,11 @@
*/ */
div.operation-control { div.operation-control {
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.25);
background-color: rgba(249, 250, 251, 0.9);
border-top: 1px solid #aabbc3;
border-right: 1px solid #aabbc3;
border-bottom: 1px solid #aabbc3;
margin-bottom: 2px; margin-bottom: 2px;
.fa, .fa,
.icon { .icon {
font-size: 18px; font-size: 18px;
color: #004849;
} }
.operation-control-header { .operation-control-header {
@ -36,16 +30,11 @@ div.operation-control {
line-height: 34px; line-height: 34px;
text-align: center; text-align: center;
} }
&:hover {
background: linear-gradient(90deg, rgba(227, 232, 235, 0) 252px, rgba(227, 232, 235, 1) 34px);
}
} }
.operation-control-title { .operation-control-title {
font-size: 12px; font-size: 12px;
font-family: 'Roboto Slab'; font-family: 'Roboto Slab';
color: #262626;
letter-spacing: 0.05rem; letter-spacing: 0.05rem;
} }
@ -56,13 +45,11 @@ div.operation-control {
.icon { .icon {
font-size: 32px; font-size: 32px;
color: #ad9897;
} }
} }
.operation-context-name { .operation-context-name {
font-size: 15px; font-size: 15px;
color: #262626;
height: 20px; height: 20px;
width: 225px; width: 225px;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -72,12 +59,10 @@ div.operation-control {
.operation-context-type { .operation-context-type {
font-size: 12px; font-size: 12px;
color: #728e9b;
} }
.operation-context-id { .operation-context-id {
height: 18px; height: 18px;
font-size: 12px; font-size: 12px;
color: #775351;
} }
} }

View File

@ -0,0 +1,30 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($canvas-theme) {
// Get the color config from the theme.
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$canvas-primary-palette-50: mat.get-color-from-palette($canvas-primary-palette, 50);
}

View File

@ -0,0 +1,63 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$warn-palette: map.get($color-config, 'warn');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-300: mat.get-color-from-palette($primary-palette, 300);
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
$warn-palette-400: mat.get-color-from-palette($warn-palette, 400);
$warn-palette-A400: mat.get-color-from-palette($warn-palette, 'A400');
$canvas-primary-palette-900: mat.get-color-from-palette($canvas-primary-palette, 900);
.flow-status {
border-bottom: 1px solid $primary-palette-300;
.fa,
.icon {
color: $primary-palette-500;
}
.status-value {
color: $warn-palette-A400;
}
.controller-bulletins {
border-left: 1px solid $primary-palette-300;
background-color: $primary-palette-500;
}
.controller-bulletins.has-bulletins {
background-color: $warn-palette-400;
}
.controller-bulletins .fa {
color: $canvas-primary-palette-900;
}
}
}

View File

@ -15,7 +15,7 @@
~ limitations under the License. ~ limitations under the License.
--> -->
<div class="bg-nifi-accent h-8 flow-status"> <div class="h-8 flow-status">
<div class="flex justify-between"> <div class="flex justify-between">
<div class="flex flex-1 justify-around pr-20"> <div class="flex flex-1 justify-around pr-20">
<div <div

View File

@ -16,34 +16,21 @@
*/ */
.flow-status { .flow-status {
border-bottom: 1px solid #aabbc3;
box-sizing: content-box; box-sizing: content-box;
font-size: 15px; font-size: 15px;
.fa, .fa,
.icon { .icon {
font-style: normal; font-style: normal;
color: #728e9b;
} }
.status-value { .status-value {
white-space: nowrap; white-space: nowrap;
font-weight: 500; font-weight: 500;
color: #775351;
text-shadow: none; text-shadow: none;
} }
.controller-bulletins { .controller-bulletins {
border-left: 1px solid #aabbc3;
background-color: #728e9b;
cursor: default; cursor: default;
} }
.controller-bulletins.has-bulletins {
background-color: #ba554a;
}
.controller-bulletins .fa {
color: #fff;
}
} }

View File

@ -0,0 +1,56 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-100: mat.get-color-from-palette($primary-palette, 100);
$primary-palette-300: mat.get-color-from-palette($primary-palette, 300);
$primary-palette-A400: mat.get-color-from-palette($primary-palette, 'A400');
$canvas-primary-palette-50: mat.get-color-from-palette($canvas-primary-palette, 50);
.new-canvas-item {
.icon {
color: $primary-palette-A400;
&.hovering {
background-color: $primary-palette-100;
box-shadow: 0 3px 6px $canvas-primary-palette-50;
.component-button-grip {
background: repeating-linear-gradient(
90deg,
$primary-palette-300,
$primary-palette-300 4px,
$primary-palette-300 4px,
$primary-palette-300 6px
);
}
}
}
}
}

View File

@ -14,17 +14,18 @@
~ See the License for the specific language governing permissions and ~ See the License for the specific language governing permissions and
~ limitations under the License. ~ limitations under the License.
--> -->
<div class="new-canvas-item">
<div class="h-16 w-16 pl-1.5 flex items-center justify-center relative icon" [class]="iconClass"></div> <div class="h-16 w-16 pl-1.5 flex items-center justify-center relative icon" [class]="iconClass"></div>
<button <button
class="h-16 w-16 pl-1.5 -mt-16 flex items-center justify-center relative icon" class="h-16 w-16 pl-1.5 -mt-16 flex items-center justify-center relative icon"
[class]="isHovering() ? iconHoverClass + ' hovering' : iconClass" [class]="isHovering() ? iconHoverClass + ' hovering' : iconClass"
[class.dragging]="dragging" [class.dragging]="dragging"
(mouseenter)="mouseEnter()" (mouseenter)="mouseEnter()"
(mouseleave)="mouseLeave()" (mouseleave)="mouseLeave()"
cdkDrag cdkDrag
cdkDragBoundary="body" cdkDragBoundary="body"
(cdkDragStarted)="onDragStarted($event)" (cdkDragStarted)="onDragStarted($event)"
(cdkDragEnded)="onDragEnded($event)"> (cdkDragEnded)="onDragEnded($event)">
<span class="h-1 absolute left-[3px] right-[3px] bottom-0.5 component-button-grip"></span> <span class="h-1 absolute left-[3px] right-[3px] bottom-0.5 component-button-grip"></span>
</button> </button>
</div>

View File

@ -17,25 +17,12 @@
.icon { .icon {
font-size: 32px; font-size: 32px;
color: #004849;
&.hovering { &.hovering {
cursor: move; cursor: move;
cursor: grab; cursor: grab;
cursor: -moz-grab; cursor: -moz-grab;
cursor: -webkit-grab; cursor: -webkit-grab;
background-color: #e3e8eb;
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
.component-button-grip {
background: repeating-linear-gradient(
90deg,
rgba(170, 187, 195, 1),
rgba(170, 187, 195, 1) 4px,
rgba(170, 187, 195, 0) 4px,
rgba(170, 187, 195, 0) 6px
);
}
} }
&.dragging { &.dragging {

View File

@ -0,0 +1,53 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-300: mat.get-color-from-palette($primary-palette, 300);
$canvas-primary-palette-900: mat.get-color-from-palette($canvas-primary-palette, 900);
$canvas-primary-palette-A200: mat.get-color-from-palette($canvas-primary-palette, 'A200');
$canvas-primary-palette-A700: mat.get-color-from-palette($canvas-primary-palette, 'A700');
.search-container {
border-left: 1px solid $primary-palette-300;
&:hover,
&.open {
background-color: $canvas-primary-palette-900;
border-left: 1px solid $canvas-primary-palette-A700;
}
.search-input {
color: $canvas-primary-palette-A200;
}
.fa {
color: $canvas-primary-palette-A700;
}
}
}

View File

@ -16,21 +16,12 @@
*/ */
.search-container { .search-container {
border-left: 1px solid #aabbc3;
&:hover,
&.open {
background-color: #ffffff;
border-left: 1px solid #004849;
}
.search-input { .search-input {
width: 0; width: 0;
height: 32px; height: 32px;
outline: none; outline: none;
font-size: 13px; font-size: 13px;
line-height: 13px; line-height: 13px;
color: #262626;
transition: width 400ms ease-in-out; transition: width 400ms ease-in-out;
} }
@ -38,8 +29,4 @@
width: 200px; width: 200px;
transition: width 400ms ease-in-out; transition: width 400ms ease-in-out;
} }
.fa {
color: #004849;
}
} }

View File

@ -37,8 +37,8 @@ import { RouterLink } from '@angular/router';
selector: 'search', selector: 'search',
standalone: true, standalone: true,
templateUrl: './search.component.html', templateUrl: './search.component.html',
imports: [ReactiveFormsModule, CdkOverlayOrigin, CdkConnectedOverlay, NgIf, NgTemplateOutlet, RouterLink, NgForOf], styleUrls: ['./search.component.scss'],
styleUrls: ['./search.component.scss'] imports: [ReactiveFormsModule, CdkOverlayOrigin, CdkConnectedOverlay, NgIf, NgTemplateOutlet, RouterLink, NgForOf]
}) })
export class Search implements OnInit { export class Search implements OnInit {
protected readonly ComponentType = ComponentType; protected readonly ComponentType = ComponentType;

View File

@ -162,7 +162,7 @@
</mat-tab-group> </mat-tab-group>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="createConnectionForm.invalid || saving.value" [disabled]="createConnectionForm.invalid || saving.value"
type="button" type="button"

View File

@ -162,7 +162,7 @@
</mat-tab-group> </mat-tab-group>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close="CANCELLED">Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close="CANCELLED">Cancel</button>
<button <button
[disabled]="!editConnectionForm.dirty || editConnectionForm.invalid || saving.value" [disabled]="!editConnectionForm.dirty || editConnectionForm.invalid || saving.value"
type="button" type="button"

View File

@ -0,0 +1,59 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
$canvas-primary-palette-50: mat.get-color-from-palette($canvas-primary-palette, 50);
$canvas-primary-palette-100: mat.get-color-from-palette($canvas-primary-palette, 100);
$canvas-primary-palette-400: mat.get-color-from-palette($canvas-primary-palette, 400);
$canvas-primary-palette-500: mat.get-color-from-palette($canvas-primary-palette, 500);
$canvas-primary-palette-900: mat.get-color-from-palette($canvas-primary-palette, 900);
.prioritizers {
.prioritizers-list {
background: $primary-palette-500;
border: solid 1px $canvas-primary-palette-400;
.cdk-drag-disabled {
background: $canvas-primary-palette-500;
}
}
.prioritizer-draggable-item {
border-bottom: solid 1px $canvas-primary-palette-400;
color: $canvas-primary-palette-100;
background: $canvas-primary-palette-900;
}
.cdk-drag-preview {
box-shadow: 0 3px 6px $canvas-primary-palette-50;
}
}
}

View File

@ -17,31 +17,24 @@
.prioritizers { .prioritizers {
.prioritizers-list { .prioritizers-list {
background: #eaeef0;
border: solid 1px #ccc;
min-height: 66px; min-height: 66px;
border-radius: 4px; border-radius: 4px;
overflow: hidden; overflow: hidden;
display: block; display: block;
.cdk-drag-disabled { .cdk-drag-disabled {
background: #ccc;
cursor: not-allowed; cursor: not-allowed;
} }
} }
.prioritizer-draggable-item { .prioritizer-draggable-item {
padding: 20px 10px; padding: 20px 10px;
border-bottom: solid 1px #ccc;
color: rgba(0, 0, 0, 0.87);
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
box-sizing: border-box; box-sizing: border-box;
cursor: grab; cursor: grab;
background: white;
font-size: 14px; font-size: 14px;
&:last-child { &:last-child {
@ -52,10 +45,6 @@
.cdk-drag-preview { .cdk-drag-preview {
box-sizing: border-box; box-sizing: border-box;
border-radius: 4px; border-radius: 4px;
box-shadow:
0 5px 5px -3px rgba(0, 0, 0, 0.2),
0 8px 10px 1px rgba(0, 0, 0, 0.14),
0 3px 14px 2px rgba(0, 0, 0, 0.12);
} }
.cdk-drag-placeholder { .cdk-drag-placeholder {

View File

@ -56,14 +56,14 @@ import {
CdkDrag, CdkDrag,
NgForOf NgForOf
], ],
styleUrls: ['./prioritizers.component.scss'],
providers: [ providers: [
{ {
provide: NG_VALUE_ACCESSOR, provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => Prioritizers), useExisting: forwardRef(() => Prioritizers),
multi: true multi: true
} }
] ],
styleUrls: ['./prioritizers.component.scss']
}) })
export class Prioritizers implements ControlValueAccessor { export class Prioritizers implements ControlValueAccessor {
@Input() set allPrioritizers(allPrioritizers: DocumentedType[]) { @Input() set allPrioritizers(allPrioritizers: DocumentedType[]) {

View File

@ -30,6 +30,7 @@
<div *ngFor="let item of relationshipItems; index as i" class="flex flex-col gap-y-1.5"> <div *ngFor="let item of relationshipItems; index as i" class="flex flex-col gap-y-1.5">
<div class="flex items-center gap-x-2"> <div class="flex items-center gap-x-2">
<mat-checkbox <mat-checkbox
color="primary"
[(ngModel)]="item.selected" [(ngModel)]="item.selected"
name="selected-{{ i }}" name="selected-{{ i }}"
(change)="handleChanged()" (change)="handleChanged()"

View File

@ -44,7 +44,7 @@
</mat-form-field> </mat-form-field>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!createPortForm.dirty || createPortForm.invalid || saving.value" [disabled]="!createPortForm.dirty || createPortForm.invalid || saving.value"
type="button" type="button"

View File

@ -33,7 +33,7 @@
</div> </div>
<div *ngIf="portTypeLabel == 'Output Port'" class="mb-3.5"> <div *ngIf="portTypeLabel == 'Output Port'" class="mb-3.5">
<mat-label>Failure Port</mat-label> <mat-label>Failure Port</mat-label>
<mat-checkbox formControlName="portFunction"></mat-checkbox> <mat-checkbox color="primary" formControlName="portFunction"></mat-checkbox>
</div> </div>
<div> <div>
<mat-form-field> <mat-form-field>
@ -43,7 +43,7 @@
</div> </div>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!editPortForm.dirty || editPortForm.invalid || saving.value" [disabled]="!editPortForm.dirty || editPortForm.invalid || saving.value"
type="button" type="button"

View File

@ -0,0 +1,38 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-A400: mat.get-color-from-palette($primary-palette, 'A400');
// Get hues from palette
.create-process-group-form {
.upload-flow-definition {
color: $primary-palette-A400;
}
}
}

View File

@ -68,7 +68,7 @@
</div> </div>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!createProcessGroupForm.dirty || createProcessGroupForm.invalid || saving.value" [disabled]="!createProcessGroupForm.dirty || createProcessGroupForm.invalid || saving.value"
type="button" type="button"

View File

@ -26,6 +26,5 @@
.upload-flow-definition { .upload-flow-definition {
font-size: 18px; font-size: 18px;
color: #004849;
} }
} }

View File

@ -52,6 +52,7 @@
</div> </div>
<div class="-mt-6 mb-4"> <div class="-mt-6 mb-4">
<mat-checkbox <mat-checkbox
color="primary"
formControlName="applyParameterContextRecursively" formControlName="applyParameterContextRecursively"
name="applyParameterContextRecursively"> name="applyParameterContextRecursively">
Apply Recursively Apply Recursively
@ -148,7 +149,7 @@
</mat-tab-group> </mat-tab-group>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!editProcessGroupForm.dirty || editProcessGroupForm.invalid || saving.value" [disabled]="!editProcessGroupForm.dirty || editProcessGroupForm.invalid || saving.value"
class="h-8" class="h-8"

View File

@ -44,7 +44,7 @@
</mat-form-field> </mat-form-field>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!createProcessGroupForm.dirty || createProcessGroupForm.invalid || saving.value" [disabled]="!createProcessGroupForm.dirty || createProcessGroupForm.invalid || saving.value"
type="button" type="button"

View File

@ -184,7 +184,7 @@
</mat-tab-group> </mat-tab-group>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!editProcessorForm.dirty || editProcessorForm.invalid || saving.value" [disabled]="!editProcessorForm.dirty || editProcessorForm.invalid || saving.value"
type="button" type="button"

View File

@ -31,6 +31,7 @@
<div class="value">{{ relationship.name }}</div> <div class="value">{{ relationship.name }}</div>
<div class="flex items-center gap-x-2"> <div class="flex items-center gap-x-2">
<mat-checkbox <mat-checkbox
color="primary"
[(ngModel)]="relationship.autoTerminate" [(ngModel)]="relationship.autoTerminate"
name="autoTerminate-{{ i }}" name="autoTerminate-{{ i }}"
(change)="handleChanged()" (change)="handleChanged()"

View File

@ -0,0 +1,36 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$warn-palette: map.get($color-config, 'warn');
// Get hues from palette
$warn-palette-100: mat.get-color-from-palette($warn-palette, 100);
div {
&.error {
background-color: $warn-palette-100;
}
}
}

View File

@ -0,0 +1,34 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.controller-services-header {
color: $primary-palette-500;
}
}

View File

@ -15,10 +15,6 @@
* limitations under the License. * limitations under the License.
*/ */
.controller-services-header {
color: #728e9b;
}
.refresh-container { .refresh-container {
line-height: normal; line-height: normal;
} }

View File

@ -0,0 +1,35 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$canvas-primary-palette-900: mat.get-color-from-palette($canvas-primary-palette, 900);
.login-background {
background: $canvas-primary-palette-900 url(../../../../assets/icons/bg-error.png) left top no-repeat;
}
}

View File

@ -14,7 +14,3 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
.login-background {
background: #fff url(../../../../assets/icons/bg-error.png) left top no-repeat;
}

View File

@ -0,0 +1,36 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.login-form {
.login-title {
color: $primary-palette-500;
}
}
}

View File

@ -20,7 +20,6 @@
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
font-family: Roboto Slab; font-family: Roboto Slab;
color: #728e9b;
} }
.mat-mdc-form-field { .mat-mdc-form-field {

View File

@ -0,0 +1,34 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.parameter-context-header {
color: $primary-palette-500;
}
}

View File

@ -14,7 +14,3 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
.parameter-context-header {
color: #728e9b;
}

View File

@ -118,12 +118,12 @@
<button color="primary" mat-raised-button mat-dialog-close>Close</button> <button color="primary" mat-raised-button mat-dialog-close>Close</button>
</ng-container> </ng-container>
<ng-template #updateInProgressActions> <ng-template #updateInProgressActions>
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
</ng-template> </ng-template>
</mat-dialog-actions> </mat-dialog-actions>
<ng-template #editFormActions> <ng-template #editFormActions>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!editParameterContextForm.dirty || editParameterContextForm.invalid || saving.value" [disabled]="!editParameterContextForm.dirty || editParameterContextForm.invalid || saving.value"
type="button" type="button"

View File

@ -18,8 +18,6 @@
@use '@angular/material' as mat; @use '@angular/material' as mat;
.parameter-context-edit-form { .parameter-context-edit-form {
//@include mat.dialog-density(-2);
//@include mat.tabs-density(-2);
@include mat.button-density(-1); @include mat.button-density(-1);
.mdc-dialog__content { .mdc-dialog__content {

View File

@ -0,0 +1,58 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
$canvas-primary-palette-50: mat.get-color-from-palette($canvas-primary-palette, 50);
$canvas-primary-palette-100: mat.get-color-from-palette($canvas-primary-palette, 100);
$canvas-primary-palette-400: mat.get-color-from-palette($canvas-primary-palette, 400);
$canvas-primary-palette-500: mat.get-color-from-palette($canvas-primary-palette, 500);
.parameter-context-inheritance {
.parameter-context-inheritance-list {
background: $primary-palette-500;
border: solid 1px $canvas-primary-palette-400;
.cdk-drag-disabled {
background: $canvas-primary-palette-500;
}
}
.parameter-context-draggable-item {
border-bottom: solid 1px $canvas-primary-palette-400;
color: $canvas-primary-palette-100;
background: white;
}
.cdk-drag-preview {
box-shadow: 0 3px 6px $canvas-primary-palette-50;
}
}
}

View File

@ -17,31 +17,24 @@
.parameter-context-inheritance { .parameter-context-inheritance {
.parameter-context-inheritance-list { .parameter-context-inheritance-list {
background: #eaeef0;
border: solid 1px #ccc;
min-height: 66px; min-height: 66px;
border-radius: 4px; border-radius: 4px;
overflow: hidden; overflow: hidden;
display: block; display: block;
.cdk-drag-disabled { .cdk-drag-disabled {
background: #ccc;
cursor: not-allowed; cursor: not-allowed;
} }
} }
.parameter-context-draggable-item { .parameter-context-draggable-item {
padding: 20px 10px; padding: 20px 10px;
border-bottom: solid 1px #ccc;
color: rgba(0, 0, 0, 0.87);
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
box-sizing: border-box; box-sizing: border-box;
cursor: grab; cursor: grab;
background: white;
font-size: 14px; font-size: 14px;
&:last-child { &:last-child {
@ -52,10 +45,6 @@
.cdk-drag-preview { .cdk-drag-preview {
box-sizing: border-box; box-sizing: border-box;
border-radius: 4px; border-radius: 4px;
box-shadow:
0 5px 5px -3px rgba(0, 0, 0, 0.2),
0 8px 10px 1px rgba(0, 0, 0, 0.14),
0 3px 14px 2px rgba(0, 0, 0, 0.12);
} }
.cdk-drag-placeholder { .cdk-drag-placeholder {

View File

@ -59,14 +59,14 @@ import {
CdkDrag, CdkDrag,
NgForOf NgForOf
], ],
styleUrls: ['./parameter-context-inheritance.component.scss'],
providers: [ providers: [
{ {
provide: NG_VALUE_ACCESSOR, provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => ParameterContextInheritance), useExisting: forwardRef(() => ParameterContextInheritance),
multi: true multi: true
} }
] ],
styleUrls: ['./parameter-context-inheritance.component.scss']
}) })
export class ParameterContextInheritance implements ControlValueAccessor { export class ParameterContextInheritance implements ControlValueAccessor {
@Input() set allParameterContexts(allParameterContexts: ParameterContextEntity[]) { @Input() set allParameterContexts(allParameterContexts: ParameterContextEntity[]) {

View File

@ -26,7 +26,7 @@ import { CurrentUser } from '../../../../../state/current-user';
@Component({ @Component({
selector: 'parameter-context-table', selector: 'parameter-context-table',
templateUrl: './parameter-context-table.component.html', templateUrl: './parameter-context-table.component.html',
styleUrls: ['./parameter-context-table.component.scss', '../../../../../../assets/styles/listing-table.scss'] styleUrls: ['./parameter-context-table.component.scss']
}) })
export class ParameterContextTable { export class ParameterContextTable {
@Input() initialSortColumn: 'name' | 'provider' | 'description' = 'name'; @Input() initialSortColumn: 'name' | 'provider' | 'description' = 'name';

View File

@ -57,7 +57,7 @@ export interface ParameterItem {
NifiTooltipDirective, NifiTooltipDirective,
ParameterReferences ParameterReferences
], ],
styleUrls: ['./parameter-table.component.scss', '../../../../../../assets/styles/listing-table.scss'], styleUrls: ['./parameter-table.component.scss'],
providers: [ providers: [
{ {
provide: NG_VALUE_ACCESSOR, provide: NG_VALUE_ACCESSOR,

View File

@ -0,0 +1,64 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$warn-palette: map.get($color-config, 'warn');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-300: mat.get-color-from-palette($primary-palette, 300);
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
$canvas-primary-palette-200: mat.get-color-from-palette($canvas-primary-palette, 200);
$canvas-primary-palette-600: mat.get-color-from-palette($canvas-primary-palette, 600);
$canvas-primary-palette-900: mat.get-color-from-palette($canvas-primary-palette, 900);
$warn-palette-A200: mat.get-color-from-palette($warn-palette, 'A200');
.provenance-header {
color: $primary-palette-500;
};
rect.lineage {
fill: $canvas-primary-palette-600;
}
g.flowfile-icon text {
fill: $warn-palette-A200;
}
circle.event-circle {
fill: $primary-palette-300;
stroke: $canvas-primary-palette-200;
}
path.link {
stroke: $canvas-primary-palette-200;
}
circle.flowfile-link {
fill: $canvas-primary-palette-900;
stroke: $canvas-primary-palette-200;
}
}

View File

@ -14,7 +14,3 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
.provenance-header {
color: #728e9b;
}

View File

@ -0,0 +1,48 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$canvas-primary-palette: map.get($canvas-color-config, 'primary');
// Get hues from palette
$primary-palette-A400: mat.get-color-from-palette($primary-palette, 'A400');
$canvas-primary-palette-600: mat.get-color-from-palette($canvas-primary-palette, 600);
$canvas-primary-palette-700: mat.get-color-from-palette($canvas-primary-palette, 700);
.provenance-event-table {
.lineage {
border: 1px solid $canvas-primary-palette-700;
background-color: $canvas-primary-palette-600;
.lineage-controls {
.fa,
.icon {
color: $primary-palette-A400;
}
}
}
}
}

View File

@ -0,0 +1,63 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($material-theme, $canvas-theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($material-theme);
$canvas-color-config: mat.get-color-config($canvas-theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$warn-palette: map.get($color-config, 'warn');
$canvas-accent-palette: map.get($canvas-color-config, 'accent');
// Get hues from palette
$primary-palette-A400: mat.get-color-from-palette($primary-palette, 'A400');
$warn-palette-400: mat.get-color-from-palette($warn-palette, 400);
$warn-palette-A200: mat.get-color-from-palette($warn-palette, 'A200');
$canvas-accent-palette-A200: mat.get-color-from-palette($canvas-accent-palette, 'A200');
#lineage {
canvas,
svg {
path.link.selected {
stroke: $warn-palette-400;
}
g.event circle.selected {
fill: $warn-palette-400;
}
g.event circle.context {
fill: $canvas-accent-palette-A200;
}
g.flowfile circle.context,
g.event circle.context {
stroke: $primary-palette-A400;
}
.flowfile-icon {
color: $warn-palette-A200;
}
}
}
}

View File

@ -24,23 +24,11 @@
position: absolute; position: absolute;
overflow: hidden; overflow: hidden;
path.link.selected {
stroke: #ba554a;
}
g.event { g.event {
cursor: pointer; cursor: pointer;
user-select: none; user-select: none;
} }
g.event circle.selected {
fill: #ba554a;
}
g.event circle.context {
fill: #cf9f5d;
}
text.event-type { text.event-type {
font-family: Roboto; font-family: Roboto;
font-size: 11px; font-size: 11px;
@ -63,7 +51,6 @@
g.flowfile circle.context, g.flowfile circle.context,
g.event circle.context { g.event circle.context {
stroke: #004849;
stroke-width: 1.5px; stroke-width: 1.5px;
} }
@ -71,7 +58,6 @@
font-family: flowfont; font-family: flowfont;
content: '\e808'; content: '\e808';
font-size: 16px; font-size: 16px;
color: #ad9897;
} }
} }
} }

View File

@ -280,9 +280,9 @@ export class LineageComponent implements OnInit {
.on('dblclick.zoom', null); .on('dblclick.zoom', null);
svg.append('rect') svg.append('rect')
.attr('class', 'lineage')
.attr('width', '100%') .attr('width', '100%')
.attr('height', '100%') .attr('height', '100%')
.attr('fill', '#f9fafb')
.on('mousedown', function (event, d) { .on('mousedown', function (event, d) {
// hide the context menu if necessary // hide the context menu if necessary
self.clearSelectionContext(); self.clearSelectionContext();
@ -311,11 +311,11 @@ export class LineageComponent implements OnInit {
.attr('markerWidth', 6) .attr('markerWidth', 6)
.attr('markerHeight', 6) .attr('markerHeight', 6)
.attr('orient', 'auto') .attr('orient', 'auto')
.attr('fill', function (d) { .attr('class', function (d) {
if (d.indexOf('SELECTED') >= 0) { if (d.indexOf('SELECTED') >= 0) {
return '#ba554a'; return 'warn-400';
} else { } else {
return '#000000'; return 'primary-contrast-200';
} }
}) })
.append('path') .append('path')
@ -723,9 +723,8 @@ export class LineageComponent implements OnInit {
// node // node
flowfiles flowfiles
.append('circle') .append('circle')
.attr('class', 'flowfile-link')
.attr('r', 16) .attr('r', 16)
.attr('fill', '#fff')
.attr('stroke', '#000')
.attr('stroke-width', 1.0) .attr('stroke-width', 1.0)
.on('mouseover', function (event: MouseEvent, d: any) { .on('mouseover', function (event: MouseEvent, d: any) {
self.lineageContainerElement self.lineageContainerElement
@ -759,7 +758,6 @@ export class LineageComponent implements OnInit {
.append('text') .append('text')
.attr('font-family', 'flowfont') .attr('font-family', 'flowfont')
.attr('font-size', '18px') .attr('font-size', '18px')
.attr('fill', '#ad9897')
.attr('transform', function () { .attr('transform', function () {
return 'translate(0,15)'; return 'translate(0,15)';
}) })
@ -822,12 +820,11 @@ export class LineageComponent implements OnInit {
events events
.append('circle') .append('circle')
.attr('class', 'event-circle')
.classed('selected', function (d: any) { .classed('selected', function (d: any) {
return d.id === self.eventId; return d.id === self.eventId;
}) })
.attr('r', 8) .attr('r', 8)
.attr('fill', '#aabbc3')
.attr('stroke', '#000')
.attr('stroke-width', 1.0) .attr('stroke-width', 1.0)
.attr('id', function (d: any) { .attr('id', function (d: any) {
return `event-node-${d.id}`; return `event-node-${d.id}`;
@ -956,7 +953,6 @@ export class LineageComponent implements OnInit {
.insert('path', '.node') .insert('path', '.node')
.attr('class', 'link') .attr('class', 'link')
.attr('stroke-width', 1.5) .attr('stroke-width', 1.5)
.attr('stroke', '#000')
.attr('fill', 'none') .attr('fill', 'none')
.attr('d', function (d: any) { .attr('d', function (d: any) {
return `M${d.source.x},${d.source.y}L${d.source.x},${d.source.y}`; return `M${d.source.x},${d.source.y}L${d.source.x},${d.source.y}`;

View File

@ -26,9 +26,6 @@
} }
.lineage { .lineage {
border: 1px solid #e5ebed;
background-color: #f9fafb;
.lineage-controls { .lineage-controls {
position: absolute; position: absolute;
top: 5px; top: 5px;
@ -37,7 +34,6 @@
.fa, .fa,
.icon { .icon {
color: #004849;
width: 14px; width: 14px;
height: 14px; height: 14px;
text-align: center; text-align: center;

View File

@ -59,7 +59,7 @@ import { MatSliderModule } from '@angular/material/slider';
LineageComponent, LineageComponent,
MatSliderModule MatSliderModule
], ],
styleUrls: ['./provenance-event-table.component.scss', '../../../../../../assets/styles/listing-table.scss'] styleUrls: ['./provenance-event-table.component.scss']
}) })
export class ProvenanceEventTable implements AfterViewInit { export class ProvenanceEventTable implements AfterViewInit {
@Input() set events(events: ProvenanceEventSummary[]) { @Input() set events(events: ProvenanceEventSummary[]) {

View File

@ -25,7 +25,10 @@
<input matInput formControlName="value" type="text" /> <input matInput formControlName="value" type="text" />
</mat-form-field> </mat-form-field>
<div class="-mt-6 mb-4"> <div class="-mt-6 mb-4">
<mat-checkbox formControlName="inverse" name="inverse"> Exclude </mat-checkbox> <mat-checkbox
color="primary"
formControlName="inverse"
name="inverse"> Exclude </mat-checkbox>
</div> </div>
</div> </div>
</ng-container> </ng-container>
@ -62,7 +65,7 @@
</div> </div>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end"> <mat-dialog-actions align="end">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="provenanceOptionsForm.invalid" [disabled]="provenanceOptionsForm.invalid"
type="button" type="button"

View File

@ -0,0 +1,40 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.flowfile {
.mdc-dialog__content {
.tab-content {
.flowfile-header {
color: $primary-palette-500;
}
}
}
}
}

View File

@ -151,15 +151,15 @@
"></ng-container> "></ng-container>
</div> </div>
<div class="flex"> <div class="flex">
<button color="accent" mat-raised-button (click)="downloadContentClicked()"> <button color="primary" mat-stroked-button (click)="downloadContentClicked()">
<i class="fa fa-download"></i> <i class="fa fa-download"></i>
Download Download
</button> </button>
<button <button
*ngIf="contentViewerAvailable" *ngIf="contentViewerAvailable"
class="ml-3" class="ml-3"
color="accent" color="primary"
mat-raised-button mat-stroked-button
(click)="viewContentClicked()"> (click)="viewContentClicked()">
<i class="fa fa-eye"></i> <i class="fa fa-eye"></i>
View View

View File

@ -30,7 +30,6 @@
overflow-y: auto; overflow-y: auto;
.flowfile-header { .flowfile-header {
color: #728e9b;
font-size: 15px; font-size: 15px;
font-family: 'Roboto Slab'; font-family: 'Roboto Slab';
font-style: normal; font-style: normal;

View File

@ -31,6 +31,7 @@ import { NiFiCommon } from '../../../../../service/nifi-common.service';
selector: 'flowfile-dialog', selector: 'flowfile-dialog',
standalone: true, standalone: true,
templateUrl: './flowfile-dialog.component.html', templateUrl: './flowfile-dialog.component.html',
styleUrls: ['./flowfile-dialog.component.scss'],
imports: [ imports: [
ReactiveFormsModule, ReactiveFormsModule,
MatDialogModule, MatDialogModule,
@ -45,8 +46,7 @@ import { NiFiCommon } from '../../../../../service/nifi-common.service';
NgTemplateOutlet, NgTemplateOutlet,
FormsModule, FormsModule,
KeyValuePipe KeyValuePipe
], ]
styleUrls: ['./flowfile-dialog.component.scss']
}) })
export class FlowFileDialog { export class FlowFileDialog {
@Input() contentViewerAvailable!: boolean; @Input() contentViewerAvailable!: boolean;

View File

@ -0,0 +1,42 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
$warn-palette: map.get($color-config, 'warn');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
$warn-palette-400: mat.get-color-from-palette($warn-palette, 400);
.flowfile-table {
.queue-listing-header {
color: $primary-palette-500;
}
.listing-message {
color: $warn-palette-400;
}
}
}

View File

@ -16,14 +16,6 @@
*/ */
.flowfile-table { .flowfile-table {
.queue-listing-header {
color: #728e9b;
}
.listing-message {
color: #ba554a;
}
.listing-table { .listing-table {
table { table {
.mat-column-moreDetails { .mat-column-moreDetails {

View File

@ -31,7 +31,7 @@ import { CurrentUser } from '../../../../../state/current-user';
standalone: true, standalone: true,
templateUrl: './flowfile-table.component.html', templateUrl: './flowfile-table.component.html',
imports: [MatTableModule, NgForOf, NgIf, RouterLink], imports: [MatTableModule, NgForOf, NgIf, RouterLink],
styleUrls: ['./flowfile-table.component.scss', '../../../../../../assets/styles/listing-table.scss'] styleUrls: ['./flowfile-table.component.scss']
}) })
export class FlowFileTable implements AfterViewInit { export class FlowFileTable implements AfterViewInit {
@Input() connectionLabel!: string; @Input() connectionLabel!: string;

View File

@ -0,0 +1,34 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@use 'sass:map';
@use '@angular/material' as mat;
@mixin theme($theme) {
// Get the color config from the theme.
$color-config: mat.get-color-config($theme);
// Get the color palette from the color-config.
$primary-palette: map.get($color-config, 'primary');
// Get hues from palette
$primary-palette-500: mat.get-color-from-palette($primary-palette, 500);
.settings-header {
color: $primary-palette-500;
}
}

View File

@ -15,10 +15,6 @@
* limitations under the License. * limitations under the License.
*/ */
.settings-header {
color: #728e9b;
}
.settings-tabs { .settings-tabs {
border-bottom-width: 1px; border-bottom-width: 1px;
} }

View File

@ -80,7 +80,7 @@
</mat-tab-group> </mat-tab-group>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!editFlowAnalysisRuleForm.dirty || editFlowAnalysisRuleForm.invalid || saving.value" [disabled]="!editFlowAnalysisRuleForm.dirty || editFlowAnalysisRuleForm.invalid || saving.value"
type="button" type="button"

View File

@ -46,7 +46,7 @@ import { CurrentUser } from '../../../../../state/current-user';
NifiTooltipDirective, NifiTooltipDirective,
RouterLink RouterLink
], ],
styleUrls: ['./flow-analysis-rule-table.component.scss', '../../../../../../assets/styles/listing-table.scss'] styleUrls: ['./flow-analysis-rule-table.component.scss']
}) })
export class FlowAnalysisRuleTable { export class FlowAnalysisRuleTable {
@Input() set flowAnalysisRules(flowAnalysisRuleEntities: FlowAnalysisRuleEntity[]) { @Input() set flowAnalysisRules(flowAnalysisRuleEntities: FlowAnalysisRuleEntity[]) {

View File

@ -46,7 +46,7 @@ export type SupportedColumns = 'name' | 'type' | 'bundle';
RouterLink RouterLink
], ],
templateUrl: './parameter-providers-table.component.html', templateUrl: './parameter-providers-table.component.html',
styleUrls: ['./parameter-providers-table.component.scss', '../../../../../../assets/styles/listing-table.scss'] styleUrls: ['./parameter-providers-table.component.scss']
}) })
export class ParameterProvidersTable { export class ParameterProvidersTable {
@Input() initialSortColumn: SupportedColumns = 'name'; @Input() initialSortColumn: SupportedColumns = 'name';

View File

@ -56,7 +56,7 @@
</div> </div>
</mat-dialog-content> </mat-dialog-content>
<mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving"> <mat-dialog-actions align="end" *ngIf="{ value: (saving$ | async)! } as saving">
<button color="accent" mat-raised-button mat-dialog-close>Cancel</button> <button color="primary" mat-stroked-button mat-dialog-close>Cancel</button>
<button <button
[disabled]="!createRegistryClientForm.dirty || createRegistryClientForm.invalid || saving.value" [disabled]="!createRegistryClientForm.dirty || createRegistryClientForm.invalid || saving.value"
type="button" type="button"

Some files were not shown because too many files have changed in this diff Show More