@kedem/okdb 1.0.0 → 1.0.3
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.
- package/README.md +1 -1
- package/bin/okdb.js +1 -1
- package/keys/public.pem +3 -0
- package/okdb.js +1 -1
- package/package.json +2 -2
- package/public/admin-app.js +1 -1
- package/public/components/admin-route-host.ok.js +1 -1
- package/public/components/env-picker.ok.js +1 -1
- package/public/components/field-path-input.ok.js +1 -1
- package/public/components/geo-map.ok.js +1 -1
- package/public/components/ok-cron-input.ok.js +1 -1
- package/public/components/ok-dropzone.ok.js +1 -1
- package/public/components/ok-js-input.ok.js +1 -1
- package/public/components/ok-json-input.ok.js +1 -1
- package/public/components/ok-text-monaco-input.ok.js +1 -1
- package/public/components/theme-toggle.ok.js +1 -1
- package/public/login-app.js +1 -1
- package/public/modules/ok.js +1 -1
- package/public/sections/api/parts/api-endpoint.ok.js +1 -1
- package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
- package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
- package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
- package/public/sections/auth/parts/token-detail.ok.js +1 -1
- package/public/sections/auth/parts/token-list.ok.js +1 -1
- package/public/sections/db/modals/add-item-modal.ok.js +1 -1
- package/public/sections/db/modals/create-env-modal.ok.js +1 -1
- package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
- package/public/sections/db/modals/create-index-modal.ok.js +1 -1
- package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
- package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
- package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
- package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
- package/public/sections/db/parts/db-overview.ok.js +1 -1
- package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
- package/public/sections/db/parts/edit-row.ok.js +1 -1
- package/public/sections/db/parts/tm-timeline.ok.js +1 -1
- package/public/sections/db/parts/type-changelog.ok.js +1 -1
- package/public/sections/db/parts/type-list.ok.js +1 -1
- package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
- package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
- package/public/sections/db/parts/type-viewer.ok.js +1 -1
- package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
- package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
- package/public/sections/engines/engine-panel-shared-style.js +1 -1
- package/public/sections/engines/engine-ui-utils.js +1 -1
- package/public/sections/engines/modals/engine-modal.ok.js +1 -1
- package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
- package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
- package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
- package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
- package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
- package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
- package/public/sections/files/parts/files-blob-status.ok.js +1 -1
- package/public/sections/files/parts/files-collection-list.ok.js +1 -1
- package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
- package/public/sections/files/parts/files-file-list.ok.js +1 -1
- package/public/sections/files/parts/files-overview.ok.js +1 -1
- package/public/sections/files/parts/files-path-browser.ok.js +1 -1
- package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
- package/public/sections/functions/modals/function-modal.ok.js +1 -1
- package/public/sections/functions/parts/function-detail.ok.js +1 -1
- package/public/sections/functions/parts/function-logs.ok.js +1 -1
- package/public/sections/functions/parts/function-runner.ok.js +1 -1
- package/public/sections/functions/parts/functions-list.ok.js +1 -1
- package/public/sections/license/parts/license-panel.ok.js +1 -1
- package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
- package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
- package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
- package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
- package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
- package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
- package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
- package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
- package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
- package/public/sections/queue/parts/queue-types.ok.js +1 -1
- package/public/sections/queue/parts/queue-workers.ok.js +1 -1
- package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
- package/public/sections/sync/parts/sync-retention.ok.js +1 -1
- package/public/sections/sync/parts/sync-topology.ok.js +1 -1
- package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
- package/public/sections/system/parts/system-api-panel.ok.js +1 -1
- package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
- package/public/sections/system/parts/system-log-history.ok.js +1 -1
- package/public/sections/system/parts/system-log.ok.js +1 -1
- package/public/sections/system/parts/system-status.ok.js +1 -1
- package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
- package/public/sections/views/modals/create-view-modal.ok.js +1 -1
- package/public/sections/views/parts/view-detail.ok.js +1 -1
- package/public/sections/views/parts/views-list.ok.js +1 -1
- package/public/sections/views/parts/views-overview.ok.js +1 -1
- package/public/setup-app.js +1 -1
- package/public/stores/auth-store.js +1 -1
- package/public/stores/events-store.js +1 -1
- package/public/stores/functions-store.js +1 -1
- package/public/stores/okdb-store.js +1 -1
- package/public/stores/theme-store.js +1 -1
- package/public/util/permissions.js +1 -1
- package/public/util/sift-schema.js +1 -1
- package/public/vendor/okjs/ok.esm.min.js +1 -2
- package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
- package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
- package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
- package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
- package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/manifest.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
- package/public/view-models/type-query-vm.js +1 -1
- package/public/images/logo.png +0 -0
- package/public/images/logo.svg +0 -333
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x19ed73=_0x532a;function _0x4d71(){const _0xd1d8e5=['changes','slice','backupDlError','canBackup','importDropExisting','true','file','target','exportBusy','status','parse','exportError','exportSelEnvs','input','body','1959841JsVBwu','trim','5398390sxnPrB','catch','importFile','data-ops-modal','exportDone','onDone','API','importError','backupCompact','json','importIncludeChanges','change','exportCanRun','backupDlBusy','exportSingleEnvTypes','importSelTypes','exportInit','match','36ekeImC','text','10WtsBNv','386001SdMMIr','9004lNjODX','removeChild','backupEnvNames','createObjectURL','files','importFileTypes','types','includeChanges','download','importDragOver','exportIncludeChanges','env','name','export','envs','now','map','toFixed','blob','userEnvs','onchange','backupSelEnvs','384ZCbnkn','startsWith','88jeMNgD','split','keys','backupError','exportIsSingleEnv','schema','all','backupBusy','close','.ndjson','.ndjson,.jsonl,.json,.txt','./okdb-backup-','filter','headers','get','accept','modal','records','application/json','importDone','stringify','data','13760lUCbQG','11IRYMie','click','appendChild','length','POST','content-disposition','message','join','type','okdb-backup-','application/x-ndjson','/system/import?','HTTP\x20','envName','exportSelectedTypeNames','backupResult','getDate','backupDlDone','set','_setImportFile','size','getMonth','importEnvOverride','error','\x0a<div\x20style=\x22min-width:520px;\x20max-width:640px;\x20display:flex;\x20flex-direction:column;\x20gap:0;\x22>\x0a\x0a\x20\x20<!--\x20Tab\x20bar\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:2px;\x20padding:3px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:9px;\x20margin-bottom:22px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22tab=\x27export\x27\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27export\x27\x20?\x20\x27flex:1;background:var(--okdb-app-surface-2);color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);font-weight:600;\x27\x20:\x20\x27flex:1;background:transparent;border-color:transparent;opacity:.5;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:7px\x200;border-radius:7px;font-size:13px;transition:all\x20.15s;cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20⬇\x20Export\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22tab=\x27import\x27\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27import\x27\x20?\x20\x27flex:1;background:var(--okdb-app-surface-2);color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);font-weight:600;\x27\x20:\x20\x27flex:1;background:transparent;border-color:transparent;opacity:.5;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:7px\x200;border-radius:7px;font-size:13px;transition:all\x20.15s;cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20⬆\x20Import\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22tab=\x27backup\x27\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27backup\x27\x20?\x20\x27flex:1;background:var(--okdb-app-surface-2);color:var(--okdb-purple);border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);font-weight:600;\x27\x20:\x20\x27flex:1;background:transparent;border-color:transparent;opacity:.5;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:7px\x200;border-radius:7px;font-size:13px;transition:all\x20.15s;cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20🗄\x20Backup\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20═══\x20EXPORT\x20═══════════════════════════════════════════════════════════\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27export\x27\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:18px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.5;line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Streaming\x20NDJSON\x20export\x20—\x20portable\x20across\x20OKDB\x20versions,\x20importable\x20into\x20any\x20instance.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Environments\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22flex:1;margin:0;\x22>Environments</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22exportToggleAllEnvs(true)\x22\x20\x20class=\x22dops-micro\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22exportToggleAllEnvs(false)\x22\x20class=\x22dops-micro\x22>none</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-wrap:wrap;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22userEnvs\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22exportSelEnvs[e.name]\x20?\x20\x27background:var(--okdb-app-surface-2);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);color:#e2eaf4;\x27\x20:\x20\x27background:var(--okdb-app-surface);border-color:var(--okdb-app-border);opacity:.55;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:flex;align-items:center;gap:5px;padding:5px\x2011px;border-radius:999px;font-size:12px;cursor:pointer;border:1px\x20solid;transition:all\x20.12s;user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!exportSelEnvs[e.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22exportSelEnvs\x20=\x20{...exportSelEnvs,\x20[e.name]:\x20$el.checked}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:none;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22exportSelEnvs[e.name]\x20?\x20\x27color:var(--okdb-accent);font-size:10px;\x27\x20:\x20\x27display:none;\x27\x22>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{e.name}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;font-size:10px;\x22>{{e.types\x20?\x20e.types.filter(t=>!t.name.startsWith(\x27~\x27)).length\x20:\x200}}\x20types</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Types\x20(only\x20for\x20single\x20env)\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportIsSingleEnv\x20&&\x20exportSingleEnvTypes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22flex:1;margin:0;\x22>Types</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22\x20style=\x22font-size:11px;gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22exportAllTypes\x22\x20@change=\x22exportAllTypes\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x22>All\x20types</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!exportAllTypes\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:0;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-border);border-radius:8px;overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;padding:5px\x2010px;border-bottom:1px\x20solid\x20var(--okdb-app-border);gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22exportToggleAllTypes(true)\x22\x20\x20class=\x22dops-micro\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22exportToggleAllTypes(false)\x22\x20class=\x22dops-micro\x22>none</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;max-height:140px;overflow-y:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22exportSingleEnvTypes\x22\x20let:t>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;align-items:center;gap:8px;padding:6px\x2010px;cursor:pointer;transition:background\x20.1s;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22exportSelTypes[t]\x20?\x20\x27background:#1a2a1a;\x27\x20:\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@mouseenter=\x22$el.style.background=exportSelTypes[t]?\x27#1a2a1a\x27:\x27var(--okdb-app-surface)\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@mouseleave=\x22$el.style.background=exportSelTypes[t]?\x27#1a2a1a\x27:\x27\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!exportSelTypes[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22exportSelTypes\x20=\x20{...exportSelTypes,\x20[t]:\x20$el.checked}\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;font-size:12px;\x22>{{t}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22!exportIsSingleEnv\x20&&\x20exportSelectedEnvNames.length\x20>\x201\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;opacity:.4;font-style:italic;\x22>All\x20types\x20will\x20be\x20exported\x20from\x20each\x20selected\x20environment.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Options\x20-->\x0a\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22exportIncludeChanges\x22\x20@change=\x22exportIncludeChanges\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span>Include\x20changelog\x20<span\x20style=\x22opacity:.4;font-size:11px;\x22>(sync\x20history)</span></span>\x0a\x20\x20\x20\x20\x20\x20</label>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportError\x22><div\x20class=\x22dops-error\x22>{{exportError}}</div></if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Success\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportDone\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-success\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>✓</span><span\x20style=\x22font-weight:600;\x22>Downloaded</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;font-size:11px;margin-left:auto;\x22>{{formatBytes(exportDone.bytes)}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:repeat(3,1fr);gap:6px;font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportDone.envCount\x20>\x201\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{exportDone.envCount}}</div><div>envs</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{exportDone.types}}</div><div>types</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{exportDone.records}}</div><div>records</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{exportDone.changes}}</div><div>changes</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;opacity:.35;margin-top:6px;font-family:monospace;word-break:break-all;\x22>{{exportDone.filename}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;justify-content:flex-end;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22close()\x22\x20class=\x22dops-btn-ghost\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runExport()\x22\x20:disabled=\x22!exportCanRun\x22\x20class=\x22dops-btn-primary\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportBusy\x22><span\x20class=\x22dops-spinner\x22></span>\x20Exporting…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!exportBusy\x22>⬇\x20Download\x20NDJSON</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20═══\x20IMPORT\x20═══════════════════════════════════════════════════════════\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27import\x27\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:18px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.5;line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Upload\x20a\x20OKDB\x20NDJSON\x20export.\x20Types,\x20indexes,\x20and\x20records\x20are\x20restored\x20automatically.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Multi-env\x20files\x20restore\x20each\x20environment\x20separately.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Drop\x20zone\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20@click=\x22pickFile()\x22\x20@drop=\x22onDrop($event)\x22\x20@dragover=\x22onDragOver($event)\x22\x20@dragleave=\x22onDragLeave()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22importDragOver\x20?\x20\x27border-color:var(--okdb-accent);background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x205%,\x20transparent);\x27\x20:\x20importFile\x20?\x20\x27border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);background:#0a1a10;\x27\x20:\x20\x27border-color:var(--okdb-app-border);background:var(--okdb-app-bg-deep);\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22border:2px\x20dashed;border-radius:10px;padding:24px\x2016px;text-align:center;cursor:pointer;transition:all\x20.15s;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!importFile\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;opacity:.4;margin-bottom:8px;\x22>📂</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;opacity:.7;\x22>Drop\x20.ndjson\x20file\x20here\x20or\x20<span\x20style=\x22color:var(--okdb-accent);\x22>click\x20to\x20browse</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;opacity:.3;margin-top:4px;\x22>.ndjson\x20·\x20.jsonl\x20·\x20.json</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22importFile\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:20px;margin-bottom:6px;\x22>📄</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;font-weight:600;color:var(--okdb-success);font-family:monospace;word-break:break-all;\x22>{{importFile.name}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;opacity:.45;margin-top:3px;\x22>{{formatBytes(importFile.size)}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22importFileTypes.length\x22>\x20·\x20{{importFileTypes.length}}\x20type{{importFileTypes.length!==1?\x27s\x27:\x27\x27}}\x20detected</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20·\x20click\x20to\x20change</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Types\x20filter\x20(from\x20file)\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22importFileTypes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22flex:1;margin:0;\x22>Types\x20to\x20import</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22\x20style=\x22font-size:11px;gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22importAllTypes\x22\x20@change=\x22importAllTypes\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x22>All</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!importAllTypes\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:0;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-border);border-radius:8px;overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;padding:5px\x2010px;border-bottom:1px\x20solid\x20var(--okdb-app-border);gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22importToggleAllTypes(true)\x22\x20\x20class=\x22dops-micro\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22importToggleAllTypes(false)\x22\x20class=\x22dops-micro\x22>none</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;max-height:130px;overflow-y:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22importFileTypes\x22\x20let:t>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;align-items:center;gap:8px;padding:6px\x2010px;cursor:pointer;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22importSelTypes[t]\x20?\x20\x27background:#1a2a1a;\x27\x20:\x20\x27\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!importSelTypes[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22importSelTypes\x20=\x20{...importSelTypes,\x20[t]:\x20$el.checked}\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;font-size:12px;\x22>{{t}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Target\x20env\x20override\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22>Target\x20environment\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.35;font-size:11px;font-weight:400;\x22>(leave\x20empty\x20to\x20use\x20the\x20file\x27s\x20source\x20env)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<select\x20:value=\x22importEnvOverride\x22\x20@change=\x22importEnvOverride\x20=\x20$el.value\x22\x20class=\x22dops-select\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20from\x20file\x20header\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22userEnvs\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22e.name\x22>{{e.name}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Options\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:7px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22importDropExisting\x22\x20@change=\x22importDropExisting\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Drop\x20&\x20recreate\x20existing\x20types\x20<span\x20style=\x22opacity:.4;font-size:11px;\x22>(replaces\x20current\x20data)</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22importIncludeChanges\x22\x20@change=\x22importIncludeChanges\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Restore\x20changelog\x20rows</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Advanced\x20-->\x0a\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22importShowAdvanced=!importShowAdvanced\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;opacity:.4;background:transparent;border:none;padding:0;cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{importShowAdvanced?\x27▴\x20hide\x27:\x27▾\x27}}\x20advanced\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22importShowAdvanced\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22\x20style=\x22margin-top:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22>Batch\x20size\x20<span\x20style=\x22opacity:.35;font-size:11px;\x22>(records\x20per\x20write-txn)</span></label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22number\x22\x20min=\x2210\x22\x20max=\x2210000\x22\x20step=\x2210\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22importBatchSize\x22\x20@input=\x22importBatchSize=Number($el.value)||500\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22dops-input\x22\x20style=\x22max-width:120px;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22importError\x22><div\x20class=\x22dops-error\x22>{{importError}}</div></if>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22importDone\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-success\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>✓</span><span\x20style=\x22font-weight:600;\x22>Import\x20complete</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:repeat(3,1fr);gap:6px;font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{importDone.types}}</div><div>types</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{importDone.records}}</div><div>records</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{importDone.changes}}</div><div>changes</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;justify-content:flex-end;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22close()\x22\x20class=\x22dops-btn-ghost\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runImport()\x22\x20:disabled=\x22!canImport\x22\x20class=\x22dops-btn-primary\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22importBusy\x22><span\x20class=\x22dops-spinner\x22></span>\x20Importing…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!importBusy\x22>⬆\x20Import\x20File</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20═══\x20BACKUP\x20════════════════════════════════════════════════════════════\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27backup\x27\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:0;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Mode\x20tabs\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:0;margin-bottom:18px;border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22backupMode=\x27server\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22backupMode===\x27server\x27\x20?\x20\x27color:var(--okdb-purple);border-bottom:2px\x20solid\x20var(--okdb-purple);opacity:1;\x27\x20:\x20\x27border-bottom:2px\x20solid\x20transparent;opacity:.45;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;background:transparent;border:none;border-radius:0;font-size:13px;cursor:pointer;transition:all\x20.15s;margin-bottom:-1px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20🗄\x20Server\x20backup\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22backupMode=\x27download\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22backupMode===\x27download\x27\x20?\x20\x27color:var(--okdb-purple);border-bottom:2px\x20solid\x20var(--okdb-purple);opacity:1;\x27\x20:\x20\x27border-bottom:2px\x20solid\x20transparent;opacity:.45;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;background:transparent;border:none;border-radius:0;font-size:13px;cursor:pointer;transition:all\x20.15s;margin-bottom:-1px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20⬇\x20Download\x20to\x20PC\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Server\x20backup\x20mode\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupMode\x20===\x20\x27server\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:16px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.5;line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hot\x20LMDB\x20page-copy\x20backup\x20—\x20atomic,\x20exact\x20snapshot,\x20no\x20serialisation.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Writes\x20to\x20a\x20directory\x20<em>on\x20the\x20server</em>.\x20The\x20output\x20can\x20be\x20used\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20directly\x20as\x20a\x20OKDB\x20data\x20path.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Dest\x20dir\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22>Destination\x20directory\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.35;font-size:11px;font-weight:400;\x22>(server-side\x20path)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22text\x22\x20:value=\x22backupDestDir\x22\x20@input=\x22backupDestDir=$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22dops-input\x22\x20style=\x22font-family:monospace;\x22\x20spellcheck=\x22false\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Env\x20selection\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22margin-bottom:8px;\x22>Environments</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:12px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22radio\x22\x20name=\x22bkEnvMode\x22\x20value=\x22all\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22backupEnvMode===\x27all\x27\x22\x20@change=\x22backupEnvMode=\x27all\x27\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>All</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22radio\x22\x20name=\x22bkEnvMode\x22\x20value=\x22selected\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22backupEnvMode===\x27selected\x27\x22\x20@change=\x22backupEnvMode=\x27selected\x27\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Select…</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupEnvMode===\x27selected\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-wrap:wrap;gap:6px;padding:10px;background:var(--okdb-app-bg-deep);border-radius:8px;border:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22userEnvs\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22backupSelEnvs[e.name]\x20?\x20\x27background:var(--okdb-app-surface);border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);color:#e2d8f4;\x27\x20:\x20\x27background:var(--okdb-app-surface);border-color:var(--okdb-app-border);opacity:.55;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:flex;align-items:center;gap:5px;padding:5px\x2011px;border-radius:999px;font-size:12px;cursor:pointer;border:1px\x20solid;transition:all\x20.12s;user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!backupSelEnvs[e.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22backupSelEnvs={...backupSelEnvs,[e.name]:$el.checked}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:none;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22backupSelEnvs[e.name]?\x27color:var(--okdb-purple);font-size:10px;\x27:\x27display:none;\x27\x22>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{e.name}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22backupCompact\x22\x20@change=\x22backupCompact=$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Compact\x20while\x20copying\x20<span\x20style=\x22opacity:.4;font-size:11px;\x22>(smaller\x20files,\x20slightly\x20slower)</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupError\x22><div\x20class=\x22dops-error\x22>{{backupError}}</div></if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupResult\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-success\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2020%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-weight:600;color:var(--okdb-app-fg);\x22>Server\x20backup\x20complete</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;font-size:11px;margin-left:auto;\x22>{{backupResult.durationMs}}ms</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22backupResult.envs||[]\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:#1a1228;border-radius:6px;padding:7px\x2010px;font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;font-weight:600;color:var(--okdb-purple);\x22>{{e.name}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.35;font-size:11px;\x22>{{formatBytes(e.sizeBefore)}}\x20→\x20{{formatBytes(e.sizeAfter)}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-family:monospace;font-size:10px;opacity:.4;margin-top:3px;word-break:break-all;\x22>{{e.dest}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;justify-content:flex-end;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22close()\x22\x20class=\x22dops-btn-ghost\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runBackup()\x22\x20:disabled=\x22!canBackup\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:8px\x2020px;border-radius:8px;font-size:13px;font-weight:600;background:linear-gradient(135deg,#1e1530,#150f22);border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-purple)\x2033%,\x20transparent);color:var(--okdb-purple);cursor:pointer;display:flex;align-items:center;gap:6px;transition:all\x20.15s;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupBusy\x22><span\x20class=\x22dops-spinner\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);border-top-color:var(--okdb-purple);\x22></span>\x20Backing\x20up…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!backupBusy\x22>🗄\x20Run\x20Server\x20Backup</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Download\x20backup\x20mode\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupMode\x20===\x20\x27download\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:16px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.5;line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Export\x20all\x20environments\x20as\x20a\x20single\x20portable\x20NDJSON\x20file\x20and\x20download\x20it\x20to\x20your\x20computer.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20This\x20file\x20can\x20be\x20imported\x20back\x20into\x20any\x20OKDB\x20instance.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Env\x20selection\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22margin-bottom:8px;\x22>Environments\x20to\x20include</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:12px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22radio\x22\x20name=\x22dlEnvMode\x22\x20value=\x22all\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22backupEnvMode===\x27all\x27\x22\x20@change=\x22backupEnvMode=\x27all\x27\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>All\x20environments</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22radio\x22\x20name=\x22dlEnvMode\x22\x20value=\x22selected\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22backupEnvMode===\x27selected\x27\x22\x20@change=\x22backupEnvMode=\x27selected\x27\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Select…</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupEnvMode===\x27selected\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-wrap:wrap;gap:6px;padding:10px;background:var(--okdb-app-bg-deep);border-radius:8px;border:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22userEnvs\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22backupSelEnvs[e.name]\x20?\x20\x27background:var(--okdb-app-surface);border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);\x27\x20:\x20\x27background:var(--okdb-app-surface);border-color:var(--okdb-app-border);opacity:.55;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:flex;align-items:center;gap:5px;padding:5px\x2011px;border-radius:999px;font-size:12px;cursor:pointer;border:1px\x20solid;transition:all\x20.12s;user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!backupSelEnvs[e.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22backupSelEnvs={...backupSelEnvs,[e.name]:$el.checked}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:none;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22backupSelEnvs[e.name]?\x27color:var(--okdb-purple);font-size:10px;\x27:\x27display:none;\x27\x22>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{e.name}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupDlError\x22><div\x20class=\x22dops-error\x22>{{backupDlError}}</div></if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupDlDone\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-success\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2020%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-weight:600;color:var(--okdb-app-fg);\x22>Downloaded</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;font-size:11px;\x22>{{formatBytes(backupDlDone.bytes)}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-family:monospace;font-size:10px;opacity:.35;margin-top:5px;word-break:break-all;\x22>{{backupDlDone.filename}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;justify-content:flex-end;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22close()\x22\x20class=\x22dops-btn-ghost\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runDownloadBackup()\x22\x20:disabled=\x22!canBackupDl\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:8px\x2020px;border-radius:8px;font-size:13px;font-weight:600;background:linear-gradient(135deg,#1e1530,#150f22);border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-purple)\x2033%,\x20transparent);color:var(--okdb-purple);cursor:pointer;display:flex;align-items:center;gap:6px;transition:all\x20.15s;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupDlBusy\x22><span\x20class=\x22dops-spinner\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);border-top-color:var(--okdb-purple);\x22></span>\x20Downloading…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!backupDlBusy\x22>⬇\x20Download\x20Backup</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a\x0a<style>\x0a\x20\x20.dops-field\x20{\x20display:flex;\x20flex-direction:column;\x20gap:5px;\x20}\x0a\x20\x20.dops-label\x20{\x20font-size:12px;\x20opacity:.6;\x20font-weight:500;\x20}\x0a\x20\x20.dops-input\x20{\x0a\x20\x20\x20\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x0a\x20\x20\x20\x20color:inherit;\x20padding:7px\x2010px;\x20font-size:13px;\x20width:100%;\x0a\x20\x20\x20\x20box-sizing:border-box;\x20transition:border-color\x20.15s;\x0a\x20\x20}\x0a\x20\x20.dops-input:focus\x20{\x20outline:none;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20}\x0a\x20\x20.dops-select\x20{\x0a\x20\x20\x20\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x0a\x20\x20\x20\x20color:inherit;\x20padding:7px\x2010px;\x20font-size:13px;\x20width:100%;\x20box-sizing:border-box;\x20cursor:pointer;\x0a\x20\x20}\x0a\x20\x20.dops-select:focus\x20{\x20outline:none;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20}\x0a\x20\x20.dops-check\x20{\x20display:flex;\x20align-items:center;\x20gap:8px;\x20font-size:13px;\x20cursor:pointer;\x20user-select:none;\x20}\x0a\x20\x20.dops-micro\x20{\x0a\x20\x20\x20\x20padding:2px\x208px;\x20border-radius:4px;\x20font-size:10px;\x20background:transparent;\x0a\x20\x20\x20\x20border:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.5;\x20cursor:pointer;\x20transition:opacity\x20.1s;\x0a\x20\x20}\x0a\x20\x20.dops-micro:hover\x20{\x20opacity:.85;\x20}\x0a\x20\x20.dops-error\x20{\x0a\x20\x20\x20\x20background:#2a1010;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2027%,\x20transparent);\x20border-radius:8px;\x0a\x20\x20\x20\x20padding:10px\x2012px;\x20font-size:12px;\x20color:var(--okdb-danger);\x20line-height:1.5;\x0a\x20\x20}\x0a\x20\x20.dops-success\x20{\x0a\x20\x20\x20\x20background:#0d1a14;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-success)\x2020%,\x20transparent);\x20border-radius:8px;\x0a\x20\x20\x20\x20padding:12px\x2014px;\x20font-size:13px;\x20color:#d1fae5;\x0a\x20\x20}\x0a\x20\x20.dops-stat\x20{\x0a\x20\x20\x20\x20background:#071410;\x20border-radius:6px;\x20padding:8px;\x20text-align:center;\x20font-size:11px;\x20opacity:.8;\x0a\x20\x20}\x0a\x20\x20.dops-stat-n\x20{\x20font-size:18px;\x20font-weight:700;\x20color:var(--okdb-success);\x20}\x0a\x20\x20.dops-btn-primary\x20{\x0a\x20\x20\x20\x20padding:8px\x2020px;\x20border-radius:8px;\x20font-size:13px;\x20font-weight:600;\x0a\x20\x20\x20\x20background:linear-gradient(135deg,#1e4060,#1a3050);\x0a\x20\x20\x20\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x0a\x20\x20\x20\x20cursor:pointer;\x20display:flex;\x20align-items:center;\x20gap:6px;\x20transition:all\x20.15s;\x0a\x20\x20}\x0a\x20\x20.dops-btn-primary:hover:not(:disabled)\x20{\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2053%,\x20transparent);\x20}\x0a\x20\x20.dops-btn-primary:disabled\x20{\x20opacity:.35;\x20cursor:not-allowed;\x20}\x0a\x20\x20.dops-btn-ghost\x20{\x0a\x20\x20\x20\x20padding:8px\x2016px;\x20border-radius:8px;\x20font-size:13px;\x0a\x20\x20\x20\x20background:transparent;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.55;\x20cursor:pointer;\x0a\x20\x20}\x0a\x20\x20.dops-btn-ghost:hover\x20{\x20opacity:.85;\x20}\x0a\x20\x20.dops-spinner\x20{\x0a\x20\x20\x20\x20display:inline-block;\x20width:12px;\x20height:12px;\x0a\x20\x20\x20\x20border:2px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2020%,\x20transparent);\x20border-top-color:var(--okdb-accent);\x0a\x20\x20\x20\x20border-radius:50%;\x20animation:dops-spin\x20.6s\x20linear\x20infinite;\x0a\x20\x20}\x0a\x20\x20@keyframes\x20dops-spin\x20{\x20to\x20{\x20transform:rotate(360deg);\x20}\x20}\x0a</style>\x0a','exportSelectedEnvNames','importBatchSize','dataTransfer','/system/export?','$attr','okdb-export-','87moGFRY','520456pMYOJy','initialTab','find','5159yVjQyu','importAllTypes','exportSelTypes','createElement','header','href','/system/backup','preventDefault','revokeObjectURL','importBusy'];_0x4d71=function(){return _0xd1d8e5;};return _0x4d71();}function _0x532a(_0x15ef28,_0x9ce57){_0x15ef28=_0x15ef28-0x1a0;const _0x4d7155=_0x4d71();let _0x532a3e=_0x4d7155[_0x15ef28];return _0x532a3e;}(function(_0x6d673f,_0x9d73bb){const _0x1a32a5=_0x532a,_0x17ea56=_0x6d673f();while(!![]){try{const _0x30a39f=parseInt(_0x1a32a5(0x1e4))/0x1+-parseInt(_0x1a32a5(0x1c3))/0x2*(-parseInt(_0x1a32a5(0x1e3))/0x3)+-parseInt(_0x1a32a5(0x218))/0x4*(parseInt(_0x1a32a5(0x216))/0x5)+-parseInt(_0x1a32a5(0x1ab))/0x6*(parseInt(_0x1a32a5(0x1e7))/0x7)+-parseInt(_0x1a32a5(0x1ad))/0x8*(parseInt(_0x1a32a5(0x217))/0x9)+-parseInt(_0x1a32a5(0x202))/0xa*(-parseInt(_0x1a32a5(0x1c4))/0xb)+parseInt(_0x1a32a5(0x214))/0xc*(-parseInt(_0x1a32a5(0x200))/0xd);if(_0x30a39f===_0x9d73bb)break;else _0x17ea56['push'](_0x17ea56['shift']());}catch(_0x27e957){_0x17ea56['push'](_0x17ea56['shift']());}}}(_0x4d71,0x455bf));export default{'tag':_0x19ed73(0x205),'attr':{'modal':{},'envs':{'default':()=>[]},'onDone':{},'initialTab':{'default':_0x19ed73(0x1a2)}},'context'(_0xbb70a2){const _0x369b77=_0x19ed73;function _0x42bc79(){const _0x10d080=_0x532a,_0x280432=new Date(),_0x2cbdb3=_0x2618ea=>String(_0x2618ea)['padStart'](0x2,'0');return _0x280432['getFullYear']()+'-'+_0x2cbdb3(_0x280432[_0x10d080(0x1d9)]()+0x1)+'-'+_0x2cbdb3(_0x280432[_0x10d080(0x1d4)]());}return{'tab':_0xbb70a2[_0x369b77(0x1e1)][_0x369b77(0x1e5)]||_0x369b77(0x1a2),'formatBytes':function(_0x2083b9){const _0x18c8fb=_0x369b77;if(null==_0x2083b9)return'--';const _0x109770=['B','KB','MB','GB','TB'];let _0x5ccb59=_0x2083b9,_0x1740b8=0x0;for(;_0x5ccb59>=0x400&&_0x1740b8<_0x109770['length']-0x1;)_0x5ccb59/=0x400,_0x1740b8++;return _0x5ccb59[_0x18c8fb(0x1a6)](0x0===_0x1740b8?0x0:0x2)+'\x20'+_0x109770[_0x1740b8];},get 'userEnvs'(){const _0xcbf0d4=_0x369b77;return(_0xbb70a2[_0xcbf0d4(0x1e1)][_0xcbf0d4(0x1a3)]||[])[_0xcbf0d4(0x1b9)](_0xca04a6=>!_0xca04a6[_0xcbf0d4(0x1a1)][_0xcbf0d4(0x1ac)]('~'));},'typesForEnv'(_0x378881){const _0x26642d=_0x369b77,_0x5cbfe8=(_0xbb70a2[_0x26642d(0x1e1)][_0x26642d(0x1a3)]||[])[_0x26642d(0x1e6)](_0x1fb261=>_0x1fb261['name']===_0x378881);return(_0x5cbfe8?.[_0x26642d(0x21e)]||[])[_0x26642d(0x1b9)](_0x25704e=>!_0x25704e[_0x26642d(0x1a1)][_0x26642d(0x1ac)]('~'))[_0x26642d(0x1a5)](_0x431b21=>_0x431b21[_0x26642d(0x1a1)]);},'exportSelEnvs':{},'exportIncludeChanges':!0x1,'exportBusy':!0x1,'exportError':null,'exportDone':null,'exportSelTypes':{},'exportAllTypes':!0x0,get 'exportSelectedEnvNames'(){const _0x132796=_0x369b77;return Object[_0x132796(0x1af)](this[_0x132796(0x1fd)])[_0x132796(0x1b9)](_0x140a95=>this[_0x132796(0x1fd)][_0x140a95]);},get 'exportIsSingleEnv'(){const _0x2b1d8=_0x369b77;return 0x1===this[_0x2b1d8(0x1dd)][_0x2b1d8(0x1c7)];},get 'exportSingleEnvTypes'(){const _0x2e3735=_0x369b77;return this[_0x2e3735(0x1b1)]?this['typesForEnv'](this[_0x2e3735(0x1dd)][0x0]):[];},get 'exportSelectedTypeNames'(){const _0x1cd5e8=_0x369b77;return!this['exportIsSingleEnv']||this['exportAllTypes']?null:Object[_0x1cd5e8(0x1af)](this[_0x1cd5e8(0x1e9)])[_0x1cd5e8(0x1b9)](_0x24bb92=>this[_0x1cd5e8(0x1e9)][_0x24bb92]);},get 'exportCanRun'(){const _0x41fddf=_0x369b77;return this['exportSelectedEnvNames'][_0x41fddf(0x1c7)]>0x0&&!this[_0x41fddf(0x1f9)];},'exportToggleAllEnvs'(_0x3c9fb1){const _0x175cfb=_0x369b77,_0x34f9d6={};for(const _0x3a6ce1 of this[_0x175cfb(0x1a8)])_0x34f9d6[_0x3a6ce1['name']]=_0x3c9fb1;this['exportSelEnvs']=_0x34f9d6;},'exportToggleAllTypes'(_0x2326aa){const _0x2e4b93=_0x369b77,_0x194ebe={};for(const _0x54cf0d of this[_0x2e4b93(0x210)])_0x194ebe[_0x54cf0d]=_0x2326aa;this[_0x2e4b93(0x1e9)]=_0x194ebe;},'exportInit'(){const _0x2400bc=_0x369b77;0x0===Object['keys'](this[_0x2400bc(0x1fd)])[_0x2400bc(0x1c7)]&&this[_0x2400bc(0x1a8)]['length']&&(this[_0x2400bc(0x1fd)]={[this[_0x2400bc(0x1a8)][0x0][_0x2400bc(0x1a1)]]:!0x0});},async 'runExport'(){const _0x43819b=_0x369b77;if(this[_0x43819b(0x20e)]){this[_0x43819b(0x1f9)]=!0x0,this[_0x43819b(0x1fc)]=null,this[_0x43819b(0x206)]=null;try{const _0x11d8e2=this[_0x43819b(0x1dd)],_0x2d6df1=_0x11d8e2['length']>0x1,_0x32caaf=new URLSearchParams();_0x2d6df1?_0x32caaf[_0x43819b(0x1d6)](_0x43819b(0x1a3),_0x11d8e2[_0x43819b(0x1cb)](',')):_0x32caaf[_0x43819b(0x1d6)](_0x43819b(0x1a0),_0x11d8e2[0x0]),this[_0x43819b(0x222)]&&_0x32caaf[_0x43819b(0x1d6)](_0x43819b(0x21f),_0x43819b(0x1f6));const _0x1663be=this[_0x43819b(0x1d2)];_0x1663be&&_0x1663be['length']&&_0x32caaf[_0x43819b(0x1d6)]('types',_0x1663be[_0x43819b(0x1cb)](','));const _0x51036e=await fetch(__ENV__[_0x43819b(0x208)]+_0x43819b(0x1e0)+_0x32caaf);if(!_0x51036e['ok']){const _0x582b35=await _0x51036e[_0x43819b(0x20b)]()[_0x43819b(0x203)](()=>({}));throw new Error(_0x582b35?.['error']?.[_0x43819b(0x1ca)]||_0x43819b(0x1d0)+_0x51036e[_0x43819b(0x1fa)]);}const _0x537c5d=await _0x51036e[_0x43819b(0x1a7)](),_0xade1f0=URL[_0x43819b(0x21b)](_0x537c5d),_0x3f832d=document['createElement']('a'),_0x14394f=_0x51036e[_0x43819b(0x1ba)][_0x43819b(0x1bb)]('content-disposition')||'',_0x13e415=_0x14394f[_0x43819b(0x213)](/filename="?([^"]+)"?/)?.[0x1]||_0x43819b(0x1e2)+_0x11d8e2[_0x43819b(0x1cb)]('+')+'-'+Date[_0x43819b(0x1a4)]()+'.ndjson';_0x3f832d[_0x43819b(0x1ec)]=_0xade1f0,_0x3f832d[_0x43819b(0x220)]=_0x13e415,document[_0x43819b(0x1ff)][_0x43819b(0x1c6)](_0x3f832d),_0x3f832d[_0x43819b(0x1c5)](),document[_0x43819b(0x1ff)]['removeChild'](_0x3f832d),URL['revokeObjectURL'](_0xade1f0);const _0x170bcd=(await _0x537c5d['text']())[_0x43819b(0x1ae)]('\x0a')[_0x43819b(0x1b9)](_0x5c921c=>_0x5c921c[_0x43819b(0x201)]())['map'](_0x5a27be=>{const _0x309969=_0x43819b;try{return JSON[_0x309969(0x1fb)](_0x5a27be);}catch{return null;}})['filter'](Boolean);this[_0x43819b(0x206)]={'filename':_0x13e415,'bytes':_0x537c5d['size'],'envCount':_0x2d6df1?_0x11d8e2[_0x43819b(0x1c7)]:0x1,'types':_0x170bcd[_0x43819b(0x1b9)](_0xda0814=>_0x43819b(0x1b2)===_0xda0814['r'])[_0x43819b(0x1c7)],'records':_0x170bcd['filter'](_0xfad137=>_0x43819b(0x1c2)===_0xfad137['r'])['length'],'changes':_0x170bcd[_0x43819b(0x1b9)](_0x2ea0e9=>_0x43819b(0x20d)===_0x2ea0e9['r'])[_0x43819b(0x1c7)]};}catch(_0x281994){this[_0x43819b(0x1fc)]=_0x281994?.['message']||String(_0x281994);}finally{this[_0x43819b(0x1f9)]=!0x1;}}},'importFile':null,'importEnvOverride':'','importSelTypes':{},'importAllTypes':!0x0,'importDropExisting':!0x1,'importIncludeChanges':!0x1,'importBatchSize':0x1f4,'importShowAdvanced':!0x1,'importBusy':!0x1,'importError':null,'importDone':null,'importDragOver':!0x1,'importFileTypes':[],get 'importSelectedTypeNames'(){const _0x1b0631=_0x369b77;return this[_0x1b0631(0x1e8)]?null:Object[_0x1b0631(0x1af)](this[_0x1b0631(0x211)])['filter'](_0x301f94=>this[_0x1b0631(0x211)][_0x301f94]);},get 'canImport'(){const _0x3f35ab=_0x369b77;return!!this[_0x3f35ab(0x204)]&&!this[_0x3f35ab(0x1f0)];},'onDrop'(_0x5f5092){const _0x4a1aeb=_0x369b77;_0x5f5092[_0x4a1aeb(0x1ee)](),this[_0x4a1aeb(0x221)]=!0x1;const _0x6140e=_0x5f5092[_0x4a1aeb(0x1df)]?.[_0x4a1aeb(0x21c)]?.[0x0];_0x6140e&&this[_0x4a1aeb(0x1d7)](_0x6140e);},'onDragOver'(_0x17bffa){const _0x5ef57d=_0x369b77;_0x17bffa[_0x5ef57d(0x1ee)](),this['importDragOver']=!0x0;},'onDragLeave'(){const _0x13c75a=_0x369b77;this[_0x13c75a(0x221)]=!0x1;},'pickFile'(){const _0x7dd8d2=_0x369b77,_0x392523=document[_0x7dd8d2(0x1ea)](_0x7dd8d2(0x1fe));_0x392523['type']=_0x7dd8d2(0x1f7),_0x392523[_0x7dd8d2(0x1bc)]=_0x7dd8d2(0x1b7),_0x392523[_0x7dd8d2(0x1a9)]=_0x57d8f1=>{const _0x2f6889=_0x7dd8d2,_0x4caa16=_0x57d8f1[_0x2f6889(0x1f8)][_0x2f6889(0x21c)]?.[0x0];_0x4caa16&&this[_0x2f6889(0x1d7)](_0x4caa16);},_0x392523[_0x7dd8d2(0x1c5)]();},async '_setImportFile'(_0x256980){const _0x5b72d7=_0x369b77;this[_0x5b72d7(0x204)]=_0x256980,this[_0x5b72d7(0x209)]=null,this[_0x5b72d7(0x1c0)]=null,this['importFileTypes']=[];try{const _0x4f9866=(await _0x256980[_0x5b72d7(0x1f2)](0x0,0x8000)[_0x5b72d7(0x215)]())['split']('\x0a')[_0x5b72d7(0x1b9)](_0x353e4a=>_0x353e4a[_0x5b72d7(0x201)]()),_0x2ba207=_0x4f9866[_0x5b72d7(0x1a5)](_0x141278=>{const _0x399edc=_0x5b72d7;try{return JSON[_0x399edc(0x1fb)](_0x141278);}catch{return null;}})[_0x5b72d7(0x1b9)](_0x3bd378=>_0x5b72d7(0x1b2)===_0x3bd378?.['r']);this[_0x5b72d7(0x21d)]=[...new Set(_0x2ba207[_0x5b72d7(0x1a5)](_0x2e1ac3=>_0x2e1ac3[_0x5b72d7(0x1cc)]))];const _0x247961=_0x4f9866[_0x5b72d7(0x1a5)](_0x1518e2=>{const _0x3accf4=_0x5b72d7;try{return JSON[_0x3accf4(0x1fb)](_0x1518e2);}catch{return null;}})[_0x5b72d7(0x1e6)](_0x568d55=>_0x5b72d7(0x1eb)===_0x568d55?.['r']);_0x247961?.[_0x5b72d7(0x1d1)]&&this[_0x5b72d7(0x1da)];}catch{}},'importToggleAllTypes'(_0x492b68){const _0x55584=_0x369b77,_0x4baa6f={};for(const _0x31c085 of this[_0x55584(0x21d)])_0x4baa6f[_0x31c085]=_0x492b68;this[_0x55584(0x211)]=_0x4baa6f;},async 'runImport'(){const _0x5058e7=_0x369b77;if(this['importFile']){this[_0x5058e7(0x1f0)]=!0x0,this[_0x5058e7(0x209)]=null,this[_0x5058e7(0x1c0)]=null;try{const _0x5cae56=new URLSearchParams({'dropExisting':String(this[_0x5058e7(0x1f5)]),'includeChanges':String(this[_0x5058e7(0x20c)]),'batchSize':String(this[_0x5058e7(0x1de)]||0x1f4)});this[_0x5058e7(0x1da)]&&_0x5cae56[_0x5058e7(0x1d6)](_0x5058e7(0x1a0),this[_0x5058e7(0x1da)]);const _0x1da042=this['importSelectedTypeNames'];_0x1da042&&_0x1da042[_0x5058e7(0x1c7)]&&_0x5cae56[_0x5058e7(0x1d6)]('types',_0x1da042[_0x5058e7(0x1cb)](','));const _0x382a3d=await fetch(__ENV__[_0x5058e7(0x208)]+_0x5058e7(0x1cf)+_0x5cae56,{'method':_0x5058e7(0x1c8),'headers':{'content-type':_0x5058e7(0x1ce)},'body':this[_0x5058e7(0x204)]}),_0x259eaf=await _0x382a3d[_0x5058e7(0x20b)]()['catch'](()=>({}));if(!_0x382a3d['ok'])throw new Error(_0x259eaf?.[_0x5058e7(0x1db)]?.[_0x5058e7(0x1ca)]||_0x5058e7(0x1d0)+_0x382a3d[_0x5058e7(0x1fa)]);const _0x4caafd=_0x259eaf[_0x5058e7(0x1c2)]??_0x259eaf;this[_0x5058e7(0x1c0)]={'types':_0x4caafd['types']??0x0,'records':_0x4caafd[_0x5058e7(0x1be)]??0x0,'changes':_0x4caafd[_0x5058e7(0x1f1)]??0x0},_0xbb70a2[_0x5058e7(0x1e1)][_0x5058e7(0x207)]?.();}catch(_0x2e1949){this[_0x5058e7(0x209)]=_0x2e1949?.[_0x5058e7(0x1ca)]||String(_0x2e1949);}finally{this[_0x5058e7(0x1f0)]=!0x1;}}},'backupMode':'server','backupDestDir':_0x369b77(0x1b8)+_0x42bc79(),'backupSelEnvs':{},'backupEnvMode':_0x369b77(0x1b3),'backupCompact':!0x0,'backupBusy':!0x1,'backupError':null,'backupResult':null,'backupDlBusy':!0x1,'backupDlError':null,'backupDlDone':null,get 'backupEnvNames'(){const _0x8e139e=_0x369b77;return _0x8e139e(0x1b3)===this['backupEnvMode']?null:Object[_0x8e139e(0x1af)](this[_0x8e139e(0x1aa)])['filter'](_0x5e49f7=>this[_0x8e139e(0x1aa)][_0x5e49f7]);},get 'canBackup'(){const _0x4a5cb6=_0x369b77;return this['backupDestDir']['trim']()[_0x4a5cb6(0x1c7)]>0x0&&!this[_0x4a5cb6(0x1b4)];},get 'canBackupDl'(){const _0x1b00e4=_0x369b77;return!this[_0x1b00e4(0x20f)];},async 'runBackup'(){const _0xed5fa6=_0x369b77;if(this[_0xed5fa6(0x1f4)]){this[_0xed5fa6(0x1b4)]=!0x0,this['backupError']=null,this[_0xed5fa6(0x1d3)]=null;try{const _0x2fd754=await fetch(__ENV__[_0xed5fa6(0x208)]+_0xed5fa6(0x1ed),{'method':_0xed5fa6(0x1c8),'headers':{'content-type':_0xed5fa6(0x1bf)},'body':JSON[_0xed5fa6(0x1c1)]({'destDir':this['backupDestDir'][_0xed5fa6(0x201)](),'envNames':this['backupEnvNames'],'compact':this[_0xed5fa6(0x20a)]})}),_0xe237a9=await _0x2fd754[_0xed5fa6(0x20b)]()[_0xed5fa6(0x203)](()=>({}));if(!_0x2fd754['ok'])throw new Error(_0xe237a9?.[_0xed5fa6(0x1db)]?.[_0xed5fa6(0x1ca)]||_0xed5fa6(0x1d0)+_0x2fd754[_0xed5fa6(0x1fa)]);this[_0xed5fa6(0x1d3)]=_0xe237a9['data']??_0xe237a9;}catch(_0x133826){this[_0xed5fa6(0x1b0)]=_0x133826?.[_0xed5fa6(0x1ca)]||String(_0x133826);}finally{this[_0xed5fa6(0x1b4)]=!0x1;}}},async 'runDownloadBackup'(){const _0x5e16be=_0x369b77;this['backupDlBusy']=!0x0,this[_0x5e16be(0x1f3)]=null,this['backupDlDone']=null;try{const _0x4abe91=this[_0x5e16be(0x21a)],_0x3cc4fd=new URLSearchParams();_0x4abe91?.[_0x5e16be(0x1c7)]?_0x3cc4fd[_0x5e16be(0x1d6)](_0x5e16be(0x1a3),_0x4abe91[_0x5e16be(0x1cb)](',')):_0x3cc4fd[_0x5e16be(0x1d6)](_0x5e16be(0x1a3),this[_0x5e16be(0x1a8)]['map'](_0x5d3663=>_0x5d3663[_0x5e16be(0x1a1)])[_0x5e16be(0x1cb)](','));const _0x8be961=await fetch(__ENV__[_0x5e16be(0x208)]+_0x5e16be(0x1e0)+_0x3cc4fd);if(!_0x8be961['ok']){const _0x54b3f0=await _0x8be961['json']()[_0x5e16be(0x203)](()=>({}));throw new Error(_0x54b3f0?.[_0x5e16be(0x1db)]||'HTTP\x20'+_0x8be961['status']);}const _0x42f2ee=await _0x8be961[_0x5e16be(0x1a7)](),_0x4a105d=URL['createObjectURL'](_0x42f2ee),_0x269246=document[_0x5e16be(0x1ea)]('a'),_0x3b1304=_0x8be961[_0x5e16be(0x1ba)]['get'](_0x5e16be(0x1c9))||'',_0x327949=_0x3b1304[_0x5e16be(0x213)](/filename="?([^"]+)"?/)?.[0x1]||_0x5e16be(0x1cd)+_0x42bc79()+_0x5e16be(0x1b6);_0x269246[_0x5e16be(0x1ec)]=_0x4a105d,_0x269246[_0x5e16be(0x220)]=_0x327949,document[_0x5e16be(0x1ff)]['appendChild'](_0x269246),_0x269246[_0x5e16be(0x1c5)](),document[_0x5e16be(0x1ff)][_0x5e16be(0x219)](_0x269246),URL[_0x5e16be(0x1ef)](_0x4a105d),this[_0x5e16be(0x1d5)]={'filename':_0x327949,'bytes':_0x42f2ee[_0x5e16be(0x1d8)]};}catch(_0x4b71f9){this[_0x5e16be(0x1f3)]=_0x4b71f9?.['message']||String(_0x4b71f9);}finally{this[_0x5e16be(0x20f)]=!0x1;}},'close'(){const _0x44f333=_0x369b77;_0xbb70a2[_0x44f333(0x1e1)][_0x44f333(0x1bd)][_0x44f333(0x1b5)]();},'mount'(){const _0x45df81=_0x369b77;this[_0x45df81(0x212)]();}};},'template':_0x19ed73(0x1dc)};
|
|
1
|
+
function _0x1f3f(){const _0x24f03a=['6894853cLHAhZ','importBatchSize','exportCanRun','header','match','exportSingleEnvTypes','stringify','export','backupError','importSelTypes','backupSelEnvs','now','message','target','toFixed','backupCompact','text','json','data-ops-modal','251190CiRakJ','createElement','11028ZQYilV','importBusy','backupDlDone','server','importIncludeChanges','exportInit','/system/backup','map','exportSelTypes','close','dataTransfer','_setImportFile','initialTab','true','1710MTMzRR','okdb-export-','userEnvs','types','POST','exportSelEnvs','importFile','2761VeglBf','exportBusy','backupDlBusy','backupEnvNames','join','includeChanges','HTTP\x20','error','exportError','canBackup','backupResult','revokeObjectURL','backupEnvMode','length','exportSelectedTypeNames','70hAGGER','slice','split','files','catch','filter','40XnPfdD','11016MmRqqQ','getMonth','backupBusy','.ndjson,.jsonl,.json,.txt','/system/import?','click','importEnvOverride','data','11453bzGTRF','get','body','envs','backupDlError','importDragOver','href','$attr','headers','onchange','all','file','exportDone','./okdb-backup-','set','okdb-backup-','envName','getDate','importFileTypes','132516jxYCNT','.ndjson','status','schema','application/json','preventDefault','input','accept','type','API','importDropExisting','/system/export?','keys','env','backupDestDir','exportIncludeChanges','removeChild','find','134714Vpasxv','content-disposition','2817sKvryk','name','download','changes','createObjectURL','exportIsSingleEnv','blob','trim','11JJEqIk','parse','onDone','importError','exportSelectedEnvNames','importDone'];_0x1f3f=function(){return _0x24f03a;};return _0x1f3f();}const _0x530f60=_0x5c6f;(function(_0x1b6871,_0x2a7ee9){const _0x1f40f4=_0x5c6f,_0x389609=_0x1b6871();while(!![]){try{const _0x44d4cc=parseInt(_0x1f40f4(0x21a))/0x1*(-parseInt(_0x1f40f4(0x210))/0x2)+-parseInt(_0x1f40f4(0x1fe))/0x3*(-parseInt(_0x1f40f4(0x1e2))/0x4)+parseInt(_0x1f40f4(0x1dc))/0x5*(-parseInt(_0x1f40f4(0x233))/0x6)+parseInt(_0x1f40f4(0x220))/0x7+parseInt(_0x1f40f4(0x1e3))/0x8*(-parseInt(_0x1f40f4(0x212))/0x9)+-parseInt(_0x1f40f4(0x1c6))/0xa*(-parseInt(_0x1f40f4(0x1cd))/0xb)+-parseInt(_0x1f40f4(0x235))/0xc*(-parseInt(_0x1f40f4(0x1eb))/0xd);if(_0x44d4cc===_0x2a7ee9)break;else _0x389609['push'](_0x389609['shift']());}catch(_0x2fa34c){_0x389609['push'](_0x389609['shift']());}}}(_0x1f3f,0x7f405));function _0x5c6f(_0x36ff0a,_0x51e226){_0x36ff0a=_0x36ff0a-0x1b9;const _0x1f3f6b=_0x1f3f();let _0x5c6f18=_0x1f3f6b[_0x36ff0a];return _0x5c6f18;}export default{'tag':_0x530f60(0x232),'attr':{'modal':{},'envs':{'default':()=>[]},'onDone':{},'initialTab':{'default':_0x530f60(0x227)}},'context'(_0x36a5ff){const _0x2068d5=_0x530f60;function _0x5ba62b(){const _0x2c43f9=_0x5c6f,_0x4b22b2=new Date(),_0x57461c=_0x131530=>String(_0x131530)['padStart'](0x2,'0');return _0x4b22b2['getFullYear']()+'-'+_0x57461c(_0x4b22b2[_0x2c43f9(0x1e4)]()+0x1)+'-'+_0x57461c(_0x4b22b2[_0x2c43f9(0x1fc)]());}return{'tab':_0x36a5ff[_0x2068d5(0x1f2)][_0x2068d5(0x1c4)]||_0x2068d5(0x227),'formatBytes':function(_0x72e42d){const _0x58df7d=_0x2068d5;if(null==_0x72e42d)return'--';const _0xee04f8=['B','KB','MB','GB','TB'];let _0x191500=_0x72e42d,_0x522b55=0x0;for(;_0x191500>=0x400&&_0x522b55<_0xee04f8[_0x58df7d(0x1da)]-0x1;)_0x191500/=0x400,_0x522b55++;return _0x191500[_0x58df7d(0x22e)](0x0===_0x522b55?0x0:0x2)+'\x20'+_0xee04f8[_0x522b55];},get 'userEnvs'(){const _0x575cfa=_0x2068d5;return(_0x36a5ff[_0x575cfa(0x1f2)][_0x575cfa(0x1ee)]||[])['filter'](_0x3a329f=>!_0x3a329f[_0x575cfa(0x213)]['startsWith']('~'));},'typesForEnv'(_0x7f62bb){const _0x462f1e=_0x2068d5,_0x307bb9=(_0x36a5ff[_0x462f1e(0x1f2)][_0x462f1e(0x1ee)]||[])[_0x462f1e(0x20f)](_0x2322c3=>_0x2322c3['name']===_0x7f62bb);return(_0x307bb9?.[_0x462f1e(0x1c9)]||[])[_0x462f1e(0x1e1)](_0x5c42d3=>!_0x5c42d3[_0x462f1e(0x213)]['startsWith']('~'))[_0x462f1e(0x1bf)](_0x594d7b=>_0x594d7b[_0x462f1e(0x213)]);},'exportSelEnvs':{},'exportIncludeChanges':!0x1,'exportBusy':!0x1,'exportError':null,'exportDone':null,'exportSelTypes':{},'exportAllTypes':!0x0,get 'exportSelectedEnvNames'(){const _0x129baa=_0x2068d5;return Object['keys'](this[_0x129baa(0x1cb)])[_0x129baa(0x1e1)](_0x5887c6=>this[_0x129baa(0x1cb)][_0x5887c6]);},get 'exportIsSingleEnv'(){const _0x3d67b5=_0x2068d5;return 0x1===this['exportSelectedEnvNames'][_0x3d67b5(0x1da)];},get 'exportSingleEnvTypes'(){return this['exportIsSingleEnv']?this['typesForEnv'](this['exportSelectedEnvNames'][0x0]):[];},get 'exportSelectedTypeNames'(){const _0x3f0c68=_0x2068d5;return!this[_0x3f0c68(0x217)]||this['exportAllTypes']?null:Object['keys'](this[_0x3f0c68(0x1c0)])['filter'](_0x5e4d5e=>this[_0x3f0c68(0x1c0)][_0x5e4d5e]);},get 'exportCanRun'(){const _0x57c7c4=_0x2068d5;return this[_0x57c7c4(0x21e)][_0x57c7c4(0x1da)]>0x0&&!this[_0x57c7c4(0x1ce)];},'exportToggleAllEnvs'(_0x2c2c47){const _0x97859c=_0x2068d5,_0x42e4b4={};for(const _0x109fa6 of this[_0x97859c(0x1c8)])_0x42e4b4[_0x109fa6[_0x97859c(0x213)]]=_0x2c2c47;this[_0x97859c(0x1cb)]=_0x42e4b4;},'exportToggleAllTypes'(_0xd4f28b){const _0x2f8699=_0x2068d5,_0x252f48={};for(const _0x4f0d6c of this[_0x2f8699(0x225)])_0x252f48[_0x4f0d6c]=_0xd4f28b;this[_0x2f8699(0x1c0)]=_0x252f48;},'exportInit'(){const _0x599590=_0x2068d5;0x0===Object['keys'](this[_0x599590(0x1cb)])['length']&&this[_0x599590(0x1c8)][_0x599590(0x1da)]&&(this[_0x599590(0x1cb)]={[this[_0x599590(0x1c8)][0x0][_0x599590(0x213)]]:!0x0});},async 'runExport'(){const _0x5950e6=_0x2068d5;if(this[_0x5950e6(0x222)]){this[_0x5950e6(0x1ce)]=!0x0,this[_0x5950e6(0x1d5)]=null,this['exportDone']=null;try{const _0x399721=this['exportSelectedEnvNames'],_0x2d24bd=_0x399721['length']>0x1,_0x1add51=new URLSearchParams();_0x2d24bd?_0x1add51[_0x5950e6(0x1f9)](_0x5950e6(0x1ee),_0x399721[_0x5950e6(0x1d1)](',')):_0x1add51[_0x5950e6(0x1f9)](_0x5950e6(0x20b),_0x399721[0x0]),this[_0x5950e6(0x20d)]&&_0x1add51[_0x5950e6(0x1f9)](_0x5950e6(0x1d2),_0x5950e6(0x1c5));const _0x1af613=this[_0x5950e6(0x1db)];_0x1af613&&_0x1af613[_0x5950e6(0x1da)]&&_0x1add51[_0x5950e6(0x1f9)](_0x5950e6(0x1c9),_0x1af613[_0x5950e6(0x1d1)](','));const _0x5a3a28=await fetch(__ENV__[_0x5950e6(0x207)]+_0x5950e6(0x209)+_0x1add51);if(!_0x5a3a28['ok']){const _0x5aa437=await _0x5a3a28[_0x5950e6(0x231)]()['catch'](()=>({}));throw new Error(_0x5aa437?.[_0x5950e6(0x1d4)]?.[_0x5950e6(0x22c)]||_0x5950e6(0x1d3)+_0x5a3a28[_0x5950e6(0x200)]);}const _0x338741=await _0x5a3a28[_0x5950e6(0x218)](),_0x13847f=URL[_0x5950e6(0x216)](_0x338741),_0xf5ec4d=document['createElement']('a'),_0x11af2a=_0x5a3a28['headers'][_0x5950e6(0x1ec)](_0x5950e6(0x211))||'',_0x343b62=_0x11af2a['match'](/filename="?([^"]+)"?/)?.[0x1]||_0x5950e6(0x1c7)+_0x399721[_0x5950e6(0x1d1)]('+')+'-'+Date[_0x5950e6(0x22b)]()+'.ndjson';_0xf5ec4d[_0x5950e6(0x1f1)]=_0x13847f,_0xf5ec4d['download']=_0x343b62,document[_0x5950e6(0x1ed)]['appendChild'](_0xf5ec4d),_0xf5ec4d['click'](),document[_0x5950e6(0x1ed)]['removeChild'](_0xf5ec4d),URL[_0x5950e6(0x1d8)](_0x13847f);const _0x4c701c=(await _0x338741['text']())['split']('\x0a')[_0x5950e6(0x1e1)](_0x12d45d=>_0x12d45d[_0x5950e6(0x219)]())[_0x5950e6(0x1bf)](_0x3fa43d=>{const _0x23923c=_0x5950e6;try{return JSON[_0x23923c(0x21b)](_0x3fa43d);}catch{return null;}})[_0x5950e6(0x1e1)](Boolean);this[_0x5950e6(0x1f7)]={'filename':_0x343b62,'bytes':_0x338741['size'],'envCount':_0x2d24bd?_0x399721[_0x5950e6(0x1da)]:0x1,'types':_0x4c701c[_0x5950e6(0x1e1)](_0x146172=>_0x5950e6(0x201)===_0x146172['r'])[_0x5950e6(0x1da)],'records':_0x4c701c['filter'](_0x2bc4ea=>_0x5950e6(0x1ea)===_0x2bc4ea['r'])[_0x5950e6(0x1da)],'changes':_0x4c701c[_0x5950e6(0x1e1)](_0x4d4136=>'change'===_0x4d4136['r'])[_0x5950e6(0x1da)]};}catch(_0x21b854){this['exportError']=_0x21b854?.[_0x5950e6(0x22c)]||String(_0x21b854);}finally{this[_0x5950e6(0x1ce)]=!0x1;}}},'importFile':null,'importEnvOverride':'','importSelTypes':{},'importAllTypes':!0x0,'importDropExisting':!0x1,'importIncludeChanges':!0x1,'importBatchSize':0x1f4,'importShowAdvanced':!0x1,'importBusy':!0x1,'importError':null,'importDone':null,'importDragOver':!0x1,'importFileTypes':[],get 'importSelectedTypeNames'(){const _0x4c01f4=_0x2068d5;return this['importAllTypes']?null:Object[_0x4c01f4(0x20a)](this[_0x4c01f4(0x229)])[_0x4c01f4(0x1e1)](_0x4607cb=>this['importSelTypes'][_0x4607cb]);},get 'canImport'(){const _0x167bf2=_0x2068d5;return!!this[_0x167bf2(0x1cc)]&&!this[_0x167bf2(0x1b9)];},'onDrop'(_0x2a6919){const _0x24c631=_0x2068d5;_0x2a6919[_0x24c631(0x203)](),this[_0x24c631(0x1f0)]=!0x1;const _0x32b6a6=_0x2a6919[_0x24c631(0x1c2)]?.[_0x24c631(0x1df)]?.[0x0];_0x32b6a6&&this[_0x24c631(0x1c3)](_0x32b6a6);},'onDragOver'(_0x2c9381){const _0x31fb97=_0x2068d5;_0x2c9381[_0x31fb97(0x203)](),this[_0x31fb97(0x1f0)]=!0x0;},'onDragLeave'(){const _0x5743bd=_0x2068d5;this[_0x5743bd(0x1f0)]=!0x1;},'pickFile'(){const _0x5c4758=_0x2068d5,_0x56c79b=document[_0x5c4758(0x234)](_0x5c4758(0x204));_0x56c79b[_0x5c4758(0x206)]=_0x5c4758(0x1f6),_0x56c79b[_0x5c4758(0x205)]=_0x5c4758(0x1e6),_0x56c79b[_0x5c4758(0x1f4)]=_0x274c88=>{const _0x37c149=_0x5c4758,_0x36460e=_0x274c88[_0x37c149(0x22d)][_0x37c149(0x1df)]?.[0x0];_0x36460e&&this[_0x37c149(0x1c3)](_0x36460e);},_0x56c79b[_0x5c4758(0x1e8)]();},async '_setImportFile'(_0x48b200){const _0x2a9a9e=_0x2068d5;this['importFile']=_0x48b200,this[_0x2a9a9e(0x21d)]=null,this[_0x2a9a9e(0x21f)]=null,this[_0x2a9a9e(0x1fd)]=[];try{const _0x1ed2e1=(await _0x48b200[_0x2a9a9e(0x1dd)](0x0,0x8000)[_0x2a9a9e(0x230)]())[_0x2a9a9e(0x1de)]('\x0a')[_0x2a9a9e(0x1e1)](_0x3deef3=>_0x3deef3[_0x2a9a9e(0x219)]()),_0x45118f=_0x1ed2e1[_0x2a9a9e(0x1bf)](_0x50d30d=>{const _0x109b61=_0x2a9a9e;try{return JSON[_0x109b61(0x21b)](_0x50d30d);}catch{return null;}})[_0x2a9a9e(0x1e1)](_0x55f5ed=>_0x2a9a9e(0x201)===_0x55f5ed?.['r']);this[_0x2a9a9e(0x1fd)]=[...new Set(_0x45118f[_0x2a9a9e(0x1bf)](_0x113db9=>_0x113db9[_0x2a9a9e(0x206)]))];const _0x3c1a2b=_0x1ed2e1[_0x2a9a9e(0x1bf)](_0x21ebd6=>{try{return JSON['parse'](_0x21ebd6);}catch{return null;}})[_0x2a9a9e(0x20f)](_0x5f41e3=>_0x2a9a9e(0x223)===_0x5f41e3?.['r']);_0x3c1a2b?.[_0x2a9a9e(0x1fb)]&&this[_0x2a9a9e(0x1e9)];}catch{}},'importToggleAllTypes'(_0x103769){const _0x4e7a7a=_0x2068d5,_0x3e6ff4={};for(const _0x509fd8 of this['importFileTypes'])_0x3e6ff4[_0x509fd8]=_0x103769;this[_0x4e7a7a(0x229)]=_0x3e6ff4;},async 'runImport'(){const _0xa5865b=_0x2068d5;if(this[_0xa5865b(0x1cc)]){this[_0xa5865b(0x1b9)]=!0x0,this[_0xa5865b(0x21d)]=null,this[_0xa5865b(0x21f)]=null;try{const _0x2728d2=new URLSearchParams({'dropExisting':String(this[_0xa5865b(0x208)]),'includeChanges':String(this[_0xa5865b(0x1bc)]),'batchSize':String(this[_0xa5865b(0x221)]||0x1f4)});this[_0xa5865b(0x1e9)]&&_0x2728d2[_0xa5865b(0x1f9)](_0xa5865b(0x20b),this[_0xa5865b(0x1e9)]);const _0x1c4520=this['importSelectedTypeNames'];_0x1c4520&&_0x1c4520['length']&&_0x2728d2[_0xa5865b(0x1f9)](_0xa5865b(0x1c9),_0x1c4520['join'](','));const _0x39e60b=await fetch(__ENV__[_0xa5865b(0x207)]+_0xa5865b(0x1e7)+_0x2728d2,{'method':_0xa5865b(0x1ca),'headers':{'content-type':'application/x-ndjson'},'body':this[_0xa5865b(0x1cc)]}),_0x42b342=await _0x39e60b[_0xa5865b(0x231)]()[_0xa5865b(0x1e0)](()=>({}));if(!_0x39e60b['ok'])throw new Error(_0x42b342?.['error']?.[_0xa5865b(0x22c)]||_0xa5865b(0x1d3)+_0x39e60b[_0xa5865b(0x200)]);const _0x54834d=_0x42b342[_0xa5865b(0x1ea)]??_0x42b342;this[_0xa5865b(0x21f)]={'types':_0x54834d[_0xa5865b(0x1c9)]??0x0,'records':_0x54834d['records']??0x0,'changes':_0x54834d[_0xa5865b(0x215)]??0x0},_0x36a5ff[_0xa5865b(0x1f2)][_0xa5865b(0x21c)]?.();}catch(_0x4c4fa4){this[_0xa5865b(0x21d)]=_0x4c4fa4?.['message']||String(_0x4c4fa4);}finally{this[_0xa5865b(0x1b9)]=!0x1;}}},'backupMode':_0x2068d5(0x1bb),'backupDestDir':_0x2068d5(0x1f8)+_0x5ba62b(),'backupSelEnvs':{},'backupEnvMode':_0x2068d5(0x1f5),'backupCompact':!0x0,'backupBusy':!0x1,'backupError':null,'backupResult':null,'backupDlBusy':!0x1,'backupDlError':null,'backupDlDone':null,get 'backupEnvNames'(){const _0x10e463=_0x2068d5;return _0x10e463(0x1f5)===this[_0x10e463(0x1d9)]?null:Object[_0x10e463(0x20a)](this[_0x10e463(0x22a)])[_0x10e463(0x1e1)](_0x55cf2a=>this[_0x10e463(0x22a)][_0x55cf2a]);},get 'canBackup'(){const _0x5d1784=_0x2068d5;return this[_0x5d1784(0x20c)][_0x5d1784(0x219)]()['length']>0x0&&!this[_0x5d1784(0x1e5)];},get 'canBackupDl'(){return!this['backupDlBusy'];},async 'runBackup'(){const _0x36bb4a=_0x2068d5;if(this[_0x36bb4a(0x1d6)]){this[_0x36bb4a(0x1e5)]=!0x0,this[_0x36bb4a(0x228)]=null,this[_0x36bb4a(0x1d7)]=null;try{const _0x22d359=await fetch(__ENV__['API']+_0x36bb4a(0x1be),{'method':_0x36bb4a(0x1ca),'headers':{'content-type':_0x36bb4a(0x202)},'body':JSON[_0x36bb4a(0x226)]({'destDir':this['backupDestDir'][_0x36bb4a(0x219)](),'envNames':this[_0x36bb4a(0x1d0)],'compact':this[_0x36bb4a(0x22f)]})}),_0x327ecc=await _0x22d359['json']()['catch'](()=>({}));if(!_0x22d359['ok'])throw new Error(_0x327ecc?.[_0x36bb4a(0x1d4)]?.['message']||_0x36bb4a(0x1d3)+_0x22d359[_0x36bb4a(0x200)]);this[_0x36bb4a(0x1d7)]=_0x327ecc[_0x36bb4a(0x1ea)]??_0x327ecc;}catch(_0x3c4134){this[_0x36bb4a(0x228)]=_0x3c4134?.[_0x36bb4a(0x22c)]||String(_0x3c4134);}finally{this[_0x36bb4a(0x1e5)]=!0x1;}}},async 'runDownloadBackup'(){const _0x1114a5=_0x2068d5;this['backupDlBusy']=!0x0,this[_0x1114a5(0x1ef)]=null,this[_0x1114a5(0x1ba)]=null;try{const _0x4ac670=this[_0x1114a5(0x1d0)],_0x139a1b=new URLSearchParams();_0x4ac670?.[_0x1114a5(0x1da)]?_0x139a1b[_0x1114a5(0x1f9)](_0x1114a5(0x1ee),_0x4ac670[_0x1114a5(0x1d1)](',')):_0x139a1b[_0x1114a5(0x1f9)](_0x1114a5(0x1ee),this[_0x1114a5(0x1c8)][_0x1114a5(0x1bf)](_0x3672ef=>_0x3672ef[_0x1114a5(0x213)])['join'](','));const _0x53b678=await fetch(__ENV__[_0x1114a5(0x207)]+'/system/export?'+_0x139a1b);if(!_0x53b678['ok']){const _0x37c7f4=await _0x53b678[_0x1114a5(0x231)]()['catch'](()=>({}));throw new Error(_0x37c7f4?.[_0x1114a5(0x1d4)]||_0x1114a5(0x1d3)+_0x53b678['status']);}const _0x4a4d70=await _0x53b678[_0x1114a5(0x218)](),_0x5f2697=URL['createObjectURL'](_0x4a4d70),_0x53ac68=document[_0x1114a5(0x234)]('a'),_0x307f4b=_0x53b678[_0x1114a5(0x1f3)][_0x1114a5(0x1ec)](_0x1114a5(0x211))||'',_0x5acb1b=_0x307f4b[_0x1114a5(0x224)](/filename="?([^"]+)"?/)?.[0x1]||_0x1114a5(0x1fa)+_0x5ba62b()+_0x1114a5(0x1ff);_0x53ac68['href']=_0x5f2697,_0x53ac68[_0x1114a5(0x214)]=_0x5acb1b,document[_0x1114a5(0x1ed)]['appendChild'](_0x53ac68),_0x53ac68['click'](),document[_0x1114a5(0x1ed)][_0x1114a5(0x20e)](_0x53ac68),URL[_0x1114a5(0x1d8)](_0x5f2697),this[_0x1114a5(0x1ba)]={'filename':_0x5acb1b,'bytes':_0x4a4d70['size']};}catch(_0x384ecf){this['backupDlError']=_0x384ecf?.[_0x1114a5(0x22c)]||String(_0x384ecf);}finally{this[_0x1114a5(0x1cf)]=!0x1;}},'close'(){const _0x5bb14f=_0x2068d5;_0x36a5ff[_0x5bb14f(0x1f2)]['modal'][_0x5bb14f(0x1c1)]();},'mount'(){const _0x59ef51=_0x2068d5;this[_0x59ef51(0x1bd)]();}};},'template':'\x0a<div\x20style=\x22min-width:520px;\x20max-width:640px;\x20display:flex;\x20flex-direction:column;\x20gap:0;\x22>\x0a\x0a\x20\x20<!--\x20Tab\x20bar\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:2px;\x20padding:3px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:9px;\x20margin-bottom:22px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22tab=\x27export\x27\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27export\x27\x20?\x20\x27flex:1;background:var(--okdb-app-surface-2);color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);font-weight:600;\x27\x20:\x20\x27flex:1;background:transparent;border-color:transparent;opacity:.5;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:7px\x200;border-radius:7px;font-size:13px;transition:all\x20.15s;cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20⬇\x20Export\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22tab=\x27import\x27\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27import\x27\x20?\x20\x27flex:1;background:var(--okdb-app-surface-2);color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);font-weight:600;\x27\x20:\x20\x27flex:1;background:transparent;border-color:transparent;opacity:.5;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:7px\x200;border-radius:7px;font-size:13px;transition:all\x20.15s;cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20⬆\x20Import\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22tab=\x27backup\x27\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27backup\x27\x20?\x20\x27flex:1;background:var(--okdb-app-surface-2);color:var(--okdb-purple);border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);font-weight:600;\x27\x20:\x20\x27flex:1;background:transparent;border-color:transparent;opacity:.5;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:7px\x200;border-radius:7px;font-size:13px;transition:all\x20.15s;cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20🗄\x20Backup\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20═══\x20EXPORT\x20═══════════════════════════════════════════════════════════\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27export\x27\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:18px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.5;line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Streaming\x20NDJSON\x20export\x20—\x20portable\x20across\x20OKDB\x20versions,\x20importable\x20into\x20any\x20instance.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Environments\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22flex:1;margin:0;\x22>Environments</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22exportToggleAllEnvs(true)\x22\x20\x20class=\x22dops-micro\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22exportToggleAllEnvs(false)\x22\x20class=\x22dops-micro\x22>none</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-wrap:wrap;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22userEnvs\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22exportSelEnvs[e.name]\x20?\x20\x27background:var(--okdb-app-surface-2);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);color:#e2eaf4;\x27\x20:\x20\x27background:var(--okdb-app-surface);border-color:var(--okdb-app-border);opacity:.55;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:flex;align-items:center;gap:5px;padding:5px\x2011px;border-radius:999px;font-size:12px;cursor:pointer;border:1px\x20solid;transition:all\x20.12s;user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!exportSelEnvs[e.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22exportSelEnvs\x20=\x20{...exportSelEnvs,\x20[e.name]:\x20$el.checked}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:none;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22exportSelEnvs[e.name]\x20?\x20\x27color:var(--okdb-accent);font-size:10px;\x27\x20:\x20\x27display:none;\x27\x22>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{e.name}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;font-size:10px;\x22>{{e.types\x20?\x20e.types.filter(t=>!t.name.startsWith(\x27~\x27)).length\x20:\x200}}\x20types</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Types\x20(only\x20for\x20single\x20env)\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportIsSingleEnv\x20&&\x20exportSingleEnvTypes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22flex:1;margin:0;\x22>Types</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22\x20style=\x22font-size:11px;gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22exportAllTypes\x22\x20@change=\x22exportAllTypes\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x22>All\x20types</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!exportAllTypes\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:0;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-border);border-radius:8px;overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;padding:5px\x2010px;border-bottom:1px\x20solid\x20var(--okdb-app-border);gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22exportToggleAllTypes(true)\x22\x20\x20class=\x22dops-micro\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22exportToggleAllTypes(false)\x22\x20class=\x22dops-micro\x22>none</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;max-height:140px;overflow-y:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22exportSingleEnvTypes\x22\x20let:t>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;align-items:center;gap:8px;padding:6px\x2010px;cursor:pointer;transition:background\x20.1s;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22exportSelTypes[t]\x20?\x20\x27background:#1a2a1a;\x27\x20:\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@mouseenter=\x22$el.style.background=exportSelTypes[t]?\x27#1a2a1a\x27:\x27var(--okdb-app-surface)\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@mouseleave=\x22$el.style.background=exportSelTypes[t]?\x27#1a2a1a\x27:\x27\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!exportSelTypes[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22exportSelTypes\x20=\x20{...exportSelTypes,\x20[t]:\x20$el.checked}\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;font-size:12px;\x22>{{t}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22!exportIsSingleEnv\x20&&\x20exportSelectedEnvNames.length\x20>\x201\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;opacity:.4;font-style:italic;\x22>All\x20types\x20will\x20be\x20exported\x20from\x20each\x20selected\x20environment.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Options\x20-->\x0a\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22exportIncludeChanges\x22\x20@change=\x22exportIncludeChanges\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span>Include\x20changelog\x20<span\x20style=\x22opacity:.4;font-size:11px;\x22>(sync\x20history)</span></span>\x0a\x20\x20\x20\x20\x20\x20</label>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportError\x22><div\x20class=\x22dops-error\x22>{{exportError}}</div></if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Success\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportDone\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-success\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>✓</span><span\x20style=\x22font-weight:600;\x22>Downloaded</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;font-size:11px;margin-left:auto;\x22>{{formatBytes(exportDone.bytes)}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:repeat(3,1fr);gap:6px;font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportDone.envCount\x20>\x201\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{exportDone.envCount}}</div><div>envs</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{exportDone.types}}</div><div>types</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{exportDone.records}}</div><div>records</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{exportDone.changes}}</div><div>changes</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;opacity:.35;margin-top:6px;font-family:monospace;word-break:break-all;\x22>{{exportDone.filename}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;justify-content:flex-end;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22close()\x22\x20class=\x22dops-btn-ghost\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runExport()\x22\x20:disabled=\x22!exportCanRun\x22\x20class=\x22dops-btn-primary\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22exportBusy\x22><span\x20class=\x22dops-spinner\x22></span>\x20Exporting…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!exportBusy\x22>⬇\x20Download\x20NDJSON</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20═══\x20IMPORT\x20═══════════════════════════════════════════════════════════\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27import\x27\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:18px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.5;line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Upload\x20a\x20OKDB\x20NDJSON\x20export.\x20Types,\x20indexes,\x20and\x20records\x20are\x20restored\x20automatically.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Multi-env\x20files\x20restore\x20each\x20environment\x20separately.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Drop\x20zone\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20@click=\x22pickFile()\x22\x20@drop=\x22onDrop($event)\x22\x20@dragover=\x22onDragOver($event)\x22\x20@dragleave=\x22onDragLeave()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22importDragOver\x20?\x20\x27border-color:var(--okdb-accent);background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x205%,\x20transparent);\x27\x20:\x20importFile\x20?\x20\x27border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);background:#0a1a10;\x27\x20:\x20\x27border-color:var(--okdb-app-border);background:var(--okdb-app-bg-deep);\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22border:2px\x20dashed;border-radius:10px;padding:24px\x2016px;text-align:center;cursor:pointer;transition:all\x20.15s;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!importFile\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;opacity:.4;margin-bottom:8px;\x22>📂</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;opacity:.7;\x22>Drop\x20.ndjson\x20file\x20here\x20or\x20<span\x20style=\x22color:var(--okdb-accent);\x22>click\x20to\x20browse</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;opacity:.3;margin-top:4px;\x22>.ndjson\x20·\x20.jsonl\x20·\x20.json</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22importFile\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:20px;margin-bottom:6px;\x22>📄</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;font-weight:600;color:var(--okdb-success);font-family:monospace;word-break:break-all;\x22>{{importFile.name}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;opacity:.45;margin-top:3px;\x22>{{formatBytes(importFile.size)}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22importFileTypes.length\x22>\x20·\x20{{importFileTypes.length}}\x20type{{importFileTypes.length!==1?\x27s\x27:\x27\x27}}\x20detected</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20·\x20click\x20to\x20change</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Types\x20filter\x20(from\x20file)\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22importFileTypes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22flex:1;margin:0;\x22>Types\x20to\x20import</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22\x20style=\x22font-size:11px;gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22importAllTypes\x22\x20@change=\x22importAllTypes\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x22>All</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!importAllTypes\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:0;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-border);border-radius:8px;overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;padding:5px\x2010px;border-bottom:1px\x20solid\x20var(--okdb-app-border);gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22importToggleAllTypes(true)\x22\x20\x20class=\x22dops-micro\x22>all</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22importToggleAllTypes(false)\x22\x20class=\x22dops-micro\x22>none</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;max-height:130px;overflow-y:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22importFileTypes\x22\x20let:t>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;align-items:center;gap:8px;padding:6px\x2010px;cursor:pointer;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22importSelTypes[t]\x20?\x20\x27background:#1a2a1a;\x27\x20:\x20\x27\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!importSelTypes[t]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22importSelTypes\x20=\x20{...importSelTypes,\x20[t]:\x20$el.checked}\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;font-size:12px;\x22>{{t}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Target\x20env\x20override\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22>Target\x20environment\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.35;font-size:11px;font-weight:400;\x22>(leave\x20empty\x20to\x20use\x20the\x20file\x27s\x20source\x20env)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<select\x20:value=\x22importEnvOverride\x22\x20@change=\x22importEnvOverride\x20=\x20$el.value\x22\x20class=\x22dops-select\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20from\x20file\x20header\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22userEnvs\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22e.name\x22>{{e.name}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Options\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:7px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22importDropExisting\x22\x20@change=\x22importDropExisting\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Drop\x20&\x20recreate\x20existing\x20types\x20<span\x20style=\x22opacity:.4;font-size:11px;\x22>(replaces\x20current\x20data)</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22importIncludeChanges\x22\x20@change=\x22importIncludeChanges\x20=\x20$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Restore\x20changelog\x20rows</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Advanced\x20-->\x0a\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22importShowAdvanced=!importShowAdvanced\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;opacity:.4;background:transparent;border:none;padding:0;cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{importShowAdvanced?\x27▴\x20hide\x27:\x27▾\x27}}\x20advanced\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22importShowAdvanced\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22\x20style=\x22margin-top:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22>Batch\x20size\x20<span\x20style=\x22opacity:.35;font-size:11px;\x22>(records\x20per\x20write-txn)</span></label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22number\x22\x20min=\x2210\x22\x20max=\x2210000\x22\x20step=\x2210\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22importBatchSize\x22\x20@input=\x22importBatchSize=Number($el.value)||500\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22dops-input\x22\x20style=\x22max-width:120px;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22importError\x22><div\x20class=\x22dops-error\x22>{{importError}}</div></if>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22importDone\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-success\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>✓</span><span\x20style=\x22font-weight:600;\x22>Import\x20complete</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:repeat(3,1fr);gap:6px;font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{importDone.types}}</div><div>types</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{importDone.records}}</div><div>records</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-stat\x22><div\x20class=\x22dops-stat-n\x22>{{importDone.changes}}</div><div>changes</div></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;justify-content:flex-end;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22close()\x22\x20class=\x22dops-btn-ghost\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runImport()\x22\x20:disabled=\x22!canImport\x22\x20class=\x22dops-btn-primary\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22importBusy\x22><span\x20class=\x22dops-spinner\x22></span>\x20Importing…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!importBusy\x22>⬆\x20Import\x20File</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20═══\x20BACKUP\x20════════════════════════════════════════════════════════════\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27backup\x27\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:0;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Mode\x20tabs\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:0;margin-bottom:18px;border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22backupMode=\x27server\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22backupMode===\x27server\x27\x20?\x20\x27color:var(--okdb-purple);border-bottom:2px\x20solid\x20var(--okdb-purple);opacity:1;\x27\x20:\x20\x27border-bottom:2px\x20solid\x20transparent;opacity:.45;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;background:transparent;border:none;border-radius:0;font-size:13px;cursor:pointer;transition:all\x20.15s;margin-bottom:-1px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20🗄\x20Server\x20backup\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22backupMode=\x27download\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22backupMode===\x27download\x27\x20?\x20\x27color:var(--okdb-purple);border-bottom:2px\x20solid\x20var(--okdb-purple);opacity:1;\x27\x20:\x20\x27border-bottom:2px\x20solid\x20transparent;opacity:.45;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;background:transparent;border:none;border-radius:0;font-size:13px;cursor:pointer;transition:all\x20.15s;margin-bottom:-1px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20⬇\x20Download\x20to\x20PC\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Server\x20backup\x20mode\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupMode\x20===\x20\x27server\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:16px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.5;line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Hot\x20LMDB\x20page-copy\x20backup\x20—\x20atomic,\x20exact\x20snapshot,\x20no\x20serialisation.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Writes\x20to\x20a\x20directory\x20<em>on\x20the\x20server</em>.\x20The\x20output\x20can\x20be\x20used\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20directly\x20as\x20a\x20OKDB\x20data\x20path.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Dest\x20dir\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22>Destination\x20directory\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.35;font-size:11px;font-weight:400;\x22>(server-side\x20path)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22text\x22\x20:value=\x22backupDestDir\x22\x20@input=\x22backupDestDir=$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22dops-input\x22\x20style=\x22font-family:monospace;\x22\x20spellcheck=\x22false\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Env\x20selection\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22margin-bottom:8px;\x22>Environments</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:12px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22radio\x22\x20name=\x22bkEnvMode\x22\x20value=\x22all\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22backupEnvMode===\x27all\x27\x22\x20@change=\x22backupEnvMode=\x27all\x27\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>All</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22radio\x22\x20name=\x22bkEnvMode\x22\x20value=\x22selected\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22backupEnvMode===\x27selected\x27\x22\x20@change=\x22backupEnvMode=\x27selected\x27\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Select…</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupEnvMode===\x27selected\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-wrap:wrap;gap:6px;padding:10px;background:var(--okdb-app-bg-deep);border-radius:8px;border:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22userEnvs\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22backupSelEnvs[e.name]\x20?\x20\x27background:var(--okdb-app-surface);border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);color:#e2d8f4;\x27\x20:\x20\x27background:var(--okdb-app-surface);border-color:var(--okdb-app-border);opacity:.55;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:flex;align-items:center;gap:5px;padding:5px\x2011px;border-radius:999px;font-size:12px;cursor:pointer;border:1px\x20solid;transition:all\x20.12s;user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!backupSelEnvs[e.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22backupSelEnvs={...backupSelEnvs,[e.name]:$el.checked}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:none;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22backupSelEnvs[e.name]?\x27color:var(--okdb-purple);font-size:10px;\x27:\x27display:none;\x27\x22>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{e.name}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22backupCompact\x22\x20@change=\x22backupCompact=$el.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Compact\x20while\x20copying\x20<span\x20style=\x22opacity:.4;font-size:11px;\x22>(smaller\x20files,\x20slightly\x20slower)</span></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupError\x22><div\x20class=\x22dops-error\x22>{{backupError}}</div></if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupResult\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-success\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2020%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;margin-bottom:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-weight:600;color:var(--okdb-app-fg);\x22>Server\x20backup\x20complete</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;font-size:11px;margin-left:auto;\x22>{{backupResult.durationMs}}ms</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22backupResult.envs||[]\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:#1a1228;border-radius:6px;padding:7px\x2010px;font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;font-weight:600;color:var(--okdb-purple);\x22>{{e.name}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.35;font-size:11px;\x22>{{formatBytes(e.sizeBefore)}}\x20→\x20{{formatBytes(e.sizeAfter)}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-family:monospace;font-size:10px;opacity:.4;margin-top:3px;word-break:break-all;\x22>{{e.dest}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;justify-content:flex-end;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22close()\x22\x20class=\x22dops-btn-ghost\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runBackup()\x22\x20:disabled=\x22!canBackup\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:8px\x2020px;border-radius:8px;font-size:13px;font-weight:600;background:linear-gradient(135deg,#1e1530,#150f22);border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-purple)\x2033%,\x20transparent);color:var(--okdb-purple);cursor:pointer;display:flex;align-items:center;gap:6px;transition:all\x20.15s;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupBusy\x22><span\x20class=\x22dops-spinner\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);border-top-color:var(--okdb-purple);\x22></span>\x20Backing\x20up…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!backupBusy\x22>🗄\x20Run\x20Server\x20Backup</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Download\x20backup\x20mode\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupMode\x20===\x20\x27download\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:16px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.5;line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Export\x20all\x20environments\x20as\x20a\x20single\x20portable\x20NDJSON\x20file\x20and\x20download\x20it\x20to\x20your\x20computer.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20This\x20file\x20can\x20be\x20imported\x20back\x20into\x20any\x20OKDB\x20instance.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Env\x20selection\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-field\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-label\x22\x20style=\x22margin-bottom:8px;\x22>Environments\x20to\x20include</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:12px;margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22radio\x22\x20name=\x22dlEnvMode\x22\x20value=\x22all\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22backupEnvMode===\x27all\x27\x22\x20@change=\x22backupEnvMode=\x27all\x27\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>All\x20environments</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22dops-check\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22radio\x22\x20name=\x22dlEnvMode\x22\x20value=\x22selected\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22backupEnvMode===\x27selected\x27\x22\x20@change=\x22backupEnvMode=\x27selected\x27\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Select…</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupEnvMode===\x27selected\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-wrap:wrap;gap:6px;padding:10px;background:var(--okdb-app-bg-deep);border-radius:8px;border:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<for\x20:=\x22userEnvs\x22\x20let:e>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22backupSelEnvs[e.name]\x20?\x20\x27background:var(--okdb-app-surface);border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);\x27\x20:\x20\x27background:var(--okdb-app-surface);border-color:var(--okdb-app-border);opacity:.55;\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:flex;align-items:center;gap:5px;padding:5px\x2011px;border-radius:999px;font-size:12px;cursor:pointer;border:1px\x20solid;transition:all\x20.12s;user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:checked=\x22!!backupSelEnvs[e.name]\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22backupSelEnvs={...backupSelEnvs,[e.name]:$el.checked}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:none;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22backupSelEnvs[e.name]?\x27color:var(--okdb-purple);font-size:10px;\x27:\x27display:none;\x27\x22>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{e.name}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</for>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupDlError\x22><div\x20class=\x22dops-error\x22>{{backupDlError}}</div></if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupDlDone\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22dops-success\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2020%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>✓</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-weight:600;color:var(--okdb-app-fg);\x22>Downloaded</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;font-size:11px;\x22>{{formatBytes(backupDlDone.bytes)}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-family:monospace;font-size:10px;opacity:.35;margin-top:5px;word-break:break-all;\x22>{{backupDlDone.filename}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;justify-content:flex-end;margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22close()\x22\x20class=\x22dops-btn-ghost\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runDownloadBackup()\x22\x20:disabled=\x22!canBackupDl\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22padding:8px\x2020px;border-radius:8px;font-size:13px;font-weight:600;background:linear-gradient(135deg,#1e1530,#150f22);border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-purple)\x2033%,\x20transparent);color:var(--okdb-purple);cursor:pointer;display:flex;align-items:center;gap:6px;transition:all\x20.15s;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22backupDlBusy\x22><span\x20class=\x22dops-spinner\x22\x20style=\x22border-color:color-mix(in\x20srgb,\x20var(--okdb-purple)\x2027%,\x20transparent);border-top-color:var(--okdb-purple);\x22></span>\x20Downloading…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!backupDlBusy\x22>⬇\x20Download\x20Backup</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a\x0a<style>\x0a\x20\x20.dops-field\x20{\x20display:flex;\x20flex-direction:column;\x20gap:5px;\x20}\x0a\x20\x20.dops-label\x20{\x20font-size:12px;\x20opacity:.6;\x20font-weight:500;\x20}\x0a\x20\x20.dops-input\x20{\x0a\x20\x20\x20\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x0a\x20\x20\x20\x20color:inherit;\x20padding:7px\x2010px;\x20font-size:13px;\x20width:100%;\x0a\x20\x20\x20\x20box-sizing:border-box;\x20transition:border-color\x20.15s;\x0a\x20\x20}\x0a\x20\x20.dops-input:focus\x20{\x20outline:none;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20}\x0a\x20\x20.dops-select\x20{\x0a\x20\x20\x20\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x0a\x20\x20\x20\x20color:inherit;\x20padding:7px\x2010px;\x20font-size:13px;\x20width:100%;\x20box-sizing:border-box;\x20cursor:pointer;\x0a\x20\x20}\x0a\x20\x20.dops-select:focus\x20{\x20outline:none;\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20}\x0a\x20\x20.dops-check\x20{\x20display:flex;\x20align-items:center;\x20gap:8px;\x20font-size:13px;\x20cursor:pointer;\x20user-select:none;\x20}\x0a\x20\x20.dops-micro\x20{\x0a\x20\x20\x20\x20padding:2px\x208px;\x20border-radius:4px;\x20font-size:10px;\x20background:transparent;\x0a\x20\x20\x20\x20border:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.5;\x20cursor:pointer;\x20transition:opacity\x20.1s;\x0a\x20\x20}\x0a\x20\x20.dops-micro:hover\x20{\x20opacity:.85;\x20}\x0a\x20\x20.dops-error\x20{\x0a\x20\x20\x20\x20background:#2a1010;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2027%,\x20transparent);\x20border-radius:8px;\x0a\x20\x20\x20\x20padding:10px\x2012px;\x20font-size:12px;\x20color:var(--okdb-danger);\x20line-height:1.5;\x0a\x20\x20}\x0a\x20\x20.dops-success\x20{\x0a\x20\x20\x20\x20background:#0d1a14;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-success)\x2020%,\x20transparent);\x20border-radius:8px;\x0a\x20\x20\x20\x20padding:12px\x2014px;\x20font-size:13px;\x20color:#d1fae5;\x0a\x20\x20}\x0a\x20\x20.dops-stat\x20{\x0a\x20\x20\x20\x20background:#071410;\x20border-radius:6px;\x20padding:8px;\x20text-align:center;\x20font-size:11px;\x20opacity:.8;\x0a\x20\x20}\x0a\x20\x20.dops-stat-n\x20{\x20font-size:18px;\x20font-weight:700;\x20color:var(--okdb-success);\x20}\x0a\x20\x20.dops-btn-primary\x20{\x0a\x20\x20\x20\x20padding:8px\x2020px;\x20border-radius:8px;\x20font-size:13px;\x20font-weight:600;\x0a\x20\x20\x20\x20background:linear-gradient(135deg,#1e4060,#1a3050);\x0a\x20\x20\x20\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x0a\x20\x20\x20\x20cursor:pointer;\x20display:flex;\x20align-items:center;\x20gap:6px;\x20transition:all\x20.15s;\x0a\x20\x20}\x0a\x20\x20.dops-btn-primary:hover:not(:disabled)\x20{\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2053%,\x20transparent);\x20}\x0a\x20\x20.dops-btn-primary:disabled\x20{\x20opacity:.35;\x20cursor:not-allowed;\x20}\x0a\x20\x20.dops-btn-ghost\x20{\x0a\x20\x20\x20\x20padding:8px\x2016px;\x20border-radius:8px;\x20font-size:13px;\x0a\x20\x20\x20\x20background:transparent;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.55;\x20cursor:pointer;\x0a\x20\x20}\x0a\x20\x20.dops-btn-ghost:hover\x20{\x20opacity:.85;\x20}\x0a\x20\x20.dops-spinner\x20{\x0a\x20\x20\x20\x20display:inline-block;\x20width:12px;\x20height:12px;\x0a\x20\x20\x20\x20border:2px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2020%,\x20transparent);\x20border-top-color:var(--okdb-accent);\x0a\x20\x20\x20\x20border-radius:50%;\x20animation:dops-spin\x20.6s\x20linear\x20infinite;\x0a\x20\x20}\x0a\x20\x20@keyframes\x20dops-spin\x20{\x20to\x20{\x20transform:rotate(360deg);\x20}\x20}\x0a</style>\x0a'};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x37641d=_0x43f6;(function(_0x471700,_0x11f7fe){const _0x101834=_0x43f6,_0x590126=_0x471700();while(!![]){try{const _0x451c0c=-parseInt(_0x101834(0x144))/0x1+parseInt(_0x101834(0x148))/0x2*(parseInt(_0x101834(0x14a))/0x3)+-parseInt(_0x101834(0x161))/0x4*(parseInt(_0x101834(0x143))/0x5)+parseInt(_0x101834(0x160))/0x6*(-parseInt(_0x101834(0x14d))/0x7)+-parseInt(_0x101834(0x162))/0x8*(-parseInt(_0x101834(0x15b))/0x9)+-parseInt(_0x101834(0x165))/0xa+parseInt(_0x101834(0x136))/0xb*(parseInt(_0x101834(0x158))/0xc);if(_0x451c0c===_0x11f7fe)break;else _0x590126['push'](_0x590126['shift']());}catch(_0x7112de){_0x590126['push'](_0x590126['shift']());}}}(_0x206a,0xc77a5));import _0x3026df from'../../api/parts/api-endpoint.ok.js';import _0x4536a0 from'@toolkit/elements/ok-icon.ok.js';export default{'tag':_0x37641d(0x13d),'unwrap':!0x0,'dependencies':[_0x3026df,_0x4536a0],'context':()=>({'routes':[],'loading':!0x1,'error':null,'selected':null,'search':'','tagOrder':[_0x37641d(0x150),'types',_0x37641d(0x13f),_0x37641d(0x15d),_0x37641d(0x154),_0x37641d(0x135),'queue',_0x37641d(0x140),_0x37641d(0x163),_0x37641d(0x133),'envs',_0x37641d(0x159)],async 'load'(){const _0x151b04=_0x37641d;this[_0x151b04(0x131)]=!0x0,this[_0x151b04(0x145)]=null;try{const _0x8d6fdf=await fetch(__ENV__[_0x151b04(0x13a)]+_0x151b04(0x13b)),_0x28787b=await _0x8d6fdf['json']();if(!_0x8d6fdf['ok'])throw new Error(_0x28787b?.[_0x151b04(0x145)]?.[_0x151b04(0x147)]||_0x151b04(0x146));this[_0x151b04(0x13e)]=_0x28787b[_0x151b04(0x13f)]??[];}catch(_0x57a35a){this[_0x151b04(0x145)]=_0x57a35a?.[_0x151b04(0x147)]||String(_0x57a35a);}finally{this[_0x151b04(0x131)]=!0x1;}},get 'filtered'(){const _0x5d2ea9=_0x37641d,_0x297b2a=this[_0x5d2ea9(0x13c)]['trim']()[_0x5d2ea9(0x142)]();return _0x297b2a?this[_0x5d2ea9(0x13e)]['filter'](_0x3d5add=>_0x3d5add['path'][_0x5d2ea9(0x142)]()[_0x5d2ea9(0x164)](_0x297b2a)||_0x3d5add[_0x5d2ea9(0x132)][_0x5d2ea9(0x142)]()[_0x5d2ea9(0x164)](_0x297b2a)||(_0x3d5add[_0x5d2ea9(0x14f)]?.['summary']||'')['toLowerCase']()[_0x5d2ea9(0x164)](_0x297b2a)||(_0x3d5add[_0x5d2ea9(0x14f)]?.[_0x5d2ea9(0x15f)]||[])[_0x5d2ea9(0x156)](_0x1a8ccb=>_0x1a8ccb[_0x5d2ea9(0x164)](_0x297b2a))):this['routes'];},get 'groups'(){const _0x3f76ec=_0x37641d,_0x2682f0=new Map();for(const _0x4a5708 of this['filtered']){const _0x127a30=_0x4a5708[_0x3f76ec(0x14f)]?.['tags']?.[0x0]??_0x3f76ec(0x137);_0x2682f0[_0x3f76ec(0x141)](_0x127a30)||_0x2682f0['set'](_0x127a30,[]),_0x2682f0['get'](_0x127a30)['push'](_0x4a5708);}return[..._0x2682f0[_0x3f76ec(0x134)]()][_0x3f76ec(0x15e)](([_0x286758],[_0xfeaf65])=>{const _0x34dc8b=_0x3f76ec,_0x107e31=this[_0x34dc8b(0x14b)][_0x34dc8b(0x14e)](_0x286758),_0x236853=this[_0x34dc8b(0x14b)][_0x34dc8b(0x14e)](_0xfeaf65);return-0x1===_0x107e31&&-0x1===_0x236853?_0x286758[_0x34dc8b(0x15c)](_0xfeaf65):-0x1===_0x107e31?0x1:-0x1===_0x236853?-0x1:_0x107e31-_0x236853;})['map'](([_0x921496,_0x354fea])=>({'tag':_0x921496,'routes':_0x354fea}));},'methodColor':_0x2e248f=>({'GET':_0x37641d(0x14c),'POST':_0x37641d(0x153),'PUT':_0x37641d(0x130),'PATCH':_0x37641d(0x149),'DELETE':_0x37641d(0x15a)}[_0x2e248f]||_0x37641d(0x152)),'select'(_0x41fbc0){const _0x47ed9f=_0x37641d;this[_0x47ed9f(0x157)]=null,setTimeout(()=>{const _0x12f556=_0x47ed9f;this[_0x12f556(0x157)]=_0x41fbc0;},0x0);},'back'(){const _0x1a6898=_0x37641d;this[_0x1a6898(0x157)]=null;},'shortPath':_0x412542=>_0x412542[_0x37641d(0x151)](/^\/api/,'')[_0x37641d(0x151)](/\[[^\]]*\]/g,''),'optionalHint'(_0x1781e3){const _0x556730=_0x37641d,_0x20cbb3=_0x1781e3[_0x556730(0x138)](/\[([^\]]*)\]/);return _0x20cbb3?_0x20cbb3[0x1][_0x556730(0x151)](/=\w+/g,''):null;}}),'init'(){const _0x51e666=_0x37641d;this[_0x51e666(0x139)]();},'template':'\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;height:100%;min-height:0;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20──\x20Detail\x20view\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22selected\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;height:100%;min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Back\x20bar\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22back()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:flex;align-items:center;gap:5px;font-size:12px;padding:5px\x2012px;color:var(--okdb-accent-muted);border-color:var(--okdb-app-border);border-radius:6px;background:transparent;cursor:pointer;transition:background\x20.12s;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22api-back-btn\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20←\x20Routes\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;font-family:monospace;opacity:.6;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27color:\x27+methodColor(selected.method)+\x27;font-weight:700;\x27\x22>{{\x20selected.method\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20selected.path\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<api-endpoint\x20:endpoint=\x22selected\x22\x20style=\x22flex:1;min-height:0;overflow:auto;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20──\x20List\x20view\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!selected\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:14px;height:100%;min-height:0;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Search\x20bar\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:10px;flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22text\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22Filter\x20routes…\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20!value=\x22search\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22search\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-border);border-radius:7px;padding:7px\x2012px;color:var(--okdb-app-fg);font-size:12px;outline:none;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22loading\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:18px;height:18px;opacity:.5;flex-shrink:0;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22routes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;opacity:.35;white-space:nowrap;flex-shrink:0;\x22>{{\x20filtered.length\x20}}\x20/\x20{{\x20routes.length\x20}}\x20routes</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Error\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);font-size:12px;padding:8px;border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);border-radius:6px;flex-shrink:0;\x22>{{\x20error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Route\x20groups\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:18px;padding-bottom:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22groups\x22\x20let:item=\x22g\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;text-transform:uppercase;letter-spacing:.07em;opacity:.38;margin-bottom:6px;padding:0\x204px;\x22>{{\x20g.tag\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:repeat(auto-fill,\x20minmax(260px,\x201fr));gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22g.routes\x22\x20let:item=\x22r\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22select(r)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22r.meta?.summary\x20||\x20r.path\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22api-route-card\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27font-size:10px;font-weight:700;width:42px;flex-shrink:0;text-align:center;color:\x27+methodColor(r.method)+\x27;\x27\x22>{{\x20r.method\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;font-size:11px;color:var(--okdb-accent-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22optionalHint(r.path)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.3;\x22>{{\x20optionalHint(r.path)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>{{\x20shortPath(r.path)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22r.meta?.summary\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;color:var(--okdb-app-fg-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px;\x22>{{\x20r.meta.summary\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!loading\x20&&\x20routes.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.4;padding:8px;\x22>No\x20routes\x20loaded.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20','style':_0x37641d(0x155)};function _0x43f6(_0x1fd57b,_0xb1eedc){_0x1fd57b=_0x1fd57b-0x130;const _0x206a3e=_0x206a();let _0x43f69f=_0x206a3e[_0x1fd57b];return _0x43f69f;}function _0x206a(){const _0x2ff0c8=['fts','32796599MQnMiz','other','match','load','API','/docs','search','system-api-panel','routes','data','pipelines','has','toLowerCase','85vzzvLh','1008052dLhOIY','error','Failed\x20to\x20load\x20routes','message','4dfXqgm','var(--okdb-indigo)','678420nFRIYY','tagOrder','var(--okdb-accent)','6748GwmLVe','indexOf','meta','system','replace','var(--okdb-app-fg-muted)','var(--okdb-success)','indexes','.api-back-btn:hover{background:var(--okdb-app-surface-2)!important;border-color:var(--okdb-app-border-strong)!important}.api-route-card{display:flex;align-items:center;gap:8px;padding:7px\x2010px;background:0\x200;border:1px\x20solid\x20transparent;border-radius:6px;cursor:pointer;text-align:left;min-width:0;transition:background\x20.1s,border-color\x20.1s}.api-route-card:hover{background:var(--okdb-app-bg-deep);border-color:var(--okdb-app-border)}','some','selected','12mpteoT','docs','var(--okdb-danger)','8667qLdALA','localeCompare','changelog','sort','tags','1734EBSNCj','229768ZzFvXo','2168UhmNiC','sync','includes','6145390gqBVVk','var(--okdb-warning)','loading','method','embeddings','entries'];_0x206a=function(){return _0x2ff0c8;};return _0x206a();}
|
|
1
|
+
const _0x5a2fe9=_0x2a5a;(function(_0x283c0e,_0x147d93){const _0x181bd3=_0x2a5a,_0xb68f33=_0x283c0e();while(!![]){try{const _0x180faf=-parseInt(_0x181bd3(0x1e3))/0x1+-parseInt(_0x181bd3(0x1a8))/0x2+-parseInt(_0x181bd3(0x1d7))/0x3*(-parseInt(_0x181bd3(0x1de))/0x4)+parseInt(_0x181bd3(0x1bc))/0x5*(-parseInt(_0x181bd3(0x1cf))/0x6)+-parseInt(_0x181bd3(0x1b5))/0x7*(-parseInt(_0x181bd3(0x1bd))/0x8)+-parseInt(_0x181bd3(0x1c4))/0x9+-parseInt(_0x181bd3(0x1bf))/0xa*(-parseInt(_0x181bd3(0x1ab))/0xb);if(_0x180faf===_0x147d93)break;else _0xb68f33['push'](_0xb68f33['shift']());}catch(_0x8c8831){_0xb68f33['push'](_0xb68f33['shift']());}}}(_0x3853,0x97d74));function _0x2a5a(_0x34291d,_0x592fd3){_0x34291d=_0x34291d-0x1a7;const _0x3853be=_0x3853();let _0x2a5a79=_0x3853be[_0x34291d];return _0x2a5a79;}import _0x26a8d4 from'../../api/parts/api-endpoint.ok.js';import _0x25d2ca from'@toolkit/elements/ok-icon.ok.js';export default{'tag':_0x5a2fe9(0x1e2),'unwrap':!0x0,'dependencies':[_0x26a8d4,_0x25d2ca],'context':()=>({'routes':[],'loading':!0x1,'error':null,'selected':null,'search':'','tagOrder':[_0x5a2fe9(0x1c7),_0x5a2fe9(0x1ba),_0x5a2fe9(0x1cb),_0x5a2fe9(0x1d3),'indexes','fts',_0x5a2fe9(0x1c6),_0x5a2fe9(0x1be),_0x5a2fe9(0x1d8),_0x5a2fe9(0x1b9),_0x5a2fe9(0x1cc),_0x5a2fe9(0x1c8)],async 'load'(){const _0x4f5758=_0x5a2fe9;this[_0x4f5758(0x1d9)]=!0x0,this['error']=null;try{const _0x56ba92=await fetch(__ENV__[_0x4f5758(0x1d2)]+_0x4f5758(0x1b4)),_0x475e0b=await _0x56ba92[_0x4f5758(0x1a9)]();if(!_0x56ba92['ok'])throw new Error(_0x475e0b?.['error']?.[_0x4f5758(0x1df)]||_0x4f5758(0x1b3));this['routes']=_0x475e0b[_0x4f5758(0x1cb)]??[];}catch(_0x40af51){this['error']=_0x40af51?.['message']||String(_0x40af51);}finally{this[_0x4f5758(0x1d9)]=!0x1;}},get 'filtered'(){const _0x3e876d=_0x5a2fe9,_0x2524f9=this[_0x3e876d(0x1d0)][_0x3e876d(0x1ac)]()[_0x3e876d(0x1b0)]();return _0x2524f9?this[_0x3e876d(0x1ad)][_0x3e876d(0x1d4)](_0x300154=>_0x300154[_0x3e876d(0x1c2)][_0x3e876d(0x1b0)]()[_0x3e876d(0x1af)](_0x2524f9)||_0x300154[_0x3e876d(0x1b7)][_0x3e876d(0x1b0)]()[_0x3e876d(0x1af)](_0x2524f9)||(_0x300154[_0x3e876d(0x1db)]?.[_0x3e876d(0x1b6)]||'')[_0x3e876d(0x1b0)]()[_0x3e876d(0x1af)](_0x2524f9)||(_0x300154[_0x3e876d(0x1db)]?.[_0x3e876d(0x1b8)]||[])['some'](_0x4000f2=>_0x4000f2[_0x3e876d(0x1af)](_0x2524f9))):this[_0x3e876d(0x1ad)];},get 'groups'(){const _0x2e4219=_0x5a2fe9,_0xa4d254=new Map();for(const _0x2c6560 of this[_0x2e4219(0x1d5)]){const _0x3e1669=_0x2c6560[_0x2e4219(0x1db)]?.[_0x2e4219(0x1b8)]?.[0x0]??_0x2e4219(0x1b2);_0xa4d254[_0x2e4219(0x1c0)](_0x3e1669)||_0xa4d254[_0x2e4219(0x1a7)](_0x3e1669,[]),_0xa4d254[_0x2e4219(0x1d1)](_0x3e1669)[_0x2e4219(0x1d6)](_0x2c6560);}return[..._0xa4d254[_0x2e4219(0x1dd)]()]['sort'](([_0x38d343],[_0x2d1ad3])=>{const _0x54df81=_0x2e4219,_0x1a4a85=this['tagOrder'][_0x54df81(0x1e0)](_0x38d343),_0x5323cd=this[_0x54df81(0x1aa)][_0x54df81(0x1e0)](_0x2d1ad3);return-0x1===_0x1a4a85&&-0x1===_0x5323cd?_0x38d343[_0x54df81(0x1c1)](_0x2d1ad3):-0x1===_0x1a4a85?0x1:-0x1===_0x5323cd?-0x1:_0x1a4a85-_0x5323cd;})[_0x2e4219(0x1ae)](([_0xf394b0,_0x5f4c76])=>({'tag':_0xf394b0,'routes':_0x5f4c76}));},'methodColor':_0x5564c4=>({'GET':_0x5a2fe9(0x1c9),'POST':_0x5a2fe9(0x1c5),'PUT':'var(--okdb-warning)','PATCH':_0x5a2fe9(0x1dc),'DELETE':_0x5a2fe9(0x1c3)}[_0x5564c4]||_0x5a2fe9(0x1b1)),'select'(_0x3ca756){const _0xc4c812=_0x5a2fe9;this[_0xc4c812(0x1ce)]=null,setTimeout(()=>{const _0x477efe=_0xc4c812;this[_0x477efe(0x1ce)]=_0x3ca756;},0x0);},'back'(){const _0x238b15=_0x5a2fe9;this[_0x238b15(0x1ce)]=null;},'shortPath':_0x5b1c0e=>_0x5b1c0e[_0x5a2fe9(0x1e1)](/^\/api/,'')[_0x5a2fe9(0x1e1)](/\[[^\]]*\]/g,''),'optionalHint'(_0x5e8af1){const _0x3fd279=_0x5a2fe9,_0x1b07ed=_0x5e8af1[_0x3fd279(0x1ca)](/\[([^\]]*)\]/);return _0x1b07ed?_0x1b07ed[0x1][_0x3fd279(0x1e1)](/=\w+/g,''):null;}}),'init'(){const _0x105231=_0x5a2fe9;this[_0x105231(0x1da)]();},'template':_0x5a2fe9(0x1bb),'style':_0x5a2fe9(0x1cd)};function _0x3853(){const _0x579a67=['selected','267522ePiTEH','search','get','API','changelog','filter','filtered','push','42DeDwHN','sync','loading','load','meta','var(--okdb-indigo)','entries','305792iIOHpI','message','indexOf','replace','system-api-panel','403690rGBCzg','set','376352HsCFmP','json','tagOrder','349954NxUHFm','trim','routes','map','includes','toLowerCase','var(--okdb-app-fg-muted)','other','Failed\x20to\x20load\x20routes','/docs','5012qXswQF','summary','method','tags','embeddings','types','\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;height:100%;min-height:0;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20──\x20Detail\x20view\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22selected\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;height:100%;min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Back\x20bar\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22back()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:flex;align-items:center;gap:5px;font-size:12px;padding:5px\x2012px;color:var(--okdb-accent-muted);border-color:var(--okdb-app-border);border-radius:6px;background:transparent;cursor:pointer;transition:background\x20.12s;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22api-back-btn\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20←\x20Routes\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;font-family:monospace;opacity:.6;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27color:\x27+methodColor(selected.method)+\x27;font-weight:700;\x27\x22>{{\x20selected.method\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20selected.path\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<api-endpoint\x20:endpoint=\x22selected\x22\x20style=\x22flex:1;min-height:0;overflow:auto;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20──\x20List\x20view\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!selected\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:14px;height:100%;min-height:0;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Search\x20bar\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:10px;flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22text\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22Filter\x20routes…\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20!value=\x22search\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22search\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-border);border-radius:7px;padding:7px\x2012px;color:var(--okdb-app-fg);font-size:12px;outline:none;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22loading\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:18px;height:18px;opacity:.5;flex-shrink:0;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22routes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;opacity:.35;white-space:nowrap;flex-shrink:0;\x22>{{\x20filtered.length\x20}}\x20/\x20{{\x20routes.length\x20}}\x20routes</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Error\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);font-size:12px;padding:8px;border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);border-radius:6px;flex-shrink:0;\x22>{{\x20error\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Route\x20groups\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:18px;padding-bottom:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22groups\x22\x20let:item=\x22g\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;text-transform:uppercase;letter-spacing:.07em;opacity:.38;margin-bottom:6px;padding:0\x204px;\x22>{{\x20g.tag\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:repeat(auto-fill,\x20minmax(260px,\x201fr));gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22g.routes\x22\x20let:item=\x22r\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22select(r)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22r.meta?.summary\x20||\x20r.path\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22api-route-card\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27font-size:10px;font-weight:700;width:42px;flex-shrink:0;text-align:center;color:\x27+methodColor(r.method)+\x27;\x27\x22>{{\x20r.method\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;font-size:11px;color:var(--okdb-accent-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22optionalHint(r.path)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.3;\x22>{{\x20optionalHint(r.path)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>{{\x20shortPath(r.path)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22r.meta?.summary\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;color:var(--okdb-app-fg-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:1px;\x22>{{\x20r.meta.summary\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!loading\x20&&\x20routes.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;opacity:.4;padding:8px;\x22>No\x20routes\x20loaded.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20','85SNnUau','1504LegSrE','pipelines','490YoAXyt','has','localeCompare','path','var(--okdb-danger)','7127829UbKZEA','var(--okdb-success)','queue','system','docs','var(--okdb-accent)','match','data','envs','.api-back-btn:hover{background:var(--okdb-app-surface-2)!important;border-color:var(--okdb-app-border-strong)!important}.api-route-card{display:flex;align-items:center;gap:8px;padding:7px\x2010px;background:0\x200;border:1px\x20solid\x20transparent;border-radius:6px;cursor:pointer;text-align:left;min-width:0;transition:background\x20.1s,border-color\x20.1s}.api-route-card:hover{background:var(--okdb-app-bg-deep);border-color:var(--okdb-app-border)}'];_0x3853=function(){return _0x579a67;};return _0x3853();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x55310d=_0x4998;(function(_0x112d3f,_0x4b7a50){const _0x4a9fdf=_0x4998,_0x38e99d=_0x112d3f();while(!![]){try{const _0xf52068=-parseInt(_0x4a9fdf(0x180))/0x1+parseInt(_0x4a9fdf(0x18c))/0x2*(-parseInt(_0x4a9fdf(0x19b))/0x3)+-parseInt(_0x4a9fdf(0x17d))/0x4+-parseInt(_0x4a9fdf(0x190))/0x5*(parseInt(_0x4a9fdf(0x185))/0x6)+-parseInt(_0x4a9fdf(0x183))/0x7+-parseInt(_0x4a9fdf(0x191))/0x8+parseInt(_0x4a9fdf(0x1a1))/0x9;if(_0xf52068===_0x4b7a50)break;else _0x38e99d['push'](_0x38e99d['shift']());}catch(_0xa1e33){_0x38e99d['push'](_0x38e99d['shift']());}}}(_0x2098,0x1c2c8));import _0x2efe3e from'../../auth/parts/token-list.ok.js';import _0x215a7d from'../../auth/parts/token-detail.ok.js';import _0x5bdcba from'../../auth/modals/create-token-modal.ok.js';import _0x5e6f69 from'../../auth/modals/edit-token-modal.ok.js';function _0x2098(){const _0x515484=['label','success','.auth-panel-btn:hover{background:var(--okdb-app-surface-2)!important;border-color:var(--okdb-app-border-strong)!important;color:var(--okdb-accent-muted)!important}','Token\x20deleted','toast','4OoLYeO','\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:0;height:100%;min-height:0;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Left:\x20token\x20list\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22width:240px;flex-shrink:0;border-right:1px\x20solid\x20var(--okdb-app-surface-2);display:flex;flex-direction:column;gap:8px;padding-right:12px;min-height:0;overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openCreateModal()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex-shrink:0;padding:6px\x2010px;border:1px\x20solid\x20var(--okdb-app-border);border-radius:6px;background:transparent;color:var(--okdb-accent-muted);font-size:12px;font-weight:500;cursor:pointer;text-align:left;width:100%;transition:background\x20.12s,border-color\x20.12s,color\x20.12s;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22auth-panel-btn\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20+\x20New\x20Token\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<token-list\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:ref=\x22tokenListEl\x20=\x20$el\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:selected-id=\x22selectedTokenId\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@selected=\x22selectToken($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;min-height:0;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Right:\x20token\x20detail\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;min-width:0;padding-left:18px;overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<token-detail\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:token=\x22selectedToken\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@edit=\x22openEditModal($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@delete=\x22deleteToken($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20','<edit-token-modal\x20:modal=\x22modal\x22\x20:token=\x22token\x22\x20:on-done=\x22onDone\x22\x20/>','_selectedId','870355SWSNfh','1096304XZxSlf','$scope','selectedTokenId','open','selectedToken','<create-token-modal\x20:modal=\x22modal\x22\x20:on-done=\x22onDone\x22\x20/>','message','error','/auth/tokens/','DELETE','343857dTkQDA','Unnamed','Create\x20Token','load','modal','API','10317051GSJrAk','Failed\x20to\x20delete\x20token','Edit\x20Token:\x20','Delete\x20failed','650680fufRbh','shared','$ok','97983yEnzJR','tokenListEl','selectToken','1609573EvNNNB','json','6scAPaL','$innerContext'];_0x2098=function(){return _0x515484;};return _0x2098();}function _0x4998(_0xf19244,_0x1db412){_0xf19244=_0xf19244-0x17d;const _0x2098c6=_0x2098();let _0x499864=_0x2098c6[_0xf19244];return _0x499864;}export default{'tag':'system-auth-panel','unwrap':!0x0,'dependencies':[_0x2efe3e,_0x215a7d,_0x5bdcba,_0x5e6f69],'context':_0xd14301=>({'selectedToken':null,'tokenListEl':null,'selectedTokenId':null,'selectToken'(_0x36dfb3){const _0x531355=_0x4998;this[_0x531355(0x195)]=_0x36dfb3??null,this[_0x531355(0x193)]=_0x36dfb3?.['id']??null;},async 'openCreateModal'(){const _0x1afc8c=_0x4998;await _0xd14301[_0x1afc8c(0x17f)][_0x1afc8c(0x17e)][_0x1afc8c(0x19f)]['open']({'owner':_0xd14301,'title':_0x1afc8c(0x19d),'content':_0x1afc8c(0x196),'context':_0x5eed8e=>({'modal':_0x5eed8e,'onDone':async _0x553c40=>{const _0x58b3b6=_0x1afc8c;if(_0x553c40?.['id']){const _0x2a9f96=this[_0x58b3b6(0x181)]?.['$scope']?.[_0x58b3b6(0x186)];_0x2a9f96&&(_0x2a9f96[_0x58b3b6(0x18f)]=_0x553c40['id']),this[_0x58b3b6(0x182)](_0x553c40);}await this[_0x58b3b6(0x181)]?.[_0x58b3b6(0x192)]?.['$innerContext']?.['load']?.();}})});},async 'openEditModal'(_0x1acb5b){const _0x1c2d8b=_0x4998;await _0xd14301['$ok'][_0x1c2d8b(0x17e)]['modal'][_0x1c2d8b(0x194)]({'owner':_0xd14301,'title':_0x1c2d8b(0x1a3)+(_0x1acb5b[_0x1c2d8b(0x187)]||_0x1c2d8b(0x19c)),'content':_0x1c2d8b(0x18e),'context':_0x2c47b9=>({'modal':_0x2c47b9,'token':_0x1acb5b,'onDone':async()=>{const _0x20b7e2=_0x1c2d8b;await this[_0x20b7e2(0x181)]?.[_0x20b7e2(0x192)]?.['$innerContext']?.[_0x20b7e2(0x19e)]?.();}})});},async 'deleteToken'(_0x4f3670){const _0x167aa3=_0x4998;try{const _0x35931a=await fetch(__ENV__[_0x167aa3(0x1a0)]+_0x167aa3(0x199)+encodeURIComponent(_0x4f3670),{'method':_0x167aa3(0x19a)});if(!_0x35931a['ok']){const _0x480d09=await _0x35931a[_0x167aa3(0x184)]();throw new Error(_0x480d09?.[_0x167aa3(0x198)]?.[_0x167aa3(0x197)]||_0x167aa3(0x1a2));}_0xd14301[_0x167aa3(0x17f)]['shared']?.['toast']?.[_0x167aa3(0x188)]?.(_0x167aa3(0x18a)),this['selectToken'](null),await this[_0x167aa3(0x181)]?.['$scope']?.[_0x167aa3(0x186)]?.['load']?.();}catch(_0x3ccbdf){_0xd14301['$ok']['shared']?.[_0x167aa3(0x18b)]?.[_0x167aa3(0x198)]?.(_0x3ccbdf?.['message']||_0x167aa3(0x1a4));}}}),'template':_0x55310d(0x18d),'style':_0x55310d(0x189)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x2b4317=_0x4374;function _0x2a9d(){const _0x4c4518=['\x20selected','hasMore','131929zFtaom','/system/logs?','totalCount','append','212847kRLbZF','levels','all','level','length','24h','loading','48TBVOjQ','data','2006810mhJVOk','message','entries','4634778ceAXhq','toTimeString','toUpperCase','clear','1269mhkdjk','cursor','34806SPiMTi','add','load','Failed\x20to\x20load\x20logs','var(--okdb-danger)','padStart','push','stringify','getMilliseconds','sort','next_cursor','system-log-history','feature','API','error','seenNodes','All\x20time','\x0a<div\x20class=\x22history\x22>\x0a\x0a\x20\x20<!--\x20Toolbar\x20row\x201:\x20filters\x20-->\x0a\x20\x20<div\x20class=\x22history__toolbar\x22>\x0a\x20\x20\x20\x20<span\x20class=\x22history__title\x22>History</span>\x0a\x0a\x20\x20\x20\x20<!--\x20Time\x20range\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22history__group\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__label\x22>Time</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__pills\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x271h\x27)\x22\x20:class=\x22timeRange===\x271h\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>1h</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x276h\x27)\x22\x20:class=\x22timeRange===\x276h\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>6h</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x2724h\x27)\x22\x20:class=\x22timeRange===\x2724h\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>24h</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x277d\x27)\x22\x20:class=\x22timeRange===\x277d\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>7d</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x27all\x27)\x22\x20:class=\x22timeRange===\x27all\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20class=\x22history__spacer\x22></div>\x0a\x0a\x20\x20\x20\x20<!--\x20Refresh\x20and\x20count\x20-->\x0a\x20\x20\x20\x20<button\x20@click=\x22resetAndLoad()\x22\x20:disabled=\x22loading\x22\x20class=\x22pill\x22\x20style=\x22white-space:nowrap;\x22>↻\x20Refresh</button>\x0a\x20\x20\x20\x20<span\x20class=\x22history__count\x22>{{\x20totalCount\x20}}</span>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Toolbar\x20row\x202:\x20level\x20filter\x20-->\x0a\x20\x20<div\x20class=\x22history__toolbar\x20history__toolbar--sub\x22>\x0a\x20\x20\x20\x20<span\x20class=\x22history__label\x22>Level</span>\x0a\x20\x20\x20\x20<div\x20class=\x22history__pills\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearLevels()\x22\x20:class=\x22levels.length\x20===\x200\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22toggleLevel(\x27info\x27)\x22\x20:class=\x22levels.includes(\x27info\x27)\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22\x20style=\x22color:var(--okdb-accent)\x22>info</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22toggleLevel(\x27warn\x27)\x22\x20:class=\x22levels.includes(\x27warn\x27)\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22\x20style=\x22color:var(--okdb-warning)\x22>warn</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22toggleLevel(\x27error\x27)\x22\x20:class=\x22levels.includes(\x27error\x27)\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22\x20style=\x22color:var(--okdb-danger)\x22>error</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22toggleLevel(\x27debug\x27)\x22\x20:class=\x22levels.includes(\x27debug\x27)\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22\x20style=\x22color:var(--okdb-app-fg-muted)\x22>debug</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Toolbar\x20row\x203:\x20feature\x20dropdown\x20-->\x0a\x20\x20<if\x20:=\x22seenFeatures.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22history__toolbar\x20history__toolbar--sub\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__label\x22>Feature</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__pills\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setFeature(null)\x22\x20:class=\x22feature\x20===\x20null\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22seenFeatures\x22\x20let:item=\x22s\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setFeature(s)\x22\x20:class=\x22feature\x20===\x20s\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>{{\x20s\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Toolbar\x20row\x204:\x20node\x20dropdown\x20-->\x0a\x20\x20<if\x20:=\x22seenNodes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22history__toolbar\x20history__toolbar--sub\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__label\x22>Node</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__pills\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setNode(null)\x22\x20:class=\x22node\x20===\x20null\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22seenNodes\x22\x20let:item=\x22n\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setNode(n)\x22\x20:class=\x22node\x20===\x20n\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>{{\x20n\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Error\x20state\x20-->\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22history__error\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Log\x20entries\x20list\x20-->\x0a\x20\x20<div\x20class=\x22history__list\x22>\x0a\x20\x20\x20\x20<if\x20:=\x22entries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__empty\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22loading\x22>Loading…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!loading\x20&&\x20!error\x22>No\x20log\x20entries</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<each\x20:of=\x22entries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__row\x22\x20@click=\x22toggleExpanded(entry.key)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__ts\x22>{{\x20fmtTime(entry.ts)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__level\x22\x20:style=\x22\x27color:\x27\x20+\x20levelColor(entry.level)\x22>{{\x20entry.level\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__feature\x22\x20v-if=\x22entry.feature\x22>{{\x20entry.feature\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__msg\x22>{{\x20entry.msg\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__node\x22\x20v-if=\x22entry.node\x22>{{\x20entry.node\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22entry.context\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__has-context\x22>⊕</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Expanded\x20context\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22expandedKeys.has(entry.key)\x20&&\x20entry.context\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__context\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre>{{\x20fmtContext(entry.context)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Load\x20more\x20button\x20-->\x0a\x20\x20<if\x20:=\x22hasMore\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22history__footer\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22loading\x22\x20class=\x22history__load-more\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20loading\x20?\x20\x27Loading…\x27\x20:\x20\x27Load\x20More\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</If>\x0a\x0a</div>\x0a','expandedKeys','112CUujLq','splice','var(--okdb-app-fg-muted)','918950VuYARj','node','timeRange','from','All','resetAndLoad','23330weChFc','join','map','#ccc','seenFeatures','now','var(--okdb-warning)'];_0x2a9d=function(){return _0x4c4518;};return _0x2a9d();}(function(_0xb3f6a8,_0x25ed6b){const _0x2a095a=_0x4374,_0xe8e804=_0xb3f6a8();while(!![]){try{const _0x3b808a=parseInt(_0x2a095a(0x221))/0x1+parseInt(_0x2a095a(0x20b))/0x2+-parseInt(_0x2a095a(0x1f9))/0x3*(-parseInt(_0x2a095a(0x200))/0x4)+-parseInt(_0x2a095a(0x202))/0x5+-parseInt(_0x2a095a(0x205))/0x6+parseInt(_0x2a095a(0x1f5))/0x7*(-parseInt(_0x2a095a(0x21e))/0x8)+parseInt(_0x2a095a(0x209))/0x9*(parseInt(_0x2a095a(0x227))/0xa);if(_0x3b808a===_0x25ed6b)break;else _0xe8e804['push'](_0xe8e804['shift']());}catch(_0x4fbe96){_0xe8e804['push'](_0xe8e804['shift']());}}}(_0x2a9d,0xa5c63));function _0x4374(_0x14319e,_0x59d806){_0x14319e=_0x14319e-0x1ed;const _0x2a9d61=_0x2a9d();let _0x43742c=_0x2a9d61[_0x14319e];return _0x43742c;}const e={'info':'var(--okdb-accent)','warn':_0x2b4317(0x1f2),'error':_0x2b4317(0x20f),'debug':_0x2b4317(0x220)},t={'1h':0x36ee80,'6h':0x1499700,'24h':0x5265c00,'7d':0x240c8400,'all':null};export default{'tag':_0x2b4317(0x216),'context':()=>({'level':null,'levels':[],'feature':null,'node':null,'timeRange':_0x2b4317(0x1fe),'entries':[],'seenFeatures':[],'seenNodes':[],'totalCount':0x0,'cursor':null,'hasMore':!0x1,'loading':!0x1,'error':null,'expandedKeys':new Set(),get 'levelsPill'(){const _0x422dbf=_0x2b4317;return 0x0===this['levels'][_0x422dbf(0x1fd)]?_0x422dbf(0x225):this[_0x422dbf(0x1fa)][_0x422dbf(0x1fd)]+_0x422dbf(0x1f3);},get 'timeRangeLabel'(){const _0x40b4cc=_0x2b4317;return _0x40b4cc(0x1fb)===this[_0x40b4cc(0x223)]?_0x40b4cc(0x21b):this[_0x40b4cc(0x223)][_0x40b4cc(0x207)]();},'clearLevels'(){const _0x2777f8=_0x2b4317;this[_0x2777f8(0x1fa)][_0x2777f8(0x21f)](0x0,this[_0x2777f8(0x1fa)][_0x2777f8(0x1fd)]),this[_0x2777f8(0x226)]();},'toggleLevel'(_0x2105a6){const _0x41ed99=_0x2b4317,_0x48eab5=this[_0x41ed99(0x1fa)]['indexOf'](_0x2105a6);_0x48eab5>=0x0?this[_0x41ed99(0x1fa)][_0x41ed99(0x21f)](_0x48eab5,0x1):this['levels'][_0x41ed99(0x211)](_0x2105a6),this[_0x41ed99(0x226)]();},'setTimeRange'(_0x2cfb6c){this['timeRange']=_0x2cfb6c,this['resetAndLoad']();},'setFeature'(_0x218d6c){const _0x11f0f0=_0x2b4317;this['feature']=this[_0x11f0f0(0x217)]===_0x218d6c?null:_0x218d6c,this['resetAndLoad']();},'setNode'(_0x2e25a5){const _0xd538cf=_0x2b4317;this[_0xd538cf(0x222)]=this[_0xd538cf(0x222)]===_0x2e25a5?null:_0x2e25a5,this['resetAndLoad']();},'toggleExpanded'(_0x384de2){const _0x5d91ea=_0x2b4317;this[_0x5d91ea(0x21d)]['has'](_0x384de2)?this[_0x5d91ea(0x21d)]['delete'](_0x384de2):this[_0x5d91ea(0x21d)][_0x5d91ea(0x20c)](_0x384de2);},async 'load'(){const _0x39a816=_0x2b4317;this[_0x39a816(0x1ff)]=!0x0,this[_0x39a816(0x219)]=null;try{const _0x2aab83=Date[_0x39a816(0x1f1)](),_0x1fde21=_0x39a816(0x1fb)===this[_0x39a816(0x223)]?0x0:_0x2aab83-t[this[_0x39a816(0x223)]],_0x290c30=new URLSearchParams();_0x290c30[_0x39a816(0x1f8)](_0x39a816(0x224),String(_0x1fde21)),_0x290c30[_0x39a816(0x1f8)]('to',String(_0x2aab83)),this[_0x39a816(0x1fa)][_0x39a816(0x1fd)]>0x0&&_0x290c30['append'](_0x39a816(0x1fc),this[_0x39a816(0x1fa)][_0x39a816(0x1ed)](',')),this[_0x39a816(0x217)]&&_0x290c30['append'](_0x39a816(0x217),this[_0x39a816(0x217)]),this[_0x39a816(0x222)]&&_0x290c30[_0x39a816(0x1f8)](_0x39a816(0x222),this[_0x39a816(0x222)]),this['cursor']&&_0x290c30[_0x39a816(0x1f8)](_0x39a816(0x20a),String(this[_0x39a816(0x20a)]));const _0x28601b=await fetch(__ENV__[_0x39a816(0x218)]+_0x39a816(0x1f6)+_0x290c30),_0x38a446=await _0x28601b['json']();if(!_0x28601b['ok'])throw new Error(_0x38a446?.[_0x39a816(0x219)]?.['message']||_0x39a816(0x20e));const _0x4152e9=_0x38a446[_0x39a816(0x201)]||_0x38a446['result']||{},_0x1a1189=_0x4152e9['entries']||[];this[_0x39a816(0x20a)]?this[_0x39a816(0x204)][_0x39a816(0x211)](..._0x1a1189):this[_0x39a816(0x204)]=_0x1a1189,this['cursor']=_0x4152e9[_0x39a816(0x215)]??null,this[_0x39a816(0x1f4)]=null!==_0x4152e9[_0x39a816(0x215)];const _0x12447a=new Set(this[_0x39a816(0x204)][_0x39a816(0x1ee)](_0x11c6ca=>_0x11c6ca[_0x39a816(0x217)])['filter'](Boolean)),_0x2d3ff9=new Set(this[_0x39a816(0x204)][_0x39a816(0x1ee)](_0x17d4d0=>_0x17d4d0['node'])['filter'](Boolean));this[_0x39a816(0x1f0)]=Array[_0x39a816(0x224)](_0x12447a)[_0x39a816(0x214)](),this[_0x39a816(0x21a)]=Array[_0x39a816(0x224)](_0x2d3ff9)['sort'](),this[_0x39a816(0x1f7)]=this[_0x39a816(0x204)][_0x39a816(0x1fd)];}catch(_0xfe462e){this[_0x39a816(0x219)]=_0xfe462e?.[_0x39a816(0x203)]||String(_0xfe462e),this[_0x39a816(0x204)]=[];}this[_0x39a816(0x1ff)]=!0x1;},'resetAndLoad'(){const _0x5695ba=_0x2b4317;this['cursor']=null,this[_0x5695ba(0x204)]=[],this[_0x5695ba(0x1f0)]=[],this['seenNodes']=[],this[_0x5695ba(0x21d)][_0x5695ba(0x208)](),this[_0x5695ba(0x20d)]();},'fmtTime'(_0x2edb56){const _0x1db12c=_0x2b4317;if(!_0x2edb56)return'';const _0x1bcd23=new Date(_0x2edb56);return _0x1bcd23[_0x1db12c(0x206)]()['slice'](0x0,0x8)+'.'+String(_0x1bcd23[_0x1db12c(0x213)]())[_0x1db12c(0x210)](0x3,'0');},'fmtContext'(_0x2c880b){const _0x3e1720=_0x2b4317;if(null==_0x2c880b)return'';if('string'==typeof _0x2c880b)return _0x2c880b;try{return JSON[_0x3e1720(0x212)](_0x2c880b);}catch{return String(_0x2c880b);}},'levelColor':_0x5b2232=>e[_0x5b2232]??_0x2b4317(0x1ef)}),'mount'(){const _0x1a33a2=_0x2b4317;this[_0x1a33a2(0x20d)]();},'template':_0x2b4317(0x21c),'style':'.history{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--okdb-app-bg-deep);border-radius:12px;overflow:hidden;border:1px\x20solid\x20var(--okdb-app-border)}.history__toolbar{display:flex;align-items:center;gap:6px;padding:7px\x2010px;background:var(--okdb-app-surface);border-bottom:1px\x20solid\x20var(--okdb-app-border);flex-shrink:0;flex-wrap:wrap}.history__toolbar--sub{padding:5px\x2010px;background:var(--okdb-app-bg-deep);border-bottom:1px\x20solid\x20var(--okdb-app-surface)}.history__title{font-weight:600;font-size:13px;white-space:nowrap;margin-right:2px}.history__label{font-size:10px;opacity:.45;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;flex-shrink:0}.history__group{display:flex;align-items:center;gap:6px}.history__pills{display:flex;gap:3px;flex-wrap:wrap}.history__spacer{flex:1}.history__count,.pill{font-size:11px;white-space:nowrap}.history__count{opacity:.4;margin-right:4px}.pill{border:1px\x20solid\x20var(--okdb-app-border);background:0\x200;padding:2px\x209px;border-radius:999px;cursor:pointer;color:#666;transition:border-color\x20.12s,color\x20.12s,background\x20.12s}.pill:hover{border-color:var(--okdb-app-fg-muted);color:var(--okdb-app-fg-muted)}.pill:disabled{opacity:.5;cursor:not-allowed}.pill--on{border-color:var(--okdb-accent);background:var(--okdb-app-surface-2);color:var(--okdb-accent)}.history__error{color:var(--okdb-danger);font-size:12px;padding:8px\x2010px;background:var(--okdb-danger-deep-bg);border-bottom:1px\x20solid\x20var(--okdb-app-border)}.history__list{flex:1;overflow-y:auto;font-family:monospace;font-size:12px;padding:2px\x200;min-height:0}.history__row{display:flex;gap:8px;padding:2px\x2010px;border-bottom:1px\x20solid\x20var(--okdb-app-bg-deep);align-items:baseline;min-height:20px;cursor:pointer;transition:background\x20.12s}.history__row:hover{background:var(--okdb-app-surface)}.history__ts{color:var(--okdb-app-fg-muted);flex-shrink:0;font-size:11px;user-select:none;width:86px}.history__level{width:40px;flex-shrink:0;font-weight:700;font-size:10px;text-transform:uppercase;letter-spacing:.04em}.history__feature{flex-shrink:0;font-size:11px;color:var(--okdb-app-fg-muted)}.history__context\x20pre,.history__msg{white-space:pre-wrap;word-break:break-word}.history__msg{flex:1;color:var(--okdb-app-fg);min-width:0}.history__node{flex-shrink:0;font-size:11px;color:var(--okdb-app-fg-muted)}.history__has-context{flex-shrink:0;color:var(--okdb-accent);cursor:pointer;user-select:none}.history__context{background:var(--okdb-app-bg-deep);padding:6px\x2010px\x206px\x2096px;border-bottom:1px\x20solid\x20var(--okdb-app-surface);font-size:11px}.history__context\x20pre{margin:0;color:var(--okdb-app-fg-muted)}.history__empty{padding:24px\x2014px;opacity:.4;font-style:italic;font-size:12px;text-align:center}.history__footer{padding:8px\x2010px;background:var(--okdb-app-surface);border-top:1px\x20solid\x20var(--okdb-app-border);flex-shrink:0;text-align:center}.history__load-more{padding:4px\x2014px;border-radius:6px;font-size:12px;background:var(--okdb-app-surface-2);border:1px\x20solid\x20var(--okdb-app-border);color:var(--okdb-accent);cursor:pointer;transition:background\x20.12s,border-color\x20.12s}.history__load-more:hover{background:var(--okdb-app-surface-2);border-color:var(--okdb-app-fg-muted)}.history__load-more:disabled{opacity:.5;cursor:not-allowed}'};
|
|
1
|
+
const _0x129777=_0x33d4;(function(_0xbaec45,_0x353528){const _0x14ae20=_0x33d4,_0x971192=_0xbaec45();while(!![]){try{const _0x18b794=parseInt(_0x14ae20(0x1b0))/0x1+parseInt(_0x14ae20(0x19d))/0x2*(-parseInt(_0x14ae20(0x1a6))/0x3)+-parseInt(_0x14ae20(0x194))/0x4+parseInt(_0x14ae20(0x17d))/0x5+-parseInt(_0x14ae20(0x185))/0x6+parseInt(_0x14ae20(0x198))/0x7*(parseInt(_0x14ae20(0x186))/0x8)+parseInt(_0x14ae20(0x1aa))/0x9*(parseInt(_0x14ae20(0x18d))/0xa);if(_0x18b794===_0x353528)break;else _0x971192['push'](_0x971192['shift']());}catch(_0xd6250c){_0x971192['push'](_0x971192['shift']());}}}(_0x3bb2,0x20a74));function _0x33d4(_0x2621ec,_0x31fa64){_0x2621ec=_0x2621ec-0x17c;const _0x3bb241=_0x3bb2();let _0x33d45d=_0x3bb241[_0x2621ec];return _0x33d45d;}const e={'info':_0x129777(0x1ab),'warn':_0x129777(0x18f),'error':_0x129777(0x191),'debug':'var(--okdb-app-fg-muted)'},t={'1h':0x36ee80,'6h':0x1499700,'24h':0x5265c00,'7d':0x240c8400,'all':null};function _0x3bb2(){const _0x7539ff=['string','padStart','entries','load','186234bFFyCn','map','level','/system/logs?','now','seenNodes','949340qJFRDX','Failed\x20to\x20load\x20logs','length','All\x20time','expandedKeys','node','feature','append','1306248QUESyC','120jVyOIW','splice','add','all','toTimeString','next_cursor','join','970XFYNEd','24h','var(--okdb-warning)','.history{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--okdb-app-bg-deep);border-radius:12px;overflow:hidden;border:1px\x20solid\x20var(--okdb-app-border)}.history__toolbar{display:flex;align-items:center;gap:6px;padding:7px\x2010px;background:var(--okdb-app-surface);border-bottom:1px\x20solid\x20var(--okdb-app-border);flex-shrink:0;flex-wrap:wrap}.history__toolbar--sub{padding:5px\x2010px;background:var(--okdb-app-bg-deep);border-bottom:1px\x20solid\x20var(--okdb-app-surface)}.history__title{font-weight:600;font-size:13px;white-space:nowrap;margin-right:2px}.history__label{font-size:10px;opacity:.45;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap;flex-shrink:0}.history__group{display:flex;align-items:center;gap:6px}.history__pills{display:flex;gap:3px;flex-wrap:wrap}.history__spacer{flex:1}.history__count,.pill{font-size:11px;white-space:nowrap}.history__count{opacity:.4;margin-right:4px}.pill{border:1px\x20solid\x20var(--okdb-app-border);background:0\x200;padding:2px\x209px;border-radius:999px;cursor:pointer;color:#666;transition:border-color\x20.12s,color\x20.12s,background\x20.12s}.pill:hover{border-color:var(--okdb-app-fg-muted);color:var(--okdb-app-fg-muted)}.pill:disabled{opacity:.5;cursor:not-allowed}.pill--on{border-color:var(--okdb-accent);background:var(--okdb-app-surface-2);color:var(--okdb-accent)}.history__error{color:var(--okdb-danger);font-size:12px;padding:8px\x2010px;background:var(--okdb-danger-deep-bg);border-bottom:1px\x20solid\x20var(--okdb-app-border)}.history__list{flex:1;overflow-y:auto;font-family:monospace;font-size:12px;padding:2px\x200;min-height:0}.history__row{display:flex;gap:8px;padding:2px\x2010px;border-bottom:1px\x20solid\x20var(--okdb-app-bg-deep);align-items:baseline;min-height:20px;cursor:pointer;transition:background\x20.12s}.history__row:hover{background:var(--okdb-app-surface)}.history__ts{color:var(--okdb-app-fg-muted);flex-shrink:0;font-size:11px;user-select:none;width:86px}.history__level{width:40px;flex-shrink:0;font-weight:700;font-size:10px;text-transform:uppercase;letter-spacing:.04em}.history__feature{flex-shrink:0;font-size:11px;color:var(--okdb-app-fg-muted)}.history__context\x20pre,.history__msg{white-space:pre-wrap;word-break:break-word}.history__msg{flex:1;color:var(--okdb-app-fg);min-width:0}.history__node{flex-shrink:0;font-size:11px;color:var(--okdb-app-fg-muted)}.history__has-context{flex-shrink:0;color:var(--okdb-accent);cursor:pointer;user-select:none}.history__context{background:var(--okdb-app-bg-deep);padding:6px\x2010px\x206px\x2096px;border-bottom:1px\x20solid\x20var(--okdb-app-surface);font-size:11px}.history__context\x20pre{margin:0;color:var(--okdb-app-fg-muted)}.history__empty{padding:24px\x2014px;opacity:.4;font-style:italic;font-size:12px;text-align:center}.history__footer{padding:8px\x2010px;background:var(--okdb-app-surface);border-top:1px\x20solid\x20var(--okdb-app-border);flex-shrink:0;text-align:center}.history__load-more{padding:4px\x2014px;border-radius:6px;font-size:12px;background:var(--okdb-app-surface-2);border:1px\x20solid\x20var(--okdb-app-border);color:var(--okdb-accent);cursor:pointer;transition:background\x20.12s,border-color\x20.12s}.history__load-more:hover{background:var(--okdb-app-surface-2);border-color:var(--okdb-app-fg-muted)}.history__load-more:disabled{opacity:.5;cursor:not-allowed}','var(--okdb-danger)','json','levels','305296CHLAGR','from','indexOf','\x0a<div\x20class=\x22history\x22>\x0a\x0a\x20\x20<!--\x20Toolbar\x20row\x201:\x20filters\x20-->\x0a\x20\x20<div\x20class=\x22history__toolbar\x22>\x0a\x20\x20\x20\x20<span\x20class=\x22history__title\x22>History</span>\x0a\x0a\x20\x20\x20\x20<!--\x20Time\x20range\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22history__group\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__label\x22>Time</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__pills\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x271h\x27)\x22\x20:class=\x22timeRange===\x271h\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>1h</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x276h\x27)\x22\x20:class=\x22timeRange===\x276h\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>6h</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x2724h\x27)\x22\x20:class=\x22timeRange===\x2724h\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>24h</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x277d\x27)\x22\x20:class=\x22timeRange===\x277d\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>7d</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setTimeRange(\x27all\x27)\x22\x20:class=\x22timeRange===\x27all\x27\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20class=\x22history__spacer\x22></div>\x0a\x0a\x20\x20\x20\x20<!--\x20Refresh\x20and\x20count\x20-->\x0a\x20\x20\x20\x20<button\x20@click=\x22resetAndLoad()\x22\x20:disabled=\x22loading\x22\x20class=\x22pill\x22\x20style=\x22white-space:nowrap;\x22>↻\x20Refresh</button>\x0a\x20\x20\x20\x20<span\x20class=\x22history__count\x22>{{\x20totalCount\x20}}</span>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Toolbar\x20row\x202:\x20level\x20filter\x20-->\x0a\x20\x20<div\x20class=\x22history__toolbar\x20history__toolbar--sub\x22>\x0a\x20\x20\x20\x20<span\x20class=\x22history__label\x22>Level</span>\x0a\x20\x20\x20\x20<div\x20class=\x22history__pills\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearLevels()\x22\x20:class=\x22levels.length\x20===\x200\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22toggleLevel(\x27info\x27)\x22\x20:class=\x22levels.includes(\x27info\x27)\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22\x20style=\x22color:var(--okdb-accent)\x22>info</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22toggleLevel(\x27warn\x27)\x22\x20:class=\x22levels.includes(\x27warn\x27)\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22\x20style=\x22color:var(--okdb-warning)\x22>warn</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22toggleLevel(\x27error\x27)\x22\x20:class=\x22levels.includes(\x27error\x27)\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22\x20style=\x22color:var(--okdb-danger)\x22>error</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22toggleLevel(\x27debug\x27)\x22\x20:class=\x22levels.includes(\x27debug\x27)\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22\x20style=\x22color:var(--okdb-app-fg-muted)\x22>debug</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Toolbar\x20row\x203:\x20feature\x20dropdown\x20-->\x0a\x20\x20<if\x20:=\x22seenFeatures.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22history__toolbar\x20history__toolbar--sub\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__label\x22>Feature</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__pills\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setFeature(null)\x22\x20:class=\x22feature\x20===\x20null\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22seenFeatures\x22\x20let:item=\x22s\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setFeature(s)\x22\x20:class=\x22feature\x20===\x20s\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>{{\x20s\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Toolbar\x20row\x204:\x20node\x20dropdown\x20-->\x0a\x20\x20<if\x20:=\x22seenNodes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22history__toolbar\x20history__toolbar--sub\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__label\x22>Node</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__pills\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setNode(null)\x22\x20:class=\x22node\x20===\x20null\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>All</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22seenNodes\x22\x20let:item=\x22n\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setNode(n)\x22\x20:class=\x22node\x20===\x20n\x20?\x20\x27pill\x20pill--on\x27\x20:\x20\x27pill\x27\x22>{{\x20n\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Error\x20state\x20-->\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22history__error\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Log\x20entries\x20list\x20-->\x0a\x20\x20<div\x20class=\x22history__list\x22>\x0a\x20\x20\x20\x20<if\x20:=\x22entries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__empty\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22loading\x22>Loading…</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!loading\x20&&\x20!error\x22>No\x20log\x20entries</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<each\x20:of=\x22entries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__row\x22\x20@click=\x22toggleExpanded(entry.key)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__ts\x22>{{\x20fmtTime(entry.ts)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__level\x22\x20:style=\x22\x27color:\x27\x20+\x20levelColor(entry.level)\x22>{{\x20entry.level\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__feature\x22\x20v-if=\x22entry.feature\x22>{{\x20entry.feature\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__msg\x22>{{\x20entry.msg\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__node\x22\x20v-if=\x22entry.node\x22>{{\x20entry.node\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22entry.context\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22history__has-context\x22>⊕</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Expanded\x20context\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22expandedKeys.has(entry.key)\x20&&\x20entry.context\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22history__context\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre>{{\x20fmtContext(entry.context)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Load\x20more\x20button\x20-->\x0a\x20\x20<if\x20:=\x22hasMore\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22history__footer\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22loading\x22\x20class=\x22history__load-more\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20loading\x20?\x20\x27Loading…\x27\x20:\x20\x27Load\x20More\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</If>\x0a\x0a</div>\x0a','57533UVzHeN','slice','#ccc','sort','totalCount','443138kDbzez','toUpperCase','has','hasMore','seenFeatures','timeRange','API','error','cursor','3NgJAQa','push','loading','resetAndLoad','13914ZnVSHH','var(--okdb-accent)'];_0x3bb2=function(){return _0x7539ff;};return _0x3bb2();}export default{'tag':'system-log-history','context':()=>({'level':null,'levels':[],'feature':null,'node':null,'timeRange':_0x129777(0x18e),'entries':[],'seenFeatures':[],'seenNodes':[],'totalCount':0x0,'cursor':null,'hasMore':!0x1,'loading':!0x1,'error':null,'expandedKeys':new Set(),get 'levelsPill'(){const _0xe32d6=_0x129777;return 0x0===this['levels'][_0xe32d6(0x17f)]?'All':this[_0xe32d6(0x193)]['length']+'\x20selected';},get 'timeRangeLabel'(){const _0x37ebed=_0x129777;return _0x37ebed(0x189)===this['timeRange']?_0x37ebed(0x180):this[_0x37ebed(0x1a2)][_0x37ebed(0x19e)]();},'clearLevels'(){const _0x5d24f6=_0x129777;this['levels'][_0x5d24f6(0x187)](0x0,this[_0x5d24f6(0x193)][_0x5d24f6(0x17f)]),this[_0x5d24f6(0x1a9)]();},'toggleLevel'(_0xced6f5){const _0x3a3e78=_0x129777,_0x420679=this[_0x3a3e78(0x193)][_0x3a3e78(0x196)](_0xced6f5);_0x420679>=0x0?this[_0x3a3e78(0x193)]['splice'](_0x420679,0x1):this[_0x3a3e78(0x193)][_0x3a3e78(0x1a7)](_0xced6f5),this[_0x3a3e78(0x1a9)]();},'setTimeRange'(_0xde16be){const _0x5a815f=_0x129777;this[_0x5a815f(0x1a2)]=_0xde16be,this[_0x5a815f(0x1a9)]();},'setFeature'(_0x4be247){const _0x112981=_0x129777;this[_0x112981(0x183)]=this[_0x112981(0x183)]===_0x4be247?null:_0x4be247,this[_0x112981(0x1a9)]();},'setNode'(_0xe27f2b){const _0x2ba867=_0x129777;this[_0x2ba867(0x182)]=this[_0x2ba867(0x182)]===_0xe27f2b?null:_0xe27f2b,this[_0x2ba867(0x1a9)]();},'toggleExpanded'(_0x3fd108){const _0x2d62ae=_0x129777;this[_0x2d62ae(0x181)][_0x2d62ae(0x19f)](_0x3fd108)?this[_0x2d62ae(0x181)]['delete'](_0x3fd108):this[_0x2d62ae(0x181)][_0x2d62ae(0x188)](_0x3fd108);},async 'load'(){const _0x37f536=_0x129777;this[_0x37f536(0x1a8)]=!0x0,this[_0x37f536(0x1a4)]=null;try{const _0x371c14=Date[_0x37f536(0x1b4)](),_0x59b971='all'===this[_0x37f536(0x1a2)]?0x0:_0x371c14-t[this[_0x37f536(0x1a2)]],_0x2e23aa=new URLSearchParams();_0x2e23aa['append'](_0x37f536(0x195),String(_0x59b971)),_0x2e23aa[_0x37f536(0x184)]('to',String(_0x371c14)),this[_0x37f536(0x193)][_0x37f536(0x17f)]>0x0&&_0x2e23aa['append'](_0x37f536(0x1b2),this[_0x37f536(0x193)][_0x37f536(0x18c)](',')),this[_0x37f536(0x183)]&&_0x2e23aa[_0x37f536(0x184)](_0x37f536(0x183),this['feature']),this['node']&&_0x2e23aa[_0x37f536(0x184)]('node',this['node']),this[_0x37f536(0x1a5)]&&_0x2e23aa[_0x37f536(0x184)](_0x37f536(0x1a5),String(this[_0x37f536(0x1a5)]));const _0x4c825a=await fetch(__ENV__[_0x37f536(0x1a3)]+_0x37f536(0x1b3)+_0x2e23aa),_0x27539a=await _0x4c825a[_0x37f536(0x192)]();if(!_0x4c825a['ok'])throw new Error(_0x27539a?.[_0x37f536(0x1a4)]?.['message']||_0x37f536(0x17e));const _0x1edb3c=_0x27539a['data']||_0x27539a['result']||{},_0x27c4aa=_0x1edb3c[_0x37f536(0x1ae)]||[];this[_0x37f536(0x1a5)]?this[_0x37f536(0x1ae)][_0x37f536(0x1a7)](..._0x27c4aa):this['entries']=_0x27c4aa,this[_0x37f536(0x1a5)]=_0x1edb3c['next_cursor']??null,this[_0x37f536(0x1a0)]=null!==_0x1edb3c[_0x37f536(0x18b)];const _0x1cfd3c=new Set(this[_0x37f536(0x1ae)][_0x37f536(0x1b1)](_0x494d44=>_0x494d44[_0x37f536(0x183)])['filter'](Boolean)),_0x121199=new Set(this[_0x37f536(0x1ae)][_0x37f536(0x1b1)](_0x7a060=>_0x7a060['node'])['filter'](Boolean));this['seenFeatures']=Array[_0x37f536(0x195)](_0x1cfd3c)[_0x37f536(0x19b)](),this['seenNodes']=Array['from'](_0x121199)[_0x37f536(0x19b)](),this[_0x37f536(0x19c)]=this[_0x37f536(0x1ae)][_0x37f536(0x17f)];}catch(_0x33a7f2){this[_0x37f536(0x1a4)]=_0x33a7f2?.['message']||String(_0x33a7f2),this['entries']=[];}this['loading']=!0x1;},'resetAndLoad'(){const _0x3ed2c2=_0x129777;this[_0x3ed2c2(0x1a5)]=null,this[_0x3ed2c2(0x1ae)]=[],this[_0x3ed2c2(0x1a1)]=[],this[_0x3ed2c2(0x17c)]=[],this[_0x3ed2c2(0x181)]['clear'](),this[_0x3ed2c2(0x1af)]();},'fmtTime'(_0x44c385){const _0x4c3c3f=_0x129777;if(!_0x44c385)return'';const _0x4014d8=new Date(_0x44c385);return _0x4014d8[_0x4c3c3f(0x18a)]()[_0x4c3c3f(0x199)](0x0,0x8)+'.'+String(_0x4014d8['getMilliseconds']())[_0x4c3c3f(0x1ad)](0x3,'0');},'fmtContext'(_0x48d6e8){const _0x1546a9=_0x129777;if(null==_0x48d6e8)return'';if(_0x1546a9(0x1ac)==typeof _0x48d6e8)return _0x48d6e8;try{return JSON['stringify'](_0x48d6e8);}catch{return String(_0x48d6e8);}},'levelColor':_0xeeaa32=>e[_0xeeaa32]??_0x129777(0x19a)}),'mount'(){const _0x2c3403=_0x129777;this[_0x2c3403(0x1af)]();},'template':_0x129777(0x197),'style':_0x129777(0x190)};
|