@duplicati/ngclient 0.0.1 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/chunk-22HCWJS5.js +1 -0
  2. package/chunk-24PLBY6C.js +1 -0
  3. package/chunk-3MM4GLBS.js +1 -0
  4. package/chunk-3MTW6FJP.js +1 -0
  5. package/chunk-4FK75Z4C.js +1 -0
  6. package/chunk-4MMHXTNF.js +1 -0
  7. package/chunk-57M4MADC.js +1 -0
  8. package/chunk-6XUWDRDE.js +1 -0
  9. package/chunk-77NTMJCT.js +1 -0
  10. package/chunk-7X6SBNMU.js +1 -0
  11. package/chunk-A66Z6362.js +1 -0
  12. package/chunk-AC6VDRLC.js +1 -0
  13. package/chunk-BNNZKRIC.js +1 -0
  14. package/chunk-CKPPU3GS.js +2 -0
  15. package/chunk-DYANEO5K.js +1 -0
  16. package/chunk-GJTW7UUU.js +1 -0
  17. package/chunk-GMANGOGH.js +1 -0
  18. package/chunk-I6QIKK6M.js +1 -0
  19. package/chunk-IOWSWUHM.js +1 -0
  20. package/chunk-IQSBPGVL.js +1 -0
  21. package/chunk-L47VTK2X.js +1 -0
  22. package/chunk-LVLU6MPQ.js +1 -0
  23. package/chunk-N5US3SKW.js +1 -0
  24. package/chunk-NIMPOFJV.js +1 -0
  25. package/chunk-ORDBF5MR.js +8 -0
  26. package/chunk-PH6AAOK4.js +1 -0
  27. package/chunk-PY5HJ5U2.js +1 -0
  28. package/chunk-QQDSFTZV.js +1 -0
  29. package/chunk-RANWFSNY.js +1 -0
  30. package/chunk-RLJJFBQ2.js +1 -0
  31. package/chunk-S76TN27U.js +1 -0
  32. package/chunk-UTPCUNNU.js +1 -0
  33. package/chunk-VPEVWKGB.js +1 -0
  34. package/chunk-VVUYO7E4.js +1 -0
  35. package/chunk-WLI4RZYL.js +1 -0
  36. package/chunk-X2NZ4CJ5.js +2 -0
  37. package/chunk-XU7PNEZO.js +1 -0
  38. package/chunk-XYJYUMYL.js +1 -0
  39. package/chunk-YRXI477O.js +1 -0
  40. package/chunk-ZD3JEKWI.js +1 -0
  41. package/index.html +15 -0
  42. package/main-5KJRELCN.js +1 -0
  43. package/package.json +3 -40
  44. package/sparkle-ui-assets/fonts/InterTight-VariableFont_wght.ttf +0 -0
  45. package/sparkle-ui-assets/fonts/InterTight-VariableFont_wght.woff2 +0 -0
  46. package/styles-6W7ZCKNM.css +1 -0
  47. package/.dockerignore +0 -13
  48. package/.github/workflows/npm-publish.yml +0 -59
  49. package/.prettierignore +0 -13
  50. package/.prettierrc +0 -12
  51. package/.vscode/extensions.json +0 -4
  52. package/.vscode/launch.json +0 -13
  53. package/.vscode/settings.json +0 -8
  54. package/.vscode/tasks.json +0 -24
  55. package/Dockerfile +0 -38
  56. package/LICENSE +0 -21
  57. package/README.md +0 -27
  58. package/angular.json +0 -98
  59. package/bun.lockb +0 -0
  60. package/openapi-ts.config.ts +0 -13
  61. package/scripts/generate-package-json.ts +0 -15
  62. package/src/app/about/about.component.html +0 -15
  63. package/src/app/about/about.component.scss +0 -19
  64. package/src/app/about/about.component.ts +0 -13
  65. package/src/app/about/changelog/changelog.component.html +0 -3
  66. package/src/app/about/changelog/changelog.component.scss +0 -7
  67. package/src/app/about/changelog/changelog.component.ts +0 -18
  68. package/src/app/about/general/general.component.html +0 -9
  69. package/src/app/about/general/general.component.scss +0 -23
  70. package/src/app/about/general/general.component.ts +0 -30
  71. package/src/app/about/libraries/libraries.component.html +0 -3
  72. package/src/app/about/libraries/libraries.component.scss +0 -7
  73. package/src/app/about/libraries/libraries.component.ts +0 -18
  74. package/src/app/about/logs/logs.component.html +0 -5
  75. package/src/app/about/logs/logs.component.scss +0 -7
  76. package/src/app/about/logs/logs.component.ts +0 -18
  77. package/src/app/about/system-info/system-info.component.html +0 -3
  78. package/src/app/about/system-info/system-info.component.scss +0 -7
  79. package/src/app/about/system-info/system-info.component.ts +0 -17
  80. package/src/app/add-backup/add-backup.component.html +0 -29
  81. package/src/app/add-backup/add-backup.component.scss +0 -38
  82. package/src/app/add-backup/add-backup.component.ts +0 -14
  83. package/src/app/app.component.ts +0 -35
  84. package/src/app/app.config.ts +0 -23
  85. package/src/app/app.routes.ts +0 -121
  86. package/src/app/core/components/file-tree/file-tree.component.html +0 -87
  87. package/src/app/core/components/file-tree/file-tree.component.scss +0 -80
  88. package/src/app/core/components/file-tree/file-tree.component.ts +0 -485
  89. package/src/app/core/components/logo/logo.component.html +0 -22
  90. package/src/app/core/components/logo/logo.component.scss +0 -12
  91. package/src/app/core/components/logo/logo.component.ts +0 -11
  92. package/src/app/core/components/status-bar/status-bar.component.html +0 -38
  93. package/src/app/core/components/status-bar/status-bar.component.scss +0 -27
  94. package/src/app/core/components/status-bar/status-bar.component.ts +0 -33
  95. package/src/app/core/components/status-bar/status-bar.state.ts +0 -182
  96. package/src/app/core/components/toggle-card/toggle-card.component.html +0 -11
  97. package/src/app/core/components/toggle-card/toggle-card.component.scss +0 -49
  98. package/src/app/core/components/toggle-card/toggle-card.component.ts +0 -28
  99. package/src/app/core/interceptors/http.interceptor.ts +0 -69
  100. package/src/app/core/interceptors/websocket.interceptor.ts +0 -66
  101. package/src/app/core/openapi/core/ApiError.ts +0 -21
  102. package/src/app/core/openapi/core/ApiRequestOptions.ts +0 -21
  103. package/src/app/core/openapi/core/ApiResult.ts +0 -7
  104. package/src/app/core/openapi/core/OpenAPI.ts +0 -55
  105. package/src/app/core/openapi/core/request.ts +0 -337
  106. package/src/app/core/openapi/index.ts +0 -6
  107. package/src/app/core/openapi/schemas.gen.ts +0 -3611
  108. package/src/app/core/openapi/services.gen.ts +0 -1460
  109. package/src/app/core/openapi/types.gen.ts +0 -1510
  110. package/src/app/core/pipes/duration.pipe.ts +0 -27
  111. package/src/app/core/pipes/relative-time.pipe.ts +0 -14
  112. package/src/app/core/providers/dayjs.ts +0 -16
  113. package/src/app/core/services/dict.en.ts +0 -0
  114. package/src/app/core/services/dictionary.service.ts +0 -12
  115. package/src/app/core/services/localstorage.token.ts +0 -82
  116. package/src/app/core/services/password-generator.service.ts +0 -39
  117. package/src/app/core/services/relay-websocket.service.ts +0 -268
  118. package/src/app/core/services/timespan-literals.service.ts +0 -25
  119. package/src/app/core/states/app-auth.state.ts +0 -87
  120. package/src/app/core/states/backups.state.ts +0 -71
  121. package/src/app/core/states/relayconfig.state.ts +0 -23
  122. package/src/app/core/states/sysinfo.state.ts +0 -31
  123. package/src/app/core/states/tasks.state.ts +0 -34
  124. package/src/app/core/types/subscribed.ts +0 -7
  125. package/src/app/core/validators/custom.validators.ts +0 -120
  126. package/src/app/create-edit-backup/create-edit-backup.component.html +0 -28
  127. package/src/app/create-edit-backup/create-edit-backup.component.scss +0 -15
  128. package/src/app/create-edit-backup/create-edit-backup.component.ts +0 -33
  129. package/src/app/create-edit-backup/create-edit-backup.state.ts +0 -582
  130. package/src/app/create-edit-backup/destination/destination.component.html +0 -367
  131. package/src/app/create-edit-backup/destination/destination.component.scss +0 -85
  132. package/src/app/create-edit-backup/destination/destination.component.ts +0 -249
  133. package/src/app/create-edit-backup/destination/destination.config.ts +0 -103
  134. package/src/app/create-edit-backup/destination/destination.mapper.ts +0 -177
  135. package/src/app/create-edit-backup/general/general.component.html +0 -108
  136. package/src/app/create-edit-backup/general/general.component.scss +0 -34
  137. package/src/app/create-edit-backup/general/general.component.ts +0 -136
  138. package/src/app/create-edit-backup/options/options.component.html +0 -95
  139. package/src/app/create-edit-backup/options/options.component.scss +0 -42
  140. package/src/app/create-edit-backup/options/options.component.ts +0 -113
  141. package/src/app/create-edit-backup/schedule/schedule.component.html +0 -102
  142. package/src/app/create-edit-backup/schedule/schedule.component.scss +0 -38
  143. package/src/app/create-edit-backup/schedule/schedule.component.ts +0 -137
  144. package/src/app/create-edit-backup/source-data/source-data.component.html +0 -93
  145. package/src/app/create-edit-backup/source-data/source-data.component.scss +0 -41
  146. package/src/app/create-edit-backup/source-data/source-data.component.ts +0 -114
  147. package/src/app/home/backup.const.ts +0 -167
  148. package/src/app/home/home.component.html +0 -98
  149. package/src/app/home/home.component.scss +0 -88
  150. package/src/app/home/home.component.ts +0 -54
  151. package/src/app/layout/layout.component.html +0 -64
  152. package/src/app/layout/layout.component.scss +0 -24
  153. package/src/app/layout/layout.component.ts +0 -51
  154. package/src/app/layout/layout.state.ts +0 -70
  155. package/src/app/login/login.component.html +0 -12
  156. package/src/app/login/login.component.scss +0 -25
  157. package/src/app/login/login.component.ts +0 -34
  158. package/src/app/logout/logout.component.html +0 -1
  159. package/src/app/logout/logout.component.scss +0 -3
  160. package/src/app/logout/logout.component.ts +0 -18
  161. package/src/app/restore/restore.component.html +0 -56
  162. package/src/app/restore/restore.component.scss +0 -37
  163. package/src/app/restore/restore.component.ts +0 -55
  164. package/src/app/restore-flow/options/options.component.html +0 -57
  165. package/src/app/restore-flow/options/options.component.scss +0 -16
  166. package/src/app/restore-flow/options/options.component.ts +0 -58
  167. package/src/app/restore-flow/restore-flow.component.html +0 -14
  168. package/src/app/restore-flow/restore-flow.component.scss +0 -15
  169. package/src/app/restore-flow/restore-flow.component.ts +0 -23
  170. package/src/app/restore-flow/restore-flow.state.ts +0 -120
  171. package/src/app/restore-flow/select-files/select-files.component.html +0 -42
  172. package/src/app/restore-flow/select-files/select-files.component.scss +0 -16
  173. package/src/app/restore-flow/select-files/select-files.component.ts +0 -129
  174. package/src/app/settings/settings.component.html +0 -256
  175. package/src/app/settings/settings.component.scss +0 -106
  176. package/src/app/settings/settings.component.ts +0 -475
  177. package/src/environments/environment-token.ts +0 -4
  178. package/src/environments/environment.prod.ts +0 -6
  179. package/src/environments/environment.ts +0 -6
  180. package/src/index.html +0 -15
  181. package/src/main.ts +0 -6
  182. package/src/proxy.conf.mjs +0 -6
  183. package/src/styles.scss +0 -41
  184. package/tsconfig.app.json +0 -15
  185. package/tsconfig.json +0 -30
  186. /package/{src/assets → assets}/duplicati-logo.png +0 -0
  187. /package/{src/assets → assets}/duplicati-logo.svg +0 -0
  188. /package/{src/assets → assets}/favicon.ico +0 -0
  189. /package/{src/assets → assets}/images/backup.png +0 -0
  190. /package/{src/assets → assets}/images/dark-theme.png +0 -0
  191. /package/{src/assets → assets}/images/folder.png +0 -0
  192. /package/{src/assets → assets}/images/light-theme.png +0 -0
  193. /package/{src/assets → assets}/images/new-backup.png +0 -0
  194. /package/{src/assets → assets}/images/restore.png +0 -0
  195. /package/{src/assets → assets}/images/system-theme.png +0 -0
  196. /package/{src/assets → assets}/spk.css +0 -0
  197. /package/{src/assets → assets}/spk.woff2 +0 -0
@@ -1,18 +0,0 @@
1
- import { JsonPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
- import { toSignal } from '@angular/core/rxjs-interop';
4
- import { DuplicatiServerService } from '../../core/openapi';
5
-
6
- @Component({
7
- selector: 'app-changelog',
8
- standalone: true,
9
- imports: [JsonPipe],
10
- templateUrl: './changelog.component.html',
11
- styleUrl: './changelog.component.scss',
12
- changeDetection: ChangeDetectionStrategy.OnPush,
13
- })
14
- export default class ChangelogComponent {
15
- #dupServer = inject(DuplicatiServerService);
16
-
17
- changelog = toSignal(this.#dupServer.getApiV1Changelog());
18
- }
@@ -1,9 +0,0 @@
1
- @if (isLoading()) {
2
- <spk-progress-bar class="indeterminate primary" />
3
- }
4
-
5
- <section>
6
- <h3>General</h3>
7
-
8
- <div [innerHTML]="generalInfo()"></div>
9
- </section>
@@ -1,23 +0,0 @@
1
- @use '@sparkle-ui/core/styles/helpers' as *;
2
-
3
- :host {
4
- display: block;
5
- position: relative;
6
- }
7
-
8
- h3 {
9
- font: var(--title-30);
10
- }
11
-
12
- section {
13
- display: flex;
14
- flex-direction: column;
15
- gap: p2r(16);
16
- }
17
-
18
- spk-progress-bar {
19
- position: absolute;
20
- top: 0;
21
- left: 0;
22
- right: 0;
23
- }
@@ -1,30 +0,0 @@
1
- import { JsonPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';
3
- import { toSignal } from '@angular/core/rxjs-interop';
4
- import { DomSanitizer } from '@angular/platform-browser';
5
- import { SparkleProgressBarComponent } from '@sparkle-ui/core';
6
- import { finalize, map } from 'rxjs';
7
- import { DuplicatiServerService } from '../../core/openapi';
8
-
9
- @Component({
10
- selector: 'app-general',
11
- standalone: true,
12
- imports: [JsonPipe, SparkleProgressBarComponent],
13
- templateUrl: './general.component.html',
14
- styleUrl: './general.component.scss',
15
- changeDetection: ChangeDetectionStrategy.OnPush,
16
- })
17
- export default class GeneralComponent {
18
- #sanitizer = inject(DomSanitizer);
19
- #dupServer = inject(DuplicatiServerService);
20
-
21
- isLoading = signal(true);
22
- generalInfo = toSignal(
23
- this.#dupServer.getApiV1Acknowledgements().pipe(
24
- map((x) =>
25
- x.Acknowledgements ? this.#sanitizer.bypassSecurityTrustHtml(x.Acknowledgements.replace(/\r/g, '\n')) : ''
26
- ),
27
- finalize(() => this.isLoading.set(false))
28
- )
29
- );
30
- }
@@ -1,3 +0,0 @@
1
- <h3>Libraries</h3>
2
-
3
- <pre>{{ licenses() | json }}</pre>
@@ -1,7 +0,0 @@
1
- :host {
2
- display: block;
3
- }
4
-
5
- h3 {
6
- font: var(--title-30);
7
- }
@@ -1,18 +0,0 @@
1
- import { JsonPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
- import { toSignal } from '@angular/core/rxjs-interop';
4
- import { DuplicatiServerService } from '../../core/openapi';
5
-
6
- @Component({
7
- selector: 'app-libraries',
8
- standalone: true,
9
- imports: [JsonPipe],
10
- templateUrl: './libraries.component.html',
11
- styleUrl: './libraries.component.scss',
12
- changeDetection: ChangeDetectionStrategy.OnPush,
13
- })
14
- export default class LibrariesComponent {
15
- #dupServer = inject(DuplicatiServerService);
16
-
17
- licenses = toSignal(this.#dupServer.getApiV1Licenses());
18
- }
@@ -1,5 +0,0 @@
1
- <h3>Logs</h3>
2
-
3
- @for (log of logs(); track $index) {
4
- <pre style="white-space: wrap">{{ log | json }}</pre>
5
- }
@@ -1,7 +0,0 @@
1
- :host {
2
- display: block;
3
- }
4
-
5
- h3 {
6
- font: var(--title-30);
7
- }
@@ -1,18 +0,0 @@
1
- import { JsonPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
- import { toSignal } from '@angular/core/rxjs-interop';
4
- import { DuplicatiServerService } from '../../core/openapi';
5
-
6
- @Component({
7
- selector: 'app-logs',
8
- standalone: true,
9
- imports: [JsonPipe],
10
- templateUrl: './logs.component.html',
11
- styleUrl: './logs.component.scss',
12
- changeDetection: ChangeDetectionStrategy.OnPush,
13
- })
14
- export default class LogsComponent {
15
- #dupServer = inject(DuplicatiServerService);
16
-
17
- logs = toSignal(this.#dupServer.getApiV1LogdataLog());
18
- }
@@ -1,3 +0,0 @@
1
- <h3>System info</h3>
2
-
3
- <pre>{{ systemInfo() | json }}</pre>
@@ -1,7 +0,0 @@
1
- :host {
2
- display: block;
3
- }
4
-
5
- h3 {
6
- font: var(--title-30);
7
- }
@@ -1,17 +0,0 @@
1
- import { JsonPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
- import { SysinfoState } from '../../core/states/sysinfo.state';
4
-
5
- @Component({
6
- selector: 'app-system-info',
7
- standalone: true,
8
- imports: [JsonPipe],
9
- templateUrl: './system-info.component.html',
10
- styleUrl: './system-info.component.scss',
11
- changeDetection: ChangeDetectionStrategy.OnPush,
12
- })
13
- export default class SystemInfoComponent {
14
- #sysInfo = inject(SysinfoState);
15
-
16
- systemInfo = this.#sysInfo.systemInfo;
17
- }
@@ -1,29 +0,0 @@
1
- <app-status-bar />
2
-
3
- <section>
4
- <h2>Add a new backup</h2>
5
-
6
- <div class="backup-types">
7
- <spk-card class="type-a">
8
- <img src="/assets/images/new-backup.png" />
9
- <h3>New backup</h3>
10
-
11
- <p>Configure a new backup. Choose your destination, source data and schedule.</p>
12
-
13
- <button spk-button class="raised primary" [routerLink]="['/backup/new']">
14
- Add a new backup
15
- <spk-icon>plus</spk-icon>
16
- </button>
17
- </spk-card>
18
-
19
- <!-- <spk-card class="type-a">
20
- <img src="/assets/images/new-backup.png" />
21
- <h3>Import from file</h3>
22
- <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.</p>
23
- <button spk-button class="raised primary">
24
- Import from file
25
- <spk-icon>upload-simple</spk-icon>
26
- </button>
27
- </spk-card> -->
28
- </div>
29
- </section>
@@ -1,38 +0,0 @@
1
- @use '@sparkle-ui/core/styles/helpers' as *;
2
-
3
- :host {
4
- display: block;
5
- }
6
-
7
- section {
8
- display: flex;
9
- align-items: center;
10
- flex-direction: column;
11
- gap: p2r(32);
12
- padding: p2r(32 0);
13
- }
14
-
15
- div.backup-types {
16
- display: grid;
17
- grid-template-columns: 1fr;
18
- gap: p2r(16);
19
- max-width: 700px;
20
- }
21
-
22
- spk-card {
23
- display: flex;
24
- flex-direction: column;
25
- align-items: center;
26
- gap: p2r(16);
27
- padding-bottom: p2r(48);
28
-
29
- img {
30
- max-width: 300px;
31
- }
32
-
33
- p {
34
- text-wrap: balance;
35
- text-align: center;
36
- width: 75%;
37
- }
38
- }
@@ -1,14 +0,0 @@
1
- import { ChangeDetectionStrategy, Component } from '@angular/core';
2
- import { RouterLink } from '@angular/router';
3
- import { SparkleButtonComponent, SparkleCardComponent, SparkleIconComponent } from '@sparkle-ui/core';
4
- import StatusBarComponent from '../core/components/status-bar/status-bar.component';
5
-
6
- @Component({
7
- selector: 'app-add-backup',
8
- standalone: true,
9
- imports: [StatusBarComponent, SparkleButtonComponent, SparkleCardComponent, SparkleIconComponent, RouterLink],
10
- templateUrl: './add-backup.component.html',
11
- styleUrl: './add-backup.component.scss',
12
- changeDetection: ChangeDetectionStrategy.OnPush,
13
- })
14
- export default class AddBackupComponent {}
@@ -1,35 +0,0 @@
1
- import { Component, inject } from '@angular/core';
2
- import { ActivatedRoute, RouterOutlet } from '@angular/router';
3
- import { Subscription } from 'rxjs';
4
- import { LOCALSTORAGE } from './core/services/localstorage.token';
5
- import { RelayconfigState } from './core/states/relayconfig.state';
6
-
7
- @Component({
8
- selector: 'app-root',
9
- standalone: true,
10
- imports: [RouterOutlet],
11
- template: `
12
- <router-outlet />
13
- `,
14
- styles: [],
15
- })
16
- export class AppComponent {
17
- #ls = inject(LOCALSTORAGE);
18
- #route = inject(ActivatedRoute);
19
- #relayConfigState = inject(RelayconfigState);
20
-
21
- sub: Subscription | null = null;
22
-
23
- ngOnInit() {
24
- this.sub = this.#route.queryParams.subscribe(({ accessToken, clientId }: { [key: string]: string }) => {
25
- if (accessToken?.length && clientId?.length) {
26
- this.#relayConfigState.setConfig({ accessToken, clientId });
27
- }
28
- });
29
- this.#ls.clearAllNotCurrentVersion();
30
- }
31
-
32
- ngOnDestroy() {
33
- this.sub?.unsubscribe();
34
- }
35
- }
@@ -1,23 +0,0 @@
1
- import { ApplicationConfig, provideExperimentalZonelessChangeDetection } from '@angular/core';
2
- import { provideRouter, withComponentInputBinding } from '@angular/router';
3
-
4
- import { provideHttpClient, withFetch, withInterceptors } from '@angular/common/http';
5
- import { environment } from '../environments/environment';
6
- import { ENVIRONMENT_TOKEN } from '../environments/environment-token';
7
- import { routes } from './app.routes';
8
- import { httpInterceptor } from './core/interceptors/http.interceptor';
9
- import { httpInterceptorWebsocketRelay } from './core/interceptors/websocket.interceptor';
10
- import { DayJsProvider } from './core/providers/dayjs';
11
- import { LOCALSTORAGE } from './core/services/localstorage.token';
12
-
13
- export const appConfig: ApplicationConfig = {
14
- providers: [
15
- provideExperimentalZonelessChangeDetection(),
16
- provideRouter(routes, withComponentInputBinding()),
17
- provideHttpClient(withFetch(), withInterceptors([httpInterceptorWebsocketRelay, httpInterceptor])),
18
- LOCALSTORAGE,
19
-
20
- { provide: ENVIRONMENT_TOKEN, useValue: environment },
21
- DayJsProvider,
22
- ],
23
- };
@@ -1,121 +0,0 @@
1
- import { Routes } from '@angular/router';
2
-
3
- export const routes: Routes = [
4
- {
5
- path: '',
6
- // canActivate: [() => socketConnection],
7
- children: [
8
- {
9
- path: 'login',
10
- loadComponent: () => import('./login/login.component'),
11
- },
12
- {
13
- path: 'logout',
14
- loadComponent: () => import('./logout/logout.component'),
15
- },
16
- {
17
- path: '',
18
- loadComponent: () => import('./layout/layout.component'),
19
- children: [
20
- {
21
- path: '',
22
- loadComponent: () => import('./home/home.component'),
23
- },
24
- {
25
- path: 'add-backup',
26
- loadComponent: () => import('./add-backup/add-backup.component'),
27
- },
28
- {
29
- path: 'backup/:id',
30
- loadComponent: () => import('./create-edit-backup/create-edit-backup.component'),
31
- children: [
32
- {
33
- path: '',
34
- redirectTo: 'general',
35
- pathMatch: 'full',
36
- },
37
- {
38
- path: 'general',
39
- loadComponent: () => import('./create-edit-backup/general/general.component'),
40
- },
41
- {
42
- path: 'destination',
43
- loadComponent: () => import('./create-edit-backup/destination/destination.component'),
44
- },
45
- {
46
- path: 'source-data',
47
- loadComponent: () => import('./create-edit-backup/source-data/source-data.component'),
48
- },
49
- {
50
- path: 'schedule',
51
- loadComponent: () => import('./create-edit-backup/schedule/schedule.component'),
52
- },
53
- {
54
- path: 'options',
55
- loadComponent: () => import('./create-edit-backup/options/options.component'),
56
- },
57
- ],
58
- },
59
- {
60
- path: 'restore',
61
- loadComponent: () => import('./restore/restore.component'),
62
- },
63
- {
64
- path: 'restore-flow/:id',
65
- loadComponent: () => import('./restore-flow/restore-flow.component'),
66
- children: [
67
- {
68
- path: '',
69
- redirectTo: 'select-files',
70
- pathMatch: 'full',
71
- },
72
- {
73
- path: 'select-files',
74
- loadComponent: () => import('./restore-flow/select-files/select-files.component'),
75
- },
76
- {
77
- path: 'options',
78
- loadComponent: () => import('./restore-flow/options/options.component'),
79
- },
80
- ],
81
- },
82
- {
83
- path: 'settings',
84
- loadComponent: () => import('./settings/settings.component'),
85
- },
86
- {
87
- path: 'about',
88
- loadComponent: () => import('./about/about.component'),
89
- children: [
90
- {
91
- path: '',
92
- redirectTo: 'general',
93
- pathMatch: 'full',
94
- },
95
- {
96
- path: 'general',
97
- loadComponent: () => import('./about/general/general.component'),
98
- },
99
- {
100
- path: 'changelog',
101
- loadComponent: () => import('./about/changelog/changelog.component'),
102
- },
103
- {
104
- path: 'libraries',
105
- loadComponent: () => import('./about/libraries/libraries.component'),
106
- },
107
- {
108
- path: 'system-info',
109
- loadComponent: () => import('./about/system-info/system-info.component'),
110
- },
111
- {
112
- path: 'logs',
113
- loadComponent: () => import('./about/logs/logs.component'),
114
- },
115
- ],
116
- },
117
- ],
118
- },
119
- ],
120
- },
121
- ];
@@ -1,87 +0,0 @@
1
- @if (!multiSelect()) {
2
- <spk-button-group>
3
- <button
4
- type="button"
5
- [class.active]="pathDiscoveryMethod() === 'browse'"
6
- (click)="pathDiscoveryMethod.set('browse')">
7
- Browser path
8
- </button>
9
-
10
- <button type="button" [class.active]="pathDiscoveryMethod() === 'path'" (click)="pathDiscoveryMethod.set('path')">
11
- Manually type path
12
- </button>
13
- </spk-button-group>
14
- }
15
-
16
- <!-- <spk-form-field>
17
- <label for="search">Search</label>
18
- <input type="text" id="search" [(ngModel)]="treeSearchQuery" />
19
- </spk-form-field> -->
20
-
21
- <div class="section" [class.hidden]="pathDiscoveryMethod() !== 'browse'">
22
- <ng-content select="label" ngProjectAs="label"></ng-content>
23
-
24
- <div class="browse-files" #treeContainer>
25
- <ng-template #recursiveTree let-data>
26
- <spk-list [style.padding-left.rem]="data.level * 0.5">
27
- @for (node of data.children; track node.id) {
28
- @if ((node.hidden && showHiddenFiles()) || !node.hidden) {
29
- <div
30
- spk-action-item
31
- #treeNode
32
- [class.active]="node.isSelected"
33
- [class.open]="node.children.length"
34
- [class.usually-hidden]="node.hidden"
35
- (click)="node.id !== '/' && toggleNode($event, node.id, node)">
36
- <div class="icon">
37
- @if (node.id !== '/') {
38
- @if (node.children.length) {
39
- <spk-icon class="spk-primary">folder-open</spk-icon>
40
- } @else if (node.cls === 'file') {
41
- <spk-icon>file</spk-icon>
42
- } @else {
43
- <spk-icon class="spk-primary">folder</spk-icon>
44
- }
45
- } @else {
46
- <spk-icon class="spk-primary">desktop-tower</spk-icon>
47
- }
48
- </div>
49
-
50
- <div class="text" (click)="node.id !== '/' && toggleSelectedNode($event, node)">
51
- {{ node.text }}
52
- </div>
53
- </div>
54
-
55
- @if (node.children.length > 0) {
56
- <ng-container
57
- *ngTemplateOutlet="
58
- recursiveTree;
59
- context: { $implicit: { children: node.children, level: data.level + 1 } }
60
- "></ng-container>
61
- }
62
- }
63
- }
64
- </spk-list>
65
- </ng-template>
66
-
67
- <ng-container
68
- *ngTemplateOutlet="recursiveTree; context: { $implicit: { children: treeStructure(), level: 0 } }"></ng-container>
69
- </div>
70
-
71
- <spk-toggle
72
- [class.active]="showHiddenFiles()"
73
- class="primary raised browse-files-toggle"
74
- (click)="showHiddenFiles.set(!showHiddenFiles())">
75
- Show hidden {{ showFiles() ? 'files' : 'folders' }}
76
- </spk-toggle>
77
- </div>
78
-
79
- <div #formRef>
80
- <spk-form-field [class.hidden]="pathDiscoveryMethod() !== 'path'">
81
- <ng-content select="label" ngProjectAs="label"></ng-content>
82
- <ng-content select="input" ngProjectAs="input"></ng-content>
83
- </spk-form-field>
84
-
85
- <!-- <pre>{{ selectedPaths() | json }}</pre> -->
86
- <!-- <pre>{{ currentPath() }}</pre> -->
87
- </div>
@@ -1,80 +0,0 @@
1
- @use '@sparkle-ui/core/styles/helpers' as *;
2
-
3
- :host {
4
- display: flex;
5
- flex-direction: column;
6
- gap: p2r(16);
7
-
8
- &.disabled {
9
- opacity: 0.5;
10
- user-select: none;
11
- pointer-events: none;
12
- position: relative;
13
-
14
- &:before {
15
- content: '';
16
- position: absolute;
17
- inset: 0;
18
- background: transparent;
19
- }
20
- }
21
- }
22
-
23
- .section {
24
- display: flex;
25
- flex-direction: column;
26
- gap: p2r(8);
27
- }
28
-
29
- .browse-files {
30
- display: flex;
31
- gap: p2r(8);
32
- padding: p2r(8 16);
33
- height: p2r(200);
34
- border: 1px solid var(--base-level-40);
35
- border-radius: var(--shape-3);
36
- overflow: auto;
37
- resize: vertical;
38
-
39
- spk-list {
40
- --list-active-bg: var(--base-level-30);
41
- gap: 0;
42
- padding: 0;
43
- height: min-content;
44
- min-width: min-content;
45
-
46
- [spk-action-item] {
47
- padding: 0;
48
- gap: p2r(4);
49
-
50
- &.usually-hidden {
51
- opacity: 0.6;
52
- }
53
-
54
- .text {
55
- flex: 1 0;
56
- height: 100%;
57
- width: max-content;
58
- display: flex;
59
- align-items: center;
60
- }
61
-
62
- .icon {
63
- width: p2r(24);
64
- height: p2r(24);
65
- display: flex;
66
- align-items: center;
67
- justify-content: center;
68
- cursor: pointer;
69
- }
70
- }
71
- }
72
- }
73
-
74
- .browse-files-toggle {
75
- color: var(--base-level-60R);
76
- }
77
-
78
- .hidden {
79
- display: none;
80
- }