Welcome to SCION Microfrontend Platform DevTools
Embed SCION DevTools as microfrontend in your application to inspect micro applications and their dependencies.
- DevTools could not connect to the Microfrontend Platform Host.
+
DevTools could not connect to the Microfrontend Platform host.
Did you forget to register the DevTools application in the platform?
For more information, please visit our Developer Guide.
diff --git a/apps/microfrontend-platform-devtools/src/app/app.component.scss b/apps/microfrontend-platform-devtools/src/app/app.component.scss
index 03f28e5f..dcc4266a 100644
--- a/apps/microfrontend-platform-devtools/src/app/app.component.scss
+++ b/apps/microfrontend-platform-devtools/src/app/app.component.scss
@@ -2,66 +2,54 @@
display: grid;
position: absolute;
inset: 0;
-
- router-outlet {
- position: absolute; // take router outlet out of the document flow
- }
+ padding: 0 .75em .5em .75em;
> sci-sashbox {
- --sci-sashbox-gap: 0;
+ --sci-sashbox-gap: .75em;
- section {
+ aside, main {
display: grid;
- grid-template-rows: max-content 1fr;
+ grid-template-rows: auto 1fr;
+ row-gap: 1em;
> header {
display: flex;
align-items: center;
- background-color: var(--sci-color-P100);
height: 2.5em;
+ white-space: nowrap;
+ font-weight: bold;
+ color: var(--app-color-text-strong);
+ font-size: 1.1em;
user-select: none;
+ }
- > :where(button.title) { // Use the where selector to set the specificity to 0 to allow overrides.
- all: unset;
- }
+ > router-outlet {
+ position: absolute; // take router outlet out of the document flow
+ }
+ }
- > button {
- cursor: pointer;
- }
+ aside > header {
+ > button.menu {
+ all: unset;
+ flex: auto;
+ display: flex;
+ align-items: center;
+ gap: 1em;
+ cursor: pointer;
- > button, > span.title {
- font-weight: bold;
- white-space: nowrap;
+ &:hover {
color: var(--sci-color-accent);
-
- &.title {
- font-size: 1.1em;
- flex: auto;
- padding: .5em;
- margin-left: .5em;
- }
-
- &.material-icons {
- flex: none;
- cursor: pointer;
- padding: .25em;
- font-size: 1.75em;
-
- &.menu {
- padding-left: .5em;
- font-weight: normal;
- }
- }
-
- &:hover {
- color: var(--sci-color-A800);
- }
}
}
+
+ > button.collapse {
+ position: relative;
+ right: -.25em;
+ }
}
}
- > section.usage-message {
+ > section.welcome {
display: flex;
flex-direction: column;
align-items: center;
@@ -70,6 +58,7 @@
margin: .5em 0;
font-size: 1.5em;
font-weight: bold;
+ color: var(--app-color-text-strong);
}
> img.logo {
diff --git a/apps/microfrontend-platform-devtools/src/app/app.component.ts b/apps/microfrontend-platform-devtools/src/app/app.component.ts
index dac452cf..f90f09d0 100644
--- a/apps/microfrontend-platform-devtools/src/app/app.component.ts
+++ b/apps/microfrontend-platform-devtools/src/app/app.component.ts
@@ -7,15 +7,18 @@
*
* SPDX-License-Identifier: EPL-2.0
*/
-import {ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener} from '@angular/core';
+import {ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, inject} from '@angular/core';
import {Observable} from 'rxjs';
import {ShellService} from './shell.service';
-import {MicrofrontendPlatformClient} from '@scion/microfrontend-platform';
-import {AsyncPipe, NgIf} from '@angular/common';
+import {ContextService, MicrofrontendPlatformClient} from '@scion/microfrontend-platform';
+import {AsyncPipe, DOCUMENT, NgIf} from '@angular/common';
import {RouterOutlet} from '@angular/router';
import {SciSashboxComponent, SciSashDirective} from '@scion/components/sashbox';
import {AppMenuComponent} from './app-menu/app-menu.component';
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
+import {Beans} from '@scion/toolkit/bean-manager';
+import {SciMaterialIconDirective} from '@scion/components.internal/material-icon';
+import {filter} from 'rxjs/operators';
@Component({
selector: 'devtools-root',
@@ -30,6 +33,7 @@ import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
SciSashboxComponent,
SciSashDirective,
AppMenuComponent,
+ SciMaterialIconDirective,
],
})
export class AppComponent {
@@ -39,8 +43,9 @@ export class AppComponent {
public menuOpen = false;
public readonly connnectedToHost = MicrofrontendPlatformClient.isConnected();
- constructor(private _shellService: ShellService, private _cdRef: ChangeDetectorRef) {
+ constructor(private _shellService: ShellService, private _cd: ChangeDetectorRef) {
this.installNavigationEndListener();
+ this.installThemeSwitcher();
}
private installNavigationEndListener(): void {
@@ -54,7 +59,7 @@ export class AppComponent {
this.showPrimaryOutlet = true;
}
- this._cdRef.markForCheck();
+ this._cd.markForCheck();
});
}
@@ -86,4 +91,20 @@ export class AppComponent {
public onMenuClose(): void {
this.menuOpen = false;
}
+
+ /**
+ * Subscribes to color scheme changes of the embedding context and applies either the 'scion-dark' or 'scion-light' theme.
+ */
+ private installThemeSwitcher(): void {
+ const documentRoot = inject(DOCUMENT).documentElement;
+
+ Beans.opt(ContextService)?.observe$<'light' | 'dark' | null>('color-scheme')
+ .pipe(
+ filter(Boolean),
+ takeUntilDestroyed(),
+ )
+ .subscribe(colorScheme => {
+ documentRoot.setAttribute('sci-theme', colorScheme === 'dark' ? 'scion-dark' : 'scion-light');
+ });
+ }
}
diff --git a/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.html b/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.html
index 75fea26c..be8e213e 100644
--- a/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.html
+++ b/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.html
@@ -1,12 +1,9 @@
-
- visibility
- visibility_off
-
-
+visibility
+visibility_off
+
diff --git a/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.scss b/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.scss
index 416492e0..5c95b92e 100644
--- a/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.scss
+++ b/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.scss
@@ -1,28 +1,32 @@
-@use '@scion/components.internal' as sci-ɵcomponents;
-
:host {
- display: grid;
- justify-content: space-between;
- grid-template-columns: auto auto;
- grid-template-rows: auto;
- grid-column-gap: 1em;
+ display: flex;
user-select: none;
+ align-items: center;
+ gap: 1em;
+
+ > span.visibility {
+ &.private {
+ color: var(--sci-color-text-subtlest)
+ }
+
+ &.public {
+ color: var(--sci-color-accent)
+ }
+ }
- > div.qualifier, > div.actions {
+ > div.actions {
+ flex: auto;
display: flex;
+ gap: 1em;
+ justify-content: flex-end;
align-items: center;
- gap: .5em;
- color: var(--sci-color-accent);
- &.actions {
- > button.app-symbolic-name {
- all: unset;
- @include sci-ɵcomponents.theme-chip(var(--sci-color-accent), null, var(--sci-color-accent));
- font-weight: bold;
- display: flex;
- gap: .5em;
- align-items: center;
- }
+ > a.app-symbolic-name {
+ font-size: smaller;
+ }
+
+ > button.copy-to-clipboard {
+ font-size: 1.5em;
}
}
}
diff --git a/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.ts b/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.ts
index f6b9ecac..84975322 100644
--- a/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.ts
+++ b/apps/microfrontend-platform-devtools/src/app/capability-accordion-item/capability-accordion-item.component.ts
@@ -12,7 +12,8 @@ import {Clipboard} from '@angular/cdk/clipboard';
import {Capability} from '@scion/microfrontend-platform';
import {Router} from '@angular/router';
import {NgIf} from '@angular/common';
-import {QualifierChipListComponent} from '../qualifier-chip-list/qualifier-chip-list.component';
+import {SciQualifierChipListComponent} from '@scion/components.internal/qualifier-chip-list';
+import {SciMaterialIconDirective} from '@scion/components.internal/material-icon';
@Component({
selector: 'devtools-capability-accordion-item',
@@ -22,7 +23,8 @@ import {QualifierChipListComponent} from '../qualifier-chip-list/qualifier-chip-
standalone: true,
imports: [
NgIf,
- QualifierChipListComponent,
+ SciQualifierChipListComponent,
+ SciMaterialIconDirective,
],
})
export class CapabilityAccordionItemComponent {
@@ -38,6 +40,7 @@ export class CapabilityAccordionItemComponent {
public onOpenAppClick(event: MouseEvent, appSymbolicName: string): void {
event.stopPropagation();
+ event.preventDefault();
this._router.navigate(['/apps', {outlets: {details: [appSymbolicName]}}]);
}
diff --git a/apps/microfrontend-platform-devtools/src/app/capability-accordion-panel/capability-accordion-panel.component.scss b/apps/microfrontend-platform-devtools/src/app/capability-accordion-panel/capability-accordion-panel.component.scss
index 84d3d42f..2c3f1d4e 100644
--- a/apps/microfrontend-platform-devtools/src/app/capability-accordion-panel/capability-accordion-panel.component.scss
+++ b/apps/microfrontend-platform-devtools/src/app/capability-accordion-panel/capability-accordion-panel.component.scss
@@ -3,10 +3,10 @@
> sci-tabbar {
section.tab {
- border: 1px solid var(--sci-color-P400);
- border-radius: 5px;
+ border: 1px solid var(--sci-color-border);
+ border-radius: var(--sci-corner);
padding: 1em;
- background-color: #FFFFFF;
+ background-color: var(--app-accordion-panel-container-background-color);
font-size: .9em;
&.general {
@@ -16,7 +16,7 @@
> span.description {
grid-column: 1/-1;
- color: var(--sci-color-P600);
+ color: var(--sci-color-text-subtle);
margin-bottom: 1em;
}
}
@@ -25,7 +25,7 @@
> span.explanation {
display: inline-block;
margin-bottom: 1.5em;
- color: var(--sci-color-P600);
+ color: var(--sci-color-text-subtle);
}
}
@@ -36,7 +36,7 @@
> span.explanation {
margin-bottom: .75em;
- color: var(--sci-color-P600);
+ color: var(--sci-color-text-subtle);
grid-column: 1/-1;
}
@@ -44,7 +44,7 @@
display: flex;
justify-content: space-between;
grid-column: 1/3;
- border-bottom: 1px solid var(--sci-color-P300);
+ border-bottom: 1px solid var(--sci-color-border);
padding-bottom: .5em;
margin-bottom: .5em;
height: 2.5em;
@@ -56,6 +56,7 @@
> span.name {
font-size: 1.1em;
font-weight: bold;
+ color: var(--app-color-text-strong);
align-self: flex-end;
&.deprecated {
@@ -65,7 +66,7 @@
> span.required {
border: 1px solid var(--sci-color-accent);
- border-radius: 5px;
+ border-radius: var(--sci-corner);
padding: .25em .5em;
color: var(--sci-color-accent);
}
@@ -90,7 +91,7 @@
> span.explanation {
display: inline-block;
margin-bottom: 1.5em;
- color: var(--sci-color-P600);
+ color: var(--sci-color-text-subtle);
}
> ul {
@@ -103,7 +104,7 @@
> a.self {
pointer-events: none;
- color: var(--sci-color-P500);
+ color: var(--sci-color-text-subtlest);
}
}
}
diff --git a/apps/microfrontend-platform-devtools/src/app/capability-filter-result/capability-filter-result.component.scss b/apps/microfrontend-platform-devtools/src/app/capability-filter-result/capability-filter-result.component.scss
index 317e39ab..9ae0148d 100644
--- a/apps/microfrontend-platform-devtools/src/app/capability-filter-result/capability-filter-result.component.scss
+++ b/apps/microfrontend-platform-devtools/src/app/capability-filter-result/capability-filter-result.component.scss
@@ -1,7 +1,6 @@
:host {
display: flex;
flex-direction: column;
- padding: 1em;
> sci-filter-field {
flex: none;
diff --git a/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.html b/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.html
index 72112d45..8e46450d 100644
--- a/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.html
+++ b/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.html
@@ -3,15 +3,14 @@
- {{intentionsByApp.key | devtoolsAppName}}
-
+ {{intentionsByApp.key | devtoolsAppName}}
+
-
-
+
+
diff --git a/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.scss b/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.scss
index 0f17a90b..964fa7a2 100644
--- a/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.scss
+++ b/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.scss
@@ -14,11 +14,15 @@
flex-direction: row;
align-items: center;
justify-content: space-between;
- color: var(--sci-color-A900);
}
- devtools-qualifier-chip-list:not(:last-child) {
- margin-bottom: .5em;
+ sci-qualifier-chip-list {
+ --sci-qualifier-chip-list-type-background-color: var(--app-accordion-panel-chip-primary-background-color);
+ --sci-qualifier-chip-list-qualifier-background-color: var(--app-accordion-panel-chip-secondary-background-color);
+
+ &:not(:last-child) {
+ margin-bottom: .5em;
+ }
}
}
}
diff --git a/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.ts b/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.ts
index 061dd73a..d259601e 100644
--- a/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.ts
+++ b/apps/microfrontend-platform-devtools/src/app/dependent-intentions/dependent-intentions.component.ts
@@ -18,9 +18,10 @@ import {Maps} from '@scion/toolkit/util';
import {NonNullableFormBuilder, ReactiveFormsModule} from '@angular/forms';
import {AsyncPipe, KeyValue, KeyValuePipe, NgFor} from '@angular/common';
import {AppNamePipe} from '../common/app-name.pipe';
-import {QualifierChipListComponent} from '../qualifier-chip-list/qualifier-chip-list.component';
+import {SciQualifierChipListComponent} from '@scion/components.internal/qualifier-chip-list';
import {SciAccordionComponent, SciAccordionItemDirective} from '@scion/components.internal/accordion';
import {SciFilterFieldComponent} from '@scion/components.internal/filter-field';
+import {SciMaterialIconDirective} from '@scion/components.internal/material-icon';
@Component({
selector: 'devtools-dependent-intentions',
@@ -37,7 +38,8 @@ import {SciFilterFieldComponent} from '@scion/components.internal/filter-field';
SciAccordionComponent,
SciAccordionItemDirective,
AppNamePipe,
- QualifierChipListComponent,
+ SciQualifierChipListComponent,
+ SciMaterialIconDirective,
],
})
export class DependentIntentionsComponent implements OnInit, OnChanges {
diff --git a/apps/microfrontend-platform-devtools/src/app/find-capabilities/filter-field/filter-field.component.html b/apps/microfrontend-platform-devtools/src/app/find-capabilities/filter-field/filter-field.component.html
index 7948d06a..f206732b 100644
--- a/apps/microfrontend-platform-devtools/src/app/find-capabilities/filter-field/filter-field.component.html
+++ b/apps/microfrontend-platform-devtools/src/app/find-capabilities/filter-field/filter-field.component.html
@@ -1,26 +1,26 @@
{{title}}
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
-