mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 10:21:52 +00:00
* import marketplac preview for sideload * fix: improve state service (#2977) * fix: fix sideload DI * fix: update Angular * fix: cleanup * fix: fix version selection * Bump node version to fix build for Angular * misc fixes - update node to v22 - fix chroot-and-upgrade access to prune-images - don't self-migrate legacy packages - #2985 - move dataVersion to volume folder - remove "instructions.md" from s9pk - add "docsUrl" to manifest * version bump * include flavor when clicking view listing from updates tab * closes #2980 * fix: fix select button * bring back ssh keys * fix: drop 'portal' from all routes * fix: implement longtap action to select table rows * fix description for ssh page * replace instructions with docsLink and refactor marketplace preview * delete unused translations * fix patchdb diffing algorithm * continue refactor of marketplace lib show components * Booting StartOS instead of Setting up your server on init * misc fixes - closes #2990 - closes #2987 * fix build * docsUrl and clickable service headers * don't cleanup after update until new service install succeeds * update types * misc fixes * beta.35 * sdkversion, githash for sideload, correct logs for init, startos pubkey display * bring back reboot button on install * misc fixes * beta.36 * better handling of setup and init for websocket errors * reopen init and setup logs even on graceful closure * better logging, misc fixes * fix build * dont let package stats hang * dont show docsurl in marketplace if no docsurl * re-add needs-config * show error if init fails, shorten hover state on header icons * fix operator precedemce --------- Co-authored-by: Matt Hill <mattnine@protonmail.com> Co-authored-by: Alex Inkin <alexander@inkin.ru> Co-authored-by: Mariusz Kogen <k0gen@pm.me>
125 lines
3.0 KiB
TypeScript
125 lines
3.0 KiB
TypeScript
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'
|
|
import { FormsModule } from '@angular/forms'
|
|
import { TuiAutoFocus } from '@taiga-ui/cdk'
|
|
import { TuiButton, TuiDialogContext } from '@taiga-ui/core'
|
|
import { TuiInputModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy'
|
|
import {
|
|
POLYMORPHEUS_CONTEXT,
|
|
PolymorpheusComponent,
|
|
} from '@taiga-ui/polymorpheus'
|
|
import { i18nPipe } from '../i18n/i18n.pipe'
|
|
import { i18nKey } from '../i18n/i18n.providers'
|
|
|
|
@Component({
|
|
template: `
|
|
<p>{{ options.message }}</p>
|
|
@if (options.warning) {
|
|
<p class="warning">{{ options.warning }}</p>
|
|
}
|
|
<form (ngSubmit)="submit(value.trim())">
|
|
<tui-input
|
|
tuiAutoFocus
|
|
[tuiTextfieldLabelOutside]="!options.label"
|
|
[tuiTextfieldCustomContent]="options.useMask ? toggle : ''"
|
|
[ngModelOptions]="{ standalone: true }"
|
|
[(ngModel)]="value"
|
|
>
|
|
{{ options.label }}
|
|
@if (options.required !== false && options.label) {
|
|
<span>*</span>
|
|
}
|
|
<input
|
|
tuiTextfieldLegacy
|
|
[class.masked]="options.useMask && masked && value"
|
|
[placeholder]="options.placeholder || ''"
|
|
/>
|
|
</tui-input>
|
|
<footer class="g-buttons">
|
|
<button
|
|
tuiButton
|
|
type="button"
|
|
appearance="secondary"
|
|
(click)="cancel()"
|
|
>
|
|
{{ 'Cancel' | i18n }}
|
|
</button>
|
|
<button tuiButton [disabled]="!value && options.required !== false">
|
|
{{ options.buttonText || ('Submit' | i18n) }}
|
|
</button>
|
|
</footer>
|
|
</form>
|
|
|
|
<ng-template #toggle>
|
|
<button
|
|
tuiIconButton
|
|
type="button"
|
|
appearance="icon"
|
|
title="Toggle masking"
|
|
size="xs"
|
|
class="button"
|
|
[iconStart]="masked ? '@tui.eye' : '@tui.eye-off'"
|
|
(click)="masked = !masked"
|
|
></button>
|
|
</ng-template>
|
|
`,
|
|
styles: `
|
|
.warning {
|
|
color: var(--tui-status-warning);
|
|
}
|
|
|
|
.button {
|
|
pointer-events: auto;
|
|
margin-left: 0.25rem;
|
|
}
|
|
|
|
.masked {
|
|
-webkit-text-security: disc;
|
|
}
|
|
`,
|
|
imports: [
|
|
FormsModule,
|
|
TuiInputModule,
|
|
TuiButton,
|
|
TuiTextfieldControllerModule,
|
|
TuiAutoFocus,
|
|
i18nPipe,
|
|
],
|
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
})
|
|
export class PromptModal {
|
|
masked = this.options.useMask
|
|
value = this.options.initialValue || ''
|
|
|
|
constructor(
|
|
@Inject(POLYMORPHEUS_CONTEXT)
|
|
private readonly context: TuiDialogContext<string, PromptOptions>,
|
|
) {}
|
|
|
|
get options(): PromptOptions {
|
|
return this.context.data
|
|
}
|
|
|
|
cancel() {
|
|
this.context.$implicit.complete()
|
|
}
|
|
|
|
submit(value: string) {
|
|
if (value || !this.options.required) {
|
|
this.context.$implicit.next(value)
|
|
}
|
|
}
|
|
}
|
|
|
|
export const PROMPT = new PolymorpheusComponent(PromptModal)
|
|
|
|
export interface PromptOptions {
|
|
message: i18nKey
|
|
label?: i18nKey
|
|
warning?: i18nKey
|
|
buttonText?: i18nKey
|
|
placeholder?: i18nKey
|
|
required?: boolean
|
|
useMask?: boolean
|
|
initialValue?: string | null
|
|
}
|