{"ast":null,"code":"import _asyncToGenerator from \"/home/mleku/src/orly.dev/next/signer/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ConfirmComponent, LoggerService, NavComponent, StartupService } from '@common';\nimport { getNewStorageServiceConfig } from '../../../common/data/get-new-storage-service-config';\nimport * as i0 from \"@angular/core\";\nconst _forTrack0 = ($index, $item) => $item.id;\nfunction BackupsComponent_Conditional_5_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r2 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"button\", 16);\n    i0.ɵɵlistener(\"click\", function BackupsComponent_Conditional_5_Template_button_click_0_listener() {\n      i0.ɵɵrestoreView(_r2);\n      const ctx_r2 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r2.onTestPrompt());\n    });\n    i0.ɵɵelementStart(1, \"span\", 4);\n    i0.ɵɵtext(2, \"\\u2728\");\n    i0.ɵɵelementEnd()();\n  }\n}\nfunction BackupsComponent_Conditional_21_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 14)(1, \"span\");\n    i0.ɵɵtext(2, \"No backups yet\");\n    i0.ɵɵelementEnd()();\n  }\n}\nfunction BackupsComponent_For_23_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r4 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"div\", 15)(1, \"div\", 17)(2, \"span\", 18);\n    i0.ɵɵtext(3);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(4, \"div\", 19)(5, \"span\", 20);\n    i0.ɵɵtext(6);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(7, \"span\", 21);\n    i0.ɵɵtext(8);\n    i0.ɵɵelementEnd()()();\n    i0.ɵɵelementStart(9, \"div\", 22)(10, \"button\", 23);\n    i0.ɵɵlistener(\"click\", function BackupsComponent_For_23_Template_button_click_10_listener() {\n      const backup_r5 = i0.ɵɵrestoreView(_r4).$implicit;\n      const ctx_r2 = i0.ɵɵnextContext();\n      const confirm_r6 = i0.ɵɵreference(25);\n      return i0.ɵɵresetView(confirm_r6.show(\"Restore this backup? A backup of your current state will be created first.\", ctx_r2.restoreBackup.bind(ctx_r2, backup_r5.id)));\n    });\n    i0.ɵɵtext(11);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(12, \"button\", 24);\n    i0.ɵɵlistener(\"click\", function BackupsComponent_For_23_Template_button_click_12_listener() {\n      const backup_r5 = i0.ɵɵrestoreView(_r4).$implicit;\n      const ctx_r2 = i0.ɵɵnextContext();\n      const confirm_r6 = i0.ɵɵreference(25);\n      return i0.ɵɵresetView(confirm_r6.show(\"Delete this backup? This cannot be undone.\", ctx_r2.deleteBackup.bind(ctx_r2, backup_r5.id)));\n    });\n    i0.ɵɵtext(13, \" Delete \");\n    i0.ɵɵelementEnd()()();\n  }\n  if (rf & 2) {\n    const backup_r5 = ctx.$implicit;\n    const ctx_r2 = i0.ɵɵnextContext();\n    i0.ɵɵadvance(3);\n    i0.ɵɵtextInterpolate(ctx_r2.formatDate(backup_r5.createdAt));\n    i0.ɵɵadvance(2);\n    i0.ɵɵclassMap(ctx_r2.getReasonClass(backup_r5.reason));\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate1(\" \", ctx_r2.getReasonLabel(backup_r5.reason), \" \");\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate1(\"\", backup_r5.identityCount, \" identity(ies)\");\n    i0.ɵɵadvance(2);\n    i0.ɵɵproperty(\"disabled\", ctx_r2.restoringBackupId !== null);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate1(\" \", ctx_r2.restoringBackupId === backup_r5.id ? \"Restoring...\" : \"Restore\", \" \");\n  }\n}\nexport let BackupsComponent = /*#__PURE__*/(() => {\n  class BackupsComponent extends NavComponent {\n    #router = inject(Router);\n    #startup = inject(StartupService);\n    #logger = inject(LoggerService);\n    backups = [];\n    maxBackups = 5;\n    restoringBackupId = null;\n    ngOnInit() {\n      this.loadBackups();\n      this.maxBackups = this.storage.getSignerMetaHandler().getMaxBackups();\n    }\n    loadBackups() {\n      this.backups = this.storage.getSignerMetaHandler().getBackups();\n    }\n    onMaxBackupsChange(event) {\n      var _this = this;\n      return _asyncToGenerator(function* () {\n        const input = event.target;\n        const value = parseInt(input.value, 10);\n        if (!isNaN(value) && value >= 1 && value <= 20) {\n          _this.maxBackups = value;\n          yield _this.storage.getSignerMetaHandler().setMaxBackups(value);\n        }\n      })();\n    }\n    createManualBackup() {\n      var _this2 = this;\n      return _asyncToGenerator(function* () {\n        const browserSyncData = _this2.storage.getBrowserSyncHandler().browserSyncData;\n        if (browserSyncData) {\n          yield _this2.storage.getSignerMetaHandler().createBackup(browserSyncData, 'manual');\n          _this2.loadBackups();\n        }\n      })();\n    }\n    restoreBackup(backupId) {\n      var _this3 = this;\n      return _asyncToGenerator(function* () {\n        _this3.restoringBackupId = backupId;\n        try {\n          // First, create a pre-restore backup of current state\n          const currentData = _this3.storage.getBrowserSyncHandler().browserSyncData;\n          if (currentData) {\n            yield _this3.storage.getSignerMetaHandler().createBackup(currentData, 'pre-restore');\n          }\n          // Get the backup data\n          const backupData = _this3.storage.getSignerMetaHandler().getBackupData(backupId);\n          if (!backupData) {\n            throw new Error('Backup not found');\n          }\n          // Import the backup\n          yield _this3.storage.deleteVault(true);\n          yield _this3.storage.importVault(backupData);\n          _this3.#logger.logVaultImport('Backup Restore');\n          _this3.storage.isInitialized = false;\n          _this3.#startup.startOver(getNewStorageServiceConfig());\n        } catch (error) {\n          console.error('Failed to restore backup:', error);\n          _this3.restoringBackupId = null;\n        }\n      })();\n    }\n    deleteBackup(backupId) {\n      var _this4 = this;\n      return _asyncToGenerator(function* () {\n        yield _this4.storage.getSignerMetaHandler().deleteBackup(backupId);\n        _this4.loadBackups();\n      })();\n    }\n    formatDate(isoDate) {\n      const date = new Date(isoDate);\n      return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();\n    }\n    getReasonLabel(reason) {\n      switch (reason) {\n        case 'auto':\n          return 'Auto';\n        case 'manual':\n          return 'Manual';\n        case 'pre-restore':\n          return 'Pre-Restore';\n        default:\n          return 'Unknown';\n      }\n    }\n    getReasonClass(reason) {\n      switch (reason) {\n        case 'auto':\n          return 'reason-auto';\n        case 'manual':\n          return 'reason-manual';\n        case 'pre-restore':\n          return 'reason-prerestore';\n        default:\n          return '';\n      }\n    }\n    goBack() {\n      this.#router.navigateByUrl('/home/settings');\n    }\n    onClickLock() {\n      var _this5 = this;\n      return _asyncToGenerator(function* () {\n        _this5.#logger.logVaultLock();\n        yield _this5.storage.lockVault();\n        _this5.#router.navigateByUrl('/vault-login');\n      })();\n    }\n    static ɵfac = /*@__PURE__*/(() => {\n      let ɵBackupsComponent_BaseFactory;\n      return function BackupsComponent_Factory(__ngFactoryType__) {\n        return (ɵBackupsComponent_BaseFactory || (ɵBackupsComponent_BaseFactory = i0.ɵɵgetInheritedFactory(BackupsComponent)))(__ngFactoryType__ || BackupsComponent);\n      };\n    })();\n    static ɵcmp = /*@__PURE__*/i0.ɵɵdefineComponent({\n      type: BackupsComponent,\n      selectors: [[\"app-backups\"]],\n      features: [i0.ɵɵInheritDefinitionFeature],\n      decls: 26,\n      vars: 3,\n      consts: [[\"confirm\", \"\"], [1, \"sam-text-header\"], [1, \"header-buttons\"], [\"title\", \"Lock\", 1, \"header-btn\", 3, \"click\"], [1, \"emoji\"], [\"title\", \"Test Permission Prompt\", 1, \"header-btn\"], [\"title\", \"Go Back\", 1, \"back-btn\", 3, \"click\"], [1, \"backup-settings\"], [1, \"setting-row\"], [\"for\", \"maxBackups\"], [\"id\", \"maxBackups\", \"type\", \"number\", \"min\", \"1\", \"max\", \"20\", 3, \"change\", \"value\"], [1, \"setting-note\"], [1, \"btn\", \"btn-primary\", \"create-btn\", 3, \"click\"], [1, \"backups-list\"], [1, \"empty-state\"], [1, \"backup-item\"], [\"title\", \"Test Permission Prompt\", 1, \"header-btn\", 3, \"click\"], [1, \"backup-info\"], [1, \"backup-date\"], [1, \"backup-meta\"], [1, \"backup-reason\"], [1, \"backup-identities\"], [1, \"backup-actions\"], [1, \"btn\", \"btn-sm\", \"btn-secondary\", 3, \"click\", \"disabled\"], [1, \"btn\", \"btn-sm\", \"btn-danger\", 3, \"click\"]],\n      template: function BackupsComponent_Template(rf, ctx) {\n        if (rf & 1) {\n          const _r1 = i0.ɵɵgetCurrentView();\n          i0.ɵɵelementStart(0, \"div\", 1)(1, \"div\", 2)(2, \"button\", 3);\n          i0.ɵɵlistener(\"click\", function BackupsComponent_Template_button_click_2_listener() {\n            i0.ɵɵrestoreView(_r1);\n            return i0.ɵɵresetView(ctx.onClickLock());\n          });\n          i0.ɵɵelementStart(3, \"span\", 4);\n          i0.ɵɵtext(4, \"\\uD83D\\uDD12\");\n          i0.ɵɵelementEnd()();\n          i0.ɵɵtemplate(5, BackupsComponent_Conditional_5_Template, 3, 0, \"button\", 5);\n          i0.ɵɵelementEnd();\n          i0.ɵɵelementStart(6, \"button\", 6);\n          i0.ɵɵlistener(\"click\", function BackupsComponent_Template_button_click_6_listener() {\n            i0.ɵɵrestoreView(_r1);\n            return i0.ɵɵresetView(ctx.goBack());\n          });\n          i0.ɵɵelementStart(7, \"span\", 4);\n          i0.ɵɵtext(8, \"\\u2190\");\n          i0.ɵɵelementEnd()();\n          i0.ɵɵelementStart(9, \"span\");\n          i0.ɵɵtext(10, \"Backups\");\n          i0.ɵɵelementEnd()();\n          i0.ɵɵelementStart(11, \"div\", 7)(12, \"div\", 8)(13, \"label\", 9);\n          i0.ɵɵtext(14, \"Max Auto Backups:\");\n          i0.ɵɵelementEnd();\n          i0.ɵɵelementStart(15, \"input\", 10);\n          i0.ɵɵlistener(\"change\", function BackupsComponent_Template_input_change_15_listener($event) {\n            i0.ɵɵrestoreView(_r1);\n            return i0.ɵɵresetView(ctx.onMaxBackupsChange($event));\n          });\n          i0.ɵɵelementEnd()();\n          i0.ɵɵelementStart(16, \"p\", 11);\n          i0.ɵɵtext(17, \" Automatic backups are created when significant changes are made. Manual and pre-restore backups are not counted toward this limit. \");\n          i0.ɵɵelementEnd()();\n          i0.ɵɵelementStart(18, \"button\", 12);\n          i0.ɵɵlistener(\"click\", function BackupsComponent_Template_button_click_18_listener() {\n            i0.ɵɵrestoreView(_r1);\n            return i0.ɵɵresetView(ctx.createManualBackup());\n          });\n          i0.ɵɵtext(19, \" Create Backup Now\\n\");\n          i0.ɵɵelementEnd();\n          i0.ɵɵelementStart(20, \"div\", 13);\n          i0.ɵɵtemplate(21, BackupsComponent_Conditional_21_Template, 3, 0, \"div\", 14);\n          i0.ɵɵrepeaterCreate(22, BackupsComponent_For_23_Template, 14, 7, \"div\", 15, _forTrack0);\n          i0.ɵɵelementEnd();\n          i0.ɵɵelement(24, \"lib-confirm\", null, 0);\n        }\n        if (rf & 2) {\n          i0.ɵɵadvance(5);\n          i0.ɵɵconditional(ctx.devMode ? 5 : -1);\n          i0.ɵɵadvance(10);\n          i0.ɵɵproperty(\"value\", ctx.maxBackups);\n          i0.ɵɵadvance(6);\n          i0.ɵɵconditional(ctx.backups.length === 0 ? 21 : -1);\n          i0.ɵɵadvance();\n          i0.ɵɵrepeater(ctx.backups);\n        }\n      },\n      dependencies: [ConfirmComponent],\n      styles: [\"[_nghost-%COMP%] {\\n  display: flex;\\n  flex-direction: column;\\n  height: 100%;\\n  padding: 8px;\\n  gap: 12px;\\n}\\n\\n.sam-text-header[_ngcontent-%COMP%] {\\n  display: flex;\\n  align-items: center;\\n  gap: 8px;\\n  font-size: 18px;\\n  font-weight: bold;\\n  padding-bottom: 8px;\\n  border-bottom: 1px solid var(--border);\\n}\\n\\n.lock-btn[_ngcontent-%COMP%], \\n.back-btn[_ngcontent-%COMP%] {\\n  background: none;\\n  border: none;\\n  cursor: pointer;\\n  padding: 4px;\\n  border-radius: 4px;\\n}\\n.lock-btn[_ngcontent-%COMP%]:hover, \\n.back-btn[_ngcontent-%COMP%]:hover {\\n  background: var(--muted);\\n}\\n.lock-btn[_ngcontent-%COMP%]   .emoji[_ngcontent-%COMP%], \\n.back-btn[_ngcontent-%COMP%]   .emoji[_ngcontent-%COMP%] {\\n  font-size: 16px;\\n}\\n\\n.backup-settings[_ngcontent-%COMP%] {\\n  background: var(--muted);\\n  padding: 12px;\\n  border-radius: 8px;\\n}\\n\\n.setting-row[_ngcontent-%COMP%] {\\n  display: flex;\\n  align-items: center;\\n  gap: 12px;\\n}\\n.setting-row[_ngcontent-%COMP%]   label[_ngcontent-%COMP%] {\\n  font-weight: 500;\\n}\\n.setting-row[_ngcontent-%COMP%]   input[type=number][_ngcontent-%COMP%] {\\n  width: 60px;\\n  padding: 4px 8px;\\n  border: 1px solid var(--border);\\n  border-radius: 4px;\\n  background: var(--background);\\n  color: var(--foreground);\\n}\\n\\n.setting-note[_ngcontent-%COMP%] {\\n  margin-top: 8px;\\n  font-size: 12px;\\n  color: var(--muted-foreground);\\n}\\n\\n.create-btn[_ngcontent-%COMP%] {\\n  align-self: flex-start;\\n}\\n\\n.backups-list[_ngcontent-%COMP%] {\\n  flex: 1;\\n  overflow-y: auto;\\n  display: flex;\\n  flex-direction: column;\\n  gap: 8px;\\n}\\n\\n.empty-state[_ngcontent-%COMP%] {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  height: 100px;\\n  color: var(--muted-foreground);\\n}\\n\\n.backup-item[_ngcontent-%COMP%] {\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center;\\n  padding: 12px;\\n  background: var(--card);\\n  border: 1px solid var(--border);\\n  border-radius: 8px;\\n  gap: 12px;\\n}\\n\\n.backup-info[_ngcontent-%COMP%] {\\n  display: flex;\\n  flex-direction: column;\\n  gap: 4px;\\n  flex: 1;\\n  min-width: 0;\\n}\\n\\n.backup-date[_ngcontent-%COMP%] {\\n  font-weight: 500;\\n  font-size: 13px;\\n}\\n\\n.backup-meta[_ngcontent-%COMP%] {\\n  display: flex;\\n  gap: 8px;\\n  font-size: 11px;\\n}\\n\\n.backup-reason[_ngcontent-%COMP%] {\\n  padding: 2px 6px;\\n  border-radius: 4px;\\n  font-weight: 500;\\n}\\n.backup-reason.reason-auto[_ngcontent-%COMP%] {\\n  background: var(--muted);\\n  color: var(--muted-foreground);\\n}\\n.backup-reason.reason-manual[_ngcontent-%COMP%] {\\n  background: rgba(34, 197, 94, 0.2);\\n  color: rgb(34, 197, 94);\\n}\\n.backup-reason.reason-prerestore[_ngcontent-%COMP%] {\\n  background: rgba(234, 179, 8, 0.2);\\n  color: rgb(234, 179, 8);\\n}\\n\\n.backup-identities[_ngcontent-%COMP%] {\\n  color: var(--muted-foreground);\\n}\\n\\n.backup-actions[_ngcontent-%COMP%] {\\n  display: flex;\\n  gap: 8px;\\n  flex-shrink: 0;\\n}\\n\\n.btn[_ngcontent-%COMP%] {\\n  padding: 8px 16px;\\n  border: none;\\n  border-radius: 6px;\\n  cursor: pointer;\\n  font-weight: 500;\\n  transition: background-color 0.2s;\\n}\\n.btn[_ngcontent-%COMP%]:disabled {\\n  opacity: 0.5;\\n  cursor: not-allowed;\\n}\\n\\n.btn-primary[_ngcontent-%COMP%] {\\n  background: var(--primary);\\n  color: var(--primary-foreground);\\n}\\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\\n  opacity: 0.9;\\n}\\n\\n.btn-secondary[_ngcontent-%COMP%] {\\n  background: var(--secondary);\\n  color: var(--secondary-foreground);\\n}\\n.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled) {\\n  background: var(--muted);\\n}\\n\\n.btn-danger[_ngcontent-%COMP%] {\\n  background: rgba(239, 68, 68, 0.2);\\n  color: rgb(239, 68, 68);\\n}\\n.btn-danger[_ngcontent-%COMP%]:hover:not(:disabled) {\\n  background: rgba(239, 68, 68, 0.3);\\n}\\n\\n.btn-sm[_ngcontent-%COMP%] {\\n  padding: 4px 10px;\\n  font-size: 12px;\\n}\"]\n    });\n  }\n  return BackupsComponent;\n})();","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]}