@kedem/okdb 1.0.1 → 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/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/okdb-data/default/data.mdb +0 -0
- package/okdb-data/default/lock.mdb +0 -0
- package/okdb-data/~log/data.mdb +0 -0
- package/okdb-data/~log/lock.mdb +0 -0
- package/okdb-data/~system/data.mdb +0 -0
- package/okdb-data/~system/lock.mdb +0 -0
- package/public/images/logo.png +0 -0
- package/public/images/logo.svg +0 -333
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0xf3506c=_0x326b;function _0x2c8c(){const _0x29f57a=['$attr','1086234mfWTio','API','96684AwrzbO','json','exportSelectedEnvNames','stringify','application/json','dataTransfer','exportSingleEnvTypes','exportIncludeChanges','change','/system/backup','set','filter','preventDefault','backupCompact','getMonth','files','1099UNOeqG','POST','split','userEnvs','canBackup','removeChild','importSelectedTypeNames','get','match','importIncludeChanges','importBusy','backupEnvNames','exportDone','exportCanRun','length','join','size','backupError','backupDlDone','typesForEnv','exportAllTypes','env','exportSelectedTypeNames','parse','createObjectURL','importEnvOverride','importFile','backupDlError','envs','find','importFileTypes','.ndjson','changes','target','name','appendChild','content-disposition','_setImportFile','server','modal','backupSelEnvs','download','10tEuBlI','importDragOver','schema','importDone','startsWith','catch','10DDVmYa','backupBusy','545612BYFpck','./okdb-backup-','exportIsSingleEnv','includeChanges','2893VVjRdl','file','importDropExisting','headers','keys','exportError','importSelTypes','createElement','/system/import?','body','backupResult','importError','revokeObjectURL','111276ghmATH','getDate','backupEnvMode','HTTP\x20','exportBusy','status','click','436276RsFOjF','padStart','getFullYear','trim','types','type','now','message','onDone','map','6301683AnZrAQ','exportInit','15CszYzL','backupDlBusy','error','header','input','exportSelEnvs','href','importBatchSize','export','true','data','slice','44776qcvlIe','/system/export?','backupDestDir','exportSelTypes','text','onchange','accept','okdb-backup-','all'];_0x2c8c=function(){return _0x29f57a;};return _0x2c8c();}function _0x326b(_0x475194,_0x3060c9){_0x475194=_0x475194-0x8a;const _0x2c8c91=_0x2c8c();let _0x326be9=_0x2c8c91[_0x475194];return _0x326be9;}(function(_0x4eb021,_0x7dc6dc){const _0x2799c5=_0x326b,_0x15e458=_0x4eb021();while(!![]){try{const _0x575b79=parseInt(_0x2799c5(0xef))/0x1+-parseInt(_0x2799c5(0xf6))/0x2*(-parseInt(_0x2799c5(0x102))/0x3)+parseInt(_0x2799c5(0xde))/0x4*(-parseInt(_0x2799c5(0xdc))/0x5)+parseInt(_0x2799c5(0x9a))/0x6+parseInt(_0x2799c5(0xac))/0x7*(parseInt(_0x2799c5(0x90))/0x8)+-parseInt(_0x2799c5(0x100))/0x9*(-parseInt(_0x2799c5(0xd6))/0xa)+parseInt(_0x2799c5(0xe2))/0xb*(-parseInt(_0x2799c5(0x9c))/0xc);if(_0x575b79===_0x7dc6dc)break;else _0x15e458['push'](_0x15e458['shift']());}catch(_0x4921ff){_0x15e458['push'](_0x15e458['shift']());}}}(_0x2c8c,0x8b30c));export default{'tag':'data-ops-modal','attr':{'modal':{},'envs':{'default':()=>[]},'onDone':{},'initialTab':{'default':_0xf3506c(0x8c)}},'context'(_0x513b88){const _0x5b21d7=_0xf3506c;function _0x9fe9cb(){const _0x178d6c=_0x326b,_0x11b76f=new Date(),_0x79d5fd=_0x21da75=>String(_0x21da75)[_0x178d6c(0xf7)](0x2,'0');return _0x11b76f[_0x178d6c(0xf8)]()+'-'+_0x79d5fd(_0x11b76f[_0x178d6c(0xaa)]()+0x1)+'-'+_0x79d5fd(_0x11b76f[_0x178d6c(0xf0)]());}return{'tab':_0x513b88[_0x5b21d7(0x99)]['initialTab']||_0x5b21d7(0x8c),'formatBytes':function(_0x5ac36f){if(null==_0x5ac36f)return'--';const _0x49ce1a=['B','KB','MB','GB','TB'];let _0x1202b6=_0x5ac36f,_0x44d7d4=0x0;for(;_0x1202b6>=0x400&&_0x44d7d4<_0x49ce1a['length']-0x1;)_0x1202b6/=0x400,_0x44d7d4++;return _0x1202b6['toFixed'](0x0===_0x44d7d4?0x0:0x2)+'\x20'+_0x49ce1a[_0x44d7d4];},get 'userEnvs'(){const _0x7bdcb4=_0x5b21d7;return(_0x513b88[_0x7bdcb4(0x99)][_0x7bdcb4(0xc8)]||[])[_0x7bdcb4(0xa7)](_0x138620=>!_0x138620[_0x7bdcb4(0xce)]['startsWith']('~'));},'typesForEnv'(_0x6ca242){const _0x4b6f63=_0x5b21d7,_0x3a50a7=(_0x513b88['$attr'][_0x4b6f63(0xc8)]||[])[_0x4b6f63(0xc9)](_0x3920ba=>_0x3920ba[_0x4b6f63(0xce)]===_0x6ca242);return(_0x3a50a7?.['types']||[])[_0x4b6f63(0xa7)](_0x2f402b=>!_0x2f402b[_0x4b6f63(0xce)][_0x4b6f63(0xda)]('~'))['map'](_0x55d0ce=>_0x55d0ce['name']);},'exportSelEnvs':{},'exportIncludeChanges':!0x1,'exportBusy':!0x1,'exportError':null,'exportDone':null,'exportSelTypes':{},'exportAllTypes':!0x0,get 'exportSelectedEnvNames'(){const _0x438c3c=_0x5b21d7;return Object[_0x438c3c(0xe6)](this[_0x438c3c(0x107)])[_0x438c3c(0xa7)](_0x57b288=>this[_0x438c3c(0x107)][_0x57b288]);},get 'exportIsSingleEnv'(){const _0x5c46f0=_0x5b21d7;return 0x1===this[_0x5c46f0(0x9e)][_0x5c46f0(0xba)];},get 'exportSingleEnvTypes'(){const _0x5c2ccf=_0x5b21d7;return this[_0x5c2ccf(0xe0)]?this[_0x5c2ccf(0xbf)](this[_0x5c2ccf(0x9e)][0x0]):[];},get 'exportSelectedTypeNames'(){const _0x16a7a8=_0x5b21d7;return!this[_0x16a7a8(0xe0)]||this[_0x16a7a8(0xc0)]?null:Object['keys'](this[_0x16a7a8(0x93)])['filter'](_0xcb5ed9=>this[_0x16a7a8(0x93)][_0xcb5ed9]);},get 'exportCanRun'(){const _0x6a2735=_0x5b21d7;return this[_0x6a2735(0x9e)]['length']>0x0&&!this['exportBusy'];},'exportToggleAllEnvs'(_0x3346c3){const _0x8243a0=_0x5b21d7,_0x1900ae={};for(const _0x5114b7 of this[_0x8243a0(0xaf)])_0x1900ae[_0x5114b7[_0x8243a0(0xce)]]=_0x3346c3;this[_0x8243a0(0x107)]=_0x1900ae;},'exportToggleAllTypes'(_0x3a0995){const _0x5f5168=_0x5b21d7,_0x46a77d={};for(const _0x53a059 of this[_0x5f5168(0xa2)])_0x46a77d[_0x53a059]=_0x3a0995;this['exportSelTypes']=_0x46a77d;},'exportInit'(){const _0x199ee0=_0x5b21d7;0x0===Object[_0x199ee0(0xe6)](this[_0x199ee0(0x107)])[_0x199ee0(0xba)]&&this[_0x199ee0(0xaf)][_0x199ee0(0xba)]&&(this[_0x199ee0(0x107)]={[this['userEnvs'][0x0]['name']]:!0x0});},async 'runExport'(){const _0x18a4ed=_0x5b21d7;if(this[_0x18a4ed(0xb9)]){this[_0x18a4ed(0xf3)]=!0x0,this[_0x18a4ed(0xe7)]=null,this[_0x18a4ed(0xb8)]=null;try{const _0x162d48=this[_0x18a4ed(0x9e)],_0x562971=_0x162d48['length']>0x1,_0x4a913d=new URLSearchParams();_0x562971?_0x4a913d[_0x18a4ed(0xa6)](_0x18a4ed(0xc8),_0x162d48[_0x18a4ed(0xbb)](',')):_0x4a913d[_0x18a4ed(0xa6)](_0x18a4ed(0xc1),_0x162d48[0x0]),this[_0x18a4ed(0xa3)]&&_0x4a913d[_0x18a4ed(0xa6)](_0x18a4ed(0xe1),_0x18a4ed(0x8d));const _0x11d864=this[_0x18a4ed(0xc2)];_0x11d864&&_0x11d864['length']&&_0x4a913d[_0x18a4ed(0xa6)](_0x18a4ed(0xfa),_0x11d864[_0x18a4ed(0xbb)](','));const _0x3537d1=await fetch(__ENV__[_0x18a4ed(0x9b)]+_0x18a4ed(0x91)+_0x4a913d);if(!_0x3537d1['ok']){const _0x162f32=await _0x3537d1[_0x18a4ed(0x9d)]()['catch'](()=>({}));throw new Error(_0x162f32?.[_0x18a4ed(0x104)]?.['message']||_0x18a4ed(0xf2)+_0x3537d1[_0x18a4ed(0xf4)]);}const _0x43e6ab=await _0x3537d1['blob'](),_0x4db149=URL[_0x18a4ed(0xc4)](_0x43e6ab),_0x48c781=document[_0x18a4ed(0xe9)]('a'),_0x104a47=_0x3537d1[_0x18a4ed(0xe5)]['get'](_0x18a4ed(0xd0))||'',_0x1053b0=_0x104a47['match'](/filename="?([^"]+)"?/)?.[0x1]||'okdb-export-'+_0x162d48[_0x18a4ed(0xbb)]('+')+'-'+Date[_0x18a4ed(0xfc)]()+_0x18a4ed(0xcb);_0x48c781['href']=_0x4db149,_0x48c781[_0x18a4ed(0xd5)]=_0x1053b0,document[_0x18a4ed(0xeb)][_0x18a4ed(0xcf)](_0x48c781),_0x48c781[_0x18a4ed(0xf5)](),document['body'][_0x18a4ed(0xb1)](_0x48c781),URL['revokeObjectURL'](_0x4db149);const _0x190a05=(await _0x43e6ab[_0x18a4ed(0x94)]())[_0x18a4ed(0xae)]('\x0a')[_0x18a4ed(0xa7)](_0x264dba=>_0x264dba[_0x18a4ed(0xf9)]())[_0x18a4ed(0xff)](_0x1c4daf=>{const _0x1f30ec=_0x18a4ed;try{return JSON[_0x1f30ec(0xc3)](_0x1c4daf);}catch{return null;}})[_0x18a4ed(0xa7)](Boolean);this[_0x18a4ed(0xb8)]={'filename':_0x1053b0,'bytes':_0x43e6ab[_0x18a4ed(0xbc)],'envCount':_0x562971?_0x162d48[_0x18a4ed(0xba)]:0x1,'types':_0x190a05[_0x18a4ed(0xa7)](_0x368b46=>_0x18a4ed(0xd8)===_0x368b46['r'])[_0x18a4ed(0xba)],'records':_0x190a05['filter'](_0x1d8360=>_0x18a4ed(0x8e)===_0x1d8360['r'])[_0x18a4ed(0xba)],'changes':_0x190a05[_0x18a4ed(0xa7)](_0x2d959f=>_0x18a4ed(0xa4)===_0x2d959f['r'])[_0x18a4ed(0xba)]};}catch(_0x2eaf1e){this[_0x18a4ed(0xe7)]=_0x2eaf1e?.[_0x18a4ed(0xfd)]||String(_0x2eaf1e);}finally{this['exportBusy']=!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 _0x4f28a7=_0x5b21d7;return this['importAllTypes']?null:Object['keys'](this[_0x4f28a7(0xe8)])[_0x4f28a7(0xa7)](_0x3ee5f1=>this[_0x4f28a7(0xe8)][_0x3ee5f1]);},get 'canImport'(){const _0x17c751=_0x5b21d7;return!!this[_0x17c751(0xc6)]&&!this['importBusy'];},'onDrop'(_0x395971){const _0x65e5c6=_0x5b21d7;_0x395971[_0x65e5c6(0xa8)](),this[_0x65e5c6(0xd7)]=!0x1;const _0x10cdc0=_0x395971[_0x65e5c6(0xa1)]?.['files']?.[0x0];_0x10cdc0&&this[_0x65e5c6(0xd1)](_0x10cdc0);},'onDragOver'(_0x2e6d11){const _0x40e6e9=_0x5b21d7;_0x2e6d11[_0x40e6e9(0xa8)](),this[_0x40e6e9(0xd7)]=!0x0;},'onDragLeave'(){const _0x20fe46=_0x5b21d7;this[_0x20fe46(0xd7)]=!0x1;},'pickFile'(){const _0x337644=_0x5b21d7,_0x2663c3=document[_0x337644(0xe9)](_0x337644(0x106));_0x2663c3[_0x337644(0xfb)]=_0x337644(0xe3),_0x2663c3[_0x337644(0x96)]='.ndjson,.jsonl,.json,.txt',_0x2663c3[_0x337644(0x95)]=_0x2e75f8=>{const _0x52a8a2=_0x337644,_0x6fa99e=_0x2e75f8[_0x52a8a2(0xcd)][_0x52a8a2(0xab)]?.[0x0];_0x6fa99e&&this[_0x52a8a2(0xd1)](_0x6fa99e);},_0x2663c3[_0x337644(0xf5)]();},async '_setImportFile'(_0x4f960e){const _0x5910ac=_0x5b21d7;this[_0x5910ac(0xc6)]=_0x4f960e,this['importError']=null,this['importDone']=null,this[_0x5910ac(0xca)]=[];try{const _0xbbe980=(await _0x4f960e[_0x5910ac(0x8f)](0x0,0x8000)['text']())[_0x5910ac(0xae)]('\x0a')[_0x5910ac(0xa7)](_0x23b32c=>_0x23b32c['trim']()),_0xfe4926=_0xbbe980['map'](_0x239f23=>{const _0x3529b0=_0x5910ac;try{return JSON[_0x3529b0(0xc3)](_0x239f23);}catch{return null;}})[_0x5910ac(0xa7)](_0xabce0=>'schema'===_0xabce0?.['r']);this['importFileTypes']=[...new Set(_0xfe4926['map'](_0x8db22f=>_0x8db22f[_0x5910ac(0xfb)]))];const _0x27e246=_0xbbe980['map'](_0x49772a=>{try{return JSON['parse'](_0x49772a);}catch{return null;}})[_0x5910ac(0xc9)](_0x59bbaa=>_0x5910ac(0x105)===_0x59bbaa?.['r']);_0x27e246?.['envName']&&this['importEnvOverride'];}catch{}},'importToggleAllTypes'(_0x1eb333){const _0xfb5c5c=_0x5b21d7,_0x57206f={};for(const _0x3ca370 of this[_0xfb5c5c(0xca)])_0x57206f[_0x3ca370]=_0x1eb333;this['importSelTypes']=_0x57206f;},async 'runImport'(){const _0xb8acc7=_0x5b21d7;if(this[_0xb8acc7(0xc6)]){this[_0xb8acc7(0xb6)]=!0x0,this[_0xb8acc7(0xed)]=null,this[_0xb8acc7(0xd9)]=null;try{const _0x3794aa=new URLSearchParams({'dropExisting':String(this[_0xb8acc7(0xe4)]),'includeChanges':String(this[_0xb8acc7(0xb5)]),'batchSize':String(this[_0xb8acc7(0x8b)]||0x1f4)});this[_0xb8acc7(0xc5)]&&_0x3794aa['set'](_0xb8acc7(0xc1),this[_0xb8acc7(0xc5)]);const _0x51a9c2=this[_0xb8acc7(0xb2)];_0x51a9c2&&_0x51a9c2[_0xb8acc7(0xba)]&&_0x3794aa[_0xb8acc7(0xa6)]('types',_0x51a9c2[_0xb8acc7(0xbb)](','));const _0xb52d89=await fetch(__ENV__['API']+_0xb8acc7(0xea)+_0x3794aa,{'method':_0xb8acc7(0xad),'headers':{'content-type':'application/x-ndjson'},'body':this[_0xb8acc7(0xc6)]}),_0x5c7440=await _0xb52d89[_0xb8acc7(0x9d)]()[_0xb8acc7(0xdb)](()=>({}));if(!_0xb52d89['ok'])throw new Error(_0x5c7440?.[_0xb8acc7(0x104)]?.[_0xb8acc7(0xfd)]||_0xb8acc7(0xf2)+_0xb52d89['status']);const _0x4daa6c=_0x5c7440['data']??_0x5c7440;this['importDone']={'types':_0x4daa6c[_0xb8acc7(0xfa)]??0x0,'records':_0x4daa6c['records']??0x0,'changes':_0x4daa6c[_0xb8acc7(0xcc)]??0x0},_0x513b88['$attr'][_0xb8acc7(0xfe)]?.();}catch(_0x942055){this[_0xb8acc7(0xed)]=_0x942055?.[_0xb8acc7(0xfd)]||String(_0x942055);}finally{this['importBusy']=!0x1;}}},'backupMode':_0x5b21d7(0xd2),'backupDestDir':_0x5b21d7(0xdf)+_0x9fe9cb(),'backupSelEnvs':{},'backupEnvMode':_0x5b21d7(0x98),'backupCompact':!0x0,'backupBusy':!0x1,'backupError':null,'backupResult':null,'backupDlBusy':!0x1,'backupDlError':null,'backupDlDone':null,get 'backupEnvNames'(){const _0x1c2265=_0x5b21d7;return'all'===this[_0x1c2265(0xf1)]?null:Object[_0x1c2265(0xe6)](this[_0x1c2265(0xd4)])[_0x1c2265(0xa7)](_0x2ac0f0=>this[_0x1c2265(0xd4)][_0x2ac0f0]);},get 'canBackup'(){const _0x33c2c1=_0x5b21d7;return this[_0x33c2c1(0x92)][_0x33c2c1(0xf9)]()['length']>0x0&&!this['backupBusy'];},get 'canBackupDl'(){const _0x4e0cae=_0x5b21d7;return!this[_0x4e0cae(0x103)];},async 'runBackup'(){const _0x14390b=_0x5b21d7;if(this[_0x14390b(0xb0)]){this[_0x14390b(0xdd)]=!0x0,this[_0x14390b(0xbd)]=null,this[_0x14390b(0xec)]=null;try{const _0x421c4b=await fetch(__ENV__[_0x14390b(0x9b)]+_0x14390b(0xa5),{'method':_0x14390b(0xad),'headers':{'content-type':_0x14390b(0xa0)},'body':JSON[_0x14390b(0x9f)]({'destDir':this[_0x14390b(0x92)][_0x14390b(0xf9)](),'envNames':this[_0x14390b(0xb7)],'compact':this[_0x14390b(0xa9)]})}),_0x3051b2=await _0x421c4b[_0x14390b(0x9d)]()[_0x14390b(0xdb)](()=>({}));if(!_0x421c4b['ok'])throw new Error(_0x3051b2?.['error']?.[_0x14390b(0xfd)]||_0x14390b(0xf2)+_0x421c4b['status']);this[_0x14390b(0xec)]=_0x3051b2['data']??_0x3051b2;}catch(_0x30e03b){this['backupError']=_0x30e03b?.[_0x14390b(0xfd)]||String(_0x30e03b);}finally{this[_0x14390b(0xdd)]=!0x1;}}},async 'runDownloadBackup'(){const _0x49be60=_0x5b21d7;this[_0x49be60(0x103)]=!0x0,this[_0x49be60(0xc7)]=null,this['backupDlDone']=null;try{const _0x1c6a6a=this[_0x49be60(0xb7)],_0x21c096=new URLSearchParams();_0x1c6a6a?.[_0x49be60(0xba)]?_0x21c096[_0x49be60(0xa6)](_0x49be60(0xc8),_0x1c6a6a['join'](',')):_0x21c096[_0x49be60(0xa6)](_0x49be60(0xc8),this['userEnvs'][_0x49be60(0xff)](_0x5347f0=>_0x5347f0[_0x49be60(0xce)])['join'](','));const _0x44845e=await fetch(__ENV__['API']+'/system/export?'+_0x21c096);if(!_0x44845e['ok']){const _0x491c32=await _0x44845e['json']()[_0x49be60(0xdb)](()=>({}));throw new Error(_0x491c32?.['error']||_0x49be60(0xf2)+_0x44845e[_0x49be60(0xf4)]);}const _0x3c10ca=await _0x44845e['blob'](),_0x5dbe02=URL['createObjectURL'](_0x3c10ca),_0x2204fc=document[_0x49be60(0xe9)]('a'),_0x5497aa=_0x44845e[_0x49be60(0xe5)][_0x49be60(0xb3)](_0x49be60(0xd0))||'',_0x376514=_0x5497aa[_0x49be60(0xb4)](/filename="?([^"]+)"?/)?.[0x1]||_0x49be60(0x97)+_0x9fe9cb()+_0x49be60(0xcb);_0x2204fc[_0x49be60(0x8a)]=_0x5dbe02,_0x2204fc[_0x49be60(0xd5)]=_0x376514,document[_0x49be60(0xeb)][_0x49be60(0xcf)](_0x2204fc),_0x2204fc[_0x49be60(0xf5)](),document['body'][_0x49be60(0xb1)](_0x2204fc),URL[_0x49be60(0xee)](_0x5dbe02),this[_0x49be60(0xbe)]={'filename':_0x376514,'bytes':_0x3c10ca[_0x49be60(0xbc)]};}catch(_0x3d528e){this[_0x49be60(0xc7)]=_0x3d528e?.[_0x49be60(0xfd)]||String(_0x3d528e);}finally{this[_0x49be60(0x103)]=!0x1;}},'close'(){const _0x235ed4=_0x5b21d7;_0x513b88[_0x235ed4(0x99)][_0x235ed4(0xd3)]['close']();},'mount'(){const _0x4e1606=_0x5b21d7;this[_0x4e1606(0x101)]();}};},'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
|
+
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 _0x38fc0b=_0x27ff;function _0x27ff(_0x136fa6,_0xe52102){_0x136fa6=_0x136fa6-0x1bc;const _0x5d0176=_0x5d01();let _0x27ff05=_0x5d0176[_0x136fa6];return _0x27ff05;}function _0x5d01(){const _0x2dbc5c=['var(--okdb-danger)','loading','\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','summary','has','includes','sort','filtered','var(--okdb-accent)','system-api-panel','Failed\x20to\x20load\x20routes','json','3486qSpwOQ','11QWXciJ','routes','34ZQMOvJ','2471EoOqtH','queue','data','552630VBVFvI','push','method','toLowerCase','changelog','search','4303huhImz','fts','var(--okdb-indigo)','system','path','trim','25ywmobf','var(--okdb-warning)','indexes','localeCompare','var(--okdb-success)','load','tags','get','27918UBDKQM','indexOf','error','some','entries','replace','message','docs','584afepOl','selected','251504FaivlH','API','meta','3244490pVQNhj','filter','/docs','set','embeddings','sync','tagOrder','5382324wKcidc'];_0x5d01=function(){return _0x2dbc5c;};return _0x5d01();}(function(_0x5b5ba9,_0x228206){const _0x14cb29=_0x27ff,_0x7ebfc7=_0x5b5ba9();while(!![]){try{const _0x50bd5d=-parseInt(_0x14cb29(0x1cc))/0x1*(parseInt(_0x14cb29(0x1c2))/0x2)+-parseInt(_0x14cb29(0x1c6))/0x3+parseInt(_0x14cb29(0x1e4))/0x4*(parseInt(_0x14cb29(0x1d2))/0x5)+-parseInt(_0x14cb29(0x1bf))/0x6*(parseInt(_0x14cb29(0x1c3))/0x7)+-parseInt(_0x14cb29(0x1e2))/0x8*(-parseInt(_0x14cb29(0x1da))/0x9)+-parseInt(_0x14cb29(0x1e7))/0xa+-parseInt(_0x14cb29(0x1c0))/0xb*(-parseInt(_0x14cb29(0x1ee))/0xc);if(_0x50bd5d===_0x228206)break;else _0x7ebfc7['push'](_0x7ebfc7['shift']());}catch(_0x1ee640){_0x7ebfc7['push'](_0x7ebfc7['shift']());}}}(_0x5d01,0x316d2));import _0x15c568 from'../../api/parts/api-endpoint.ok.js';import _0x2de67d from'@toolkit/elements/ok-icon.ok.js';export default{'tag':_0x38fc0b(0x1bc),'unwrap':!0x0,'dependencies':[_0x15c568,_0x2de67d],'context':()=>({'routes':[],'loading':!0x1,'error':null,'selected':null,'search':'','tagOrder':[_0x38fc0b(0x1cf),'types',_0x38fc0b(0x1c5),_0x38fc0b(0x1ca),_0x38fc0b(0x1d4),_0x38fc0b(0x1cd),_0x38fc0b(0x1c4),'pipelines',_0x38fc0b(0x1ec),_0x38fc0b(0x1eb),'envs',_0x38fc0b(0x1e1)],async 'load'(){const _0x6ff82c=_0x38fc0b;this[_0x6ff82c(0x1f0)]=!0x0,this[_0x6ff82c(0x1dc)]=null;try{const _0x322c4d=await fetch(__ENV__[_0x6ff82c(0x1e5)]+_0x6ff82c(0x1e9)),_0x1f4b09=await _0x322c4d[_0x6ff82c(0x1be)]();if(!_0x322c4d['ok'])throw new Error(_0x1f4b09?.['error']?.[_0x6ff82c(0x1e0)]||_0x6ff82c(0x1bd));this[_0x6ff82c(0x1c1)]=_0x1f4b09[_0x6ff82c(0x1c5)]??[];}catch(_0xa25172){this[_0x6ff82c(0x1dc)]=_0xa25172?.['message']||String(_0xa25172);}finally{this['loading']=!0x1;}},get 'filtered'(){const _0x2811ae=_0x38fc0b,_0x3fc193=this[_0x2811ae(0x1cb)][_0x2811ae(0x1d1)]()[_0x2811ae(0x1c9)]();return _0x3fc193?this['routes'][_0x2811ae(0x1e8)](_0x43c4e6=>_0x43c4e6[_0x2811ae(0x1d0)]['toLowerCase']()[_0x2811ae(0x1f4)](_0x3fc193)||_0x43c4e6[_0x2811ae(0x1c8)][_0x2811ae(0x1c9)]()[_0x2811ae(0x1f4)](_0x3fc193)||(_0x43c4e6[_0x2811ae(0x1e6)]?.[_0x2811ae(0x1f2)]||'')[_0x2811ae(0x1c9)]()[_0x2811ae(0x1f4)](_0x3fc193)||(_0x43c4e6['meta']?.[_0x2811ae(0x1d8)]||[])[_0x2811ae(0x1dd)](_0x4044d8=>_0x4044d8[_0x2811ae(0x1f4)](_0x3fc193))):this[_0x2811ae(0x1c1)];},get 'groups'(){const _0x139061=_0x38fc0b,_0x4338ca=new Map();for(const _0x40aef4 of this[_0x139061(0x1f6)]){const _0x1a4cec=_0x40aef4[_0x139061(0x1e6)]?.[_0x139061(0x1d8)]?.[0x0]??'other';_0x4338ca[_0x139061(0x1f3)](_0x1a4cec)||_0x4338ca[_0x139061(0x1ea)](_0x1a4cec,[]),_0x4338ca[_0x139061(0x1d9)](_0x1a4cec)[_0x139061(0x1c7)](_0x40aef4);}return[..._0x4338ca[_0x139061(0x1de)]()][_0x139061(0x1f5)](([_0x15c9f0],[_0xcca43d])=>{const _0x3c94bb=_0x139061,_0x51b132=this['tagOrder'][_0x3c94bb(0x1db)](_0x15c9f0),_0x2ef496=this[_0x3c94bb(0x1ed)][_0x3c94bb(0x1db)](_0xcca43d);return-0x1===_0x51b132&&-0x1===_0x2ef496?_0x15c9f0[_0x3c94bb(0x1d5)](_0xcca43d):-0x1===_0x51b132?0x1:-0x1===_0x2ef496?-0x1:_0x51b132-_0x2ef496;})['map'](([_0x4a25d6,_0x4678e8])=>({'tag':_0x4a25d6,'routes':_0x4678e8}));},'methodColor':_0x2ddcb5=>({'GET':_0x38fc0b(0x1f7),'POST':_0x38fc0b(0x1d6),'PUT':_0x38fc0b(0x1d3),'PATCH':_0x38fc0b(0x1ce),'DELETE':_0x38fc0b(0x1ef)}[_0x2ddcb5]||'var(--okdb-app-fg-muted)'),'select'(_0x1e2bc6){const _0x5a4e86=_0x38fc0b;this[_0x5a4e86(0x1e3)]=null,setTimeout(()=>{const _0x4ad66d=_0x5a4e86;this[_0x4ad66d(0x1e3)]=_0x1e2bc6;},0x0);},'back'(){const _0x5705dd=_0x38fc0b;this[_0x5705dd(0x1e3)]=null;},'shortPath':_0x3b70a4=>_0x3b70a4[_0x38fc0b(0x1df)](/^\/api/,'')[_0x38fc0b(0x1df)](/\[[^\]]*\]/g,''),'optionalHint'(_0x99f12a){const _0x5022e9=_0x38fc0b,_0x48d4e7=_0x99f12a['match'](/\[([^\]]*)\]/);return _0x48d4e7?_0x48d4e7[0x1][_0x5022e9(0x1df)](/=\w+/g,''):null;}}),'init'(){const _0x107756=_0x38fc0b;this[_0x107756(0x1d7)]();},'template':_0x38fc0b(0x1f1),'style':'.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)}'};
|
|
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 _0x24e017=_0x259b;(function(_0x342f59,_0xcb02d4){const _0x339fb3=_0x259b,_0x3c874d=_0x342f59();while(!![]){try{const _0x2af39=-parseInt(_0x339fb3(0x224))/0x1*(-parseInt(_0x339fb3(0x218))/0x2)+parseInt(_0x339fb3(0x1fb))/0x3*(parseInt(_0x339fb3(0x215))/0x4)+parseInt(_0x339fb3(0x226))/0x5+-parseInt(_0x339fb3(0x1ff))/0x6+parseInt(_0x339fb3(0x1f4))/0x7+-parseInt(_0x339fb3(0x221))/0x8*(parseInt(_0x339fb3(0x200))/0x9)+-parseInt(_0x339fb3(0x22f))/0xa*(parseInt(_0x339fb3(0x207))/0xb);if(_0x2af39===_0xcb02d4)break;else _0x3c874d['push'](_0x3c874d['shift']());}catch(_0x39fe8a){_0x3c874d['push'](_0x3c874d['shift']());}}}(_0x191c,0x78349));function _0x259b(_0x53f175,_0x3be59c){_0x53f175=_0x53f175-0x1f3;const _0x191cc1=_0x191c();let _0x259bb3=_0x191cc1[_0x53f175];return _0x259bb3;}const e={'info':'var(--okdb-accent)','warn':_0x24e017(0x20c),'error':_0x24e017(0x22a),'debug':_0x24e017(0x202)},t={'1h':0x36ee80,'6h':0x1499700,'24h':0x5265c00,'7d':0x240c8400,'all':null};function _0x191c(){const _0x45cad9=['cursor','2032yByHSA','loading','filter','1418swGcLU','totalCount','indexOf','push','all','error','\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','hasMore','json','470008eyNrUc','delete','.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}','71mCrnvj','/system/logs?','135340EPjPGl','string','system-log-history','length','var(--okdb-danger)','now','feature','All','message','264140ChxZcV','map','levels','splice','has','4422012YmdGlX','from','24h','getMilliseconds','resetAndLoad','clear','load','2100BEIdBZ','append','padStart','entries','649662VtssTo','63arnvxe','level','var(--okdb-app-fg-muted)','expandedKeys','seenFeatures','next_cursor','node','22buzuek','API','stringify','join','#ccc','var(--okdb-warning)','toUpperCase','sort','timeRange','toTimeString','add','seenNodes','result'];_0x191c=function(){return _0x45cad9;};return _0x191c();}export default{'tag':_0x24e017(0x228),'context':()=>({'level':null,'levels':[],'feature':null,'node':null,'timeRange':_0x24e017(0x1f6),'entries':[],'seenFeatures':[],'seenNodes':[],'totalCount':0x0,'cursor':null,'hasMore':!0x1,'loading':!0x1,'error':null,'expandedKeys':new Set(),get 'levelsPill'(){const _0xa52098=_0x24e017;return 0x0===this['levels'][_0xa52098(0x229)]?_0xa52098(0x22d):this[_0xa52098(0x231)][_0xa52098(0x229)]+'\x20selected';},get 'timeRangeLabel'(){const _0x54844f=_0x24e017;return _0x54844f(0x21c)===this['timeRange']?'All\x20time':this['timeRange'][_0x54844f(0x20d)]();},'clearLevels'(){const _0x340ca1=_0x24e017;this['levels']['splice'](0x0,this[_0x340ca1(0x231)]['length']),this['resetAndLoad']();},'toggleLevel'(_0x24f677){const _0x6130b3=_0x24e017,_0x2c0248=this[_0x6130b3(0x231)][_0x6130b3(0x21a)](_0x24f677);_0x2c0248>=0x0?this[_0x6130b3(0x231)][_0x6130b3(0x232)](_0x2c0248,0x1):this[_0x6130b3(0x231)]['push'](_0x24f677),this[_0x6130b3(0x1f8)]();},'setTimeRange'(_0x73799e){const _0x3d8f37=_0x24e017;this[_0x3d8f37(0x20f)]=_0x73799e,this[_0x3d8f37(0x1f8)]();},'setFeature'(_0x1f382f){const _0x5cda92=_0x24e017;this[_0x5cda92(0x22c)]=this[_0x5cda92(0x22c)]===_0x1f382f?null:_0x1f382f,this[_0x5cda92(0x1f8)]();},'setNode'(_0x14f8c7){const _0x4d0c13=_0x24e017;this[_0x4d0c13(0x206)]=this['node']===_0x14f8c7?null:_0x14f8c7,this[_0x4d0c13(0x1f8)]();},'toggleExpanded'(_0x561af0){const _0x457328=_0x24e017;this[_0x457328(0x203)][_0x457328(0x1f3)](_0x561af0)?this[_0x457328(0x203)][_0x457328(0x222)](_0x561af0):this[_0x457328(0x203)][_0x457328(0x211)](_0x561af0);},async 'load'(){const _0x439acd=_0x24e017;this['loading']=!0x0,this[_0x439acd(0x21d)]=null;try{const _0x13a683=Date[_0x439acd(0x22b)](),_0x11a2bd=_0x439acd(0x21c)===this[_0x439acd(0x20f)]?0x0:_0x13a683-t[this['timeRange']],_0x3ffc2f=new URLSearchParams();_0x3ffc2f['append'](_0x439acd(0x1f5),String(_0x11a2bd)),_0x3ffc2f[_0x439acd(0x1fc)]('to',String(_0x13a683)),this[_0x439acd(0x231)][_0x439acd(0x229)]>0x0&&_0x3ffc2f[_0x439acd(0x1fc)](_0x439acd(0x201),this['levels'][_0x439acd(0x20a)](',')),this[_0x439acd(0x22c)]&&_0x3ffc2f[_0x439acd(0x1fc)](_0x439acd(0x22c),this[_0x439acd(0x22c)]),this[_0x439acd(0x206)]&&_0x3ffc2f[_0x439acd(0x1fc)](_0x439acd(0x206),this[_0x439acd(0x206)]),this['cursor']&&_0x3ffc2f[_0x439acd(0x1fc)](_0x439acd(0x214),String(this[_0x439acd(0x214)]));const _0x50997=await fetch(__ENV__[_0x439acd(0x208)]+_0x439acd(0x225)+_0x3ffc2f),_0x24c78a=await _0x50997[_0x439acd(0x220)]();if(!_0x50997['ok'])throw new Error(_0x24c78a?.[_0x439acd(0x21d)]?.[_0x439acd(0x22e)]||'Failed\x20to\x20load\x20logs');const _0x5f2ba2=_0x24c78a['data']||_0x24c78a[_0x439acd(0x213)]||{},_0x8588c5=_0x5f2ba2[_0x439acd(0x1fe)]||[];this[_0x439acd(0x214)]?this[_0x439acd(0x1fe)][_0x439acd(0x21b)](..._0x8588c5):this[_0x439acd(0x1fe)]=_0x8588c5,this[_0x439acd(0x214)]=_0x5f2ba2[_0x439acd(0x205)]??null,this[_0x439acd(0x21f)]=null!==_0x5f2ba2[_0x439acd(0x205)];const _0x564c85=new Set(this[_0x439acd(0x1fe)][_0x439acd(0x230)](_0x1ae632=>_0x1ae632['feature'])['filter'](Boolean)),_0x5465e6=new Set(this[_0x439acd(0x1fe)][_0x439acd(0x230)](_0x39038c=>_0x39038c[_0x439acd(0x206)])[_0x439acd(0x217)](Boolean));this['seenFeatures']=Array[_0x439acd(0x1f5)](_0x564c85)[_0x439acd(0x20e)](),this[_0x439acd(0x212)]=Array['from'](_0x5465e6)['sort'](),this[_0x439acd(0x219)]=this[_0x439acd(0x1fe)][_0x439acd(0x229)];}catch(_0x574fc6){this['error']=_0x574fc6?.['message']||String(_0x574fc6),this['entries']=[];}this[_0x439acd(0x216)]=!0x1;},'resetAndLoad'(){const _0x545bfe=_0x24e017;this[_0x545bfe(0x214)]=null,this['entries']=[],this[_0x545bfe(0x204)]=[],this['seenNodes']=[],this[_0x545bfe(0x203)][_0x545bfe(0x1f9)](),this[_0x545bfe(0x1fa)]();},'fmtTime'(_0x13b89e){const _0x92d2d9=_0x24e017;if(!_0x13b89e)return'';const _0x4cebb6=new Date(_0x13b89e);return _0x4cebb6[_0x92d2d9(0x210)]()['slice'](0x0,0x8)+'.'+String(_0x4cebb6[_0x92d2d9(0x1f7)]())[_0x92d2d9(0x1fd)](0x3,'0');},'fmtContext'(_0x4eae32){const _0xef92dc=_0x24e017;if(null==_0x4eae32)return'';if(_0xef92dc(0x227)==typeof _0x4eae32)return _0x4eae32;try{return JSON[_0xef92dc(0x209)](_0x4eae32);}catch{return String(_0x4eae32);}},'levelColor':_0x57fb7c=>e[_0x57fb7c]??_0x24e017(0x20b)}),'mount'(){const _0x538b72=_0x24e017;this[_0x538b72(0x1fa)]();},'template':_0x24e017(0x21e),'style':_0x24e017(0x223)};
|
|
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)};
|