chore: update packages (#3132)

* chore: update packages

* start tunnel messaging

* chore: standalone

* pbpaste instead

---------

Co-authored-by: Matt Hill <mattnine@protonmail.com>
This commit is contained in:
Alex Inkin
2026-03-09 19:53:47 +04:00
committed by GitHub
parent a4bae73592
commit be921b7865
66 changed files with 1868 additions and 1803 deletions

View File

@@ -1,14 +1,18 @@
import { Component, inject } from '@angular/core'
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'
import { RouterOutlet } from '@angular/router'
import { i18nService } from '@start9labs/shared'
import { TuiRoot } from '@taiga-ui/core'
import { PatchDB } from 'patch-db-client'
import { merge } from 'rxjs'
import { ToastContainerComponent } from 'src/app/components/toast-container.component'
import { PatchDataService } from './services/patch-data.service'
import { DataModel } from './services/patch-db/data-model'
import { PatchMonitorService } from './services/patch-monitor.service'
@Component({
selector: 'app-root',
imports: [TuiRoot, RouterOutlet, ToastContainerComponent],
template: `
<tui-root tuiTheme="dark">
<router-outlet />
@@ -26,7 +30,6 @@ import { PatchMonitorService } from './services/patch-monitor.service'
font-family: 'Proxima Nova', system-ui;
}
`,
standalone: false,
})
export class AppComponent {
private readonly i18n = inject(i18nService)

View File

@@ -0,0 +1,199 @@
import {
provideHttpClient,
withFetch,
withInterceptorsFromDi,
} from '@angular/common/http'
import {
ApplicationConfig,
inject,
provideAppInitializer,
provideZoneChangeDetection,
} from '@angular/core'
import { UntypedFormBuilder } from '@angular/forms'
import { provideAnimations } from '@angular/platform-browser/animations'
import {
ActivationStart,
PreloadAllModules,
provideRouter,
Router,
withComponentInputBinding,
withDisabledInitialNavigation,
withInMemoryScrolling,
withPreloading,
withRouterConfig,
} from '@angular/router'
import { provideServiceWorker } from '@angular/service-worker'
import { WA_LOCATION } from '@ng-web-apis/common'
import initArgon from '@start9labs/argon2'
import {
AbstractCategoryService,
FilterPackagesPipe,
} from '@start9labs/marketplace'
import {
I18N_PROVIDERS,
I18N_STORAGE,
i18nService,
Languages,
RELATIVE_URL,
VERSION,
WorkspaceConfig,
} from '@start9labs/shared'
import { tuiObfuscateOptionsProvider } from '@taiga-ui/cdk'
import {
TUI_DATE_FORMAT,
TUI_DIALOGS_CLOSE,
TUI_MEDIA,
tuiAlertOptionsProvider,
tuiButtonOptionsProvider,
tuiDropdownOptionsProvider,
tuiNumberFormatProvider,
} from '@taiga-ui/core'
import { provideEventPlugins } from '@taiga-ui/event-plugins'
import {
TUI_DATE_TIME_VALUE_TRANSFORMER,
TUI_DATE_VALUE_TRANSFORMER,
} from '@taiga-ui/kit'
import { PatchDB } from 'patch-db-client'
import { filter, identity, merge, of, pairwise } from 'rxjs'
import { FilterUpdatesPipe } from 'src/app/routes/portal/routes/updates/filter-updates.pipe'
import { ApiService } from 'src/app/services/api/embassy-api.service'
import { LiveApiService } from 'src/app/services/api/embassy-live-api.service'
import { MockApiService } from 'src/app/services/api/embassy-mock-api.service'
import { AuthService } from 'src/app/services/auth.service'
import { CategoryService } from 'src/app/services/category.service'
import { ClientStorageService } from 'src/app/services/client-storage.service'
import { ConfigService } from 'src/app/services/config.service'
import { DateTransformerService } from 'src/app/services/date-transformer.service'
import { DatetimeTransformerService } from 'src/app/services/datetime-transformer.service'
import {
PATCH_CACHE,
PatchDbSource,
} from 'src/app/services/patch-db/patch-db-source'
import { StateService } from 'src/app/services/state.service'
import { StorageService } from 'src/app/services/storage.service'
import { environment } from 'src/environments/environment'
import { ROUTES } from './app.routes'
const {
useMocks,
ui: { api },
} = require('../../../../config.json') as WorkspaceConfig
export const APP_CONFIG: ApplicationConfig = {
providers: [
provideZoneChangeDetection(),
provideAnimations(),
provideEventPlugins(),
provideHttpClient(withInterceptorsFromDi(), withFetch()),
provideRouter(
ROUTES,
withDisabledInitialNavigation(),
withComponentInputBinding(),
withPreloading(PreloadAllModules),
withInMemoryScrolling({ scrollPositionRestoration: 'enabled' }),
withRouterConfig({ paramsInheritanceStrategy: 'always' }),
),
provideServiceWorker('ngsw-worker.js', {
enabled: environment.useServiceWorker,
// Register the ServiceWorker as soon as the application is stable
// or after 30 seconds (whichever comes first).
registrationStrategy: 'registerWhenStable:30000',
}),
I18N_PROVIDERS,
FilterPackagesPipe,
FilterUpdatesPipe,
UntypedFormBuilder,
tuiNumberFormatProvider({ decimalSeparator: '.', thousandSeparator: '' }),
tuiButtonOptionsProvider({ size: 'm' }),
tuiDropdownOptionsProvider({ appearance: 'start-os' }),
tuiAlertOptionsProvider({
autoClose: appearance => (appearance === 'negative' ? 0 : 3000),
}),
{
provide: TUI_DATE_FORMAT,
useValue: of({
mode: 'MDY',
separator: '/',
}),
},
{
provide: TUI_DATE_VALUE_TRANSFORMER,
useClass: DateTransformerService,
},
{
provide: TUI_DATE_TIME_VALUE_TRANSFORMER,
useClass: DatetimeTransformerService,
},
{
provide: ApiService,
useClass: useMocks ? MockApiService : LiveApiService,
},
{
provide: PatchDB,
deps: [PatchDbSource, PATCH_CACHE],
useClass: PatchDB,
},
provideAppInitializer(() => {
const i18n = inject(i18nService)
const origin = inject(WA_LOCATION).origin
const module_or_path = new URL('/assets/argon2_bg.wasm', origin)
initArgon({ module_or_path })
inject(StorageService).migrate036()
inject(AuthService).init()
inject(ClientStorageService).init()
inject(Router).initialNavigation()
i18n.setLanguage(i18n.language || 'english')
}),
{
provide: RELATIVE_URL,
useValue: `/${api.url}/${api.version}`,
},
{
provide: AbstractCategoryService,
useClass: CategoryService,
},
{
provide: TUI_DIALOGS_CLOSE,
useFactory: () =>
merge(
inject(Router).events.pipe(filter(e => e instanceof ActivationStart)),
inject(StateService).pipe(
pairwise(),
filter(
([prev, curr]) =>
prev === 'running' &&
(curr === 'error' || curr === 'initializing'),
),
),
),
},
{
provide: I18N_STORAGE,
useFactory: () => {
const api = inject(ApiService)
return (language: Languages) => api.setLanguage({ language })
},
},
{
provide: VERSION,
useFactory: () => inject(ConfigService).version,
},
tuiObfuscateOptionsProvider({
recipes: {
mask: ({ length }) => '•'.repeat(length),
none: identity,
},
}),
{
provide: TUI_MEDIA,
useValue: {
mobile: 1000,
desktopSmall: 1280,
desktopLarge: Infinity,
},
},
],
}

View File

@@ -1,36 +0,0 @@
import {
provideHttpClient,
withFetch,
withInterceptorsFromDi,
} from '@angular/common/http'
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { ServiceWorkerModule } from '@angular/service-worker'
import { TuiRoot } from '@taiga-ui/core'
import { ToastContainerComponent } from 'src/app/components/toast-container.component'
import { environment } from '../environments/environment'
import { AppComponent } from './app.component'
import { APP_PROVIDERS } from './app.providers'
import { RoutingModule } from './routing.module'
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
RoutingModule,
ToastContainerComponent,
TuiRoot,
ServiceWorkerModule.register('ngsw-worker.js', {
enabled: environment.useServiceWorker,
// Register the ServiceWorker as soon as the application is stable
// or after 30 seconds (whichever comes first).
registrationStrategy: 'registerWhenStable:30000',
}),
],
providers: [
APP_PROVIDERS,
provideHttpClient(withInterceptorsFromDi(), withFetch()),
],
bootstrap: [AppComponent],
})
export class AppModule {}

View File

@@ -1,157 +0,0 @@
import { inject, provideAppInitializer } from '@angular/core'
import { UntypedFormBuilder } from '@angular/forms'
import { provideAnimations } from '@angular/platform-browser/animations'
import { ActivationStart, Router } from '@angular/router'
import { WA_LOCATION } from '@ng-web-apis/common'
import initArgon from '@start9labs/argon2'
import {
AbstractCategoryService,
FilterPackagesPipe,
} from '@start9labs/marketplace'
import {
I18N_PROVIDERS,
I18N_STORAGE,
i18nService,
Languages,
RELATIVE_URL,
VERSION,
WorkspaceConfig,
} from '@start9labs/shared'
import { tuiObfuscateOptionsProvider } from '@taiga-ui/cdk'
import {
TUI_DATE_FORMAT,
TUI_DIALOGS_CLOSE,
TUI_MEDIA,
tuiAlertOptionsProvider,
tuiButtonOptionsProvider,
tuiDropdownOptionsProvider,
tuiNumberFormatProvider,
} from '@taiga-ui/core'
import { provideEventPlugins } from '@taiga-ui/event-plugins'
import {
TUI_DATE_TIME_VALUE_TRANSFORMER,
TUI_DATE_VALUE_TRANSFORMER,
} from '@taiga-ui/kit'
import { PatchDB } from 'patch-db-client'
import { filter, identity, merge, of, pairwise } from 'rxjs'
import { ConfigService } from 'src/app/services/config.service'
import {
PATCH_CACHE,
PatchDbSource,
} from 'src/app/services/patch-db/patch-db-source'
import { StateService } from 'src/app/services/state.service'
import { FilterUpdatesPipe } from './routes/portal/routes/updates/filter-updates.pipe'
import { ApiService } from './services/api/embassy-api.service'
import { LiveApiService } from './services/api/embassy-live-api.service'
import { MockApiService } from './services/api/embassy-mock-api.service'
import { AuthService } from './services/auth.service'
import { CategoryService } from './services/category.service'
import { ClientStorageService } from './services/client-storage.service'
import { DateTransformerService } from './services/date-transformer.service'
import { DatetimeTransformerService } from './services/datetime-transformer.service'
import { StorageService } from './services/storage.service'
const {
useMocks,
ui: { api },
} = require('../../../../config.json') as WorkspaceConfig
export const APP_PROVIDERS = [
provideAnimations(),
provideEventPlugins(),
I18N_PROVIDERS,
FilterPackagesPipe,
FilterUpdatesPipe,
UntypedFormBuilder,
tuiNumberFormatProvider({ decimalSeparator: '.', thousandSeparator: '' }),
tuiButtonOptionsProvider({ size: 'm' }),
tuiDropdownOptionsProvider({ appearance: 'start-os' }),
tuiAlertOptionsProvider({
autoClose: appearance => (appearance === 'negative' ? 0 : 3000),
}),
{
provide: TUI_DATE_FORMAT,
useValue: of({
mode: 'MDY',
separator: '/',
}),
},
{
provide: TUI_DATE_VALUE_TRANSFORMER,
useClass: DateTransformerService,
},
{
provide: TUI_DATE_TIME_VALUE_TRANSFORMER,
useClass: DatetimeTransformerService,
},
{
provide: ApiService,
useClass: useMocks ? MockApiService : LiveApiService,
},
{
provide: PatchDB,
deps: [PatchDbSource, PATCH_CACHE],
useClass: PatchDB,
},
provideAppInitializer(() => {
const i18n = inject(i18nService)
const origin = inject(WA_LOCATION).origin
const module_or_path = new URL('/assets/argon2_bg.wasm', origin)
initArgon({ module_or_path })
inject(StorageService).migrate036()
inject(AuthService).init()
inject(ClientStorageService).init()
inject(Router).initialNavigation()
i18n.setLanguage(i18n.language || 'english')
}),
{
provide: RELATIVE_URL,
useValue: `/${api.url}/${api.version}`,
},
{
provide: AbstractCategoryService,
useClass: CategoryService,
},
{
provide: TUI_DIALOGS_CLOSE,
useFactory: () =>
merge(
inject(Router).events.pipe(filter(e => e instanceof ActivationStart)),
inject(StateService).pipe(
pairwise(),
filter(
([prev, curr]) =>
prev === 'running' &&
(curr === 'error' || curr === 'initializing'),
),
),
),
},
{
provide: I18N_STORAGE,
useFactory: () => {
const api = inject(ApiService)
return (language: Languages) => api.setLanguage({ language })
},
},
{
provide: VERSION,
useFactory: () => inject(ConfigService).version,
},
tuiObfuscateOptionsProvider({
recipes: {
mask: ({ length }) => '•'.repeat(length),
none: identity,
},
}),
{
provide: TUI_MEDIA,
useValue: {
mobile: 1000,
desktopSmall: 1280,
desktopLarge: Infinity,
},
},
]

View File

@@ -1,14 +1,14 @@
import { NgModule } from '@angular/core'
import { PreloadAllModules, RouterModule, Routes } from '@angular/router'
import { AuthGuard } from 'src/app/guards/auth.guard'
import { UnauthGuard } from 'src/app/guards/unauth.guard'
import { stateNot } from 'src/app/services/state.service'
import { AuthGuard } from './guards/auth.guard'
import { UnauthGuard } from './guards/unauth.guard'
const routes: Routes = [
export const ROUTES: Routes = [
{
path: 'diagnostic',
canActivate: [stateNot(['initializing', 'running'])],
loadChildren: () => import('./routes/diagnostic/diagnostic.module'),
loadChildren: () => import('./routes/diagnostic/diagnostic.routes'),
},
{
path: 'initializing',
@@ -18,8 +18,7 @@ const routes: Routes = [
{
path: 'login',
canActivate: [UnauthGuard, stateNot(['error', 'initializing'])],
loadChildren: () =>
import('./routes/login/login.module').then(m => m.LoginPageModule),
loadComponent: () => import('./routes/login/login.page'),
},
{
path: '',
@@ -32,17 +31,3 @@ const routes: Routes = [
pathMatch: 'full',
},
]
@NgModule({
imports: [
RouterModule.forRoot(routes, {
scrollPositionRestoration: 'enabled',
paramsInheritanceStrategy: 'always',
preloadingStrategy: PreloadAllModules,
initialNavigation: 'disabled',
bindToComponentInputs: true,
}),
],
exports: [RouterModule],
})
export class RoutingModule {}

View File

@@ -1,19 +0,0 @@
import { NgModule } from '@angular/core'
import { RouterModule, Routes } from '@angular/router'
const ROUTES: Routes = [
{
path: '',
loadChildren: () =>
import('./home/home.module').then(m => m.HomePageModule),
},
{
path: 'logs',
loadComponent: () => import('./logs.component'),
},
]
@NgModule({
imports: [RouterModule.forChild(ROUTES)],
})
export default class DiagnosticModule {}

View File

@@ -0,0 +1,12 @@
import { Routes } from '@angular/router'
export default [
{
path: '',
loadComponent: () => import('./home/home.page'),
},
{
path: 'logs',
loadComponent: () => import('./logs.component'),
},
] satisfies Routes

View File

@@ -1,19 +0,0 @@
import { TuiButton } from '@taiga-ui/core'
import { NgModule } from '@angular/core'
import { CommonModule } from '@angular/common'
import { RouterModule, Routes } from '@angular/router'
import { HomePage } from './home.page'
import { i18nPipe } from '@start9labs/shared'
const ROUTES: Routes = [
{
path: '',
component: HomePage,
},
]
@NgModule({
imports: [CommonModule, TuiButton, RouterModule.forChild(ROUTES), i18nPipe],
declarations: [HomePage],
})
export class HomePageModule {}

View File

@@ -1,6 +1,14 @@
import { CommonModule } from '@angular/common'
import { Component, Inject } from '@angular/core'
import { RouterLink } from '@angular/router'
import { WA_WINDOW } from '@ng-web-apis/common'
import { DialogService, i18nKey, LoadingService } from '@start9labs/shared'
import {
DialogService,
i18nKey,
i18nPipe,
LoadingService,
} from '@start9labs/shared'
import { TuiButton } from '@taiga-ui/core'
import { filter } from 'rxjs'
import { ApiService } from 'src/app/services/api/embassy-api.service'
import { ConfigService } from 'src/app/services/config.service'
@@ -9,9 +17,9 @@ import { ConfigService } from 'src/app/services/config.service'
selector: 'diagnostic-home',
templateUrl: 'home.component.html',
styleUrls: ['home.page.scss'],
standalone: false,
imports: [CommonModule, TuiButton, i18nPipe, RouterLink],
})
export class HomePage {
export default class HomePage {
restarted = false
error?: {
code: number

View File

@@ -20,9 +20,7 @@ import { ApiService } from 'src/app/services/api/embassy-api.service'
import { StateService } from 'src/app/services/state.service'
@Component({
template: `
<app-initializing [progress]="progress()" />
`,
template: '<app-initializing [progress]="progress()" />',
providers: [provideSetupLogsService(ApiService)],
styles: ':host { height: 100%; }',
imports: [InitializingComponent],

View File

@@ -1,37 +0,0 @@
import { CommonModule } from '@angular/common'
import { NgModule } from '@angular/core'
import { FormsModule } from '@angular/forms'
import { RouterModule, Routes } from '@angular/router'
import { i18nPipe } from '@start9labs/shared'
import { TuiAutoFocus } from '@taiga-ui/cdk'
import { TuiButton, TuiError, TuiIcon, TuiTextfield } from '@taiga-ui/core'
import { TuiPassword } from '@taiga-ui/kit'
import { TuiCardLarge } from '@taiga-ui/layout'
import { CAWizardComponent } from './ca-wizard/ca-wizard.component'
import { LoginPage } from './login.page'
const routes: Routes = [
{
path: '',
component: LoginPage,
},
]
@NgModule({
imports: [
CommonModule,
FormsModule,
CAWizardComponent,
TuiButton,
TuiCardLarge,
...TuiTextfield,
TuiIcon,
TuiPassword,
TuiAutoFocus,
TuiError,
RouterModule.forChild(routes),
i18nPipe,
],
declarations: [LoginPage],
})
export class LoginPageModule {}

View File

@@ -1,19 +1,38 @@
import { Router } from '@angular/router'
import { CommonModule } from '@angular/common'
import { Component, DestroyRef, DOCUMENT, inject, Inject } from '@angular/core'
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'
import { Component, Inject, DestroyRef, inject, DOCUMENT } from '@angular/core'
import { FormsModule } from '@angular/forms'
import { Router } from '@angular/router'
import { i18nKey, i18nPipe, LoadingService } from '@start9labs/shared'
import { TuiAutoFocus } from '@taiga-ui/cdk'
import { TuiButton, TuiError, TuiIcon, TuiTextfield } from '@taiga-ui/core'
import { TuiPassword } from '@taiga-ui/kit'
import { TuiCardLarge } from '@taiga-ui/layout'
import { CAWizardComponent } from 'src/app/routes/login/ca-wizard/ca-wizard.component'
import { ApiService } from 'src/app/services/api/embassy-api.service'
import { AuthService } from 'src/app/services/auth.service'
import { ConfigService } from 'src/app/services/config.service'
import { i18nKey, LoadingService } from '@start9labs/shared'
@Component({
selector: 'login',
templateUrl: './login.component.html',
styleUrls: ['./login.page.scss'],
imports: [
CommonModule,
FormsModule,
CAWizardComponent,
TuiButton,
TuiCardLarge,
TuiTextfield,
TuiIcon,
TuiPassword,
TuiAutoFocus,
TuiError,
i18nPipe,
],
providers: [],
standalone: false,
})
export class LoginPage {
export default class LoginPage {
password = ''
error: i18nKey | null = null

View File

@@ -36,6 +36,7 @@ import { HeaderStatusComponent } from './status.component'
height: 2.75rem;
border-radius: var(--bumper);
margin: var(--bumper);
clip-path: inset(0 round var(--bumper));
overflow: hidden;
filter: grayscale(1) brightness(0.75);
@@ -107,7 +108,8 @@ import { HeaderStatusComponent } from './status.component'
&:has([data-status='success']) {
--status: transparent;
filter: none;
// "none" breaks border radius in Firefox
filter: grayscale(0.001);
}
}

View File

@@ -5,7 +5,7 @@ import {
Input,
Output,
} from '@angular/core'
import { UnitConversionPipesModule } from '@start9labs/shared'
import { ConvertBytesPipe } from '@start9labs/shared'
import { TuiButton } from '@taiga-ui/core'
import { TuiSkeleton } from '@taiga-ui/kit'
import { UnknownDisk } from 'src/app/services/api/api.types'
@@ -109,7 +109,7 @@ import { UnknownDisk } from 'src/app/services/api/api.types'
}
`,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [TuiButton, UnitConversionPipesModule, TuiSkeleton],
imports: [TuiButton, ConvertBytesPipe, TuiSkeleton],
})
export class BackupsPhysicalComponent {
@Input()

View File

@@ -12,7 +12,7 @@ import { MarketplacePkg } from '@start9labs/marketplace'
import {
ErrorService,
Exver,
ExverPipesModule,
ExverComparesPipe,
i18nPipe,
i18nService,
LoadingService,
@@ -107,7 +107,7 @@ type KEYS = 'id' | 'version' | 'alerts' | 'flavor'
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
CommonModule,
ExverPipesModule,
ExverComparesPipe,
TuiButton,
ToManifestPipe,
i18nPipe,
@@ -150,7 +150,11 @@ export class MarketplaceControlsComponent {
const originalUrl = localPkg?.registry || null
if (!localPkg) {
if (await this.alerts.alertInstall(this.i18n.localize(this.pkg().alerts.install || ''))) {
if (
await this.alerts.alertInstall(
this.i18n.localize(this.pkg().alerts.install || ''),
)
) {
this.installOrUpload(currentUrl)
}
return

View File

@@ -1,6 +1,6 @@
import { ChangeDetectionStrategy, Component, inject } from '@angular/core'
import { CommonModule } from '@angular/common'
import { MenuModule } from '@start9labs/marketplace'
import { MenuComponent } from '@start9labs/marketplace'
import { TuiIcon, TuiButton, TuiAppearance } from '@taiga-ui/core'
import { MARKETPLACE_REGISTRY } from '../modals/registry.component'
import { MarketplaceService } from 'src/app/services/marketplace.service'
@@ -41,7 +41,7 @@ import { DialogService, i18nPipe } from '@start9labs/shared'
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
CommonModule,
MenuModule,
MenuComponent,
TuiButton,
TuiIcon,
TuiAppearance,

View File

@@ -1,4 +1,3 @@
import { CommonModule } from '@angular/common'
import {
ChangeDetectionStrategy,
Component,
@@ -8,7 +7,7 @@ import {
} from '@angular/core'
import { toSignal } from '@angular/core/rxjs-interop'
import { ActivatedRoute, Router } from '@angular/router'
import { ItemModule, MarketplacePkg } from '@start9labs/marketplace'
import { ItemComponent, MarketplacePkg } from '@start9labs/marketplace'
import { TuiAutoFocus } from '@taiga-ui/cdk'
import { TuiButton, TuiDropdownService, TuiPopup } from '@taiga-ui/core'
import { TuiDrawer } from '@taiga-ui/kit'
@@ -78,8 +77,7 @@ import { MarketplaceSidebarService } from '../services/sidebar.service'
},
],
imports: [
CommonModule,
ItemModule,
ItemComponent,
TuiAutoFocus,
TuiButton,
TuiPopup,

View File

@@ -5,7 +5,6 @@ import { ActivatedRoute, Router } from '@angular/router'
import {
AbstractCategoryService,
FilterPackagesPipe,
FilterPackagesPipeModule,
} from '@start9labs/marketplace'
import { i18nPipe } from '@start9labs/shared'
import { TuiScrollbar } from '@taiga-ui/core'
@@ -153,7 +152,7 @@ import { ConfigService } from 'src/app/services/config.service'
MarketplaceMenuComponent,
MarketplaceNotificationComponent,
TuiScrollbar,
FilterPackagesPipeModule,
FilterPackagesPipe,
TitleDirective,
i18nPipe,
],

View File

@@ -15,12 +15,7 @@ import {
MarketplaceReleaseNotesComponent,
MarketplaceVersionsComponent,
} from '@start9labs/marketplace'
import {
DialogService,
Exver,
MARKDOWN,
SharedPipesModule,
} from '@start9labs/shared'
import { DialogService, EmptyPipe, Exver, MARKDOWN } from '@start9labs/shared'
import { TuiLoader } from '@taiga-ui/core'
import {
BehaviorSubject,
@@ -115,7 +110,7 @@ import { MarketplaceControlsComponent } from '../components/controls.component'
CommonModule,
MarketplacePackageHeroComponent,
MarketplaceDependenciesComponent,
SharedPipesModule,
EmptyPipe,
TuiLoader,
MarketplaceLinksComponent,
MarketplaceFlavorsComponent,

View File

@@ -1,10 +1,7 @@
import { CommonModule } from '@angular/common'
import { ChangeDetectionStrategy, Component, inject } from '@angular/core'
import { Router } from '@angular/router'
import {
MarketplaceRegistryComponent,
StoreIconComponentModule,
} from '@start9labs/marketplace'
import { MarketplaceRegistryComponent } from '@start9labs/marketplace'
import {
DialogService,
ErrorService,
@@ -14,6 +11,7 @@ import {
sameUrl,
toUrl,
} from '@start9labs/shared'
import { IST, utils } from '@start9labs/start-sdk'
import { TuiButton, TuiDialogContext, TuiIcon, TuiTitle } from '@taiga-ui/core'
import { TuiCell } from '@taiga-ui/layout'
import { injectContext, PolymorpheusComponent } from '@taiga-ui/polymorpheus'
@@ -24,7 +22,6 @@ import { ApiService } from 'src/app/services/api/embassy-api.service'
import { FormDialogService } from 'src/app/services/form-dialog.service'
import { MarketplaceService } from 'src/app/services/marketplace.service'
import { DataModel } from 'src/app/services/patch-db/data-model'
import { IST, utils } from '@start9labs/start-sdk'
import { StorageService } from 'src/app/services/storage.service'
@Component({
@@ -80,7 +77,6 @@ import { StorageService } from 'src/app/services/storage.service'
TuiTitle,
TuiButton,
MarketplaceRegistryComponent,
StoreIconComponentModule,
i18nPipe,
],
})

View File

@@ -1,4 +1,3 @@
import { CommonModule } from '@angular/common'
import { Component, inject, input } from '@angular/core'
import {
MarketplaceAboutComponent,
@@ -7,7 +6,7 @@ import {
MarketplacePackageHeroComponent,
MarketplaceReleaseNotesComponent,
} from '@start9labs/marketplace'
import { DialogService, MARKDOWN, SharedPipesModule } from '@start9labs/shared'
import { DialogService, EmptyPipe, MARKDOWN } from '@start9labs/shared'
import { of } from 'rxjs'
import { MarketplaceControlsComponent } from '../marketplace/components/controls.component'
import { MarketplacePkgSideload } from './sideload.utils'
@@ -70,8 +69,7 @@ import { MarketplacePkgSideload } from './sideload.utils'
}
`,
imports: [
CommonModule,
SharedPipesModule,
EmptyPipe,
MarketplaceAboutComponent,
MarketplaceLinksComponent,
MarketplacePackageHeroComponent,

View File

@@ -7,12 +7,7 @@ import {
} from '@angular/core'
import { toSignal } from '@angular/core/rxjs-interop'
import { ActivatedRoute, RouterLink } from '@angular/router'
import {
DialogService,
DocsLinkDirective,
i18nPipe,
UnitConversionPipesModule,
} from '@start9labs/shared'
import { DialogService, DocsLinkDirective, i18nPipe } from '@start9labs/shared'
import { TuiMapperPipe } from '@taiga-ui/cdk'
import {
TuiButton,
@@ -150,7 +145,6 @@ import { BACKUP_RESTORE } from './restore.component'
TuiNotification,
TuiMapperPipe,
TitleDirective,
UnitConversionPipesModule,
BackupNetworkComponent,
BackupPhysicalComponent,
BackupProgressComponent,

View File

@@ -5,11 +5,7 @@ import {
output,
} from '@angular/core'
import { ActivatedRoute } from '@angular/router'
import {
DialogService,
i18nPipe,
UnitConversionPipesModule,
} from '@start9labs/shared'
import { ConvertBytesPipe, DialogService, i18nPipe } from '@start9labs/shared'
import { TuiButton, TuiIcon } from '@taiga-ui/core'
import { TuiTooltip } from '@taiga-ui/kit'
import { PlaceholderComponent } from 'src/app/routes/portal/components/placeholder.component'
@@ -115,7 +111,7 @@ import { BackupStatusComponent } from './status.component'
TuiButton,
TuiIcon,
TuiTooltip,
UnitConversionPipesModule,
ConvertBytesPipe,
PlaceholderComponent,
BackupStatusComponent,
TableComponent,

View File

@@ -1,4 +1,3 @@
import { CommonModule } from '@angular/common'
import { ChangeDetectionStrategy, Component, inject } from '@angular/core'
import { toSignal } from '@angular/core/rxjs-interop'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
@@ -94,7 +93,6 @@ const ipv6 =
`,
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
FormGroupComponent,

View File

@@ -1,4 +1,3 @@
import { CommonModule } from '@angular/common'
import {
ChangeDetectionStrategy,
Component,
@@ -144,7 +143,6 @@ import { GatewaysTableComponent } from './table.component'
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [GatewayService],
imports: [
CommonModule,
FormsModule,
RouterLink,
TuiButton,

View File

@@ -7,7 +7,7 @@ import {
import { toSignal } from '@angular/core/rxjs-interop'
import {
Marketplace,
StoreIconComponentModule,
StoreIconComponent,
StoreIdentity,
} from '@start9labs/marketplace'
import { TUI_IS_MOBILE } from '@taiga-ui/cdk'
@@ -230,7 +230,7 @@ interface UpdatesData {
TuiBadgeNotification,
TuiFade,
TuiButton,
StoreIconComponentModule,
StoreIconComponent,
FilterUpdatesPipe,
UpdatesItemComponent,
TitleDirective,

View File

@@ -1,12 +1,11 @@
import { enableProdMode } from '@angular/core'
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
import { AppModule } from './app/app.module'
import { environment } from './environments/environment'
import { bootstrapApplication } from '@angular/platform-browser'
import { AppComponent } from 'src/app/app.component'
import { APP_CONFIG } from 'src/app/app.config'
import { environment } from 'src/environments/environment'
if (environment.production) {
enableProdMode()
}
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch(err => console.error(err))
bootstrapApplication(AppComponent, APP_CONFIG).catch(console.error)