mirror of
https://gitlab.com/openlp/web-remote.git
synced 2024-12-22 11:32:47 +00:00
Use the new Angular 17 template syntax and property 'styleUrl'
This commit is contained in:
parent
544b400829
commit
ea39bbc3d7
@ -35,7 +35,7 @@
|
||||
"@angular/platform-browser": "^17.3.5",
|
||||
"@angular/platform-browser-dynamic": "^17.3.5",
|
||||
"@angular/router": "^17.3.5",
|
||||
"@fontsource/roboto": "^5.0.12",
|
||||
"@fontsource/roboto": "^5.0.13",
|
||||
"@ngx-translate/core": "^15.0.0",
|
||||
"@ngx-translate/http-loader": "^8.0.0",
|
||||
"core-js": "^3.37.0",
|
||||
@ -58,8 +58,8 @@
|
||||
"@types/jasmine": "~5.1.4",
|
||||
"@types/jasminewd2": "~2.0.13",
|
||||
"@types/node": "~20.12.7",
|
||||
"@typescript-eslint/eslint-plugin": "7.7.0",
|
||||
"@typescript-eslint/parser": "7.7.0",
|
||||
"@typescript-eslint/eslint-plugin": "7.7.1",
|
||||
"@typescript-eslint/parser": "7.7.1",
|
||||
"axios": "^1.6.8",
|
||||
"browserslist": "^4.23.0",
|
||||
"browserslist-useragent-regexp": "^4.1.3",
|
||||
|
@ -1,23 +1,35 @@
|
||||
<mat-toolbar color="primary">
|
||||
<mat-toolbar-row>
|
||||
<button mat-icon-button (click)="menu.toggle()"><mat-icon>menu</mat-icon></button>
|
||||
<button mat-icon-button (click)="menu.toggle()">
|
||||
<mat-icon>menu</mat-icon>
|
||||
</button>
|
||||
<span class="page-title">{{ pageTitle | translate }}</span>
|
||||
<span class="spacer"></span>
|
||||
<button *ngIf="showLogin" mat-button (click)="login()">{{ 'LOGIN' | translate }}</button>
|
||||
<button *ngIf="webSocketOpen"
|
||||
mat-icon-button
|
||||
(click)="forceWebSocketReconnection()"
|
||||
class="connection-status"
|
||||
matTooltip="{{ 'CONNECTED_TO_OPENLP' | translate }}">
|
||||
<mat-icon *ngIf="webSocketOpen">link</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!webSocketOpen"
|
||||
mat-icon-button
|
||||
(click)="forceWebSocketReconnection()"
|
||||
class="connection-status"
|
||||
matTooltip="{{ 'DISCONNECTED' | translate }}">
|
||||
<mat-icon *ngIf="!webSocketOpen">link_off</mat-icon>
|
||||
</button>
|
||||
@if (showLogin) {
|
||||
<button
|
||||
mat-button
|
||||
(click)="login()">
|
||||
{{ 'LOGIN' | translate }}
|
||||
</button>
|
||||
}
|
||||
@if (webSocketOpen) {
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="forceWebSocketReconnection()"
|
||||
class="connection-status"
|
||||
matTooltip="{{ 'CONNECTED_TO_OPENLP' | translate }}">
|
||||
<mat-icon>link</mat-icon>
|
||||
</button>
|
||||
}
|
||||
@else {
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="forceWebSocketReconnection()"
|
||||
class="connection-status"
|
||||
matTooltip="{{ 'DISCONNECTED' | translate }}">
|
||||
<mat-icon>link_off</mat-icon>
|
||||
</button>
|
||||
}
|
||||
<span class="app-version">v{{appVersion}}</span>
|
||||
</mat-toolbar-row>
|
||||
</mat-toolbar>
|
||||
@ -92,188 +104,214 @@
|
||||
</main>
|
||||
<!-- These two toolbars are for padding the content so the real toolbars do not block content when scrolled down -->
|
||||
<mat-toolbar class="toolbar-padding"></mat-toolbar>
|
||||
<mat-toolbar *ngIf="fastSwitching" class="toolbar-padding"></mat-toolbar>
|
||||
@if (fastSwitching) {
|
||||
<mat-toolbar class="toolbar-padding"></mat-toolbar>
|
||||
}
|
||||
<footer>
|
||||
<mat-toolbar class="footer">
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
(click)="previousItem()"
|
||||
matTooltip="{{ 'PREVIOUS_ITEM' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>first_page</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button (click)="previousItem()"
|
||||
matTooltip="{{ 'PREVIOUS_ITEM' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>first_page</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
(click)="nextItem()"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>last_page</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button (click)="nextItem()"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>last_page</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
(click)="previousSlide()"
|
||||
matTooltip="{{ 'PREVIOUS_SLIDE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_before</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button (click)="previousSlide()"
|
||||
matTooltip="{{ 'PREVIOUS_SLIDE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_before</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
(click)="nextSlide()"
|
||||
matTooltip="{{ 'NEXT_SLIDE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_next</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button (click)="nextSlide()"
|
||||
matTooltip="{{ 'NEXT_SLIDE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_next</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
#squashedDisplayButton
|
||||
(click)="openDisplayModeSelector()"
|
||||
class="squashed-display-button"
|
||||
matTooltip="{{ 'CHANGE_DISPLAY_MODE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon *ngIf="state.blank">videocam_off</mat-icon>
|
||||
<mat-icon *ngIf="state.theme">wallpaper</mat-icon>
|
||||
<mat-icon *ngIf="state.display">desktop_windows</mat-icon>
|
||||
<mat-icon *ngIf="state.live()">videocam</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button
|
||||
#squashedDisplayButton
|
||||
(click)="openDisplayModeSelector()"
|
||||
class="squashed-display-button"
|
||||
matTooltip="{{ 'CHANGE_DISPLAY_MODE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon *ngIf="state.blank">videocam_off</mat-icon>
|
||||
<mat-icon *ngIf="state.theme">wallpaper</mat-icon>
|
||||
<mat-icon *ngIf="state.display">desktop_windows</mat-icon>
|
||||
<mat-icon *ngIf="state.live()">videocam</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
(click)="blankDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.blank"
|
||||
[disabled]="state.blank"
|
||||
matTooltip="{{ 'SHOW_BLACK' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button (click)="blankDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.blank"
|
||||
[disabled]="state.blank"
|
||||
matTooltip="{{ 'SHOW_BLACK' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
(click)="themeDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.theme"
|
||||
[disabled]="state.theme"
|
||||
matTooltip="{{ 'SHOW_BACKGROUND' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button
|
||||
(click)="themeDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.theme"
|
||||
[disabled]="state.theme"
|
||||
matTooltip="{{ 'SHOW_BACKGROUND' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
(click)="desktopDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.display"
|
||||
matTooltip="{{ 'SHOW_DESKTOP' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button (click)="desktopDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.display"
|
||||
matTooltip="{{ 'SHOW_DESKTOP' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="bigDisplayButtons"
|
||||
mat-fab color="primary"
|
||||
(click)="showDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.live()"
|
||||
matTooltip="{{ 'SHOW_PRESENTATION' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!bigDisplayButtons"
|
||||
mat-icon-button (click)="showDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.live()"
|
||||
matTooltip="{{ 'SHOW_PRESENTATION' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
@if (bigDisplayButtons) {
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="previousItem()"
|
||||
matTooltip="{{ 'PREVIOUS_ITEM' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>first_page</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="nextItem()"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>last_page</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="previousSlide()"
|
||||
matTooltip="{{ 'PREVIOUS_SLIDE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_before</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="nextSlide()"
|
||||
matTooltip="{{ 'NEXT_SLIDE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_next</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
#squashedDisplayButton
|
||||
(click)="openDisplayModeSelector()"
|
||||
class="squashed-display-button"
|
||||
matTooltip="{{ 'CHANGE_DISPLAY_MODE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
@if (state.blank) {
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
}
|
||||
@else if (state.theme) {
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
}
|
||||
@else if (state.display) {
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
}
|
||||
@else if (state.live) {
|
||||
<mat-icon>videocam</mat-icon>
|
||||
}
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="blankDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.blank"
|
||||
[disabled]="state.blank"
|
||||
matTooltip="{{ 'SHOW_BLACK' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="themeDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.theme"
|
||||
[disabled]="state.theme"
|
||||
matTooltip="{{ 'SHOW_BACKGROUND' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="desktopDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.display"
|
||||
matTooltip="{{ 'SHOW_DESKTOP' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
(click)="showDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.live"
|
||||
matTooltip="{{ 'SHOW_PRESENTATION' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
}
|
||||
@else {
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="previousItem()"
|
||||
matTooltip="{{ 'PREVIOUS_ITEM' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>first_page</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="nextItem()"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>last_page</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="previousSlide()"
|
||||
matTooltip="{{ 'PREVIOUS_SLIDE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_before</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="nextSlide()"
|
||||
matTooltip="{{ 'NEXT_SLIDE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>navigate_next</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button
|
||||
#squashedDisplayButton
|
||||
(click)="openDisplayModeSelector()"
|
||||
class="squashed-display-button"
|
||||
matTooltip="{{ 'CHANGE_DISPLAY_MODE' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
@if (state.blank) {
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
}
|
||||
@else if (state.theme) {
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
}
|
||||
@else if (state.display) {
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
}
|
||||
@else if (state.live) {
|
||||
<mat-icon>videocam</mat-icon>
|
||||
}
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="blankDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.blank"
|
||||
[disabled]="state.blank"
|
||||
matTooltip="{{ 'SHOW_BLACK' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam_off</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="themeDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.theme"
|
||||
[disabled]="state.theme"
|
||||
matTooltip="{{ 'SHOW_BACKGROUND' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>wallpaper</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="desktopDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.display"
|
||||
matTooltip="{{ 'SHOW_DESKTOP' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>desktop_windows</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button (click)="showDisplay()"
|
||||
class="displayButton"
|
||||
[class.active]="state.display"
|
||||
[disabled]="state.live"
|
||||
matTooltip="{{ 'SHOW_PRESENTATION' | translate }}"
|
||||
matTooltipPosition="above">
|
||||
<mat-icon>videocam</mat-icon>
|
||||
</button>
|
||||
}
|
||||
</mat-toolbar>
|
||||
<nav *ngIf="fastSwitching"
|
||||
mat-tab-nav-bar mat-stretch-tabs
|
||||
class="fast-switcher"
|
||||
[tabPanel]="tabPanel">
|
||||
<a mat-tab-link
|
||||
routerLink="/service"
|
||||
routerLinkActive #serviceRoute="routerLinkActive"
|
||||
[active]="serviceRoute.isActive"><mat-icon>list</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/slides"
|
||||
routerLinkActive #slidesRoute="routerLinkActive"
|
||||
[active]="slidesRoute.isActive"><mat-icon>collections</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/alerts"
|
||||
routerLinkActive #alertsRoute="routerLinkActive"
|
||||
[active]="alertsRoute.isActive"><mat-icon>error</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/search"
|
||||
routerLinkActive #searchRoute="routerLinkActive"
|
||||
[active]="searchRoute.isActive"><mat-icon>search</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/themes"
|
||||
routerLinkActive #themesRoute="routerLinkActive"
|
||||
[active]="themesRoute.isActive"><mat-icon>image</mat-icon></a>
|
||||
</nav>
|
||||
@if (fastSwitching) {
|
||||
<nav
|
||||
mat-tab-nav-bar mat-stretch-tabs
|
||||
class="fast-switcher"
|
||||
[tabPanel]="tabPanel">
|
||||
<a mat-tab-link
|
||||
routerLink="/service"
|
||||
routerLinkActive #serviceRoute="routerLinkActive"
|
||||
[active]="serviceRoute.isActive"><mat-icon>list</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/slides"
|
||||
routerLinkActive #slidesRoute="routerLinkActive"
|
||||
[active]="slidesRoute.isActive"><mat-icon>collections</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/alerts"
|
||||
routerLinkActive #alertsRoute="routerLinkActive"
|
||||
[active]="alertsRoute.isActive"><mat-icon>error</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/search"
|
||||
routerLinkActive #searchRoute="routerLinkActive"
|
||||
[active]="searchRoute.isActive"><mat-icon>search</mat-icon></a>
|
||||
<a mat-tab-link
|
||||
routerLink="/themes"
|
||||
routerLinkActive #themesRoute="routerLinkActive"
|
||||
[active]="themesRoute.isActive"><mat-icon>image</mat-icon></a>
|
||||
</nav>
|
||||
}
|
||||
</footer>
|
||||
</mat-sidenav-content>
|
||||
</mat-sidenav-container>
|
||||
|
@ -20,7 +20,7 @@ import * as supportedBrowsers from '../assets/supportedBrowsers';
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: './app.component.html',
|
||||
styleUrls: ['./app.component.scss']
|
||||
styleUrl: './app.component.scss'
|
||||
})
|
||||
export class AppComponent implements OnInit {
|
||||
// Make DisplayMode enum visible to html code
|
||||
@ -39,7 +39,7 @@ export class AppComponent implements OnInit {
|
||||
constructor(private translateService: TranslateService, private pageTitleService: PageTitleService,
|
||||
private openlpService: OpenLPService, private dialog: MatDialog, private bottomSheet: MatBottomSheet,
|
||||
private windowRef: WindowRef, private shortcutsService: ShortcutsService, private settingsService: SettingsService) {
|
||||
this.pageTitleService.pageTitleChanged$.subscribe(pageTitle => this.pageTitle = pageTitle.toUpperCase());
|
||||
this.pageTitleService.pageTitleChanged$.subscribe(pageTitle => this.pageTitle = pageTitle);
|
||||
this.openlpService.stateChanged$.subscribe(item => this.state = item);
|
||||
this.openlpService.webSocketStateChanged$.subscribe(status => this.webSocketOpen = status === WebSocketStatus.Open);
|
||||
this.shortcutsService.shortcutsChanged$.subscribe(shortcuts => this.addShortcuts(shortcuts));
|
||||
|
@ -1,14 +1,16 @@
|
||||
<h3>{{ 'SEND_AN_ALERT' | translate }}</h3>
|
||||
<form #alertForm="ngForm">
|
||||
<mat-form-field>
|
||||
<input matInput
|
||||
<input
|
||||
matInput
|
||||
[(ngModel)]="alert"
|
||||
type="text"
|
||||
name="alert"
|
||||
placeholder="{{ 'ALERT' | translate }}"
|
||||
required>
|
||||
</mat-form-field>
|
||||
<button mat-raised-button color="primary"
|
||||
<button
|
||||
mat-raised-button color="primary"
|
||||
id="sendButton"
|
||||
[disabled]="!alertForm.form.valid"
|
||||
(click)="onSubmit(); alertForm.reset()">
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
@ -7,20 +8,31 @@ import { OpenLPService } from '../../openlp.service';
|
||||
@Component({
|
||||
selector: 'openlp-alert',
|
||||
templateUrl: './alert.component.html',
|
||||
styleUrls: ['./alert.component.scss'],
|
||||
styleUrl: './alert.component.scss',
|
||||
providers: [OpenLPService]
|
||||
})
|
||||
|
||||
export class AlertComponent {
|
||||
|
||||
public alert: string;
|
||||
public alertMessage: string;
|
||||
|
||||
constructor(private pageTitleService: PageTitleService, private openlpService: OpenLPService,
|
||||
private snackBar: MatSnackBar) {
|
||||
pageTitleService.changePageTitle('Alerts');
|
||||
constructor(
|
||||
private pageTitleService: PageTitleService,
|
||||
private openlpService: OpenLPService,
|
||||
private snackBar: MatSnackBar,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.get('ALERTS').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
this.translateService.get('ALERT_SUBMITTED').subscribe(res => {
|
||||
this.alertMessage = res;
|
||||
});
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
this.openlpService.showAlert(this.alert).subscribe(() => this.snackBar.open('Alert submitted', '', {duration: 2000}));
|
||||
this.openlpService.showAlert(this.alert).subscribe(
|
||||
() => this.snackBar.open(this.alertMessage, '', { duration: 2000 })
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<div
|
||||
class="slide song"
|
||||
[class.currentSlide]="active"
|
||||
[class.mat-headline-2]="active"
|
||||
[class.first]="!active && slide.first_slide_of_tag"
|
||||
[innerHTML]="chordproFormatted(slide)|chordpro">
|
||||
class="slide song"
|
||||
[class.currentSlide]="active"
|
||||
[class.mat-headline-2]="active"
|
||||
[class.first]="!active && slide.first_slide_of_tag"
|
||||
[innerHTML]="chordproFormatted(slide)|chordpro">
|
||||
</div>
|
@ -1,53 +1,74 @@
|
||||
<div
|
||||
class="overlay"
|
||||
[class.embedded]="embedded"
|
||||
[style.--openlp-stage-font-scale]="fontScale"
|
||||
>
|
||||
[style.--openlp-stage-font-scale]="fontScale">
|
||||
<div class="overlay-content">
|
||||
<div class="tags">
|
||||
<span *ngFor="let tag of tags" [class.active]="tag.active">{{ tag.text }}</span>
|
||||
@for (tag of tags; track tag) {
|
||||
<span [class.active]="tag.active">{{ tag.text }}</span>
|
||||
}
|
||||
</div>
|
||||
<div class="container">
|
||||
<app-chord-view-item
|
||||
[slide]="currentSlides[activeSlide]"
|
||||
[active]="true"
|
||||
*ngIf="currentSlides[activeSlide]?.chords; else elseSlideNoChords"
|
||||
></app-chord-view-item>
|
||||
<ng-template #elseSlideNoChords>
|
||||
<app-stage-view-item [slide]="currentSlides[activeSlide]" [active]="true"></app-stage-view-item>
|
||||
</ng-template>
|
||||
@if (currentSlides[activeSlide]?.chords) {
|
||||
<app-chord-view-item
|
||||
[slide]="currentSlides[activeSlide]"
|
||||
[active]="true">
|
||||
</app-chord-view-item>
|
||||
}
|
||||
@else {
|
||||
<app-stage-view-item
|
||||
[slide]="currentSlides[activeSlide]"
|
||||
[active]="true">
|
||||
</app-stage-view-item>
|
||||
}
|
||||
<div class="nextSlides">
|
||||
<ng-container *ngFor="let slide of nextSlides; trackBy: trackByIndex">
|
||||
<app-chord-view-item [slide]="slide" *ngIf="slide?.chords; else elseNextSlideNoChords"></app-chord-view-item>
|
||||
<ng-template #elseNextSlideNoChords>
|
||||
<app-stage-view-item [slide]="slide"></app-stage-view-item>
|
||||
</ng-template>
|
||||
</ng-container>
|
||||
@for (slide of nextSlides; track trackByIndex) {
|
||||
<ng-container>
|
||||
@if (slide?.chords) {
|
||||
<app-chord-view-item
|
||||
[slide]="slide">
|
||||
</app-chord-view-item>
|
||||
}
|
||||
@else {
|
||||
<app-stage-view-item
|
||||
[slide]="slide">
|
||||
</app-stage-view-item>
|
||||
}
|
||||
</ng-container>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toolbar">
|
||||
<a *ngIf="!embedded"
|
||||
mat-mini-fab color=""
|
||||
class="back-button"
|
||||
routerLink="/"
|
||||
matTooltip="{{ 'GO_BACK_TO_CONTROLLER' | translate }}">
|
||||
<mat-icon>arrow_back</mat-icon>
|
||||
</a>
|
||||
@if (!embedded) {
|
||||
<a
|
||||
mat-mini-fab color=""
|
||||
class="back-button"
|
||||
routerLink="/"
|
||||
matTooltip="{{ 'GO_BACK_TO_CONTROLLER' | translate }}">
|
||||
<mat-icon>arrow_back</mat-icon>
|
||||
</a>
|
||||
}
|
||||
<div class="transpose">
|
||||
<button mat-icon-button (click)="transposeDown()">
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="transposeDown()">
|
||||
<mat-icon>keyboard_arrow_down</mat-icon>
|
||||
</button>
|
||||
<span>{{ transposeLevel }}</span>
|
||||
<button mat-icon-button (click)="transposeUp()">
|
||||
<button
|
||||
mat-icon-button
|
||||
(click)="transposeUp()">
|
||||
<mat-icon>keyboard_arrow_up</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div *ngIf="!embedded && activeSlide+1 === currentSlides.length"
|
||||
class="next-service-item"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate }}">
|
||||
{{ nextServiceItemTitle }}
|
||||
</div>
|
||||
@if (!embedded && activeSlide+1 === currentSlides.length) {
|
||||
<div
|
||||
class="next-service-item"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate }}">
|
||||
{{ nextServiceItemTitle }}
|
||||
</div>
|
||||
}
|
||||
<div class="time">{{ (openlpService.getIsTwelveHourTime()) ? (time|date:'h:mm a') : (time|date:'HH:mm') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,84 +1,98 @@
|
||||
<mat-action-list *ngIf="!display.bigDisplayButtons">
|
||||
<button mat-list-item
|
||||
aria-labelledby="caption-blank"
|
||||
class="display-button"
|
||||
(click)="setMode(DisplayMode.Blank)"
|
||||
[disabled]="displayMode === DisplayMode.Blank">
|
||||
<mat-icon class="small-icon">videocam_off</mat-icon>
|
||||
<span id="caption-blank" class="caption">{{ 'SHOW_BLACK' | translate }}</span>
|
||||
</button>
|
||||
<button mat-list-item
|
||||
aria-labelledby="caption-theme"
|
||||
class="display-button"
|
||||
(click)="setMode(DisplayMode.Theme)"
|
||||
[disabled]="displayMode === DisplayMode.Theme">
|
||||
<mat-icon class="small-icon">wallpaper</mat-icon>
|
||||
<span id="caption-theme" class="caption">{{ 'SHOW_BACKGROUND' | translate }}</span>
|
||||
</button>
|
||||
<button mat-list-item
|
||||
aria-labelledby="caption-desktop"
|
||||
class="display-button"
|
||||
(click)="setMode(DisplayMode.Desktop)"
|
||||
[disabled]="displayMode === DisplayMode.Desktop">
|
||||
<mat-icon class="small-icon">desktop_windows</mat-icon>
|
||||
<span id="caption-desktop" class="caption">{{ 'SHOW_DESKTOP' | translate }}</span>
|
||||
</button>
|
||||
<button mat-list-item
|
||||
aria-labelledby="caption-presentation"
|
||||
class="display-button"
|
||||
(click)="setMode(DisplayMode.Presentation)"
|
||||
[disabled]="displayMode === DisplayMode.Presentation">
|
||||
<mat-icon class="small-icon">videocam</mat-icon>
|
||||
<span id="caption-presentation" class="caption">{{ 'SHOW_PRESENTATION' | translate }}</span>
|
||||
</button>
|
||||
</mat-action-list>
|
||||
<mat-grid-list *ngIf="display.bigDisplayButtons" cols="2" rowHeight="2:1">
|
||||
<mat-grid-tile>
|
||||
<button mat-fab color="primary"
|
||||
@if (display.bigDisplayButtons) {
|
||||
<mat-grid-list
|
||||
cols="2"
|
||||
rowHeight="2:1">
|
||||
<mat-grid-tile>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
aria-labelledby="caption-blank"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Blank)"
|
||||
[disabled]="display.displayMode === displayMode.Blank">
|
||||
<mat-icon class="big-icon">videocam_off</mat-icon>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-blank" class="caption">{{ 'SHOW_BLACK' | translate }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
aria-labelledby="caption-theme"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Theme)"
|
||||
[disabled]="display.displayMode === displayMode.Theme">
|
||||
<mat-icon class="big-icon">wallpaper</mat-icon>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-theme" class="caption">{{ 'SHOW_BACKGROUND' | translate }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
aria-labelledby="caption-desktop"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Desktop)"
|
||||
[disabled]="display.displayMode === displayMode.Desktop">
|
||||
<mat-icon class="big-icon">desktop_windows</mat-icon>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-desktop" class="caption">{{ 'SHOW_DESKTOP' | translate }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button
|
||||
mat-fab color="primary"
|
||||
aria-labelledby="caption-presentation"
|
||||
class="display-button"
|
||||
(click)="setMode(displayMode.Presentation)"
|
||||
[disabled]="display.displayMode === displayMode.Presentation">
|
||||
<mat-icon class="big-icon">videocam</mat-icon>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-presentation" class="caption">{{ 'SHOW_PRESENTATION' | translate }}</div>
|
||||
</mat-grid-tile>
|
||||
</mat-grid-list>
|
||||
}
|
||||
@else {
|
||||
<mat-action-list>
|
||||
<button
|
||||
mat-list-item
|
||||
aria-labelledby="caption-blank"
|
||||
class="display-button"
|
||||
(click)="setMode(DisplayMode.Blank)"
|
||||
[disabled]="displayMode === DisplayMode.Blank">
|
||||
<mat-icon class="big-icon">videocam_off</mat-icon>
|
||||
(click)="setMode(displayMode.Blank)"
|
||||
[disabled]="display.displayMode === displayMode.Blank">
|
||||
<mat-icon class="small-icon">videocam_off</mat-icon>
|
||||
<span id="caption-blank" class="caption">{{ 'SHOW_BLACK' | translate }}</span>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-blank" class="caption">{{ 'SHOW_BLACK' | translate }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button mat-fab color="primary"
|
||||
<button
|
||||
mat-list-item
|
||||
aria-labelledby="caption-theme"
|
||||
class="display-button"
|
||||
(click)="setMode(DisplayMode.Theme)"
|
||||
[disabled]="displayMode === DisplayMode.Theme">
|
||||
<mat-icon class="big-icon">wallpaper</mat-icon>
|
||||
(click)="setMode(displayMode.Theme)"
|
||||
[disabled]="display.displayMode === displayMode.Theme">
|
||||
<mat-icon class="small-icon">wallpaper</mat-icon>
|
||||
<span id="caption-theme" class="caption">{{ 'SHOW_BACKGROUND' | translate }}</span>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-theme" class="caption">{{ 'SHOW_BACKGROUND' | translate }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button mat-fab color="primary"
|
||||
<button
|
||||
mat-list-item
|
||||
aria-labelledby="caption-desktop"
|
||||
class="display-button"
|
||||
(click)="setMode(DisplayMode.Desktop)"
|
||||
[disabled]="displayMode === DisplayMode.Desktop">
|
||||
<mat-icon class="big-icon">desktop_windows</mat-icon>
|
||||
(click)="setMode(displayMode.Desktop)"
|
||||
[disabled]="display.displayMode === displayMode.Desktop">
|
||||
<mat-icon class="small-icon">desktop_windows</mat-icon>
|
||||
<span id="caption-desktop" class="caption">{{ 'SHOW_DESKTOP' | translate }}</span>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-desktop" class="caption">{{ 'SHOW_DESKTOP' | translate }}</div>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<button mat-fab color="primary"
|
||||
<button
|
||||
mat-list-item
|
||||
aria-labelledby="caption-presentation"
|
||||
class="display-button"
|
||||
(click)="setMode(DisplayMode.Presentation)"
|
||||
[disabled]="displayMode === DisplayMode.Presentation">
|
||||
<mat-icon class="big-icon">videocam</mat-icon>
|
||||
(click)="setMode(displayMode.Presentation)"
|
||||
[disabled]="display.displayMode === displayMode.Presentation">
|
||||
<mat-icon class="small-icon">videocam</mat-icon>
|
||||
<span id="caption-presentation" class="caption">{{ 'SHOW_PRESENTATION' | translate }}</span>
|
||||
</button>
|
||||
</mat-grid-tile>
|
||||
<mat-grid-tile>
|
||||
<div id="caption-presentation" class="caption">{{ 'SHOW_PRESENTATION' | translate }}</div>
|
||||
</mat-grid-tile>
|
||||
</mat-grid-list>
|
||||
</mat-action-list>
|
||||
}
|
||||
|
@ -5,11 +5,11 @@ import { Display, DisplayMode } from 'src/app/responses';
|
||||
@Component({
|
||||
selector: 'openlp-display-mode-sheet',
|
||||
templateUrl: 'display-mode-selector.component.html',
|
||||
styleUrls: ['./display-mode-selector.component.scss']
|
||||
styleUrl: './display-mode-selector.component.scss'
|
||||
})
|
||||
export class DisplayModeSelectorComponent {
|
||||
// Make DisplayMode enum visible in HTML template.
|
||||
DisplayMode = DisplayMode;
|
||||
displayMode = DisplayMode;
|
||||
|
||||
constructor(
|
||||
private bottomSheetRef: MatBottomSheetRef<DisplayModeSelectorComponent>,
|
||||
|
@ -3,14 +3,16 @@
|
||||
<form #loginForm="ngForm">
|
||||
<div mat-dialog-content>
|
||||
<mat-form-field>
|
||||
<input matInput
|
||||
<input
|
||||
matInput
|
||||
placeholder="{{ 'USER_NAME' | translate }}"
|
||||
[(ngModel)]="username"
|
||||
name="username"
|
||||
required>
|
||||
</mat-form-field>
|
||||
<mat-form-field>
|
||||
<input matInput
|
||||
<input
|
||||
matInput
|
||||
placeholder="{{ 'PASSWORD' | translate }}"
|
||||
type="password"
|
||||
[(ngModel)]="password"
|
||||
|
@ -6,7 +6,7 @@ import { OpenLPService } from '../../openlp.service';
|
||||
@Component({
|
||||
selector: 'app-login',
|
||||
templateUrl: './login.component.html',
|
||||
styleUrls: ['./login.component.scss']
|
||||
styleUrl: './login.component.scss'
|
||||
})
|
||||
export class LoginComponent implements OnInit {
|
||||
username: string;
|
||||
|
@ -1,6 +1,9 @@
|
||||
<div class="lower-third">
|
||||
<div class="slide">
|
||||
<div class="slide-item" [style.font-size]="fontSize" [style.font-family]="fontFamily">
|
||||
<div
|
||||
class="slide-item"
|
||||
[style.font-size]="fontSize"
|
||||
[style.font-family]="fontFamily">
|
||||
{{currentSlides[activeSlide]?.text}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -8,7 +8,7 @@ import { ServiceItem, Slide } from '../../responses';
|
||||
@Component({
|
||||
selector: 'app-lower-third',
|
||||
templateUrl: './lower-third.component.html',
|
||||
styleUrls: ['./lower-third.component.scss'],
|
||||
styleUrl: './lower-third.component.scss',
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class LowerThirdComponent implements OnInit, OnDestroy {
|
||||
|
@ -1,8 +1,16 @@
|
||||
<mat-form-field >
|
||||
<mat-select [(ngModel)]="selectedSearchOption" (selectionChange)="setSearchOption($event)" name="selectedSearchOption" [placeholder]="searchOptionsTitle">
|
||||
<mat-option *ngFor="let option of searchOptions" name="searchOptions" [value]="option">
|
||||
{{option}}
|
||||
</mat-option>
|
||||
<mat-select
|
||||
[(ngModel)]="selectedSearchOption"
|
||||
(selectionChange)="setSearchOption($event)"
|
||||
name="selectedSearchOption"
|
||||
[placeholder]="searchOptionsTitle">
|
||||
@for (option of searchOptions; track option) {
|
||||
<mat-option
|
||||
name="searchOptions"
|
||||
[value]="option">
|
||||
{{ option }}
|
||||
</mat-option>
|
||||
}
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<br>
|
||||
|
@ -5,7 +5,7 @@ import { OpenLPService } from '../../../openlp.service';
|
||||
@Component({
|
||||
selector: 'openlp-search-options',
|
||||
templateUrl: './search-options.component.html',
|
||||
styleUrls: ['./search-options.component.scss'],
|
||||
styleUrl: './search-options.component.scss',
|
||||
providers: [OpenLPService]
|
||||
})
|
||||
export class SearchOptionsComponent {
|
||||
|
@ -1,10 +1,18 @@
|
||||
<h3>Search</h3>
|
||||
<form #searchForm="ngForm">
|
||||
<mat-form-field>
|
||||
<mat-select [(ngModel)]="selectedPlugin" (selectionChange)="onPluginChange()" name="selectedPlugin" placeholder="Search for:">
|
||||
<mat-option *ngFor="let plugin of searchPlugins" name="searchPlugins" [value]="plugin.key">
|
||||
{{plugin.name}}
|
||||
</mat-option>
|
||||
<mat-select
|
||||
[(ngModel)]="selectedPlugin"
|
||||
(selectionChange)="onPluginChange()"
|
||||
name="selectedPlugin"
|
||||
placeholder="Search for:">
|
||||
@for (plugin of searchPlugins; track plugin.name) {
|
||||
<mat-option
|
||||
name="searchPlugins"
|
||||
[value]="plugin.key">
|
||||
{{ plugin.name }}
|
||||
</mat-option>
|
||||
}
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<br>
|
||||
@ -12,36 +20,53 @@
|
||||
<openlp-search-options></openlp-search-options>
|
||||
</div>
|
||||
<mat-form-field>
|
||||
<input matInput [(ngModel)]="searchText" name="searchText" placeholder="{{ 'SEARCH_TEXT' | translate }}" required>
|
||||
<input
|
||||
matInput
|
||||
[(ngModel)]="searchText"
|
||||
name="searchText"
|
||||
placeholder="{{ 'SEARCH_TEXT' | translate }}"
|
||||
required>
|
||||
</mat-form-field>
|
||||
<br>
|
||||
<button mat-raised-button id="searchButton"
|
||||
<button
|
||||
mat-raised-button
|
||||
id="searchButton"
|
||||
color="primary"
|
||||
[disabled]="!searchForm.form.valid"
|
||||
(click)="onSubmit()">
|
||||
{{ 'SEARCH' | translate }}
|
||||
</button>
|
||||
</form>
|
||||
<div *ngIf="searchResults">
|
||||
<h3>{{ 'SEARCH_RESULTS' | translate }}:</h3>
|
||||
<div *ngIf="!searchResults.length">
|
||||
{{ 'NO_SEARCH_RESULTS' | translate }}...
|
||||
@if (searchResults) {
|
||||
<div>
|
||||
<h3>{{ 'SEARCH_RESULTS' | translate }}:</h3>
|
||||
@if (searchResults.length) {
|
||||
<table>
|
||||
@for (item of searchResults; track item) {
|
||||
<tr>
|
||||
<td>{{ item[1] }}</td>
|
||||
<td>
|
||||
<button
|
||||
mat-button color="primary"
|
||||
(click)="addToService(item[0])">
|
||||
{{ 'ADD_TO_SERVICE' | translate }}
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button
|
||||
mat-button color="accent"
|
||||
(click)="sendLive(item[0])">
|
||||
{{ 'SEND_LIVE' | translate }}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
}
|
||||
@else {
|
||||
<div>
|
||||
{{ 'NO_SEARCH_RESULTS' | translate }}...
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<table *ngIf="searchResults.length">
|
||||
<tr *ngFor="let item of searchResults">
|
||||
<td>{{item[1]}}</td>
|
||||
<td>
|
||||
<button mat-button color="primary"
|
||||
(click)="addToService(item[0])">
|
||||
{{ 'ADD_TO_SERVICE' | translate }}
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button mat-button color="accent"
|
||||
(click)="sendLive(item[0])">
|
||||
{{ 'SEND_LIVE' | translate }}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
@ -8,7 +9,7 @@ import { SearchOptionsComponent } from './search-options/search-options.componen
|
||||
@Component({
|
||||
selector: 'openlp-search',
|
||||
templateUrl: './search.component.html',
|
||||
styleUrls: ['./search.component.scss'],
|
||||
styleUrl: './search.component.scss',
|
||||
providers: [OpenLPService]
|
||||
})
|
||||
export class SearchComponent implements OnInit, AfterViewInit {
|
||||
@ -20,9 +21,14 @@ export class SearchComponent implements OnInit, AfterViewInit {
|
||||
public displaySearchOptions = false;
|
||||
@ViewChild(SearchOptionsComponent, {static: false}) searchOptions: SearchOptionsComponent;
|
||||
|
||||
constructor(private pageTitleService: PageTitleService, private openlpService: OpenLPService,
|
||||
private cdr: ChangeDetectorRef) {
|
||||
pageTitleService.changePageTitle('Search');
|
||||
constructor(
|
||||
private pageTitleService: PageTitleService,
|
||||
private openlpService: OpenLPService,
|
||||
private cdr: ChangeDetectorRef,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.get('SEARCH').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
|
@ -1,4 +1,7 @@
|
||||
<mat-card (click)="onItemSelected(item)" class="service-item no-select" [class.selected]="selected">
|
||||
<mat-card
|
||||
(click)="onItemSelected(item)"
|
||||
class="service-item no-select"
|
||||
[class.selected]="selected">
|
||||
<mat-card-content>
|
||||
<mat-icon>{{ getIcon(item) }}</mat-icon> {{ item.title }}
|
||||
</mat-card-content>
|
||||
|
@ -5,7 +5,7 @@ import { ServiceItem } from '../../../responses';
|
||||
@Component({
|
||||
selector: 'openlp-service-item',
|
||||
templateUrl: './service-item.component.html',
|
||||
styleUrls: ['./service-item.component.scss'],
|
||||
styleUrl: './service-item.component.scss',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush
|
||||
})
|
||||
|
||||
|
@ -1,22 +1,29 @@
|
||||
<ng-container *ngIf="items?.length; else noServiceItems">
|
||||
<openlp-service-item
|
||||
*ngFor="let item of items"
|
||||
[item]="item"
|
||||
[selected]="item.selected"
|
||||
(selectItem)="onItemSelected($event)"
|
||||
[tabindex]="item.id"></openlp-service-item>
|
||||
</ng-container>
|
||||
<ng-template #noServiceItems>
|
||||
<div class="no-items" *ngIf="!loading">
|
||||
@if (items?.length) {
|
||||
<ng-container>
|
||||
@for (item of items; track item) {
|
||||
<openlp-service-item
|
||||
[item]="item"
|
||||
[selected]="item.selected"
|
||||
(selectItem)="onItemSelected($event)"
|
||||
[tabindex]="item.id">
|
||||
</openlp-service-item>
|
||||
}
|
||||
</ng-container>
|
||||
}
|
||||
@else if (!loading) {
|
||||
<div class="no-items">
|
||||
<div class="no-items-title">
|
||||
<span class="material-icons icon">info</span>
|
||||
{{ 'NO_SERVICE_ITEMS' | translate }}.
|
||||
</div>
|
||||
<div class="no-items-actions">
|
||||
<a routerLink="/search" mat-stroked-button color="primary" size="small">
|
||||
<a
|
||||
routerLink="/search"
|
||||
mat-stroked-button color="primary"
|
||||
size="small">
|
||||
<span class="material-icons">add</span>
|
||||
{{ 'ADD_ITEM' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
}
|
||||
|
@ -1 +1,3 @@
|
||||
<openlp-service-list (itemSelected)="this.onItemSelected($event)"></openlp-service-list>
|
||||
<openlp-service-list
|
||||
(itemSelected)="this.onItemSelected($event)">
|
||||
</openlp-service-list>
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
@ -8,7 +9,7 @@ import { ServiceItem } from '../../responses';
|
||||
@Component({
|
||||
selector: 'openlp-service',
|
||||
templateUrl: './service.component.html',
|
||||
styleUrls: ['./service.component.scss'],
|
||||
styleUrl: './service.component.scss',
|
||||
})
|
||||
|
||||
export class ServiceComponent {
|
||||
@ -19,8 +20,13 @@ export class ServiceComponent {
|
||||
}
|
||||
}
|
||||
|
||||
constructor(protected pageTitleService: PageTitleService, protected openlpService: OpenLPService,
|
||||
protected router: Router) {
|
||||
pageTitleService.changePageTitle('Service');
|
||||
constructor(
|
||||
protected pageTitleService: PageTitleService,
|
||||
protected openlpService: OpenLPService,
|
||||
protected router: Router,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.get('SERVICE').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,64 +1,70 @@
|
||||
<div class="settings-panel">
|
||||
<mat-card>
|
||||
<mat-card-header>
|
||||
{{ 'USER_INTERFACE' | translate }}
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<div class="settings-item">
|
||||
<mat-slide-toggle
|
||||
color="primary"
|
||||
[checked]="settings.fastSwitching"
|
||||
(change)="setSetting('fastSwitching', $event.checked)">
|
||||
{{ 'ENABLE_FAST_SWITCHING_PANEL' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
<div class="settings-item">
|
||||
<mat-slide-toggle
|
||||
color="primary"
|
||||
[checked]="settings.bigDisplayButtons"
|
||||
(change)="setSetting('bigDisplayButtons', $event.checked)">
|
||||
{{ 'ENABLE_BIG_DISPLAY_BUTTONS' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
<mat-card>
|
||||
<mat-card-header>
|
||||
{{ 'USER_INTERFACE' | translate }}
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<div class="settings-item">
|
||||
<mat-slide-toggle
|
||||
color="primary"
|
||||
[checked]="settings.fastSwitching"
|
||||
(change)="setSetting('fastSwitching', $event.checked)">
|
||||
{{ 'ENABLE_FAST_SWITCHING_PANEL' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
<div class="settings-item">
|
||||
<mat-slide-toggle
|
||||
color="primary"
|
||||
[checked]="settings.bigDisplayButtons"
|
||||
(change)="setSetting('bigDisplayButtons', $event.checked)">
|
||||
{{ 'ENABLE_BIG_DISPLAY_BUTTONS' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card>
|
||||
<mat-card-header>
|
||||
{{ 'STAGE_AND_CHORDS_APPEARANCE' | translate }}
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<mat-tab-group>
|
||||
<mat-tab label="{{ 'STAGE' | translate }}">
|
||||
<ng-template matTabContent>
|
||||
<ng-container>
|
||||
<openlp-stage-chord-preview stageType="stage"></openlp-stage-chord-preview>
|
||||
<ng-container *ngTemplateOutlet="stageSettings; context: {prefix: 'stage'}"></ng-container>
|
||||
</ng-container>
|
||||
</ng-template>
|
||||
</mat-tab>
|
||||
<mat-tab label="{{ 'CHORDS' | translate }}">
|
||||
<ng-template matTabContent>
|
||||
<openlp-stage-chord-preview stageType="chords"></openlp-stage-chord-preview>
|
||||
<ng-container *ngTemplateOutlet="stageSettings; context: {prefix: 'chords'}"></ng-container>
|
||||
</ng-template>
|
||||
</mat-tab>
|
||||
</mat-tab-group>
|
||||
</mat-card-content>
|
||||
<mat-card-header>
|
||||
{{ 'STAGE_AND_CHORDS_APPEARANCE' | translate }}
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<mat-tab-group>
|
||||
<mat-tab label="{{ 'STAGE' | translate }}">
|
||||
<ng-template matTabContent>
|
||||
<ng-container>
|
||||
<openlp-stage-chord-preview stageType="stage">
|
||||
</openlp-stage-chord-preview>
|
||||
<ng-container *ngTemplateOutlet="stageSettings; context: {prefix: 'stage'}">
|
||||
</ng-container>
|
||||
</ng-container>
|
||||
</ng-template>
|
||||
</mat-tab>
|
||||
<mat-tab label="{{ 'CHORDS' | translate }}">
|
||||
<ng-template matTabContent>
|
||||
<openlp-stage-chord-preview stageType="chords">
|
||||
</openlp-stage-chord-preview>
|
||||
<ng-container *ngTemplateOutlet="stageSettings; context: {prefix: 'chords'}">
|
||||
</ng-container>
|
||||
</ng-template>
|
||||
</mat-tab>
|
||||
</mat-tab-group>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
<ng-template #stageSettings let-prefix="prefix">
|
||||
<div class="stage-settings">
|
||||
<div class="settings-item">
|
||||
<label>{{ 'FONT_SCALE' | translate }}: {{settings[prefix + 'FontScale'] ?? 100}}%</label>
|
||||
<mat-slider
|
||||
min="25"
|
||||
max="200"
|
||||
step="6.25">
|
||||
<input
|
||||
matSliderThumb
|
||||
[value]="settings[prefix + 'FontScale']"
|
||||
(valueChange)="setSetting(prefix + 'FontScale', $event)">
|
||||
</mat-slider>
|
||||
</div>
|
||||
<ng-template
|
||||
#stageSettings
|
||||
let-prefix="prefix">
|
||||
<div class="stage-settings">
|
||||
<div class="settings-item">
|
||||
<label>{{ 'FONT_SCALE' | translate }}: {{settings[prefix + 'FontScale'] ?? 100}}%</label>
|
||||
<mat-slider
|
||||
min="25"
|
||||
max="200"
|
||||
step="6.25">
|
||||
<input
|
||||
matSliderThumb
|
||||
[value]="settings[prefix + 'FontScale']"
|
||||
(valueChange)="setSetting(prefix + 'FontScale', $event)">
|
||||
</mat-slider>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { Component, OnDestroy } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
@ -6,17 +7,19 @@ import { SettingsProperties, SettingsPropertiesItem, SettingsService } from '../
|
||||
|
||||
@Component({
|
||||
selector: 'openlp-settings',
|
||||
templateUrl: `./settings.component.html`,
|
||||
styleUrls: [`./settings.component.scss`]
|
||||
templateUrl: './settings.component.html',
|
||||
styleUrl: './settings.component.scss'
|
||||
})
|
||||
export class SettingsComponent implements OnDestroy {
|
||||
constructor(
|
||||
protected pageTitleService: PageTitleService,
|
||||
protected openlpService: OpenLPService,
|
||||
protected settingsService: SettingsService,
|
||||
) {
|
||||
private translateService: TranslateService) {
|
||||
this.settingsSubscription$ = settingsService.settingChanged$.subscribe(this._settingChanged);
|
||||
pageTitleService.changePageTitle('Settings');
|
||||
this.translateService.get('SETTINGS').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
|
||||
protected settingsSubscription$: Subscription;
|
||||
@ -36,5 +39,4 @@ export class SettingsComponent implements OnDestroy {
|
||||
ngOnDestroy(): void {
|
||||
this.settingsSubscription$.unsubscribe();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,14 +1,18 @@
|
||||
<div class="stage-preview-container" #stageViewContainer>
|
||||
<div
|
||||
class="stage-preview-container"
|
||||
#stageViewContainer>
|
||||
@if (stageType === 'stage') {
|
||||
<app-stage-view
|
||||
#stageView
|
||||
*ngIf="stageType === 'stage'"
|
||||
[embedded]="true"
|
||||
[style.--openlp-stage-font-scale]="fontScale"
|
||||
></app-stage-view>
|
||||
#stageView
|
||||
[embedded]="true"
|
||||
[style.--openlp-stage-font-scale]="fontScale">
|
||||
</app-stage-view>
|
||||
}
|
||||
@else if (stageType === 'chords') {
|
||||
<app-chord-view
|
||||
#chordsView
|
||||
*ngIf="stageType === 'chords'"
|
||||
[embedded]="true"
|
||||
[style.--openlp-stage-font-scale]="fontScale"
|
||||
></app-chord-view>
|
||||
#chordsView
|
||||
[embedded]="true"
|
||||
[style.--openlp-stage-font-scale]="fontScale">
|
||||
</app-chord-view>
|
||||
}
|
||||
</div>
|
||||
|
@ -17,7 +17,7 @@ import { SettingsProperties, SettingsService } from 'src/app/settings.service';
|
||||
@Component({
|
||||
selector: 'openlp-stage-chord-preview',
|
||||
templateUrl: './stage-chord-preview.component.html',
|
||||
styleUrls: ['./stage-chord-preview.component.scss'],
|
||||
styleUrl: './stage-chord-preview.component.scss',
|
||||
})
|
||||
export class StageChordPreviewComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {
|
||||
constructor(
|
||||
|
@ -1,14 +1,20 @@
|
||||
<mat-card class="slide no-select" mat-list-item (click)="onSlideSelected(slide)" [class.selected]="selected">
|
||||
<mat-card
|
||||
class="slide no-select"
|
||||
mat-list-item
|
||||
(click)="onSlideSelected(slide)"
|
||||
[class.selected]="selected">
|
||||
<mat-card-content>
|
||||
<div class="verse-tag">{{ slide?.tag }}</div>
|
||||
<div *ngIf="slide?.img; else onlySlideText" class="verse-img-container">
|
||||
<img src="{{ slide?.img }}" />
|
||||
<div class="img-verse-text">
|
||||
{{ slide?.text }}
|
||||
@if (slide?.img) {
|
||||
<div class="verse-img-container">
|
||||
<img src="{{ slide?.img }}" />
|
||||
<div class="img-verse-text">
|
||||
{{ slide?.text }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ng-template #onlySlideText>
|
||||
}
|
||||
@else {
|
||||
<div class="verse-text">{{ slide?.text }}</div>
|
||||
</ng-template>
|
||||
}
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
@ -4,7 +4,7 @@ import { Slide } from '../../../responses';
|
||||
@Component({
|
||||
selector: 'openlp-slide-item',
|
||||
templateUrl: './slide-item.component.html',
|
||||
styleUrls: ['./slide-item.component.scss'],
|
||||
styleUrl: './slide-item.component.scss',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush
|
||||
})
|
||||
|
||||
|
@ -1,23 +1,32 @@
|
||||
<ng-container *ngIf="slides?.length; else noSlideItems">
|
||||
<openlp-slide-item
|
||||
*ngFor="let slide of slides; let index = index"
|
||||
[slide]="slide"
|
||||
[tabindex]="counter"
|
||||
[selected]="slide.selected"
|
||||
(selectSlide)="onSlideSelected($event, index)"
|
||||
></openlp-slide-item>
|
||||
</ng-container>
|
||||
<ng-template #noSlideItems>
|
||||
<div class="no-items" *ngIf="!loading">
|
||||
<div class="no-items-title">
|
||||
<span class="material-icons icon">info</span>
|
||||
{{ 'NO_SLIDE_ITEMS' | translate }}.
|
||||
@if (slides?.length) {
|
||||
<ng-container>
|
||||
@for (slide of slides; track slide; let index = $index) {
|
||||
<openlp-slide-item
|
||||
[slide]="slide"
|
||||
[tabindex]="index"
|
||||
[selected]="slide.selected"
|
||||
(selectSlide)="onSlideSelected($event, index)">
|
||||
</openlp-slide-item>
|
||||
}
|
||||
</ng-container>
|
||||
}
|
||||
@else {
|
||||
@if (!loading) {
|
||||
<div class="no-items">
|
||||
<div class="no-items-title">
|
||||
<span class="material-icons icon">info</span>
|
||||
{{ 'NO_SLIDE_ITEMS' | translate }}.
|
||||
</div>
|
||||
<div class="no-items-actions">
|
||||
<a
|
||||
routerLink="/search"
|
||||
mat-stroked-button
|
||||
color="primary"
|
||||
size="small">
|
||||
<span class="material-icons">add</span>
|
||||
{{ 'ADD_ITEM_TO_SERVICE' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="no-items-actions">
|
||||
<a routerLink="/search" mat-stroked-button color="primary" size="small">
|
||||
<span class="material-icons">add</span>
|
||||
{{ 'ADD_ITEM_TO_SERVICE' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
}
|
||||
}
|
||||
|
@ -1 +1,2 @@
|
||||
<openlp-slide-list (slideSelected)="onSlideSelected($event)"></openlp-slide-list>
|
||||
<openlp-slide-list (slideSelected)="onSlideSelected($event)">
|
||||
</openlp-slide-list>
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
@ -7,12 +8,17 @@ import { SlideListItem } from './slide-list/slide-list.component';
|
||||
@Component({
|
||||
selector: 'openlp-slides',
|
||||
templateUrl: './slides.component.html',
|
||||
styleUrls: ['./slides.component.scss'],
|
||||
styleUrl: './slides.component.scss',
|
||||
})
|
||||
|
||||
export class SlidesComponent {
|
||||
constructor(protected pageTitleService: PageTitleService, protected openlpService: OpenLPService) {
|
||||
pageTitleService.changePageTitle('Slides');
|
||||
constructor(
|
||||
protected pageTitleService: PageTitleService,
|
||||
protected openlpService: OpenLPService,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.get('SLIDES').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
|
||||
onSlideSelected(item: SlideListItem) {
|
||||
|
@ -1,14 +1,21 @@
|
||||
<div
|
||||
class="slide"
|
||||
[class.mat-headline-2]="active"
|
||||
[class.currentSlide]="active"
|
||||
[class.mat-headline-4]="!active"
|
||||
[class.first]="!active && slide.first_slide_of_tag">
|
||||
<ng-container *ngIf="!(slide?.img); else elseImage">
|
||||
{{slide?.text}}
|
||||
class="slide"
|
||||
[class.mat-headline-2]="active"
|
||||
[class.currentSlide]="active"
|
||||
[class.mat-headline-4]="!active"
|
||||
[class.first]="!active && slide.first_slide_of_tag">
|
||||
@if (slide?.img) {
|
||||
<img
|
||||
src="{{slide?.img}}"
|
||||
[class.active-slide-img]="active"
|
||||
[class.next-slides-img]="!active"/>
|
||||
<div
|
||||
[class.active-slide-img-text]="active"
|
||||
[class.next-slides-text]="!active">{{ slide?.text }}</div>
|
||||
}
|
||||
@else {
|
||||
<ng-container>
|
||||
{{ slide?.text }}
|
||||
</ng-container>
|
||||
<ng-template #elseImage>
|
||||
<img src="{{slide?.img}}" [class.active-slide-img]="active" [class.next-slides-img]="!active"/>
|
||||
<div [class.active-slide-img-text]="active" [class.next-slides-text]="!active">{{ slide?.text }}</div>
|
||||
</ng-template>
|
||||
}
|
||||
</div>
|
||||
|
@ -4,49 +4,67 @@
|
||||
[style.--openlp-stage-font-scale]="fontScale">
|
||||
<div class="overlay-content">
|
||||
<div class="tags">
|
||||
<span *ngFor="let tag of tags" [class.active]="tag.active">{{ tag.text }}</span>
|
||||
@for (tag of tags; track tag) {
|
||||
<span [class.active]="tag.active">{{ tag.text }}</span>
|
||||
}
|
||||
</div>
|
||||
<div class="container">
|
||||
<app-stage-view-item [slide]="currentSlides[activeSlide]" [active]="true"></app-stage-view-item>
|
||||
<app-stage-view-item
|
||||
[slide]="currentSlides[activeSlide]"
|
||||
[active]="true">
|
||||
</app-stage-view-item>
|
||||
<div class="nextSlides">
|
||||
<app-stage-view-item [slide]="slide" *ngFor="let slide of nextSlides; trackBy: trackByIndex"></app-stage-view-item>
|
||||
@for (slide of nextSlides; track trackByIndex) {
|
||||
<app-stage-view-item [slide]="slide">
|
||||
</app-stage-view-item>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toolbar">
|
||||
<a *ngIf="!embedded"
|
||||
class="back-button"
|
||||
mat-mini-fab color=""
|
||||
routerLink="/"
|
||||
matTooltip="{{ 'GO_BACK_TO_CONTROLLER' | translate }}">
|
||||
<mat-icon>arrow_back</mat-icon>
|
||||
</a>
|
||||
<button *ngIf="showNotes"
|
||||
mat-mini-fab
|
||||
class="show-notes"
|
||||
matTooltip="{{ 'HIDE_NOTES' | translate }}"
|
||||
[color]="primary"
|
||||
[class.show-notes-disabled]="false"
|
||||
(click)="showNotes = false">
|
||||
<mat-icon>sticky_note_2</mat-icon>
|
||||
</button>
|
||||
<button *ngIf="!showNotes"
|
||||
mat-mini-fab
|
||||
class="show-notes"
|
||||
matTooltip="{{ 'SHOW_NOTES' | translate }}"
|
||||
[color]=""
|
||||
[class.show-notes-disabled]="true"
|
||||
(click)="showNotes = true">
|
||||
<mat-icon>sticky_note_2</mat-icon>
|
||||
</button>
|
||||
<div *ngIf="!embedded && activeSlide+1 === currentSlides.length"
|
||||
class="next-service-item"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate }}">
|
||||
{{ nextServiceItemTitle }}
|
||||
</div>
|
||||
@if (!embedded) {
|
||||
<a
|
||||
class="back-button"
|
||||
mat-mini-fab color=""
|
||||
routerLink="/"
|
||||
matTooltip="{{ 'GO_BACK_TO_CONTROLLER' | translate }}">
|
||||
<mat-icon>arrow_back</mat-icon>
|
||||
</a>
|
||||
}
|
||||
@if (showNotes) {
|
||||
<button
|
||||
mat-mini-fab
|
||||
class="show-notes"
|
||||
matTooltip="{{ 'HIDE_NOTES' | translate }}"
|
||||
color="primary"
|
||||
[class.show-notes-disabled]="false"
|
||||
(click)="showNotes = false">
|
||||
<mat-icon>sticky_note_2</mat-icon>
|
||||
</button>
|
||||
}
|
||||
@else {
|
||||
<button
|
||||
mat-mini-fab
|
||||
class="show-notes"
|
||||
matTooltip="{{ 'SHOW_NOTES' | translate }}"
|
||||
color=""
|
||||
[class.show-notes-disabled]="true"
|
||||
(click)="showNotes = true">
|
||||
<mat-icon>sticky_note_2</mat-icon>
|
||||
</button>
|
||||
}
|
||||
@if (!embedded && activeSlide+1 === currentSlides.length) {
|
||||
<div
|
||||
class="next-service-item"
|
||||
matTooltip="{{ 'NEXT_ITEM' | translate }}">
|
||||
{{ nextServiceItemTitle }}
|
||||
</div>
|
||||
}
|
||||
<div class="time">{{ (openlpService.getIsTwelveHourTime()) ? (time|date:'h:mm a') : (time|date:'HH:mm') }}</div>
|
||||
</div>
|
||||
<div class="sidebar" *ngIf="(showNotes || embedded) && notes">
|
||||
<div class="notes" [innerHTML]="notes|nl2br"></div>
|
||||
</div>
|
||||
@if ((showNotes || embedded) && notes) {
|
||||
<div class="sidebar">
|
||||
<div class="notes" [innerHTML]="notes|nl2br"></div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
@ -97,7 +97,7 @@ export class StageViewComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
setNewSlides(slides: Slide[], _currentSlide: number): void { /* eslint-disable-line @typescript-eslint/no-unused-vars */
|
||||
if (slides.length === 0) {
|
||||
if ((slides?.length ?? 0) === 0) {
|
||||
return;
|
||||
}
|
||||
this.currentSlides = slides;
|
||||
|
@ -10,17 +10,26 @@
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="theme-container content" *ngIf="isThemeLevelSupported()">
|
||||
<div *ngFor="let theme of themeList;">
|
||||
<mat-card class="theme-card" (click)='setTheme(theme.name)' [class.selected]="theme.selected">
|
||||
<mat-card-content>
|
||||
<img [src]="theme.thumbnail"/>
|
||||
<div class="theme-title">{{ theme.name }}</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
@if (isThemeLevelSupported()) {
|
||||
<div class="theme-container content">
|
||||
@for (theme of themeList; track theme) {
|
||||
<div>
|
||||
<mat-card
|
||||
class="theme-card"
|
||||
(click)='setTheme(theme.name)'
|
||||
[class.selected]="theme.selected">
|
||||
<mat-card-content>
|
||||
<img [src]="theme.thumbnail"/>
|
||||
<div class="theme-title">{{ theme.name }}</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<mat-error *ngIf="!isThemeLevelSupported()">
|
||||
{{ 'SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED' | translate }}
|
||||
</mat-error>
|
||||
}
|
||||
@else {
|
||||
<mat-error>
|
||||
{{ 'SONG_LEVEL_THEME_CHANGING_NOT_SUPPORTED' | translate }}
|
||||
</mat-error>
|
||||
}
|
||||
</form>
|
||||
|
@ -1,11 +1,14 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { OpenLPService } from '../../openlp.service';
|
||||
import { PageTitleService } from '../../page-title.service';
|
||||
import { Theme } from '../../responses';
|
||||
|
||||
@Component({
|
||||
selector: 'openlp-themes',
|
||||
templateUrl: './themes.component.html',
|
||||
styleUrls: ['./themes.component.scss'],
|
||||
styleUrl: './themes.component.scss',
|
||||
providers: [OpenLPService]
|
||||
})
|
||||
export class ThemesComponent implements OnInit {
|
||||
@ -13,8 +16,13 @@ export class ThemesComponent implements OnInit {
|
||||
private _themeList = [];
|
||||
private _themeLevel = null;
|
||||
|
||||
constructor(private pageTitleService: PageTitleService, private openlpService: OpenLPService) {
|
||||
pageTitleService.changePageTitle('Themes');
|
||||
constructor(
|
||||
private pageTitleService: PageTitleService,
|
||||
private openlpService: OpenLPService,
|
||||
private translateService: TranslateService) {
|
||||
this.translateService.get('THEMES').subscribe(res => {
|
||||
this.pageTitleService.changePageTitle(res);
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
@ -22,7 +30,7 @@ export class ThemesComponent implements OnInit {
|
||||
this.getThemes();
|
||||
}
|
||||
|
||||
get themeList(): Array<string> {
|
||||
get themeList(): Array<Theme> {
|
||||
return this._themeList;
|
||||
}
|
||||
|
||||
|
@ -63,8 +63,9 @@ export interface ServiceItem {
|
||||
}
|
||||
|
||||
export interface Theme {
|
||||
selected: boolean;
|
||||
name: string;
|
||||
selected: boolean;
|
||||
thumbnail: object;
|
||||
}
|
||||
|
||||
export interface Language {
|
||||
|
@ -4,6 +4,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Add Item to Service",
|
||||
"ADD_TO_SERVICE": "Add to Service",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Alert Submitted",
|
||||
"ALERTS": "Alerts",
|
||||
"CHANGE_DISPLAY_MODE": "Change Display Mode",
|
||||
"CHORD_VIEW": "Chord View",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Voeg Item By Diens",
|
||||
"ADD_TO_SERVICE": "Voeg By Diens",
|
||||
"ALERT": "Waarskuwing",
|
||||
"ALERT_SUBMITTED": "Waarskuwing Ingedien",
|
||||
"ALERTS": "Waarskuwings",
|
||||
"CHANGE_DISPLAY_MODE": "Verander Vertoonmodus",
|
||||
"CHORD_VIEW": "Akkoordaansig",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Добави елемент към услугата",
|
||||
"ADD_TO_SERVICE": "Добави към услугата",
|
||||
"ALERT": "Предупреждение",
|
||||
"ALERT_SUBMITTED": "Подадено предупреждение",
|
||||
"ALERTS": "Предупреждения",
|
||||
"CHANGE_DISPLAY_MODE": "Промени режима на дисплея",
|
||||
"CHORD_VIEW": "Преглед на акорди",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Přidat Položku do Služby",
|
||||
"ADD_TO_SERVICE": "Přidat do Služby",
|
||||
"ALERT": "Upozornění",
|
||||
"ALERT_SUBMITTED": "Výstraha Odeslána",
|
||||
"ALERTS": "Upozornění",
|
||||
"CHANGE_DISPLAY_MODE": "Změnit Režim Zobrazení",
|
||||
"CHORD_VIEW": "Zobrazení Akordů",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Tilføj Emne til Tjeneste",
|
||||
"ADD_TO_SERVICE": "Tilføj til Tjeneste",
|
||||
"ALERT": "Advarsel",
|
||||
"ALERT_SUBMITTED": "Advarsel Indsendt",
|
||||
"ALERTS": "Advarsler",
|
||||
"CHANGE_DISPLAY_MODE": "Skift Visningstilstand",
|
||||
"CHORD_VIEW": "Akkordvisning",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Element zum Ablauf Hinzufügen",
|
||||
"ADD_TO_SERVICE": "Zum Ablauf Hinzufügen",
|
||||
"ALERT": "Hinweise",
|
||||
"ALERT_SUBMITTED": "Hinweise Übermittelt",
|
||||
"ALERTS": "Hinweisen",
|
||||
"CHANGE_DISPLAY_MODE": "Anzeigemodus Ändern",
|
||||
"CHORD_VIEW": "Akkordansicht",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Προσθήκη στοιχείου στην υπηρεσία",
|
||||
"ADD_TO_SERVICE": "Προσθήκη στην υπηρεσία",
|
||||
"ALERT": "Ειδοποίηση",
|
||||
"ALERT_SUBMITTED": "Η ειδοποίηση υποβλήθηκε",
|
||||
"ALERTS": "Ειδοποιήσεις",
|
||||
"CHANGE_DISPLAY_MODE": "Αλλαγή λειτουργίας εμφάνισης",
|
||||
"CHORD_VIEW": "Προβολή συγχορδιών",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Add Item to Service",
|
||||
"ADD_TO_SERVICE": "Add to Service",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Alert Submitted",
|
||||
"ALERTS": "Alerts",
|
||||
"CHANGE_DISPLAY_MODE": "Change Display Mode",
|
||||
"CHORD_VIEW": "Chord View",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Add Item to Service",
|
||||
"ADD_TO_SERVICE": "Add to Service",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Alert Submitted",
|
||||
"ALERTS": "Alerts",
|
||||
"CHANGE_DISPLAY_MODE": "Change Display Mode",
|
||||
"CHORD_VIEW": "Chord View",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Agregar Elemento al Servicio",
|
||||
"ADD_TO_SERVICE": "Agregar al Servicio",
|
||||
"ALERT": "Alerta",
|
||||
"ALERT_SUBMITTED": "Alerta Enviada",
|
||||
"ALERTS": "Alertas",
|
||||
"CHANGE_DISPLAY_MODE": "Cambiar Modo de Visualización",
|
||||
"CHORD_VIEW": "Vista de Acordes",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Agregar Elemento al Servicio",
|
||||
"ADD_TO_SERVICE": "Agregar al Servicio",
|
||||
"ALERT": "Alerta",
|
||||
"ALERT_SUBMITTED": "Alerta Enviada",
|
||||
"ALERTS": "Alertas",
|
||||
"CHANGE_DISPLAY_MODE": "Cambiar Modo de Visualización",
|
||||
"CHORD_VIEW": "Vista de Acordes",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Üksuse Lisamine Teenusesse",
|
||||
"ADD_TO_SERVICE": "Lisa Teenusesse",
|
||||
"ALERT": "Teatise",
|
||||
"ALERT_SUBMITTED": "Hoiatusteade on Esitatud",
|
||||
"ALERTS": "Teatised",
|
||||
"CHANGE_DISPLAY_MODE": "Muuda Kuvamisrežiimi",
|
||||
"CHORD_VIEW": "Akordi Vaade",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Lisää Tuote Palveluun",
|
||||
"ADD_TO_SERVICE": "Lisää Palveluun",
|
||||
"ALERT": "Huomio Viesti",
|
||||
"ALERT_SUBMITTED": "Ilmoitus Lähetetty",
|
||||
"ALERTS": "Huomio Viestit",
|
||||
"CHANGE_DISPLAY_MODE": "Vaihda Näyttötilaa",
|
||||
"CHORD_VIEW": "Sointunäkymä",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Ajouter un Élément au Service",
|
||||
"ADD_TO_SERVICE": "Ajouter au Service",
|
||||
"ALERT": "Alerte",
|
||||
"ALERT_SUBMITTED": "Alerte Soumise",
|
||||
"ALERTS": "Alertes",
|
||||
"CHANGE_DISPLAY_MODE": "Changer le Mode d’Affichage",
|
||||
"CHORD_VIEW": "Vue des Accords",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Elem Hozzáadása a Szolgáltatáshoz",
|
||||
"ADD_TO_SERVICE": "Hozzáadás a Szolgáltatáshoz",
|
||||
"ALERT": "Riasztási",
|
||||
"ALERT_SUBMITTED": "Riasztás Elküldve",
|
||||
"ALERTS": "Riasztások",
|
||||
"CHANGE_DISPLAY_MODE": "Megjelenítési mód Módosítása",
|
||||
"CHORD_VIEW": "Akkord Nézet",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Tambahkan Item ke Layanan",
|
||||
"ADD_TO_SERVICE": "Tambahkan ke Layanan",
|
||||
"ALERT": "Peringatan",
|
||||
"ALERT_SUBMITTED": "Peringatan Dikirim",
|
||||
"ALERTS": "Peringatan",
|
||||
"CHANGE_DISPLAY_MODE": "Ubah Mode Tampilan",
|
||||
"CHORD_VIEW": "Tampilan Kunci",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Aggiungi Elemento al Servizio",
|
||||
"ADD_TO_SERVICE": "Aggiungi al Servizio",
|
||||
"ALERT": "Allarme",
|
||||
"ALERT_SUBMITTED": "Avviso Inviato",
|
||||
"ALERTS": "Avvisi",
|
||||
"CHANGE_DISPLAY_MODE": "Cambia Modalità di Visualizzazione",
|
||||
"CHORD_VIEW": "Vista degli Accordi",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Aggiungi Elemento al Servizio",
|
||||
"ADD_TO_SERVICE": "Aggiungi al Servizio",
|
||||
"ALERT": "Allarme",
|
||||
"ALERT_SUBMITTED": "Avviso Inviato",
|
||||
"ALERTS": "Avvisi",
|
||||
"CHANGE_DISPLAY_MODE": "Cambia Modalità di Visualizzazione",
|
||||
"CHORD_VIEW": "Vista degli Accordi",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Aggiungi Elemento al Servizio",
|
||||
"ADD_TO_SERVICE": "Aggiungi al Servizio",
|
||||
"ALERT": "Allarme",
|
||||
"ALERT_SUBMITTED": "Avviso Inviato",
|
||||
"ALERTS": "Avvisi",
|
||||
"CHANGE_DISPLAY_MODE": "Cambia Modalità di Visualizzazione",
|
||||
"CHORD_VIEW": "Vista degli Accordi",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "サービスにアイテムを追加",
|
||||
"ADD_TO_SERVICE": "サービスに追加",
|
||||
"ALERT": "アラート",
|
||||
"ALERT_SUBMITTED": "アラート送信済み",
|
||||
"ALERTS": "アラート",
|
||||
"CHANGE_DISPLAY_MODE": "表示モードを変更",
|
||||
"CHORD_VIEW": "コード表示",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "서비스에 항목 추가",
|
||||
"ADD_TO_SERVICE": "서비스에 추가",
|
||||
"ALERT": "경고",
|
||||
"ALERT_SUBMITTED": "경고가 제출됨",
|
||||
"ALERTS": "경고",
|
||||
"CHANGE_DISPLAY_MODE": "디스플레이 모드 변경",
|
||||
"CHORD_VIEW": "코드 보기",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Pridėti Elementą prie Paslaugos",
|
||||
"ADD_TO_SERVICE": "Pridėti prie Paslaugos",
|
||||
"ALERT": "Įspėjimas",
|
||||
"ALERT_SUBMITTED": "Pateiktas Įspėjimas",
|
||||
"ALERTS": "Įspėjimai",
|
||||
"CHANGE_DISPLAY_MODE": "Keisti Rodymo Režimą",
|
||||
"CHORD_VIEW": "Akordei",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Legg til Element i Tjenesten",
|
||||
"ADD_TO_SERVICE": "Legg til i Tjenesten",
|
||||
"ALERT": "Varsel",
|
||||
"ALERT_SUBMITTED": "Varsel Sendt Inn",
|
||||
"ALERTS": "Varsler",
|
||||
"CHANGE_DISPLAY_MODE": "Endre Visningsmodus",
|
||||
"CHORD_VIEW": "Akkordvisning",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Voeg Item Toe aan Liturgie",
|
||||
"ADD_TO_SERVICE": "Voeg Toe aan Liturgie",
|
||||
"ALERT": "Waarschuwing",
|
||||
"ALERT_SUBMITTED": "Waarschuwing Verstuurd",
|
||||
"ALERTS": "Waarschuwingen",
|
||||
"CHANGE_DISPLAY_MODE": "Wijzig Weergave",
|
||||
"CHORD_VIEW": "Akkoordenscherm",
|
||||
@ -46,7 +47,7 @@
|
||||
"STAGE_VIEW": "Podiumscherm",
|
||||
"THEMES": "Thema's",
|
||||
"THEME_LEVEL": "Thema Niveau",
|
||||
"THEME_OPTIONS": "Theme Opties",
|
||||
"THEME_OPTIONS": "Thema Opties",
|
||||
"USER_NAME": "Gebruikersnaam",
|
||||
"USER_INTERFACE": "Gebruikersinterface"
|
||||
}
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Dodaj Element do Usługi",
|
||||
"ADD_TO_SERVICE": "Dodaj do Usługi",
|
||||
"ALERT": "Alert",
|
||||
"ALERT_SUBMITTED": "Przesłano Alert",
|
||||
"ALERTS": "Alerty",
|
||||
"CHANGE_DISPLAY_MODE": "Zmień Tryb Wyświetlania",
|
||||
"CHORD_VIEW": "Widok Akordów",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Adicionar Item ao Serviço",
|
||||
"ADD_TO_SERVICE": "Adicionar ao Serviço",
|
||||
"ALERT": "Alerta",
|
||||
"ALERT_SUBMITTED": "Alerta Enviado",
|
||||
"ALERTS": "Alertas",
|
||||
"CHANGE_DISPLAY_MODE": "Alterar Modo de Exibição",
|
||||
"CHORD_VIEW": "Visualização de Acordes",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Adăugați Element la Serviciu",
|
||||
"ADD_TO_SERVICE": "Adăugați la Serviciu",
|
||||
"ALERT": "Alertă",
|
||||
"ALERT_SUBMITTED": "Alertă Transmisă",
|
||||
"ALERTS": "Alerte",
|
||||
"CHANGE_DISPLAY_MODE": "Schimbați Modul de Afișare",
|
||||
"CHORD_VIEW": "Vizualizare Acorduri",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Добавить элемент в службу",
|
||||
"ADD_TO_SERVICE": "Добавить в службу",
|
||||
"ALERT": "Оповещение",
|
||||
"ALERT_SUBMITTED": "Оповещение отправлено",
|
||||
"ALERTS": "Оповещения",
|
||||
"CHANGE_DISPLAY_MODE": "Изменить режим отображения",
|
||||
"CHORD_VIEW": "Просмотр аккордов",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Pridať Položku do Služby",
|
||||
"ADD_TO_SERVICE": "Pridať do Služby",
|
||||
"ALERT": "Upozornenie",
|
||||
"ALERT_SUBMITTED": "Upozornenie Bolo Odoslané",
|
||||
"ALERTS": "Upozornenia",
|
||||
"CHANGE_DISPLAY_MODE": "Zmeniť Režim Zobrazenia",
|
||||
"CHORD_VIEW": "Zobrazenie Akordov",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Dodaj Predmet v Spored",
|
||||
"ADD_TO_SERVICE": "Dodaj v Spored",
|
||||
"ALERT": "Opozorilo",
|
||||
"ALERT_SUBMITTED": "Predloženo Opozorilo",
|
||||
"ALERTS": "Opozorila",
|
||||
"CHANGE_DISPLAY_MODE": "Spremeni Način Prikaza",
|
||||
"CHORD_VIEW": "Pogled s Sozvoki",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Lägg till Objekt i Tjänsten",
|
||||
"ADD_TO_SERVICE": "Lägg till i Tjänsten",
|
||||
"ALERT": "Varning",
|
||||
"ALERT_SUBMITTED": "Avisering Skickad",
|
||||
"ALERTS": "Varningar",
|
||||
"CHANGE_DISPLAY_MODE": "Ändra Visningsläge",
|
||||
"CHORD_VIEW": "Ackordvy",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "பொருள் சேர்க்க சேவைக்கு",
|
||||
"ADD_TO_SERVICE": "சேவைக்கு சேர்க்கவும்",
|
||||
"ALERT": "எச்சரிக்கை",
|
||||
"ALERT_SUBMITTED": "எச்சரிக்கை சமர்ப்பிக்கப்பட்டது",
|
||||
"ALERTS": "எச்சரிக்கைகள்",
|
||||
"CHANGE_DISPLAY_MODE": "காட்சி முறையை மாற்று",
|
||||
"CHORD_VIEW": "கார்டு காட்சி",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "เพิ่มรายการในบริการ",
|
||||
"ADD_TO_SERVICE": "เพิ่มในบริการ",
|
||||
"ALERT": "แจ้งเตือน",
|
||||
"ALERT_SUBMITTED": "ส่งการแจ้งเตือนแล้ว",
|
||||
"ALERTS": "การแจ้งเตือน",
|
||||
"CHANGE_DISPLAY_MODE": "เปลี่ยนโหมดการแสดงผล",
|
||||
"CHORD_VIEW": "มุมมองคอร์ด",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "Thêm mục vào Dịch vụ",
|
||||
"ADD_TO_SERVICE": "Thêm vào Dịch vụ",
|
||||
"ALERT": "Cảnh báo",
|
||||
"ALERT_SUBMITTED": "Cảnh báo đã Gửi",
|
||||
"ALERTS": "Các cảnh báo",
|
||||
"CHANGE_DISPLAY_MODE": "Thay đổi Chế độ Hiển thị",
|
||||
"CHORD_VIEW": "Xem hợp âm",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "添加项目到服务",
|
||||
"ADD_TO_SERVICE": "添加到服务",
|
||||
"ALERT": "警报",
|
||||
"ALERT_SUBMITTED": "警报已提交",
|
||||
"ALERTS": "警报",
|
||||
"CHANGE_DISPLAY_MODE": "更改显示模式",
|
||||
"CHORD_VIEW": "和弦视图",
|
||||
|
@ -3,6 +3,7 @@
|
||||
"ADD_ITEM_TO_SERVICE": "新增項目至服務",
|
||||
"ADD_TO_SERVICE": "新增至服務",
|
||||
"ALERT": "警示",
|
||||
"ALERT_SUBMITTED": "警報已提交",
|
||||
"ALERTS": "警示訊息",
|
||||
"CHANGE_DISPLAY_MODE": "變更顯示模式",
|
||||
"CHORD_VIEW": "和弦檢視",
|
||||
|
440
yarn.lock
440
yarn.lock
@ -1675,10 +1675,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
|
||||
integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
|
||||
|
||||
"@fontsource/roboto@^5.0.12":
|
||||
version "5.0.12"
|
||||
resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-5.0.12.tgz#418f7305a3be7fc567dd154db20090f7ece7fc6c"
|
||||
integrity sha512-x0o17jvgoSSbS9OZnUX2+xJmVRvVCfeaYJjkS7w62iN7CuJWtMf5vJj8LqgC7ibqIkitOHVW+XssRjgrcHn62g==
|
||||
"@fontsource/roboto@^5.0.13":
|
||||
version "5.0.13"
|
||||
resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-5.0.13.tgz#2d6ec431a2f9dfe38ca76525c2d6bf12241f575b"
|
||||
integrity sha512-j61DHjsdUCKMXSdNLTOxcG701FWnF0jcqNNQi2iPCDxU8seN/sMxeh62dC++UiagCWq9ghTypX+Pcy7kX+QOeQ==
|
||||
|
||||
"@humanwhocodes/config-array@^0.11.14":
|
||||
version "0.11.14"
|
||||
@ -2613,27 +2613,27 @@
|
||||
node-gyp "^10.0.0"
|
||||
which "^4.0.0"
|
||||
|
||||
"@nrwl/devkit@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-18.3.2.tgz#21aa1db02ddc1d26856d964526e1120ca7479612"
|
||||
integrity sha512-srguS6WNE/sP99OTfPqUdI22CNEocvxyz4TOB6Uj5zcFiKIFOlWn0NFwathdWVKwvsszY1Zvt/YiVjzYNUDqWw==
|
||||
"@nrwl/devkit@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-18.3.3.tgz#9ec5575afe6d14b17acd5e8da4e98a0de27704c6"
|
||||
integrity sha512-3zZLE1vfwsNie7qjVUt9lqaM1slU0RTr/dW+Yt/2lxe8Peu6f8bnCM1Pf3kSlzoxQroctfocRtVHFXJsAuAt4g==
|
||||
dependencies:
|
||||
"@nx/devkit" "18.3.2"
|
||||
"@nx/devkit" "18.3.3"
|
||||
|
||||
"@nrwl/tao@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-18.3.2.tgz#20f99fb5ee76aacb0efda7a1c264f890c4e6c163"
|
||||
integrity sha512-TQmaUMEIlKcytBpaHVG3VMPhfoJl09u3KaE6F1eJcFi7+za8rivH+HM+jlhwCAOlaC9bmnvJy0GvnFa5WtScsg==
|
||||
"@nrwl/tao@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-18.3.3.tgz#2d0c60d233f2cc07c85ba08126dd46f21dda1ef0"
|
||||
integrity sha512-f/PUDLpSMEObiLQ5sIDySJM+5DxSCNunkxxbY1R9rmQ1cFcgrHaXIHQqbSj91mMa3mmtbKACk8u1LbI+oQV0Tg==
|
||||
dependencies:
|
||||
nx "18.3.2"
|
||||
nx "18.3.3"
|
||||
tslib "^2.3.0"
|
||||
|
||||
"@nx/devkit@18.3.2", "@nx/devkit@^17.2.8 || ^18.0.0":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-18.3.2.tgz#f2515620b87a6880096ae59f9899f23844370ba6"
|
||||
integrity sha512-H55m7R6zKteZ5DE0o2IOwpwo8RQXiH4RkBELWn9YkSQPvps8K7psyMzPQofP37qD5S0u7pYjGIWiJDzij+OeEQ==
|
||||
"@nx/devkit@18.3.3", "@nx/devkit@^17.2.8 || ^18.0.0":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-18.3.3.tgz#2ec37855020da74ad1e77b51711b057b3cb12fec"
|
||||
integrity sha512-FtkZ6mA5//vEA5lcbT80m080ROVacHYV5F1peztTRA+IY2JZGJoqx425kn5ylDO8aCSAIAwcn2qIdhI8BnpG3Q==
|
||||
dependencies:
|
||||
"@nrwl/devkit" "18.3.2"
|
||||
"@nrwl/devkit" "18.3.3"
|
||||
ejs "^3.1.7"
|
||||
enquirer "~2.3.6"
|
||||
ignore "^5.0.4"
|
||||
@ -2642,140 +2642,140 @@
|
||||
tslib "^2.3.0"
|
||||
yargs-parser "21.1.1"
|
||||
|
||||
"@nx/nx-darwin-arm64@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.3.2.tgz#2aee0898234376bdd2c9b7928b18c4ce2c9afc99"
|
||||
integrity sha512-x+C4a+DMGxHks/aKtyYa5+muF5BrJcDwxSPazRmrI9c80vo3J8TYjryXPHyZ/L3/3oNp72FtyPR46z3qf8NpQQ==
|
||||
"@nx/nx-darwin-arm64@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-18.3.3.tgz#dcdbcfe2796bbe3f1dfd61bce81389b05a50e69b"
|
||||
integrity sha512-NpA2/7o1uUuaocMYopX9muxKif9HlGfWaXo2UeiR918usF6xri4aUqweZbaXVc9iqCAEbVMWUsjaLYGKPXHAjw==
|
||||
|
||||
"@nx/nx-darwin-x64@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-18.3.2.tgz#45f8bc9fdd071138f513ad6b88f1988736747eb6"
|
||||
integrity sha512-5krmqFbsaeDLpSRaonEqlAiL4MBIWVguE9vs0/lp6vlnyIXT3TRftk4B4Tpi+PqIN6tC/Ll8gGoHzSdwHboAcg==
|
||||
"@nx/nx-darwin-x64@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-18.3.3.tgz#aa7bdd1a3ea0bb81682422b805914efccab3b179"
|
||||
integrity sha512-aydPLbc7DeceJ6szRf6DLT4ERoPvwfWyFiGXdAlEZYWhjEuNZLeG8K6jA3yHeWltKfX/qJqhnyKbnubBNzBKlQ==
|
||||
|
||||
"@nx/nx-freebsd-x64@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.3.2.tgz#0e8722f29ad49f114b1b486fdc17878a40549868"
|
||||
integrity sha512-FenZBqJ5FK/QoExmngolq3q5NsOmJgrhy1Q3NiG0yOTcXnwIZO9pHmRDTZ33niTxuXSRvCgvJE4uBAM9YvptYw==
|
||||
"@nx/nx-freebsd-x64@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-18.3.3.tgz#331f5dbb56c90b08e99c1ce9ff51e0c5b956f030"
|
||||
integrity sha512-sEYEWsK/fwC1l7wzls7RNOjhmrooH0lK0mpgj1vDXesLBSZ7k+pddAqaHFECN4QXBSbHZI2PWOEhbnIH+Errsg==
|
||||
|
||||
"@nx/nx-linux-arm-gnueabihf@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.3.2.tgz#a8ea0482f034ca34354b7cdd4a3311ee986edde1"
|
||||
integrity sha512-xjh4WvRIN1vZpsL4tFlaAoZ15R/R4a7e+4Ai8h8evRA7Mz31k/iUEpfcF+6EJfwFX0IjI59QnWzZ19Z5XFfl0Q==
|
||||
"@nx/nx-linux-arm-gnueabihf@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-18.3.3.tgz#d66d4787f5cfc56b5a7aa9a0453174b96b4729a8"
|
||||
integrity sha512-B9GGMkrrzwiAfvew22x85ITO9TiNxbgRbKJQWQaoopNpXrnSWpY8WTNxpDT24fwV1qdQfsPKcY3F4O0NOUgPRA==
|
||||
|
||||
"@nx/nx-linux-arm64-gnu@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.3.2.tgz#798409918ffb0096f07540a080e7001793e3b607"
|
||||
integrity sha512-Y82fDCuIjirdsS1tKfqC91qLdVhYS6NcU310fzMP4HI4A4WwdcMqHnn6E/O2glYW9CTYRQANo89fB44Zqbg7Cg==
|
||||
"@nx/nx-linux-arm64-gnu@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-18.3.3.tgz#2ab08df1d052a55d4a52ba910fe41c25701d5361"
|
||||
integrity sha512-1EucHf5/0JeqZmhritqkpEdOcdo9Dl32gpFvhNfS6kCAYmaDlEl4zqedz3VIoj4C7+C0pV3mcRO9qB9H7GM5bQ==
|
||||
|
||||
"@nx/nx-linux-arm64-musl@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.3.2.tgz#976e8d01229cccb76e738fab69a6b7218c59f60a"
|
||||
integrity sha512-iaGfejem22yJI707jlWMDwlUFStT3zzm+hUJOWcTH/owREVDDcX9SrYOcNoqecipGFttwEow7jtgg2E/9mb20A==
|
||||
"@nx/nx-linux-arm64-musl@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-18.3.3.tgz#69376454bb9759c376d0a90aa876dfff6bbf4d15"
|
||||
integrity sha512-HPgOgnYYLPVCBEaAkSEGPGzZqTDCiyCAF/qtvx5z0f1U/hZYb1ubgxw70ogY82Cafr7X4gQBz5k4/ZCnoCXlOQ==
|
||||
|
||||
"@nx/nx-linux-x64-gnu@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.3.2.tgz#d41644efe55fa7d8c9d0a1a5d8eff7283d51377c"
|
||||
integrity sha512-VV6T/tXURZ0r2N6VArI0JW4+Lf6Zq4UssCn6GS3cj75q7OhsQDqgcVIjET7zjqRhrc6ndZdi7d4YdEndOEMU+Q==
|
||||
"@nx/nx-linux-x64-gnu@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-18.3.3.tgz#0b8ba8ec0c2371f0df462742460d52d63b1cc715"
|
||||
integrity sha512-FgYTQ3VEE6EUOGtJT9riRK8IBwPGFjKS+N2mudQJn2bB/9IumUvVRYQUIX08gqGLlqZPO6uUUhUjwZY8SnjRLQ==
|
||||
|
||||
"@nx/nx-linux-x64-musl@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.3.2.tgz#9ad2492a4b9b5fb4ccea513b8c554d0645ee93f3"
|
||||
integrity sha512-Pg3/HmNbCTd5Hm/EXHu+FRl4OInbqX44qh0pMpSuCSIjVPbyCXlKCQRsQWo6d3KQIUOvYsBZRAKjHVhhywcScg==
|
||||
"@nx/nx-linux-x64-musl@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-18.3.3.tgz#c96d6f8d2d94b99ac8da723077ebbc92f833beea"
|
||||
integrity sha512-QnWjGViR1Wj9gJXa1RJ9mXyy2/JzQ7NF2C4ulTYSH5St1HoxhkfnLsV0+uNLFEV9PSZq+2BfxmQuT8Appefv1A==
|
||||
|
||||
"@nx/nx-win32-arm64-msvc@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.3.2.tgz#fff2b1a856f91ce3e36d6a4cd9d358a20a776feb"
|
||||
integrity sha512-c1aOj27HjQPDrGwHm2ytQfHQNMFJ8AyKLtWOEGMhUwDsRRqHd61Pg8kqSac1A9sdrSq4jRfVYsbzaGl1bE+gcw==
|
||||
"@nx/nx-win32-arm64-msvc@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-18.3.3.tgz#0d2c7396e7a063849edbd6e3d34ea81445c389b5"
|
||||
integrity sha512-Xn3LUaPsF8QkEYUVV3lc693NTCMWrfZBFXTy1cQpvLzQ+idsXQ/EGWoq93cIM3Nc2YWyblT2hHHelb8dHCZAlw==
|
||||
|
||||
"@nx/nx-win32-x64-msvc@18.3.2":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.3.2.tgz#58e9fd9ab952794b098b7081e0b2b617b3ba52e6"
|
||||
integrity sha512-yDSYZch5RUQKFeGBloAbIKIeYNg8862ZX/lT54GeSYnI/32KqFABwuCV+tGjvPoTgA4Q0sI/F8i0NPhYwsC1Ww==
|
||||
"@nx/nx-win32-x64-msvc@18.3.3":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.3.3.tgz#ea1a60ae1ffe805529d5cb95e7b28e6b8ae24621"
|
||||
integrity sha512-t8HvOnQEiaaoTFOOIrql30NPhIwDFO7jg0Jtz3Tbneulh7ceswJp71yFHsRGGrYZ23Tgg+Sna6M9qLRGzlRGkg==
|
||||
|
||||
"@pkgjs/parseargs@^0.11.0":
|
||||
version "0.11.0"
|
||||
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
|
||||
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz#bddf05c3387d02fac04b6b86b3a779337edfed75"
|
||||
integrity sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==
|
||||
"@rollup/rollup-android-arm-eabi@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.2.tgz#29b7b3c70ddf532fe6dcf859cbfc3e4714c34842"
|
||||
integrity sha512-VGodkwtEuZ+ENPz/CpDSl091koMv8ao5jHVMbG1vNK+sbx/48/wVzP84M5xSfDAC69mAKKoEkSo+ym9bXYRK9w==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz#b26bd09de58704c0a45e3375b76796f6eda825e4"
|
||||
integrity sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==
|
||||
"@rollup/rollup-android-arm64@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.2.tgz#f50f65d0c3b8b30d070d8616b2dfc0978dd588bd"
|
||||
integrity sha512-5/W1xyIdc7jw6c/f1KEtg1vYDBWnWCsLiipK41NiaWGLG93eH2edgE6EgQJ3AGiPERhiOLUqlDSfjRK08C9xFg==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.3.tgz#c5f3fd1aa285b6d33dda6e3f3ca395f8c37fd5ca"
|
||||
integrity sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==
|
||||
"@rollup/rollup-darwin-arm64@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.2.tgz#be3d9fffbf6fc5b9d5f0642f1f0250e0ecab8d3e"
|
||||
integrity sha512-vOAKMqZSTbPfyPVu1jBiy+YniIQd3MG7LUnqV0dA6Q5tyhdqYtxacTHP1+S/ksKl6qCtMG1qQ0grcIgk/19JEA==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz#8e4673734d7dc9d68f6d48e81246055cda0e840f"
|
||||
integrity sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==
|
||||
"@rollup/rollup-darwin-x64@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.2.tgz#fe45a772526b2c03d545e20f97a1e5cd60a46e52"
|
||||
integrity sha512-aIJVRUS3Dnj6MqocBMrcXlatKm64O3ITeQAdAxVSE9swyhNyV1dwnRgw7IGKIkDQofatd8UqMSyUxuFEa42EcA==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz#53ed38eb13b58ababdb55a7f66f0538a7f85dcba"
|
||||
integrity sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.2.tgz#450ecf66f30a51514413aafa79d28561db73151c"
|
||||
integrity sha512-/bjfUiXwy3P5vYr6/ezv//Yle2Y0ak3a+Av/BKoi76nFryjWCkki8AuVoPR7ZU/ckcvAWFo77OnFK14B9B5JsA==
|
||||
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz#0706ee38330e267a5c9326956820f009cfb21fcd"
|
||||
integrity sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==
|
||||
"@rollup/rollup-linux-arm-musleabihf@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.2.tgz#1e8807d220047084579cd01499c5476a325e0700"
|
||||
integrity sha512-S24b+tJHwpq2TNRz9T+r71FjMvyBBApY8EkYxz8Cwi/rhH6h+lu/iDUxyc9PuHf9UvyeBFYkWWcrDahai/NCGw==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz#426fce7b8b242ac5abd48a10a5020f5a468c6cb4"
|
||||
integrity sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==
|
||||
"@rollup/rollup-linux-arm64-gnu@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.2.tgz#128adb9dbf0057b989127d2e7fd73931a6729410"
|
||||
integrity sha512-UN7VAXLyeyGbCQWiOtQN7BqmjTDw1ON2Oos4lfk0YR7yNhFEJWZiwGtvj9Ay4lsT/ueT04sh80Sg2MlWVVZ+Ug==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz#65bf944530d759b50d7ffd00dfbdf4125a43406f"
|
||||
integrity sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==
|
||||
"@rollup/rollup-linux-arm64-musl@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.2.tgz#fddc7730045301a7fb0132532890e5edcb23d2bc"
|
||||
integrity sha512-ZBKvz3+rIhQjusKMccuJiPsStCrPOtejCHxTe+yWp3tNnuPWtyCh9QLGPKz6bFNFbwbw28E2T6zDgzJZ05F1JQ==
|
||||
|
||||
"@rollup/rollup-linux-powerpc64le-gnu@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz#494ba3b31095e9a45df9c3f646d21400fb631a95"
|
||||
integrity sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==
|
||||
"@rollup/rollup-linux-powerpc64le-gnu@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.2.tgz#7154fe9ffc6405b2a6555ca931c42c0aa5198c2a"
|
||||
integrity sha512-LjMMFiVBRL3wOe095vHAekL4b7nQqf4KZEpdMWd3/W+nIy5o9q/8tlVKiqMbfieDypNXLsxM9fexOxd9Qcklyg==
|
||||
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz#8b88ed0a40724cce04aa15374ebe5ba4092d679f"
|
||||
integrity sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==
|
||||
"@rollup/rollup-linux-riscv64-gnu@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.2.tgz#7a7d091a94fa7c50ebf72d5578475093e01c739e"
|
||||
integrity sha512-ohkPt0lKoCU0s4B6twro2aft+QROPdUiWwOjPNTzwTsBK5w+2+iT9kySdtOdq0gzWJAdiqsV4NFtXOwGZmIsHA==
|
||||
|
||||
"@rollup/rollup-linux-s390x-gnu@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz#09c9e5ec57a0f6ec3551272c860bb9a04b96d70f"
|
||||
integrity sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==
|
||||
"@rollup/rollup-linux-s390x-gnu@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.2.tgz#39b87bd355dfafbc062ca856d3d6bc5aa1905d89"
|
||||
integrity sha512-jm2lvLc+/gqXfndlpDw05jKvsl/HKYxUEAt1h5UXcMFVpO4vGpoWmJVUfKDtTqSaHcCNw1his1XjkgR9aort3w==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz#197f27fd481ad9c861021d5cbbf21793922a631c"
|
||||
integrity sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==
|
||||
"@rollup/rollup-linux-x64-gnu@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.2.tgz#30b88169db18dec202ab9662d5148523d59da553"
|
||||
integrity sha512-oc5/SlITI/Vj/qL4UM+lXN7MERpiy1HEOnrE+SegXwzf7WP9bzmZd6+MDljCEZTdSY84CpvUv9Rq7bCaftn1+g==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz#5cc0522f4942f2df625e9bfb6fb02c6580ffbce6"
|
||||
integrity sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==
|
||||
"@rollup/rollup-linux-x64-musl@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.2.tgz#d4fd52a28d5ce4aaed436311d89a9a1eaff87c2d"
|
||||
integrity sha512-/2VWEBG6mKbS2itm7hzPwhIPaxfZh/KLWrYg20pCRLHhNFtF+epLgcBtwy3m07bl/k86Q3PFRAf2cX+VbZbwzQ==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz#a648122389d23a7543b261fba082e65fefefe4f6"
|
||||
integrity sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==
|
||||
"@rollup/rollup-win32-arm64-msvc@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.2.tgz#edd352302e3fa6a2d612447590b0a0887cdbf762"
|
||||
integrity sha512-Wg7ANh7+hSilF0lG3e/0Oy8GtfTIfEk1327Bw8juZOMOoKmJLs3R+a4JDa/4cHJp2Gs7QfCDTepXXcyFD0ubBg==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz#34727b5c7953c35fc6e1ae4f770ad3a2025f8e03"
|
||||
integrity sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==
|
||||
"@rollup/rollup-win32-ia32-msvc@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.2.tgz#f17cc1db108f364bf6ef427f98844b5f742d31f0"
|
||||
integrity sha512-J/jCDKVMWp0Y2ELnTjpQFYUCUWv1Jr+LdFrJVZtdqGyjDo0PHPa7pCamjHvJel6zBFM3doFFqAr7cmXYWBAbfw==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.14.3":
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz#5b2fb4d8cd44c05deef8a7b0e6deb9ccb8939d18"
|
||||
integrity sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==
|
||||
"@rollup/rollup-win32-x64-msvc@4.16.2":
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.2.tgz#98fb87589960075d39c44784e3a99f67138602f4"
|
||||
integrity sha512-3nIf+SJMs2ZzrCh+SKNqgLVV9hS/UY0UjT1YU8XQYFGLiUfmHYJ/5trOU1XSvmHjV5gTF/K3DjrWxtyzKKcAHA==
|
||||
|
||||
"@schematics/angular@17.3.5":
|
||||
version "17.3.5"
|
||||
@ -3074,16 +3074,16 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@7.7.0":
|
||||
version "7.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz#bf34a02f221811505b8bf2f31060c8560c1bb0a3"
|
||||
integrity sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==
|
||||
"@typescript-eslint/eslint-plugin@7.7.1":
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz#50a9044e3e5fe76b22caf64fb7fc1f97614bdbfd"
|
||||
integrity sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.10.0"
|
||||
"@typescript-eslint/scope-manager" "7.7.0"
|
||||
"@typescript-eslint/type-utils" "7.7.0"
|
||||
"@typescript-eslint/utils" "7.7.0"
|
||||
"@typescript-eslint/visitor-keys" "7.7.0"
|
||||
"@typescript-eslint/scope-manager" "7.7.1"
|
||||
"@typescript-eslint/type-utils" "7.7.1"
|
||||
"@typescript-eslint/utils" "7.7.1"
|
||||
"@typescript-eslint/visitor-keys" "7.7.1"
|
||||
debug "^4.3.4"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^5.3.1"
|
||||
@ -3091,15 +3091,15 @@
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/parser@7.7.0":
|
||||
version "7.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.7.0.tgz#6b1b3ce76c5de002c43af8ae933613b0f2b4bcc6"
|
||||
integrity sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==
|
||||
"@typescript-eslint/parser@7.7.1":
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.7.1.tgz#f940e9f291cdca40c46cb75916217d3a42d6ceea"
|
||||
integrity sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "7.7.0"
|
||||
"@typescript-eslint/types" "7.7.0"
|
||||
"@typescript-eslint/typescript-estree" "7.7.0"
|
||||
"@typescript-eslint/visitor-keys" "7.7.0"
|
||||
"@typescript-eslint/scope-manager" "7.7.1"
|
||||
"@typescript-eslint/types" "7.7.1"
|
||||
"@typescript-eslint/typescript-estree" "7.7.1"
|
||||
"@typescript-eslint/visitor-keys" "7.7.1"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@7.2.0":
|
||||
@ -3110,13 +3110,13 @@
|
||||
"@typescript-eslint/types" "7.2.0"
|
||||
"@typescript-eslint/visitor-keys" "7.2.0"
|
||||
|
||||
"@typescript-eslint/scope-manager@7.7.0":
|
||||
version "7.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz#3f0db079b275bb8b0cb5be7613fb3130cfb5de77"
|
||||
integrity sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==
|
||||
"@typescript-eslint/scope-manager@7.7.1":
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz#07fe59686ca843f66e3e2b5c151522bc38effab2"
|
||||
integrity sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "7.7.0"
|
||||
"@typescript-eslint/visitor-keys" "7.7.0"
|
||||
"@typescript-eslint/types" "7.7.1"
|
||||
"@typescript-eslint/visitor-keys" "7.7.1"
|
||||
|
||||
"@typescript-eslint/type-utils@7.2.0":
|
||||
version "7.2.0"
|
||||
@ -3128,13 +3128,13 @@
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^1.0.1"
|
||||
|
||||
"@typescript-eslint/type-utils@7.7.0":
|
||||
version "7.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz#36792ff4209a781b058de61631a48df17bdefbc5"
|
||||
integrity sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==
|
||||
"@typescript-eslint/type-utils@7.7.1":
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz#2f8094edca3bebdaad009008929df645ed9c8743"
|
||||
integrity sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "7.7.0"
|
||||
"@typescript-eslint/utils" "7.7.0"
|
||||
"@typescript-eslint/typescript-estree" "7.7.1"
|
||||
"@typescript-eslint/utils" "7.7.1"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
@ -3143,10 +3143,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f"
|
||||
integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==
|
||||
|
||||
"@typescript-eslint/types@7.7.0":
|
||||
version "7.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.7.0.tgz#23af4d24bf9ce15d8d301236e3e3014143604f27"
|
||||
integrity sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==
|
||||
"@typescript-eslint/types@7.7.1":
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.7.1.tgz#f903a651fb004c75add08e4e9e207f169d4b98d7"
|
||||
integrity sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==
|
||||
|
||||
"@typescript-eslint/typescript-estree@7.2.0":
|
||||
version "7.2.0"
|
||||
@ -3162,13 +3162,13 @@
|
||||
semver "^7.5.4"
|
||||
ts-api-utils "^1.0.1"
|
||||
|
||||
"@typescript-eslint/typescript-estree@7.7.0":
|
||||
version "7.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz#b5dd6383b4c6a852d7b256a37af971e8982be97f"
|
||||
integrity sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==
|
||||
"@typescript-eslint/typescript-estree@7.7.1":
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz#5cafde48fe390fe1c1b329b2ce0ba8a73c1e87b2"
|
||||
integrity sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "7.7.0"
|
||||
"@typescript-eslint/visitor-keys" "7.7.0"
|
||||
"@typescript-eslint/types" "7.7.1"
|
||||
"@typescript-eslint/visitor-keys" "7.7.1"
|
||||
debug "^4.3.4"
|
||||
globby "^11.1.0"
|
||||
is-glob "^4.0.3"
|
||||
@ -3189,17 +3189,17 @@
|
||||
"@typescript-eslint/typescript-estree" "7.2.0"
|
||||
semver "^7.5.4"
|
||||
|
||||
"@typescript-eslint/utils@7.7.0":
|
||||
version "7.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.7.0.tgz#3d2b6606a60ac34f3c625facfb3b3ab7e126f58d"
|
||||
integrity sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==
|
||||
"@typescript-eslint/utils@7.7.1":
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.7.1.tgz#5d161f2b4a55e1bc38b634bebb921e4bd4e4a16e"
|
||||
integrity sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.4.0"
|
||||
"@types/json-schema" "^7.0.15"
|
||||
"@types/semver" "^7.5.8"
|
||||
"@typescript-eslint/scope-manager" "7.7.0"
|
||||
"@typescript-eslint/types" "7.7.0"
|
||||
"@typescript-eslint/typescript-estree" "7.7.0"
|
||||
"@typescript-eslint/scope-manager" "7.7.1"
|
||||
"@typescript-eslint/types" "7.7.1"
|
||||
"@typescript-eslint/typescript-estree" "7.7.1"
|
||||
semver "^7.6.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@7.2.0":
|
||||
@ -3210,12 +3210,12 @@
|
||||
"@typescript-eslint/types" "7.2.0"
|
||||
eslint-visitor-keys "^3.4.1"
|
||||
|
||||
"@typescript-eslint/visitor-keys@7.7.0":
|
||||
version "7.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz#950148cf1ac11562a2d903fdf7acf76714a2dc9e"
|
||||
integrity sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==
|
||||
"@typescript-eslint/visitor-keys@7.7.1":
|
||||
version "7.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz#da2294796220bb0f3b4add5ecbb1b9c3f4f65798"
|
||||
integrity sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "7.7.0"
|
||||
"@typescript-eslint/types" "7.7.1"
|
||||
eslint-visitor-keys "^3.4.3"
|
||||
|
||||
"@ungap/structured-clone@^1.2.0":
|
||||
@ -3919,9 +3919,9 @@ camelcase@^5.3.1:
|
||||
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
||||
|
||||
caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001591:
|
||||
version "1.0.30001611"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz#4dbe78935b65851c2d2df1868af39f709a93a96e"
|
||||
integrity sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==
|
||||
version "1.0.30001612"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae"
|
||||
integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==
|
||||
|
||||
chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
@ -4193,7 +4193,7 @@ core-js-compat@^3.31.0, core-js-compat@^3.34.0:
|
||||
dependencies:
|
||||
browserslist "^4.23.0"
|
||||
|
||||
core-js@^3.37.0:
|
||||
core-js@^3.35.0, core-js@^3.37.0:
|
||||
version "3.37.0"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.0.tgz#d8dde58e91d156b2547c19d8a4efd5c7f6c426bb"
|
||||
integrity sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==
|
||||
@ -4538,9 +4538,9 @@ ejs@^3.1.7:
|
||||
jake "^10.8.5"
|
||||
|
||||
electron-to-chromium@^1.4.668:
|
||||
version "1.4.744"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.744.tgz#d19cdfdbd81bd800b71773702bcbaa129a3b2e8f"
|
||||
integrity sha512-nAGcF0yeKKfrP13LMFr5U1eghfFSvFLg302VUFzWlcjPOnUYd52yU5x6PBYrujhNbc4jYmZFrGZFK+xasaEzVA==
|
||||
version "1.4.745"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.745.tgz#9c202ce9cbf18a5b5e0ca47145fd127cc4dd2290"
|
||||
integrity sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
@ -5789,9 +5789,9 @@ ipaddr.js@1.9.1:
|
||||
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
||||
|
||||
ipaddr.js@^2.0.1:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f"
|
||||
integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8"
|
||||
integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==
|
||||
|
||||
is-array-buffer@^3.0.4:
|
||||
version "3.0.4"
|
||||
@ -6950,12 +6950,12 @@ nth-check@^2.0.1:
|
||||
dependencies:
|
||||
boolbase "^1.0.0"
|
||||
|
||||
nx@18.3.2, "nx@^17.2.8 || ^18.0.0":
|
||||
version "18.3.2"
|
||||
resolved "https://registry.yarnpkg.com/nx/-/nx-18.3.2.tgz#4ce7b2dae228c0515d21c5d834883e60a8296635"
|
||||
integrity sha512-kgkfmkwJQQ8Fp5AkvoZlnRaUrdJhckte8RyFhy86VeYjUcWYzV6shrbasKxTB0ZvCikHYjbI7QnmVYmZujEjhQ==
|
||||
nx@18.3.3, "nx@^17.2.8 || ^18.0.0":
|
||||
version "18.3.3"
|
||||
resolved "https://registry.yarnpkg.com/nx/-/nx-18.3.3.tgz#ab96811961b631efd4f0c83550e92f7b0a625e83"
|
||||
integrity sha512-GqC5ANfTWV6SFbgquZwuRMI2Z2nO0c0Yx4JzM3x32aJOgXsmRml3WcV0a5648bIXSen34gylHYl2EHaxVWkzNQ==
|
||||
dependencies:
|
||||
"@nrwl/tao" "18.3.2"
|
||||
"@nrwl/tao" "18.3.3"
|
||||
"@yarnpkg/lockfile" "^1.1.0"
|
||||
"@yarnpkg/parsers" "3.0.0-rc.46"
|
||||
"@zkochan/js-yaml" "0.0.6"
|
||||
@ -6990,16 +6990,16 @@ nx@18.3.2, "nx@^17.2.8 || ^18.0.0":
|
||||
yargs "^17.6.2"
|
||||
yargs-parser "21.1.1"
|
||||
optionalDependencies:
|
||||
"@nx/nx-darwin-arm64" "18.3.2"
|
||||
"@nx/nx-darwin-x64" "18.3.2"
|
||||
"@nx/nx-freebsd-x64" "18.3.2"
|
||||
"@nx/nx-linux-arm-gnueabihf" "18.3.2"
|
||||
"@nx/nx-linux-arm64-gnu" "18.3.2"
|
||||
"@nx/nx-linux-arm64-musl" "18.3.2"
|
||||
"@nx/nx-linux-x64-gnu" "18.3.2"
|
||||
"@nx/nx-linux-x64-musl" "18.3.2"
|
||||
"@nx/nx-win32-arm64-msvc" "18.3.2"
|
||||
"@nx/nx-win32-x64-msvc" "18.3.2"
|
||||
"@nx/nx-darwin-arm64" "18.3.3"
|
||||
"@nx/nx-darwin-x64" "18.3.3"
|
||||
"@nx/nx-freebsd-x64" "18.3.3"
|
||||
"@nx/nx-linux-arm-gnueabihf" "18.3.3"
|
||||
"@nx/nx-linux-arm64-gnu" "18.3.3"
|
||||
"@nx/nx-linux-arm64-musl" "18.3.3"
|
||||
"@nx/nx-linux-x64-gnu" "18.3.3"
|
||||
"@nx/nx-linux-x64-musl" "18.3.3"
|
||||
"@nx/nx-win32-arm64-msvc" "18.3.3"
|
||||
"@nx/nx-win32-x64-msvc" "18.3.3"
|
||||
|
||||
object-assign@^4:
|
||||
version "4.1.1"
|
||||
@ -7750,28 +7750,28 @@ rimraf@^3.0.2:
|
||||
glob "^7.1.3"
|
||||
|
||||
rollup@^4.2.0:
|
||||
version "4.14.3"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.14.3.tgz#bcbb7784b35826d3164346fa6d5aac95190d8ba9"
|
||||
integrity sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==
|
||||
version "4.16.2"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.16.2.tgz#43bcbd225d0a6bc68df97a6e41c45003188a3845"
|
||||
integrity sha512-sxDP0+pya/Yi5ZtptF4p3avI+uWCIf/OdrfdH2Gbv1kWddLKk0U7WE3PmQokhi5JrektxsK3sK8s4hzAmjqahw==
|
||||
dependencies:
|
||||
"@types/estree" "1.0.5"
|
||||
optionalDependencies:
|
||||
"@rollup/rollup-android-arm-eabi" "4.14.3"
|
||||
"@rollup/rollup-android-arm64" "4.14.3"
|
||||
"@rollup/rollup-darwin-arm64" "4.14.3"
|
||||
"@rollup/rollup-darwin-x64" "4.14.3"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.14.3"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.14.3"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.14.3"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.14.3"
|
||||
"@rollup/rollup-linux-powerpc64le-gnu" "4.14.3"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.14.3"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.14.3"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.14.3"
|
||||
"@rollup/rollup-linux-x64-musl" "4.14.3"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.14.3"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.14.3"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.14.3"
|
||||
"@rollup/rollup-android-arm-eabi" "4.16.2"
|
||||
"@rollup/rollup-android-arm64" "4.16.2"
|
||||
"@rollup/rollup-darwin-arm64" "4.16.2"
|
||||
"@rollup/rollup-darwin-x64" "4.16.2"
|
||||
"@rollup/rollup-linux-arm-gnueabihf" "4.16.2"
|
||||
"@rollup/rollup-linux-arm-musleabihf" "4.16.2"
|
||||
"@rollup/rollup-linux-arm64-gnu" "4.16.2"
|
||||
"@rollup/rollup-linux-arm64-musl" "4.16.2"
|
||||
"@rollup/rollup-linux-powerpc64le-gnu" "4.16.2"
|
||||
"@rollup/rollup-linux-riscv64-gnu" "4.16.2"
|
||||
"@rollup/rollup-linux-s390x-gnu" "4.16.2"
|
||||
"@rollup/rollup-linux-x64-gnu" "4.16.2"
|
||||
"@rollup/rollup-linux-x64-musl" "4.16.2"
|
||||
"@rollup/rollup-win32-arm64-msvc" "4.16.2"
|
||||
"@rollup/rollup-win32-ia32-msvc" "4.16.2"
|
||||
"@rollup/rollup-win32-x64-msvc" "4.16.2"
|
||||
fsevents "~2.3.2"
|
||||
|
||||
run-async@^3.0.0:
|
||||
@ -8412,9 +8412,9 @@ terser@5.29.1:
|
||||
source-map-support "~0.5.20"
|
||||
|
||||
terser@^5.26.0:
|
||||
version "5.30.3"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.3.tgz#f1bb68ded42408c316b548e3ec2526d7dd03f4d2"
|
||||
integrity sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==
|
||||
version "5.30.4"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.4.tgz#62b4d16a819424e6317fd5ceffb4ee8dc769803a"
|
||||
integrity sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==
|
||||
dependencies:
|
||||
"@jridgewell/source-map" "^0.3.3"
|
||||
acorn "^8.8.2"
|
||||
|
Loading…
Reference in New Issue
Block a user