Update to angular 19

This commit is contained in:
2026-08-05 07:46:07 +02:00
parent 8bd323db91
commit 5e44c88cd3
133 changed files with 4671 additions and 2456 deletions
+2 -2
View File
@@ -334,11 +334,11 @@ if (argv.main) {
} }
if (argv.beta) { if (argv.beta) {
webpackArgs.push('--env.beta'); webpackArgs.push('--env', 'beta');
} }
if (argv.timing) { if (argv.timing) {
webpackArgs.push('--env.timing'); webpackArgs.push('--env', 'timing');
} }
const webpackProd = npmScript(webpackScript, webpackArgs); const webpackProd = npmScript(webpackScript, webpackArgs);
+4501 -2421
View File
File diff suppressed because it is too large Load Diff
+26 -24
View File
@@ -18,11 +18,11 @@
"ts-cov": "npm run ts -- --target es5", "ts-cov": "npm run ts -- --target es5",
"ts-cov-watch": "npm run ts -- --target es5 --watch", "ts-cov-watch": "npm run ts -- --target es5 --watch",
"webpack-prod": "node --max_old_space_size=8192 node_modules/webpack-cli/bin/cli --config webpack.prod.mjs --progress --color", "webpack-prod": "node --max_old_space_size=8192 node_modules/webpack-cli/bin/cli --config webpack.prod.mjs --progress --color",
"webpack-main": "npm run webpack-prod -- --env.main", "webpack-main": "npm run webpack-prod -- --env main",
"webpack-analyze": "npm run webpack-prod -- --env.analyze", "webpack-analyze": "npm run webpack-prod -- --env analyze",
"webpack-debug": "npm run webpack-prod -- --env.debug", "webpack-debug": "npm run webpack-prod -- --env debug",
"webpack-admin": "npm run webpack-prod -- --env.admin", "webpack-admin": "npm run webpack-prod -- --env admin",
"webpack-stats": "npm run webpack-prod -- --env.debug --json > stats.json", "webpack-stats": "npm run webpack-prod -- --env debug --json > stats.json",
"webpack-verbose": "npm run webpack-prod -- --verbose", "webpack-verbose": "npm run webpack-prod -- --verbose",
"wds": "webpack-dev-server --config webpack.dev.mjs --progress --color --port 8091", "wds": "webpack-dev-server --config webpack.dev.mjs --progress --color --port 8091",
"build": "gulp build", "build": "gulp build",
@@ -44,23 +44,22 @@
"update-fontawesome": "npm update @fortawesome/fontawesome-svg-core @fortawesome/free-brands-svg-icons @fortawesome/free-solid-svg-icons @fortawesome/angular-fontawesome --save" "update-fontawesome": "npm update @fortawesome/fontawesome-svg-core @fortawesome/free-brands-svg-icons @fortawesome/free-solid-svg-icons @fortawesome/angular-fontawesome --save"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "18.2.21", "@angular-devkit/build-angular": "19.2.27",
"@angular/animations": "18.2.14", "@angular/animations": "19.2.25",
"@angular/cdk": "18.2.14", "@angular/common": "19.2.25",
"@angular/common": "18.2.14", "@angular/compiler": "19.2.25",
"@angular/compiler": "18.2.14", "@angular/compiler-cli": "19.2.25",
"@angular/compiler-cli": "18.2.14", "@angular/core": "19.2.25",
"@angular/core": "18.2.14", "@angular/forms": "19.2.25",
"@angular/forms": "18.2.14", "@angular/platform-browser": "19.2.25",
"@angular/platform-browser": "18.2.14", "@angular/platform-browser-dynamic": "19.2.25",
"@angular/platform-browser-dynamic": "18.2.14", "@angular/platform-server": "19.2.25",
"@angular/platform-server": "18.2.14", "@angular/router": "19.2.25",
"@angular/router": "18.2.14", "@fortawesome/angular-fontawesome": "1.0.0",
"@ngtools/webpack": "18.0.0",
"@fortawesome/angular-fontawesome": "0.15.0",
"@fortawesome/fontawesome-svg-core": "6.7.2", "@fortawesome/fontawesome-svg-core": "6.7.2",
"@fortawesome/free-brands-svg-icons": "6.7.2", "@fortawesome/free-brands-svg-icons": "6.7.2",
"@fortawesome/free-solid-svg-icons": "6.7.2", "@fortawesome/free-solid-svg-icons": "6.7.2",
"@ngtools/webpack": "19.2.27",
"@types/bluebird": "3.5.42", "@types/bluebird": "3.5.42",
"@types/body-parser": "1.19.6", "@types/body-parser": "1.19.6",
"@types/chai": "5.2.3", "@types/chai": "5.2.3",
@@ -122,10 +121,10 @@
"howler": "2.1.2", "howler": "2.1.2",
"html-loader": "5.1.0", "html-loader": "5.1.0",
"html5-gamepad": "1.1.0", "html5-gamepad": "1.1.0",
"mocha": "6.2.0",
"merge2": "1.2.4", "merge2": "1.2.4",
"remap-istanbul": "^0.13.0", "mocha": "6.2.0",
"reflect-metadata": "0.2.2", "reflect-metadata": "0.2.2",
"remap-istanbul": "^0.13.0",
"rxjs": "7.8.2", "rxjs": "7.8.2",
"sass-loader": "13.3.3", "sass-loader": "13.3.3",
"sinon": "21.0.3", "sinon": "21.0.3",
@@ -133,7 +132,7 @@
"ts-node": "10.9.2", "ts-node": "10.9.2",
"tslib": "2.8.1", "tslib": "2.8.1",
"tsutils": "3.17.1", "tsutils": "3.17.1",
"typescript": "5.4", "typescript": "5.7.3",
"webpack": "5.105.4", "webpack": "5.105.4",
"webpack-bundle-analyzer": "5.2.0", "webpack-bundle-analyzer": "5.2.0",
"webpack-cli": "7.0.2", "webpack-cli": "7.0.2",
@@ -141,10 +140,13 @@
"webpack-merge": "6.0.1", "webpack-merge": "6.0.1",
"workbox-cli": "7.4.0", "workbox-cli": "7.4.0",
"wrapper-webpack-plugin": "2.2.2", "wrapper-webpack-plugin": "2.2.2",
"zone.js": "0.14.10" "zone.js": "0.15.1"
}, },
"dependencies": { "dependencies": {
"@angular/cdk": "19.2.19",
"@encharm/cws": "4.5.3", "@encharm/cws": "4.5.3",
"@passport-next/passport-facebook": "^3.1.3",
"@passport-next/passport-google-oauth2": "^1.0.0",
"ag-psd": "30.1.0", "ag-psd": "30.1.0",
"ag-sockets": "14.0.2", "ag-sockets": "14.0.2",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
@@ -174,7 +176,7 @@
"markdown-tree": "0.0.0", "markdown-tree": "0.0.0",
"mongoose": "9.3.2", "mongoose": "9.3.2",
"morgan": "1.9.1", "morgan": "1.9.1",
"ngx-bootstrap": "18.0.1", "ngx-bootstrap": "19.0.2",
"passport": "0.7.0", "passport": "0.7.0",
"passport-deviantart": "0.0.5", "passport-deviantart": "0.0.5",
"passport-discord": "0.1.3", "passport-discord": "0.1.3",
@@ -23,6 +23,7 @@ const defaultDuplicatesLimit = 10;
const year = (new Date()).getFullYear(); const year = (new Date()).getFullYear();
@Component({ @Component({
standalone: false,
selector: 'admin-account-details', selector: 'admin-account-details',
templateUrl: 'admin-account-details.pug', templateUrl: 'admin-account-details.pug',
styleUrls: ['admin-account-details.scss'], styleUrls: ['admin-account-details.scss'],
@@ -12,6 +12,7 @@ let currentPage = 0;
let not = false; let not = false;
@Component({ @Component({
standalone: false,
selector: 'admin-accounts', selector: 'admin-accounts',
templateUrl: 'admin-accounts.pug', templateUrl: 'admin-accounts.pug',
}) })
@@ -11,6 +11,7 @@ import {
let state: BaseTableState; let state: BaseTableState;
@Component({ @Component({
standalone: false,
selector: 'admin-events', selector: 'admin-events',
templateUrl: 'admin-events.pug', templateUrl: 'admin-events.pug',
}) })
@@ -4,6 +4,7 @@ import { Event } from '../../../common/adminInterfaces';
import { AdminModel } from '../../services/adminModel'; import { AdminModel } from '../../services/adminModel';
@Component({ @Component({
standalone: false,
selector: 'admin-origin-details', selector: 'admin-origin-details',
templateUrl: 'admin-origin-details.pug', templateUrl: 'admin-origin-details.pug',
}) })
@@ -4,6 +4,7 @@ import { faSync, faEraser, faClock, faUser, faChevronDown, faSpinner } from '../
import { AdminModel } from '../../services/adminModel'; import { AdminModel } from '../../services/adminModel';
@Component({ @Component({
standalone: false,
selector: 'admin-origins', selector: 'admin-origins',
templateUrl: 'admin-origins.pug', templateUrl: 'admin-origins.pug',
}) })
@@ -12,6 +12,7 @@ interface Field {
} }
@Component({ @Component({
standalone: false,
selector: 'admin-other', selector: 'admin-other',
templateUrl: 'admin-other.pug', templateUrl: 'admin-other.pug',
}) })
@@ -9,6 +9,7 @@ let currentPage = 1;
let query: FindPonyQuery = {}; let query: FindPonyQuery = {};
@Component({ @Component({
standalone: false,
selector: 'admin-ponies', selector: 'admin-ponies',
templateUrl: 'admin-ponies.pug', templateUrl: 'admin-ponies.pug',
styleUrls: ['admin-ponies.scss'], styleUrls: ['admin-ponies.scss'],
@@ -26,6 +26,7 @@ const frameTime = 1000 / SERVER_FPS;
const timePadding = 10; // ms const timePadding = 10; // ms
@Component({ @Component({
standalone: false,
selector: 'admin-reports-perf', selector: 'admin-reports-perf',
templateUrl: 'admin-reports-perf.pug', templateUrl: 'admin-reports-perf.pug',
}) })
@@ -1,6 +1,7 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@Component({ @Component({
standalone: false,
selector: 'admin-reports', selector: 'admin-reports',
templateUrl: 'admin-reports.pug', templateUrl: 'admin-reports.pug',
}) })
@@ -1,6 +1,7 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@Component({ @Component({
standalone: false,
selector: 'admin-sign-in', selector: 'admin-sign-in',
templateUrl: 'admin-sign-in.pug', templateUrl: 'admin-sign-in.pug',
}) })
@@ -8,6 +8,7 @@ import { AdminModel } from '../../services/adminModel';
import { faCog, faSlidersH } from '../../../client/icons'; import { faCog, faSlidersH } from '../../../client/icons';
@Component({ @Component({
standalone: false,
selector: 'admin-state', selector: 'admin-state',
templateUrl: 'admin-state.pug', templateUrl: 'admin-state.pug',
styleUrls: ['admin-state.scss'], styleUrls: ['admin-state.scss'],
+1
View File
@@ -17,6 +17,7 @@ export function popoverConfig() {
} }
@Component({ @Component({
standalone: false,
selector: 'pony-town-app', selector: 'pony-town-app',
templateUrl: 'admin.pug', templateUrl: 'admin.pug',
styleUrls: ['admin.scss'], styleUrls: ['admin.scss'],
@@ -1,6 +1,7 @@
import { Pipe, PipeTransform } from '@angular/core'; import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ @Pipe({
standalone: false,
name: 'keys', name: 'keys',
}) })
export class KeysPipe implements PipeTransform { export class KeysPipe implements PipeTransform {
@@ -1,6 +1,7 @@
import { Pipe, PipeTransform } from '@angular/core'; import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ @Pipe({
standalone: false,
name: 'orderBy', name: 'orderBy',
}) })
export class OrderByPipe implements PipeTransform { export class OrderByPipe implements PipeTransform {
@@ -2,6 +2,7 @@ import { Pipe, PipeTransform } from '@angular/core';
import { transliterate } from 'transliteration'; import { transliterate } from 'transliteration';
@Pipe({ @Pipe({
standalone: false,
name: 'translit', name: 'translit',
}) })
export class TranslitPipe implements PipeTransform { export class TranslitPipe implements PipeTransform {
@@ -4,6 +4,7 @@ import { Subscription } from '../../../../common/interfaces';
import { AdminModel } from '../../../services/adminModel'; import { AdminModel } from '../../../services/adminModel';
@Component({ @Component({
standalone: false,
selector: 'account-info-remote', selector: 'account-info-remote',
templateUrl: 'account-info-remote.pug', templateUrl: 'account-info-remote.pug',
}) })
@@ -56,6 +56,7 @@ const alertExpires = [
]; ];
@Component({ @Component({
standalone: false,
selector: 'account-info', selector: 'account-info',
templateUrl: 'account-info.pug', templateUrl: 'account-info.pug',
styleUrls: ['account-info.scss'], styleUrls: ['account-info.scss'],
@@ -4,6 +4,7 @@ import { Account, AccountStatus as IAccountStatus } from '../../../../common/adm
import { faUserSecret } from '../../../../client/icons'; import { faUserSecret } from '../../../../client/icons';
@Component({ @Component({
standalone: false,
selector: 'account-status', selector: 'account-status',
templateUrl: 'account-status.pug', templateUrl: 'account-status.pug',
}) })
@@ -5,6 +5,7 @@ import { getAge } from '../../../../common/adminUtils';
const year = (new Date()).getFullYear(); const year = (new Date()).getFullYear();
@Component({ @Component({
standalone: false,
selector: 'account-tooltip', selector: 'account-tooltip',
templateUrl: 'account-tooltip.pug', templateUrl: 'account-tooltip.pug',
}) })
@@ -9,6 +9,7 @@ import { replaceSwears } from '../../../../client/adminHtmlUtils';
import { addDays } from 'date-fns'; import { addDays } from 'date-fns';
@Component({ @Component({
standalone: false,
selector: 'admin-chat-log', selector: 'admin-chat-log',
templateUrl: 'admin-chat-log.pug', templateUrl: 'admin-chat-log.pug',
styleUrls: ['admin-chat-log.scss'], styleUrls: ['admin-chat-log.scss'],
@@ -5,6 +5,7 @@ import { AdminModel } from '../../../services/adminModel';
import { faInfo, faLock, faTrash, faEyeSlash, faArrowRight } from '../../../../client/icons'; import { faInfo, faLock, faTrash, faEyeSlash, faArrowRight } from '../../../../client/icons';
@Component({ @Component({
standalone: false,
selector: 'auth-info-edit', selector: 'auth-info-edit',
templateUrl: 'auth-info-edit.pug', templateUrl: 'auth-info-edit.pug',
}) })
@@ -4,6 +4,7 @@ import { AdminModel } from '../../../services/adminModel';
import { Auth } from '../../../../common/adminInterfaces'; import { Auth } from '../../../../common/adminInterfaces';
@Component({ @Component({
standalone: false,
selector: 'auth-info-remote', selector: 'auth-info-remote',
templateUrl: 'auth-info-remote.pug', templateUrl: 'auth-info-remote.pug',
}) })
@@ -3,6 +3,7 @@ import { Auth } from '../../../../common/adminInterfaces';
import { oauthIcons, faGlobe } from '../../../../client/icons'; import { oauthIcons, faGlobe } from '../../../../client/icons';
@Component({ @Component({
standalone: false,
selector: 'auth-info', selector: 'auth-info',
templateUrl: 'auth-info.pug', templateUrl: 'auth-info.pug',
styleUrls: ['auth-info.scss'], styleUrls: ['auth-info.scss'],
@@ -3,6 +3,7 @@ import { Subscription } from '../../../../common/interfaces';
import { AdminModel } from '../../../services/adminModel'; import { AdminModel } from '../../../services/adminModel';
@Component({ @Component({
standalone: false,
selector: 'auth-list-remote', selector: 'auth-list-remote',
templateUrl: 'auth-list-remote.pug', templateUrl: 'auth-list-remote.pug',
styleUrls: ['auth-list-remote.scss'], styleUrls: ['auth-list-remote.scss'],
@@ -2,6 +2,7 @@ import { Component, Input } from '@angular/core';
import { Auth } from '../../../../common/adminInterfaces'; import { Auth } from '../../../../common/adminInterfaces';
@Component({ @Component({
standalone: false,
selector: 'auth-list', selector: 'auth-list',
templateUrl: 'auth-list.pug', templateUrl: 'auth-list.pug',
styleUrls: ['auth-list.scss'], styleUrls: ['auth-list.scss'],
@@ -13,6 +13,7 @@ const ICONS = {
}; };
@Component({ @Component({
standalone: false,
selector: 'ban-icon', selector: 'ban-icon',
templateUrl: 'ban-icon.pug', templateUrl: 'ban-icon.pug',
styleUrls: ['ban-icon.scss'], styleUrls: ['ban-icon.scss'],
@@ -1,6 +1,7 @@
import { Component, Input } from '@angular/core'; import { Component, Input } from '@angular/core';
@Component({ @Component({
standalone: false,
selector: 'email-list', selector: 'email-list',
templateUrl: 'email-list.pug', templateUrl: 'email-list.pug',
}) })
@@ -5,6 +5,7 @@ import { faLanguage, faTrash, faComment, faClipboard } from '../../../../client/
import { getTranslationUrl } from '../../../../common/adminUtils'; import { getTranslationUrl } from '../../../../common/adminUtils';
@Component({ @Component({
standalone: false,
selector: 'events-table', selector: 'events-table',
templateUrl: 'events-table.pug', templateUrl: 'events-table.pug',
styleUrls: ['events-table.scss'], styleUrls: ['events-table.scss'],
@@ -3,6 +3,7 @@ import { IntervalUpdateService } from '../../services/intervalUpdateService';
import { formatDistanceToNow } from 'date-fns'; import { formatDistanceToNow } from 'date-fns';
@Component({ @Component({
standalone: false,
selector: 'from-now', selector: 'from-now',
template: '<span></span>', template: '<span></span>',
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@@ -1,6 +1,7 @@
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core'; import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
@Component({ @Component({
standalone: false,
selector: 'on-off-switch', selector: 'on-off-switch',
templateUrl: 'on-off-switch.pug', templateUrl: 'on-off-switch.pug',
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@@ -4,6 +4,7 @@ import { AdminModel } from '../../../services/adminModel';
import { Origin } from '../../../../common/adminInterfaces'; import { Origin } from '../../../../common/adminInterfaces';
@Component({ @Component({
standalone: false,
selector: 'origin-info-remote', selector: 'origin-info-remote',
templateUrl: 'origin-info-remote.pug', templateUrl: 'origin-info-remote.pug',
}) })
@@ -4,6 +4,7 @@ import { AdminModel } from '../../../services/adminModel';
import { countryCodeToName } from '../../../../common/countries'; import { countryCodeToName } from '../../../../common/countries';
@Component({ @Component({
standalone: false,
selector: 'origin-info', selector: 'origin-info',
templateUrl: 'origin-info.pug', templateUrl: 'origin-info.pug',
styleUrls: ['origin-info.scss'], styleUrls: ['origin-info.scss'],
@@ -4,6 +4,7 @@ import { AdminModel } from '../../../services/adminModel';
import { OriginInfoBase } from '../../../../common/adminInterfaces'; import { OriginInfoBase } from '../../../../common/adminInterfaces';
@Component({ @Component({
standalone: false,
selector: 'origin-list-remote', selector: 'origin-list-remote',
templateUrl: 'origin-list-remote.pug', templateUrl: 'origin-list-remote.pug',
}) })
@@ -4,6 +4,7 @@ import { AdminModel } from '../../../services/adminModel';
import { Character } from '../../../../common/adminInterfaces'; import { Character } from '../../../../common/adminInterfaces';
@Component({ @Component({
standalone: false,
selector: 'pony-info-remote', selector: 'pony-info-remote',
templateUrl: 'pony-info-remote.pug', templateUrl: 'pony-info-remote.pug',
}) })
@@ -5,6 +5,7 @@ import { isForbiddenName } from '../../../../common/security';
import { AdminModel } from '../../../services/adminModel'; import { AdminModel } from '../../../services/adminModel';
@Component({ @Component({
standalone: false,
selector: 'pony-info', selector: 'pony-info',
templateUrl: 'pony-info.pug', templateUrl: 'pony-info.pug',
styleUrls: ['pony-info.scss'], styleUrls: ['pony-info.scss'],
@@ -5,6 +5,7 @@ import { faTrash, faArrowRight } from '../../../../client/icons';
import { Character, PonyIdDateName, DuplicateResult } from '../../../../common/adminInterfaces'; import { Character, PonyIdDateName, DuplicateResult } from '../../../../common/adminInterfaces';
@Component({ @Component({
standalone: false,
selector: 'pony-list-remote', selector: 'pony-list-remote',
templateUrl: 'pony-list-remote.pug', templateUrl: 'pony-list-remote.pug',
styleUrls: ['pony-list-remote.scss'], styleUrls: ['pony-list-remote.scss'],
@@ -1,6 +1,7 @@
import { Component, Input, ChangeDetectionStrategy } from '@angular/core'; import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
@Component({ @Component({
standalone: false,
selector: 'time-field', selector: 'time-field',
templateUrl: 'time-field.pug', templateUrl: 'time-field.pug',
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@@ -13,6 +13,7 @@ const extensions = {
}; };
@Component({ @Component({
standalone: false,
selector: 'ua-info', selector: 'ua-info',
templateUrl: 'ua-info.pug', templateUrl: 'ua-info.pug',
styles: [`:host { display: inline-block; }`], styles: [`:host { display: inline-block; }`],
+1
View File
@@ -15,6 +15,7 @@ function toCredit(credit: Credit) {
} }
@Component({ @Component({
standalone: false,
selector: 'about', selector: 'about',
templateUrl: 'about.pug', templateUrl: 'about.pug',
styleUrls: ['about.scss'], styleUrls: ['about.scss'],
+1
View File
@@ -12,6 +12,7 @@ import { Router } from '@angular/router';
import { cleanName } from '../../../common/stringUtils'; import { cleanName } from '../../../common/stringUtils';
@Component({ @Component({
standalone: false,
selector: 'account', selector: 'account',
templateUrl: 'account.pug', templateUrl: 'account.pug',
styleUrls: ['account.scss'], styleUrls: ['account.scss'],
+1
View File
@@ -28,6 +28,7 @@ export function popoverConfig() {
} }
@Component({ @Component({
standalone: false,
selector: 'pony-town-app', selector: 'pony-town-app',
templateUrl: 'app.pug', templateUrl: 'app.pug',
styleUrls: ['app.scss'], styleUrls: ['app.scss'],
@@ -57,6 +57,7 @@ function eyeSprite(e: PonyEye | undefined) {
} }
@Component({ @Component({
standalone: false,
selector: 'character', selector: 'character',
templateUrl: 'character.pug', templateUrl: 'character.pug',
styleUrls: ['character.scss'], styleUrls: ['character.scss'],
@@ -9,6 +9,7 @@ import { BLACK } from '../../../common/colors';
import { Entity, Engine, EngineInfo, DebugFlags, tileTypeNames } from '../../../common/interfaces'; import { Entity, Engine, EngineInfo, DebugFlags, tileTypeNames } from '../../../common/interfaces';
@Component({ @Component({
standalone: false,
selector: 'editor-box', selector: 'editor-box',
templateUrl: 'editor-box.pug', templateUrl: 'editor-box.pug',
}) })
+1
View File
@@ -5,6 +5,7 @@ import { contactEmail, contactDiscord } from '../../../client/data';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute } from '@angular/router';
@Component({ @Component({
standalone: false,
selector: 'help', selector: 'help',
templateUrl: 'help.pug', templateUrl: 'help.pug',
styleUrls: ['help.scss'], styleUrls: ['help.scss'],
+1
View File
@@ -6,6 +6,7 @@ import { OAuthProvider, PonyObject } from '../../../common/interfaces';
import { stand } from '../../../common/ponyAnimations'; import { stand } from '../../../common/ponyAnimations';
@Component({ @Component({
standalone: false,
selector: 'home', selector: 'home',
templateUrl: 'home.pug', templateUrl: 'home.pug',
styleUrls: ['home.scss'], styleUrls: ['home.scss'],
@@ -10,6 +10,7 @@ import { last } from '../../../common/utils';
import { faCog } from '../../../client/icons'; import { faCog } from '../../../client/icons';
@Component({ @Component({
standalone: false,
selector: 'action-bar', selector: 'action-bar',
templateUrl: 'action-bar.pug', templateUrl: 'action-bar.pug',
styleUrls: ['action-bar.scss'], styleUrls: ['action-bar.scss'],
@@ -5,6 +5,7 @@ import { drawAction } from '../../../client/buttonActions';
import { removeItem } from '../../../common/utils'; import { removeItem } from '../../../common/utils';
@Component({ @Component({
standalone: false,
selector: 'action-button', selector: 'action-button',
templateUrl: 'action-button.pug', templateUrl: 'action-button.pug',
styleUrls: ['action-button.scss'], styleUrls: ['action-button.scss'],
@@ -23,6 +23,7 @@ function eyeSprite(e: PonyEye | undefined) {
} }
@Component({ @Component({
standalone: false,
selector: 'actions-modal', selector: 'actions-modal',
templateUrl: 'actions-modal.pug', templateUrl: 'actions-modal.pug',
styleUrls: ['actions-modal.scss'], styleUrls: ['actions-modal.scss'],
@@ -2,6 +2,7 @@ import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from
import { parseColor, colorToCSS } from '../../../common/color'; import { parseColor, colorToCSS } from '../../../common/color';
@Component({ @Component({
standalone: false,
selector: 'bitmap-box', selector: 'bitmap-box',
templateUrl: 'bitmap-box.pug', templateUrl: 'bitmap-box.pug',
styleUrls: ['bitmap-box.scss'], styleUrls: ['bitmap-box.scss'],
@@ -10,6 +10,7 @@ export interface ButtMarkEditorState {
} }
@Component({ @Component({
standalone: false,
selector: 'butt-mark-editor', selector: 'butt-mark-editor',
templateUrl: 'butt-mark-editor.pug', templateUrl: 'butt-mark-editor.pug',
}) })
@@ -43,6 +43,7 @@ function comparePonies(a: PonyObject, b: PonyObject) {
} }
@Component({ @Component({
standalone: false,
selector: 'character-list', selector: 'character-list',
templateUrl: 'character-list.pug', templateUrl: 'character-list.pug',
styleUrls: ['character-list.scss'], styleUrls: ['character-list.scss'],
@@ -21,6 +21,7 @@ const DEFAULT_STATE = defaultPonyState();
const DEFAULT_OPTIONS = defaultDrawPonyOptions(); const DEFAULT_OPTIONS = defaultDrawPonyOptions();
@Component({ @Component({
standalone: false,
selector: 'character-preview', selector: 'character-preview',
template: '<canvas class="rounded" #canvas></canvas>', template: '<canvas class="rounded" #canvas></canvas>',
styles: [`:host { display: block; } canvas { width: 100%; height: 100%; }`], styles: [`:host { display: block; } canvas { width: 100%; height: 100%; }`],
@@ -12,6 +12,7 @@ import { delay } from '../../../common/utils';
import { isMobile } from '../../../client/data'; import { isMobile } from '../../../client/data';
@Component({ @Component({
standalone: false,
selector: 'character-select', selector: 'character-select',
templateUrl: 'character-select.pug', templateUrl: 'character-select.pug',
styleUrls: ['character-select.scss'], styleUrls: ['character-select.scss'],
@@ -39,6 +39,7 @@ function isActionCommand(message: string) {
} }
@Component({ @Component({
standalone: false,
selector: 'chat-box', selector: 'chat-box',
templateUrl: 'chat-box.pug', templateUrl: 'chat-box.pug',
styleUrls: ['chat-box.scss'], styleUrls: ['chat-box.scss'],
@@ -208,6 +208,7 @@ function findUserIndex(users: IndexEntryUser[], id: number, crc: number | undefi
} }
@Component({ @Component({
standalone: false,
selector: 'chat-log', selector: 'chat-log',
templateUrl: 'chat-log.pug', templateUrl: 'chat-log.pug',
styleUrls: ['chat-log.scss'], styleUrls: ['chat-log.scss'],
@@ -2,6 +2,7 @@ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from
import { faCheck } from '../../../client/icons'; import { faCheck } from '../../../client/icons';
@Component({ @Component({
standalone: false,
selector: 'check-box', selector: 'check-box',
templateUrl: 'check-box.pug', templateUrl: 'check-box.pug',
styleUrls: ['check-box.scss'], styleUrls: ['check-box.scss'],
@@ -7,6 +7,7 @@ import { faChevronDown } from '../../../client/icons';
const SIZE = 175; const SIZE = 175;
@Component({ @Component({
standalone: false,
selector: 'color-picker', selector: 'color-picker',
templateUrl: 'color-picker.pug', templateUrl: 'color-picker.pug',
styleUrls: ['color-picker.scss'], styleUrls: ['color-picker.scss'],
@@ -2,6 +2,7 @@ import { Component, ChangeDetectionStrategy, Output, Input, EventEmitter } from
import { uniqueId } from 'lodash'; import { uniqueId } from 'lodash';
@Component({ @Component({
standalone: false,
selector: 'custom-checkbox', selector: 'custom-checkbox',
templateUrl: 'custom-checkbox.pug', templateUrl: 'custom-checkbox.pug',
styleUrls: ['custom-checkbox.scss'], styleUrls: ['custom-checkbox.scss'],
@@ -4,6 +4,7 @@ import { MONTH_NAMES_EN } from '../../../common/constants';
import { getLocale } from '../../../client/clientUtils'; import { getLocale } from '../../../client/clientUtils';
@Component({ @Component({
standalone: false,
selector: 'date-picker', selector: 'date-picker',
templateUrl: 'date-picker.pug', templateUrl: 'date-picker.pug',
}) })
@@ -1,6 +1,7 @@
import { Directive, AfterViewInit, ElementRef } from '@angular/core'; import { Directive, AfterViewInit, ElementRef } from '@angular/core';
@Directive({ @Directive({
standalone: false,
selector: '[agAutoFocus]' selector: '[agAutoFocus]'
}) })
export class AgAutoFocus implements AfterViewInit { export class AgAutoFocus implements AfterViewInit {
@@ -123,7 +123,7 @@ export function handleDrag(element: HTMLElement, emit: (event: AgDragEvent) => v
return () => handlers.forEach(f => f()); return () => handlers.forEach(f => f());
} }
@Directive({ selector: '[agDrag]' }) @Directive({ standalone: false, selector: '[agDrag]' })
export class AgDrag implements OnInit, OnDestroy { export class AgDrag implements OnInit, OnDestroy {
@Input('agDragRelative') relative: 'self' | 'parent' | undefined = undefined; @Input('agDragRelative') relative: 'self' | 'parent' | undefined = undefined;
@Input('agDragPrevent') prevent = false; @Input('agDragPrevent') prevent = false;
@@ -1,6 +1,7 @@
import { Directive, OnInit, ElementRef } from '@angular/core'; import { Directive, OnInit, ElementRef } from '@angular/core';
@Directive({ @Directive({
standalone: false,
selector: 'a[href]' selector: 'a[href]'
}) })
export class Anchor implements OnInit { export class Anchor implements OnInit {
@@ -2,6 +2,7 @@ import { Directive, Input, Optional } from '@angular/core';
import { NgModel } from '@angular/forms'; import { NgModel } from '@angular/forms';
@Directive({ @Directive({
standalone: false,
selector: '[btnHighlight]', selector: '[btnHighlight]',
host: { host: {
'[class.btn-default]': '!on', '[class.btn-default]': '!on',
@@ -19,6 +20,7 @@ export class BtnHighlight {
} }
@Directive({ @Directive({
standalone: false,
selector: '[btnHighlightDanger]', selector: '[btnHighlightDanger]',
host: { host: {
'[class.btn-default]': '!btnHighlightDanger', '[class.btn-default]': '!btnHighlightDanger',
@@ -76,6 +76,7 @@ export class DraggableService {
} }
@Component({ @Component({
standalone: false,
selector: 'draggable-outlet', selector: 'draggable-outlet',
template: `<div></div>`, template: `<div></div>`,
styles: [`:host { position: fixed; top: 0; left: 0; z-index: 10000; }`], styles: [`:host { position: fixed; top: 0; left: 0; z-index: 10000; }`],
@@ -86,7 +87,7 @@ export class DraggableOutlet {
} }
} }
@Directive({ selector: '[draggableDrop]' }) @Directive({ standalone: false, selector: '[draggableDrop]' })
export class DraggableDrop<T> implements OnInit, OnDestroy { export class DraggableDrop<T> implements OnInit, OnDestroy {
@Input('draggablePad') pad = 0; @Input('draggablePad') pad = 0;
@Output('draggableDrop') drop = new EventEmitter<T>(); @Output('draggableDrop') drop = new EventEmitter<T>();
@@ -119,6 +120,7 @@ export class DraggableDrop<T> implements OnInit, OnDestroy {
} }
@Directive({ @Directive({
standalone: false,
selector: '[draggableItem]', selector: '[draggableItem]',
host: { host: {
'[style.touch-action]': `touchAction`, '[style.touch-action]': `touchAction`,
@@ -12,6 +12,7 @@ export class DropdownOutletService {
} }
@Component({ @Component({
standalone: false,
selector: 'dropdown-outlet', selector: 'dropdown-outlet',
template: `<ng-template></ng-template>`, template: `<ng-template></ng-template>`,
}) })
@@ -23,6 +24,7 @@ export class DropdownOutlet {
} }
@Directive({ @Directive({
standalone: false,
selector: '[dropdownMenu]', selector: '[dropdownMenu]',
}) })
export class DropdownMenu { export class DropdownMenu {
@@ -108,6 +110,7 @@ export class DropdownMenu {
} }
@Directive({ @Directive({
standalone: false,
selector: '[dropdown]', selector: '[dropdown]',
exportAs: 'ag-dropdown', exportAs: 'ag-dropdown',
host: { host: {
@@ -201,6 +204,7 @@ export class Dropdown {
} }
@Directive({ @Directive({
standalone: false,
selector: '[dropdownToggle]', selector: '[dropdownToggle]',
host: { host: {
'aria-haspopup': 'true', 'aria-haspopup': 'true',
@@ -1,6 +1,7 @@
import { Directive, ElementRef, Input, HostListener, HostBinding, Output, EventEmitter } from '@angular/core'; import { Directive, ElementRef, Input, HostListener, HostBinding, Output, EventEmitter } from '@angular/core';
@Directive({ @Directive({
standalone: false,
selector: '[fixToTop]', selector: '[fixToTop]',
}) })
export class FixToTop { export class FixToTop {
@@ -1,6 +1,7 @@
import { Directive, AfterViewInit, ElementRef } from '@angular/core'; import { Directive, AfterViewInit, ElementRef } from '@angular/core';
@Directive({ @Directive({
standalone: false,
selector: '[focusTitle]', selector: '[focusTitle]',
host: { host: {
'tabindex': '-1', 'tabindex': '-1',
@@ -3,6 +3,7 @@ import { isParentOf, focusFirstElement, findFocusableElements } from '../../../c
import { isMobile } from '../../../client/data'; import { isMobile } from '../../../client/data';
@Directive({ @Directive({
standalone: false,
selector: '[focusTrap]', selector: '[focusTrap]',
}) })
export class FocusTrap implements OnInit, OnDestroy { export class FocusTrap implements OnInit, OnDestroy {
@@ -4,6 +4,7 @@ import { hasFeatureFlag, featureFlagsChanged } from '../../../client/clientUtils
import { Model } from '../../services/model'; import { Model } from '../../services/model';
@Directive({ @Directive({
standalone: false,
selector: '[hasFeature]', selector: '[hasFeature]',
}) })
export class HasFeature implements AfterViewInit, OnDestroy { export class HasFeature implements AfterViewInit, OnDestroy {
@@ -3,6 +3,7 @@ import { uniqueId } from 'lodash';
import { findParentElement } from '../../../client/htmlUtils'; import { findParentElement } from '../../../client/htmlUtils';
@Directive({ @Directive({
standalone: false,
selector: '[labelledBy]', selector: '[labelledBy]',
}) })
export class LabelledBy implements OnInit { export class LabelledBy implements OnInit {
@@ -2,6 +2,7 @@ import { Directive, HostBinding } from '@angular/core';
import { RouterLinkActive } from '@angular/router'; import { RouterLinkActive } from '@angular/router';
@Directive({ @Directive({
standalone: false,
selector: '[linkCurrent]', selector: '[linkCurrent]',
}) })
export class LinkCurrent { export class LinkCurrent {
@@ -2,6 +2,7 @@ import { Directive, Input, HostBinding } from '@angular/core';
import { getUrl } from '../../../client/rev'; import { getUrl } from '../../../client/rev';
@Directive({ @Directive({
standalone: false,
selector: '[revSrc]', selector: '[revSrc]',
}) })
export class RevSrc { export class RevSrc {
@@ -4,6 +4,7 @@ import { Tabset } from '../tabset/tabset';
import { StorageService } from '../../services/storageService'; import { StorageService } from '../../services/storageService';
@Directive({ @Directive({
standalone: false,
selector: '[saveActiveTab]', selector: '[saveActiveTab]',
}) })
export class SaveActiveTab implements OnInit, OnDestroy { export class SaveActiveTab implements OnInit, OnDestroy {
@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
import { discordLink } from '../../../client/data'; import { discordLink } from '../../../client/data';
@Component({ @Component({
standalone: false,
selector: 'discord-button', selector: 'discord-button',
templateUrl: 'discord-button.pug', templateUrl: 'discord-button.pug',
styleUrls: ['discord-button.scss'], styleUrls: ['discord-button.scss'],
@@ -25,6 +25,7 @@ const DERP: Expression = {
}; };
@Component({ @Component({
standalone: false,
selector: 'discord-pony', selector: 'discord-pony',
templateUrl: 'discord-pony.pug', templateUrl: 'discord-pony.pug',
}) })
@@ -5,6 +5,7 @@ import { getCharacterSprite } from '../../../graphics/spriteFont';
import { loadAndInitSpriteSheets } from '../../../client/loadSprites'; import { loadAndInitSpriteSheets } from '../../../client/loadSprites';
@Component({ @Component({
standalone: false,
selector: 'emote-box', selector: 'emote-box',
template: '<img #image class="emote-box pixelart" />', template: '<img #image class="emote-box pixelart" />',
styles: ['.emote-box { pointer-events: none; }'], styles: ['.emote-box { pointer-events: none; }'],
@@ -2,6 +2,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core';
import { faLock } from '../../../client/icons'; import { faLock } from '../../../client/icons';
@Component({ @Component({
standalone: false,
selector: 'fill-outline', selector: 'fill-outline',
templateUrl: 'fill-outline.pug', templateUrl: 'fill-outline.pug',
styleUrls: ['fill-outline.scss'], styleUrls: ['fill-outline.scss'],
@@ -7,6 +7,7 @@ import { removeItem } from '../../../common/utils';
import { SettingsService } from '../../services/settingsService'; import { SettingsService } from '../../services/settingsService';
@Component({ @Component({
standalone: false,
selector: 'friends-box', selector: 'friends-box',
templateUrl: 'friends-box.pug', templateUrl: 'friends-box.pug',
styleUrls: ['friends-box.scss'], styleUrls: ['friends-box.scss'],
@@ -4,6 +4,7 @@ import { InstallService } from '../../services/installService';
import { isMobile } from '../../../client/data'; import { isMobile } from '../../../client/data';
@Component({ @Component({
standalone: false,
selector: 'install-button', selector: 'install-button',
templateUrl: 'install-button.pug', templateUrl: 'install-button.pug',
styleUrls: ['install-button.scss'], styleUrls: ['install-button.scss'],
@@ -7,6 +7,7 @@ import { removeItem } from '../../../common/utils';
import { Model } from '../../services/model'; import { Model } from '../../services/model';
@Component({ @Component({
standalone: false,
selector: 'invites-modal', selector: 'invites-modal',
templateUrl: 'invites-modal.pug', templateUrl: 'invites-modal.pug',
}) })
@@ -1,6 +1,7 @@
import { Component, Input } from '@angular/core'; import { Component, Input } from '@angular/core';
@Component({ @Component({
standalone: false,
selector: 'kbd-key', selector: 'kbd-key',
templateUrl: 'kbd-key.pug', templateUrl: 'kbd-key.pug',
}) })
@@ -9,6 +9,7 @@ import { SettingsService } from '../../services/settingsService';
import { REQUEST_DATE_OF_BIRTH } from '../../../common/constants'; import { REQUEST_DATE_OF_BIRTH } from '../../../common/constants';
@Component({ @Component({
standalone: false,
selector: 'menu-bar', selector: 'menu-bar',
templateUrl: 'menu-bar.pug', templateUrl: 'menu-bar.pug',
styleUrls: ['menu-bar.scss'], styleUrls: ['menu-bar.scss'],
@@ -2,6 +2,7 @@ import { Component, Input } from '@angular/core';
import { emptyIcon } from '../../../client/icons'; import { emptyIcon } from '../../../client/icons';
@Component({ @Component({
standalone: false,
selector: 'menu-item', selector: 'menu-item',
templateUrl: 'menu-item.pug', templateUrl: 'menu-item.pug',
styleUrls: ['menu-item.scss'], styleUrls: ['menu-item.scss'],
@@ -9,6 +9,7 @@ const ageLabels = ['', 'M', 'A', '', '', '[M]', '[A]'];
const ageTitles = ['Not set', 'Minor', 'Adult', '', '', 'Minor (locked)', 'Adult (locked)']; const ageTitles = ['Not set', 'Minor', 'Adult', '', '', 'Minor (locked)', 'Adult (locked)'];
@Component({ @Component({
standalone: false,
selector: 'mod-box', selector: 'mod-box',
templateUrl: 'mod-box.pug', templateUrl: 'mod-box.pug',
styleUrls: ['mod-box.scss'], styleUrls: ['mod-box.scss'],
@@ -6,6 +6,7 @@ import { faBan } from '../../../client/icons';
import { getPaletteInfo } from '../../../client/pony'; import { getPaletteInfo } from '../../../client/pony';
@Component({ @Component({
standalone: false,
selector: 'notification-item', selector: 'notification-item',
templateUrl: 'notification-item.pug', templateUrl: 'notification-item.pug',
styleUrls: ['notification-item.scss'], styleUrls: ['notification-item.scss'],
@@ -5,6 +5,7 @@ import { faEllipsisV } from '../../../client/icons';
const LIMIT = 8; const LIMIT = 8;
@Component({ @Component({
standalone: false,
selector: 'notification-list', selector: 'notification-list',
templateUrl: 'notification-list.pug', templateUrl: 'notification-list.pug',
styleUrls: ['notification-list.scss'], styleUrls: ['notification-list.scss'],
@@ -4,6 +4,7 @@ import { Model } from '../../services/model';
import { hardReload } from '../../../client/clientUtils'; import { hardReload } from '../../../client/clientUtils';
@Component({ @Component({
standalone: false,
selector: 'page-loader', selector: 'page-loader',
templateUrl: 'page-loader.pug', templateUrl: 'page-loader.pug',
styleUrls: ['page-loader.scss'], styleUrls: ['page-loader.scss'],
@@ -5,6 +5,7 @@ import { partyLeaderIcon, offlineIcon } from '../../../client/icons';
import { getPaletteInfo } from '../../../client/pony'; import { getPaletteInfo } from '../../../client/pony';
@Component({ @Component({
standalone: false,
selector: 'party-box', selector: 'party-box',
templateUrl: 'party-box.pug', templateUrl: 'party-box.pug',
styleUrls: ['party-box.scss'], styleUrls: ['party-box.scss'],
@@ -12,6 +12,7 @@ function visibleMembers(members: PartyMember[], max: number, start: number) {
} }
@Component({ @Component({
standalone: false,
selector: 'party-list', selector: 'party-list',
templateUrl: 'party-list.pug', templateUrl: 'party-list.pug',
styleUrls: ['party-list.scss'], styleUrls: ['party-list.scss'],
@@ -1,6 +1,7 @@
import { Pipe, PipeTransform } from '@angular/core'; import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ @Pipe({
standalone: false,
name: 'siteName', name: 'siteName',
}) })
export class SiteNamePipe implements PipeTransform { export class SiteNamePipe implements PipeTransform {
@@ -29,6 +29,7 @@ const ignoredErrors = [
]; ];
@Component({ @Component({
standalone: false,
selector: 'play-box', selector: 'play-box',
templateUrl: 'play-box.pug', templateUrl: 'play-box.pug',
styleUrls: ['play-box.scss'], styleUrls: ['play-box.scss'],
@@ -3,6 +3,7 @@ import { discordLink } from '../../../client/data';
import { GENERAL_RULES } from '../../../common/constants'; import { GENERAL_RULES } from '../../../common/constants';
@Component({ @Component({
standalone: false,
selector: 'play-notice', selector: 'play-notice',
templateUrl: 'play-notice.pug', templateUrl: 'play-notice.pug',
}) })
@@ -14,6 +14,7 @@ import { isIgnored, isHidden, isFriend } from '../../../common/entityUtils';
import { setFlag } from '../../../common/utils'; import { setFlag } from '../../../common/utils';
@Component({ @Component({
standalone: false,
selector: 'pony-box', selector: 'pony-box',
templateUrl: 'pony-box.pug', templateUrl: 'pony-box.pug',
styleUrls: ['pony-box.scss'], styleUrls: ['pony-box.scss'],
@@ -26,6 +26,7 @@ const options = defaultDrawPonyOptions();
const state = defaultPonyState(); const state = defaultPonyState();
@Component({ @Component({
standalone: false,
selector: 'portrait-box', selector: 'portrait-box',
templateUrl: 'portrait-box.pug', templateUrl: 'portrait-box.pug',
styleUrls: ['portrait-box.scss'], styleUrls: ['portrait-box.scss'],
@@ -2,6 +2,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core';
import { times } from 'lodash'; import { times } from 'lodash';
@Component({ @Component({
standalone: false,
selector: 'scale-picker', selector: 'scale-picker',
templateUrl: 'scale-picker.pug', templateUrl: 'scale-picker.pug',
}) })
@@ -7,6 +7,7 @@ const FILLS = ['Orange', 'DodgerBlue', 'LimeGreen', 'Orchid', 'crimson', 'Aquama
const OUTLINES = ['Chocolate', 'SteelBlue', 'ForestGreen', 'DarkOrchid', 'darkred', 'DarkTurquoise']; const OUTLINES = ['Chocolate', 'SteelBlue', 'ForestGreen', 'DarkOrchid', 'darkred', 'DarkTurquoise'];
@Directive({ @Directive({
standalone: false,
selector: '[setOutlineHidden]', selector: '[setOutlineHidden]',
}) })
export class SetOutlineHidden { export class SetOutlineHidden {
@@ -14,6 +15,7 @@ export class SetOutlineHidden {
} }
@Component({ @Component({
standalone: false,
selector: 'set-selection', selector: 'set-selection',
templateUrl: 'set-selection.pug', templateUrl: 'set-selection.pug',
styleUrls: ['set-selection.scss'], styleUrls: ['set-selection.scss'],
@@ -14,6 +14,7 @@ import { SettingsService } from '../../services/settingsService';
import { Audio } from '../../services/audio'; import { Audio } from '../../services/audio';
@Component({ @Component({
standalone: false,
selector: 'settings-box', selector: 'settings-box',
templateUrl: 'settings-box.pug', templateUrl: 'settings-box.pug',
styleUrls: ['settings-box.scss'], styleUrls: ['settings-box.scss'],

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