@kedem/okdb 1.0.0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/okdb.js +1 -1
- package/keys/public.pem +3 -0
- package/okdb.js +1 -1
- package/package.json +2 -2
- package/public/admin-app.js +1 -1
- package/public/components/admin-route-host.ok.js +1 -1
- package/public/components/env-picker.ok.js +1 -1
- package/public/components/field-path-input.ok.js +1 -1
- package/public/components/geo-map.ok.js +1 -1
- package/public/components/ok-cron-input.ok.js +1 -1
- package/public/components/ok-dropzone.ok.js +1 -1
- package/public/components/ok-js-input.ok.js +1 -1
- package/public/components/ok-json-input.ok.js +1 -1
- package/public/components/ok-text-monaco-input.ok.js +1 -1
- package/public/components/theme-toggle.ok.js +1 -1
- package/public/login-app.js +1 -1
- package/public/modules/ok.js +1 -1
- package/public/sections/api/parts/api-endpoint.ok.js +1 -1
- package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
- package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
- package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
- package/public/sections/auth/parts/token-detail.ok.js +1 -1
- package/public/sections/auth/parts/token-list.ok.js +1 -1
- package/public/sections/db/modals/add-item-modal.ok.js +1 -1
- package/public/sections/db/modals/create-env-modal.ok.js +1 -1
- package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
- package/public/sections/db/modals/create-index-modal.ok.js +1 -1
- package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
- package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
- package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
- package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
- package/public/sections/db/parts/db-overview.ok.js +1 -1
- package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
- package/public/sections/db/parts/edit-row.ok.js +1 -1
- package/public/sections/db/parts/tm-timeline.ok.js +1 -1
- package/public/sections/db/parts/type-changelog.ok.js +1 -1
- package/public/sections/db/parts/type-list.ok.js +1 -1
- package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
- package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
- package/public/sections/db/parts/type-viewer.ok.js +1 -1
- package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
- package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
- package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
- package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
- package/public/sections/engines/engine-panel-shared-style.js +1 -1
- package/public/sections/engines/engine-ui-utils.js +1 -1
- package/public/sections/engines/modals/engine-modal.ok.js +1 -1
- package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
- package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
- package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
- package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
- package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
- package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
- package/public/sections/files/parts/files-blob-status.ok.js +1 -1
- package/public/sections/files/parts/files-collection-list.ok.js +1 -1
- package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
- package/public/sections/files/parts/files-file-list.ok.js +1 -1
- package/public/sections/files/parts/files-overview.ok.js +1 -1
- package/public/sections/files/parts/files-path-browser.ok.js +1 -1
- package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
- package/public/sections/functions/modals/function-modal.ok.js +1 -1
- package/public/sections/functions/parts/function-detail.ok.js +1 -1
- package/public/sections/functions/parts/function-logs.ok.js +1 -1
- package/public/sections/functions/parts/function-runner.ok.js +1 -1
- package/public/sections/functions/parts/functions-list.ok.js +1 -1
- package/public/sections/license/parts/license-panel.ok.js +1 -1
- package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
- package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
- package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
- package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
- package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
- package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
- package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
- package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
- package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
- package/public/sections/queue/parts/queue-types.ok.js +1 -1
- package/public/sections/queue/parts/queue-workers.ok.js +1 -1
- package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
- package/public/sections/sync/parts/sync-retention.ok.js +1 -1
- package/public/sections/sync/parts/sync-topology.ok.js +1 -1
- package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
- package/public/sections/system/parts/system-api-panel.ok.js +1 -1
- package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
- package/public/sections/system/parts/system-log-history.ok.js +1 -1
- package/public/sections/system/parts/system-log.ok.js +1 -1
- package/public/sections/system/parts/system-status.ok.js +1 -1
- package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
- package/public/sections/views/modals/create-view-modal.ok.js +1 -1
- package/public/sections/views/parts/view-detail.ok.js +1 -1
- package/public/sections/views/parts/views-list.ok.js +1 -1
- package/public/sections/views/parts/views-overview.ok.js +1 -1
- package/public/setup-app.js +1 -1
- package/public/stores/auth-store.js +1 -1
- package/public/stores/events-store.js +1 -1
- package/public/stores/functions-store.js +1 -1
- package/public/stores/okdb-store.js +1 -1
- package/public/stores/theme-store.js +1 -1
- package/public/util/permissions.js +1 -1
- package/public/util/sift-schema.js +1 -1
- package/public/vendor/okjs/ok.esm.min.js +1 -2
- package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
- package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
- package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
- package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
- package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
- package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
- package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
- package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
- package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
- package/public/vendor/okjs/toolkit/manifest.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
- package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
- package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
- package/public/view-models/type-query-vm.js +1 -1
- package/public/images/logo.png +0 -0
- package/public/images/logo.svg +0 -333
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
const _0x3fcb53=_0xb89e;(function(_0x16d553,_0x13fc54){const _0x349870=_0xb89e,_0x566d2b=_0x16d553();while(!![]){try{const _0x2fb71b=parseInt(_0x349870(0x10b))/0x1*(parseInt(_0x349870(0x107))/0x2)+-parseInt(_0x349870(0x10f))/0x3+parseInt(_0x349870(0x10c))/0x4*(parseInt(_0x349870(0x122))/0x5)+parseInt(_0x349870(0x106))/0x6*(parseInt(_0x349870(0x11d))/0x7)+parseInt(_0x349870(0x110))/0x8*(parseInt(_0x349870(0x125))/0x9)+-parseInt(_0x349870(0x111))/0xa+parseInt(_0x349870(0x109))/0xb*(-parseInt(_0x349870(0x117))/0xc);if(_0x2fb71b===_0x13fc54)break;else _0x566d2b['push'](_0x566d2b['shift']());}catch(_0x1f3631){_0x566d2b['push'](_0x566d2b['shift']());}}}(_0x3a07,0xdf04c));import _0x34c9c3 from'../../../stores/events-store.js';function _0xb89e(_0x148ae5,_0x583961){_0x148ae5=_0x148ae5-0x105;const _0x3a0793=_0x3a07();let _0xb89eab=_0x3a0793[_0x148ae5];return _0xb89eab;}import _0x12c0c4 from'../../../stores/okdb-store.js';export default{'tag':_0x3fcb53(0x10d),'context':_0x1560b2=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0x3b951b=_0x3fcb53;this['busy']=!0x0;try{const _0x242fc0=await fetch(_0x12c0c4['apiBase']+'/files?path=/&limit=5000');if(!_0x242fc0['ok'])throw new Error(_0x3b951b(0x11e));const _0x392d2d=await _0x242fc0[_0x3b951b(0x10a)]();this[_0x3b951b(0x121)]=_0x392d2d[_0x3b951b(0x11f)]??[],_0x1560b2[_0x3b951b(0x127)](_0x3b951b(0x118),this[_0x3b951b(0x121)]);}catch(_0x426063){console['error'](_0x3b951b(0x116),_0x426063);}finally{this['busy']=!0x1;}},'clearSelection'(){this['selected']=null;},'select'(_0x1f2dc4){const _0x5d0533=_0x3fcb53;this[_0x5d0533(0x11c)]=_0x1f2dc4,_0x1560b2[_0x5d0533(0x127)](_0x5d0533(0x119),_0x1f2dc4);},get 'dirs'(){const _0x16f4fd=_0x3fcb53,_0x5753c5=new Map();for(const _0x2778e0 of this[_0x16f4fd(0x121)]){const _0x1de08a=(_0x2778e0[_0x16f4fd(0x113)]??'')[_0x16f4fd(0x126)](/^(\/[^/]+)/),_0x1f46bb=_0x1de08a?_0x1de08a[0x1]:'/';_0x5753c5[_0x16f4fd(0x108)](_0x1f46bb,(_0x5753c5[_0x16f4fd(0x114)](_0x1f46bb)??0x0)+0x1);}return[..._0x5753c5[_0x16f4fd(0x112)]()][_0x16f4fd(0x124)]((_0x49b5da,_0x8d131c)=>_0x49b5da[0x0][_0x16f4fd(0x11b)](_0x8d131c[0x0]))['map'](([_0x334d3e,_0x58a702])=>({'path':_0x334d3e,'count':_0x58a702}));},get 'totalFiles'(){const _0x1194a1=_0x3fcb53;return this[_0x1194a1(0x121)][_0x1194a1(0x10e)];}}),async 'mount'(){const _0xe9d3f0=_0x3fcb53;await this['load']();const _0x4dfe79=()=>this[_0xe9d3f0(0x11a)]();this[_0xe9d3f0(0x105)]=[_0x34c9c3['on'](_0xe9d3f0(0x120),_0x4dfe79),_0x34c9c3['on']('files:removed',_0x4dfe79)];},'unmount'(){const _0x1cb9c8=_0x3fcb53;for(const _0xb61621 of this[_0x1cb9c8(0x105)])_0xb61621();this[_0x1cb9c8(0x105)]=[];},'template':_0x3fcb53(0x115),'style':_0x3fcb53(0x123)};function _0x3a07(){const _0x5a20cf=['data','files:uploaded','allFiles','70bZMRpq','\x0a[tag]\x20.dir-row\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x207px;\x0a\x20\x20\x20\x20padding:\x205px\x208px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a}\x0a[tag]\x20.dir-row:hover\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-app-border);\x20}\x0a[tag]\x20.dir-row--on\x20\x20\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-accent);\x20}\x0a','sort','25911EhbIQE','match','$dispatch','_unsubs','254280CsXyXc','2pSNxHO','set','19826609JnbKMA','json','1216682DHWFDH','496076WBocOd','files-path-browser','length','286521tufMes','3848nkBpEw','10376980gDzbmd','entries','path','get','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:6px;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:13px;\x20opacity:.8;\x22>Directories</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:11px;\x20opacity:.7;\x22\x20title=\x22Refresh\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x20&&\x20allFiles.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20padding:4px\x200;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20All\x20Files\x20entry\x20-->\x0a\x20\x20<button\x0a\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27/\x27\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20@click=\x22select(\x27/\x27)\x22\x0a\x20\x20>\x0a\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.6;\x22>📁</span>\x0a\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x22>/\x20(all\x20files)</span>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20</button>\x0a\x0a\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-surface-2);\x20margin:2px\x200;\x22></div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Dir\x20rows\x20-->\x0a\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20dir.path\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22select(dir.path)\x22\x0a\x20\x20\x20\x20\x20\x20:title=\x22dir.path\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.5;\x22>📂</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20dir.path\x20}}\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20dir.count\x20}}</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</each>\x0a\x0a\x20\x20<if\x20:=\x22allFiles.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.35;\x20padding:8px\x200;\x20text-align:center;\x22>No\x20files\x20yet.</div>\x0a\x20\x20</if>\x0a\x0a</div>','files-path-browser\x20load\x20error','24rZDUMw','loaded','select','load','localeCompare','selected','217SPfYYj','failed'];_0x3a07=function(){return _0x5a20cf;};return _0x3a07();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var _0x3660d8=_0x1a5d;function _0x2dc6(){var _0x4c8a85=['path','93lfYuuZ','139335pmThXe','797620ydhfFL','1233848SNyJWw','38404NhtEcE','refresh','48kXMpko','17636vZgPmT','441425PfLhsV','18uACscT','10PqobZJ','files-path-panel','9BcPqqg','1130162QLUDtT'];_0x2dc6=function(){return _0x4c8a85;};return _0x2dc6();}(function(_0x3cabdc,_0xab5c5){var _0x11d3bd=_0x1a5d,_0x11a6a7=_0x3cabdc();while(!![]){try{var _0x3fe518=parseInt(_0x11d3bd(0x1e6))/0x1*(parseInt(_0x11d3bd(0x1dd))/0x2)+parseInt(_0x11d3bd(0x1e2))/0x3*(parseInt(_0x11d3bd(0x1da))/0x4)+-parseInt(_0x11d3bd(0x1db))/0x5+-parseInt(_0x11d3bd(0x1dc))/0x6*(-parseInt(_0x11d3bd(0x1e3))/0x7)+parseInt(_0x11d3bd(0x1e5))/0x8+parseInt(_0x11d3bd(0x1df))/0x9*(parseInt(_0x11d3bd(0x1e4))/0xa)+parseInt(_0x11d3bd(0x1e0))/0xb*(-parseInt(_0x11d3bd(0x1d9))/0xc);if(_0x3fe518===_0xab5c5)break;else _0x11a6a7['push'](_0x11a6a7['shift']());}catch(_0x195173){_0x11a6a7['push'](_0x11a6a7['shift']());}}}(_0x2dc6,0x1e112));function _0x1a5d(_0x28a359,_0x41d609){_0x28a359=_0x28a359-0x1d9;var _0x2dc698=_0x2dc6();var _0x1a5d09=_0x2dc698[_0x28a359];return _0x1a5d09;}import _0x1e5ec4 from'./files-file-list.ok.js';export default{'tag':_0x3660d8(0x1de),'props':[_0x3660d8(0x1e1)],'dependencies':[_0x1e5ec4],'context':_0x40f87e=>({get 'path'(){var _0x12e0eb=_0x3660d8;return _0x40f87e['$attr'][_0x12e0eb(0x1e1)]??'/';},'onRefresh'(){var _0x15465a=_0x3660d8;_0x40f87e['$dispatch'](_0x15465a(0x1e7));}}),'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20height:100%;\x20min-height:0;\x22>\x0a\x20\x20<files-file-list\x20:path=\x22path\x22\x20@refresh=\x22onRefresh()\x22\x20/>\x0a</div>'};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x5c57d5=_0x1392;(function(_0xc0f3a6,_0x15fda4){const _0xb5be61=_0x1392,_0x5e5f2d=_0xc0f3a6();while(!![]){try{const _0x3da97c=parseInt(_0xb5be61(0xac))/0x1*(-parseInt(_0xb5be61(0x9b))/0x2)+-parseInt(_0xb5be61(0x96))/0x3+-parseInt(_0xb5be61(0xa2))/0x4*(parseInt(_0xb5be61(0xa8))/0x5)+parseInt(_0xb5be61(0xbf))/0x6+parseInt(_0xb5be61(0x95))/0x7*(parseInt(_0xb5be61(0x9e))/0x8)+parseInt(_0xb5be61(0xd0))/0x9*(parseInt(_0xb5be61(0xab))/0xa)+-parseInt(_0xb5be61(0xb5))/0xb*(-parseInt(_0xb5be61(0xd1))/0xc);if(_0x3da97c===_0x15fda4)break;else _0x5e5f2d['push'](_0x5e5f2d['shift']());}catch(_0x15850f){_0x5e5f2d['push'](_0x5e5f2d['shift']());}}}(_0x1024,0x4e980));import _0x2fb332 from'./files-upload-panel.ok.js';function _0x1392(_0x3ad14a,_0x1ec894){_0x3ad14a=_0x3ad14a-0x95;const _0x1024de=_0x1024();let _0x139234=_0x1024de[_0x3ad14a];return _0x139234;}function _0x1024(){const _0x340add=['files-file-list','Delete\x20\x22','max','\x22?\x0a\x0aThis\x20will\x20decrement\x20the\x20blob\x20ref-count.','/status','16175FdksXU','#0d9488','error','2987880cqPOdJ','21uzVcdF','#16a34a','zip','\x0a[tag]\x20.file-row\x20{\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-bg);\x20transition:\x20background\x20.1s;\x20}\x0a[tag]\x20.file-row:hover\x20{\x20background:\x20var(--okdb-app-bg-deep);\x20}\x0a','slice','audio/','showUpload','files','refresh','44YyJvUU','#dc2626','startsWith','split','filter','data','$attr','page','pageSize','failed','1934016uutZea','#7c3aed','\x20KB','#0891b2','busy','ceil','2-digit','json','toFixed','catch','filename','$dispatch','path','load','includes','toLocaleTimeString','/files/','18QcVLzF','662352PjgNCM','toLocaleDateString','var(--okdb-mime-default)','_unsubs','7dXcmPx','1768320dewqfb','files:uploaded','message','totalPages','#ca8a04','52342gwtZsU','apiBase','video/','4477160FHvpVO','length','#d97706','endsWith','296aziSMZ'];_0x1024=function(){return _0x340add;};return _0x1024();}import _0xdbf520 from'../../../stores/events-store.js';import _0x906ed5 from'../../../stores/okdb-store.js';export default{'tag':_0x5c57d5(0xa3),'props':[_0x5c57d5(0xcb)],'dependencies':[_0x2fb332],'context':_0x20ea2b=>({'busy':!0x1,'files':[],'error':null,'showUpload':!0x1,'page':0x0,'pageSize':0x32,'totalLoaded':0x0,'_unsubs':[],get 'path'(){const _0x389075=_0x5c57d5;return _0x20ea2b[_0x389075(0xbb)][_0x389075(0xcb)]??'/';},get 'pagedFiles'(){const _0x497964=_0x5c57d5,_0x663d73=this['page']*this[_0x497964(0xbd)];return this[_0x497964(0xb3)]['slice'](_0x663d73,_0x663d73+this[_0x497964(0xbd)]);},get 'totalPages'(){const _0x4548aa=_0x5c57d5;return Math[_0x4548aa(0xa5)](0x1,Math[_0x4548aa(0xc4)](this[_0x4548aa(0xb3)]['length']/this[_0x4548aa(0xbd)]));},get 'hasNext'(){const _0x48d959=_0x5c57d5;return this[_0x48d959(0xbc)]<this[_0x48d959(0x99)]-0x1;},get 'hasPrev'(){const _0x3215f9=_0x5c57d5;return this[_0x3215f9(0xbc)]>0x0;},async 'load'(){const _0x12bdfe=_0x5c57d5,_0x263ef8=_0x20ea2b[_0x12bdfe(0xbb)][_0x12bdfe(0xcb)];if(null!=_0x263ef8){this['busy']=!0x0,this['error']=null;try{const _0x3097ea=_0x906ed5[_0x12bdfe(0x9c)]+'/files?path='+encodeURIComponent(_0x263ef8)+'&recursive=true&limit=2000',_0x10753d=await fetch(_0x3097ea),_0x5996b5=await _0x10753d[_0x12bdfe(0xc6)]();if(!_0x10753d['ok'])throw new Error(_0x5996b5?.[_0x12bdfe(0xaa)]?.[_0x12bdfe(0x98)]||_0x12bdfe(0xbe));this[_0x12bdfe(0xb3)]=_0x5996b5[_0x12bdfe(0xba)]??[],this['page']=0x0;}catch(_0x111248){this[_0x12bdfe(0xaa)]=_0x111248?.[_0x12bdfe(0x98)]||String(_0x111248),this['files']=[];}finally{this[_0x12bdfe(0xc3)]=!0x1;}}else this[_0x12bdfe(0xb3)]=[];},async 'deleteFile'(_0x156df5){const _0x19f526=_0x5c57d5,_0x25ff8b=this[_0x19f526(0xc9)](_0x156df5);if(confirm(_0x19f526(0xa4)+_0x25ff8b+_0x19f526(0xa6)))try{const _0xd931ea=_0x906ed5[_0x19f526(0x9c)],_0x1fef68=await fetch(_0xd931ea+_0x19f526(0xcf)+encodeURIComponent(_0x156df5['id']),{'method':'DELETE'});if(!_0x1fef68['ok']){const _0x55424a=await _0x1fef68[_0x19f526(0xc6)]()[_0x19f526(0xc8)](()=>({}));throw new Error(_0x55424a?.['error']?.[_0x19f526(0x98)]||'Delete\x20failed');}this[_0x19f526(0xb3)]=this[_0x19f526(0xb3)][_0x19f526(0xb9)](_0x591ef3=>_0x591ef3['id']!==_0x156df5['id']),_0x20ea2b[_0x19f526(0xca)](_0x19f526(0xb4));}catch(_0xb73b2d){this[_0x19f526(0xaa)]=_0xb73b2d?.[_0x19f526(0x98)]||String(_0xb73b2d);}},'downloadUrl':_0x49236b=>_0x906ed5[_0x5c57d5(0x9c)]+'/files/'+encodeURIComponent(_0x49236b['id']),'statusUrl':_0x244cde=>_0x906ed5[_0x5c57d5(0x9c)]+_0x5c57d5(0xcf)+encodeURIComponent(_0x244cde['id'])+_0x5c57d5(0xa7),'filename'(_0x365e5c){const _0x51ef0a=_0x5c57d5,_0x27570c=_0x365e5c[_0x51ef0a(0xcb)]??'';return _0x27570c?_0x27570c['split']('/')[_0x51ef0a(0xb9)](Boolean)['pop']():_0x365e5c['id'];},'displayPath'(_0x113883){const _0x22c9eb=_0x5c57d5,_0x3f2b9=_0x113883[_0x22c9eb(0xcb)]??'',_0xafb5c2=_0x20ea2b[_0x22c9eb(0xbb)][_0x22c9eb(0xcb)]??'/';if('/'===_0xafb5c2)return _0x3f2b9||'/';const _0x418d1c=_0xafb5c2[_0x22c9eb(0xa1)]('/')?_0xafb5c2:_0xafb5c2+'/';return _0x3f2b9['startsWith'](_0x418d1c)?_0x3f2b9[_0x22c9eb(0xb0)](_0x418d1c[_0x22c9eb(0x9f)]):_0x3f2b9;},'onUploaded'(){const _0x3dcc3f=_0x5c57d5;this['load'](),_0x20ea2b[_0x3dcc3f(0xca)](_0x3dcc3f(0xb4));},'fmtSize':_0x4bd0bf=>null==_0x4bd0bf?'—':_0x4bd0bf<0x400?_0x4bd0bf+'\x20B':_0x4bd0bf<0x100000?(_0x4bd0bf/0x400)[_0x5c57d5(0xc7)](0x1)+_0x5c57d5(0xc1):(_0x4bd0bf/0x100000)['toFixed'](0x1)+'\x20MB','fmtDate'(_0x904715){const _0x42422e=_0x5c57d5;if(!_0x904715)return'—';const _0x4cc5b1=new Date(_0x904715);return _0x4cc5b1[_0x42422e(0xd2)]()+'\x20'+_0x4cc5b1[_0x42422e(0xce)]([],{'hour':_0x42422e(0xc5),'minute':_0x42422e(0xc5)});},'mimeColor':_0x162bbb=>_0x162bbb?_0x162bbb['startsWith']('image/')?_0x5c57d5(0xc0):_0x162bbb['startsWith'](_0x5c57d5(0x9d))?_0x5c57d5(0xc2):_0x162bbb['startsWith'](_0x5c57d5(0xb1))?_0x5c57d5(0xa9):_0x162bbb[_0x5c57d5(0xb7)]('text/')?_0x5c57d5(0xad):_0x162bbb[_0x5c57d5(0xcd)]('pdf')?_0x5c57d5(0xb6):_0x162bbb[_0x5c57d5(0xcd)](_0x5c57d5(0xc6))||_0x162bbb[_0x5c57d5(0xcd)]('xml')?_0x5c57d5(0xa0):_0x162bbb['includes'](_0x5c57d5(0xae))||_0x162bbb['includes']('tar')?_0x5c57d5(0x9a):_0x5c57d5(0xd3):_0x5c57d5(0xd3),'shortMime'(_0x92cf3b){const _0x43b4a3=_0x5c57d5;if(!_0x92cf3b)return'—';const _0x30a738=_0x92cf3b[_0x43b4a3(0xb8)]('/');return _0x30a738[0x1]??_0x30a738[0x0];},'hashShort':_0x5f3b13=>_0x5f3b13?_0x5f3b13[_0x5c57d5(0xb0)](0x0,0x8)+'…':'—'}),'watch':{'path'(){const _0x1f4d8e=_0x5c57d5;this[_0x1f4d8e(0xb2)]=!0x1,this[_0x1f4d8e(0xbc)]=0x0,this[_0x1f4d8e(0xcc)]();}},async 'mount'(){const _0x303a44=_0x5c57d5;await this[_0x303a44(0xcc)]();const _0x46af62=()=>this[_0x303a44(0xcc)]();this[_0x303a44(0xd4)]=[_0xdbf520['on'](_0x303a44(0x97),_0x46af62),_0xdbf520['on']('files:removed',_0x46af62)];},'unmount'(){const _0x661c7d=_0x5c57d5;for(const _0x1d2e68 of this['_unsubs'])_0x1d2e68();this[_0x661c7d(0xd4)]=[];},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<!--\x20──\x20Toolbar\x20───────────────────────────────────────────────────────\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x20flex-wrap:wrap;\x20margin-bottom:10px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:14px;\x20font-weight:700;\x20color:var(--okdb-accent);\x22>{{\x20path\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>{{\x20files.length\x20}}\x20file(s)</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22showUpload\x20=\x20!showUpload\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22showUpload\x20?\x20\x27font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x27\x20:\x20\x27font-size:12px;\x27\x22\x0a\x20\x20\x20\x20\x20\x20>{{\x20showUpload\x20?\x20\x27✕\x20Close\x20upload\x27\x20:\x20\x27↑\x20Upload\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:12px;\x20opacity:.7;\x22>↻</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Upload\x20panel\x20──────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22showUpload\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20margin-bottom:10px;\x20padding:12px;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<files-upload-panel\x0a\x20\x20\x20\x20\x20\x20\x20\x20:path=\x22path\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@uploaded=\x22onUploaded()\x22\x0a\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Error\x20──────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20color:var(--okdb-danger);\x20font-size:12px;\x20margin-bottom:8px;\x20padding:6px\x2010px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20border-radius:6px;\x20background:var(--okdb-danger-soft-bg);\x22>\x0a\x20\x20\x20\x20\x20\x20{{\x20error\x20}}\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Loading\x20────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.4;\x20padding:8px\x200;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Empty\x20state\x20────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20files.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20display:flex;\x20flex-direction:column;\x20align-items:center;\x20justify-content:center;\x20gap:12px;\x20opacity:.45;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:32px;\x22>📂</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x22>No\x20files\x20under\x20<code>{{\x20path\x20}}</code></div>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22showUpload\x20=\x20true\x22\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20↑\x20Upload\x20a\x20file\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Table\x20──────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22files.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20overflow:auto;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:12px;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead\x20style=\x22position:sticky;\x20top:0;\x20z-index:2;\x20background:var(--okdb-app-bg-deep);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x2010px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Path\x20/\x20Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Type</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Hash</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Uploaded</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:center;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Actions</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20as=\x22repeat\x22\x20:of=\x22pagedFiles\x22\x20let:item=\x22f\x22\x20class=\x22file-row\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Path\x20/\x20name\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x2010px;\x20max-width:300px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:13px;\x20flex-shrink:0;\x22>{{\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27image/\x27)\x20?\x20\x27🖼\x27\x20:\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27video/\x27)\x20?\x20\x27🎬\x27\x20:\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27audio/\x27)\x20?\x20\x27🎵\x27\x20:\x20(f.mime\x20||\x20\x27\x27).includes(\x27pdf\x27)\x20?\x20\x27📄\x27\x20:\x20\x27📎\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x20font-family:monospace;\x20font-size:11px;\x20color:var(--okdb-app-fg-strong);\x22\x20:title=\x22f.path\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20displayPath(f)\x20}}\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\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.3;\x20font-family:monospace;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20f.id\x20?\x20f.id.slice(0,8)\x20:\x20\x27\x27\x20}}…\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</div>\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</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20MIME\x20badge\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27display:inline-block;\x20padding:2px\x207px;\x20border-radius:999px;\x20font-size:10px;\x20font-family:monospace;\x20background:\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x2722;\x20color:\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x27;\x20border:1px\x20solid\x20\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x2744;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20shortMime(f.mime)\x20}}\x0a\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</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Size\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20text-align:right;\x20font-family:monospace;\x20font-size:11px;\x20opacity:.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(f.size)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Hash\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20font-family:monospace;\x20font-size:10px;\x20opacity:.4;\x22\x20:title=\x22f.hash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20hashShort(f.hash)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Date\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20font-size:11px;\x20opacity:.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtDate(f.createdAt)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20text-align:center;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:href=\x22downloadUrl(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:download=\x22filename(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:inline-flex;\x20align-items:center;\x20justify-content:center;\x20width:26px;\x20height:22px;\x20color:var(--okdb-sky);\x20font-size:12px;\x20text-decoration:none;\x20border:1px\x20solid\x20var(--okdb-sky-soft-border);\x20border-radius:4px;\x20margin-right:4px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Download\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>↓</a>\x0a\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@click=\x22deleteFile(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:26px;\x20height:22px;\x20font-size:11px;\x20padding:0;\x20color:var(--okdb-danger);\x20border-color:#5a1e1e44;\x20background:var(--okdb-danger-soft-bg);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Delete\x22\x0a\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</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tbody>\x0a\x20\x20\x20\x20\x20\x20</table>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Pagination\x20────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22ok-pager\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22page--\x22\x20:disabled=\x22!hasPrev\x22>‹\x20Prev</button>\x0a\x20\x20\x20\x20\x20\x20<span>Page\x20{{\x20page\x20+\x201\x20}}\x20/\x20{{\x20totalPages\x20}}\x20·\x20{{\x20files.length\x20}}\x20total</span>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22page++\x22\x20:disabled=\x22!hasNext\x22>Next\x20›</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','style':_0x5c57d5(0xaf)};
|
|
1
|
+
const _0x23188e=_0x488d;(function(_0x10f634,_0x42c6bf){const _0x220021=_0x488d,_0x32936e=_0x10f634();while(!![]){try{const _0x2b3bda=-parseInt(_0x220021(0x1cd))/0x1+-parseInt(_0x220021(0x1f9))/0x2*(parseInt(_0x220021(0x1eb))/0x3)+-parseInt(_0x220021(0x1df))/0x4*(-parseInt(_0x220021(0x1db))/0x5)+parseInt(_0x220021(0x1bd))/0x6*(-parseInt(_0x220021(0x1bf))/0x7)+-parseInt(_0x220021(0x1fc))/0x8*(-parseInt(_0x220021(0x1f4))/0x9)+parseInt(_0x220021(0x1c7))/0xa+parseInt(_0x220021(0x1e5))/0xb*(-parseInt(_0x220021(0x1e6))/0xc);if(_0x2b3bda===_0x42c6bf)break;else _0x32936e['push'](_0x32936e['shift']());}catch(_0x1b2634){_0x32936e['push'](_0x32936e['shift']());}}}(_0x6f97,0xa87e6));function _0x6f97(){const _0x2864b2=['pageSize','20637hFYWuM','tar','includes','files','/status','4Sxcwzk','#ca8a04','2-digit','3824TOObzt','zip','ceil','6vLbEsd','failed','4000738qecYnf','xml','\x22?\x0a\x0aThis\x20will\x20decrement\x20the\x20blob\x20ref-count.','totalPages','DELETE','_unsubs','pop','path','10152160oKtYFN','&recursive=true&limit=2000','page','toLocaleDateString','toLocaleTimeString','error','72304OKmncY','slice','filter','$attr','startsWith','json','/files?path=','catch','split','files-file-list','video/','#dc2626','#7c3aed','busy','385705LpdWhU','#16a34a','var(--okdb-mime-default)','files:removed','68kfgfAH','\x20MB','#0891b2','audio/','length','endsWith','231RprbkY','545796HMQmzR','pdf','refresh','load','message','1700304mIRUMO','/files/','toFixed','image/','filename','\x0a[tag]\x20.file-row\x20{\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-bg);\x20transition:\x20background\x20.1s;\x20}\x0a[tag]\x20.file-row:hover\x20{\x20background:\x20var(--okdb-app-bg-deep);\x20}\x0a','$dispatch','apiBase'];_0x6f97=function(){return _0x2864b2;};return _0x6f97();}import _0xf8a313 from'./files-upload-panel.ok.js';function _0x488d(_0xc92e4f,_0xd4fc4){_0xc92e4f=_0xc92e4f-0x1bc;const _0x6f97c3=_0x6f97();let _0x488d1c=_0x6f97c3[_0xc92e4f];return _0x488d1c;}import _0x47407c from'../../../stores/events-store.js';import _0x1d1981 from'../../../stores/okdb-store.js';export default{'tag':_0x23188e(0x1d6),'props':[_0x23188e(0x1c6)],'dependencies':[_0xf8a313],'context':_0x4f63ba=>({'busy':!0x1,'files':[],'error':null,'showUpload':!0x1,'page':0x0,'pageSize':0x32,'totalLoaded':0x0,'_unsubs':[],get 'path'(){const _0x457185=_0x23188e;return _0x4f63ba['$attr'][_0x457185(0x1c6)]??'/';},get 'pagedFiles'(){const _0x4391fb=_0x23188e,_0x238321=this[_0x4391fb(0x1c9)]*this[_0x4391fb(0x1f3)];return this[_0x4391fb(0x1f7)][_0x4391fb(0x1ce)](_0x238321,_0x238321+this[_0x4391fb(0x1f3)]);},get 'totalPages'(){const _0x311c6a=_0x23188e;return Math['max'](0x1,Math[_0x311c6a(0x1bc)](this[_0x311c6a(0x1f7)][_0x311c6a(0x1e3)]/this[_0x311c6a(0x1f3)]));},get 'hasNext'(){const _0x17b2cb=_0x23188e;return this[_0x17b2cb(0x1c9)]<this[_0x17b2cb(0x1c2)]-0x1;},get 'hasPrev'(){const _0x3c8dbf=_0x23188e;return this[_0x3c8dbf(0x1c9)]>0x0;},async 'load'(){const _0x2488ee=_0x23188e,_0x407683=_0x4f63ba[_0x2488ee(0x1d0)][_0x2488ee(0x1c6)];if(null!=_0x407683){this['busy']=!0x0,this[_0x2488ee(0x1cc)]=null;try{const _0x394caf=_0x1d1981[_0x2488ee(0x1f2)]+_0x2488ee(0x1d3)+encodeURIComponent(_0x407683)+_0x2488ee(0x1c8),_0x189aee=await fetch(_0x394caf),_0x39b547=await _0x189aee[_0x2488ee(0x1d2)]();if(!_0x189aee['ok'])throw new Error(_0x39b547?.[_0x2488ee(0x1cc)]?.[_0x2488ee(0x1ea)]||_0x2488ee(0x1be));this[_0x2488ee(0x1f7)]=_0x39b547['data']??[],this[_0x2488ee(0x1c9)]=0x0;}catch(_0xb1859){this[_0x2488ee(0x1cc)]=_0xb1859?.[_0x2488ee(0x1ea)]||String(_0xb1859),this[_0x2488ee(0x1f7)]=[];}finally{this[_0x2488ee(0x1da)]=!0x1;}}else this['files']=[];},async 'deleteFile'(_0x354f22){const _0x196edf=_0x23188e,_0x58dfda=this[_0x196edf(0x1ef)](_0x354f22);if(confirm('Delete\x20\x22'+_0x58dfda+_0x196edf(0x1c1)))try{const _0x3c813b=_0x1d1981[_0x196edf(0x1f2)],_0x25dfa4=await fetch(_0x3c813b+_0x196edf(0x1ec)+encodeURIComponent(_0x354f22['id']),{'method':_0x196edf(0x1c3)});if(!_0x25dfa4['ok']){const _0x13c925=await _0x25dfa4['json']()[_0x196edf(0x1d4)](()=>({}));throw new Error(_0x13c925?.[_0x196edf(0x1cc)]?.[_0x196edf(0x1ea)]||'Delete\x20failed');}this[_0x196edf(0x1f7)]=this['files'][_0x196edf(0x1cf)](_0x5ec93b=>_0x5ec93b['id']!==_0x354f22['id']),_0x4f63ba['$dispatch'](_0x196edf(0x1e8));}catch(_0x4173b4){this[_0x196edf(0x1cc)]=_0x4173b4?.[_0x196edf(0x1ea)]||String(_0x4173b4);}},'downloadUrl':_0x5afb71=>_0x1d1981[_0x23188e(0x1f2)]+_0x23188e(0x1ec)+encodeURIComponent(_0x5afb71['id']),'statusUrl':_0x2cadbd=>_0x1d1981[_0x23188e(0x1f2)]+_0x23188e(0x1ec)+encodeURIComponent(_0x2cadbd['id'])+_0x23188e(0x1f8),'filename'(_0x5266c6){const _0x2a2c50=_0x23188e,_0x54a0b7=_0x5266c6[_0x2a2c50(0x1c6)]??'';return _0x54a0b7?_0x54a0b7[_0x2a2c50(0x1d5)]('/')['filter'](Boolean)[_0x2a2c50(0x1c5)]():_0x5266c6['id'];},'displayPath'(_0x438c3f){const _0x42d7e9=_0x23188e,_0x194536=_0x438c3f[_0x42d7e9(0x1c6)]??'',_0x51bf3d=_0x4f63ba[_0x42d7e9(0x1d0)]['path']??'/';if('/'===_0x51bf3d)return _0x194536||'/';const _0x316ccb=_0x51bf3d[_0x42d7e9(0x1e4)]('/')?_0x51bf3d:_0x51bf3d+'/';return _0x194536[_0x42d7e9(0x1d1)](_0x316ccb)?_0x194536[_0x42d7e9(0x1ce)](_0x316ccb['length']):_0x194536;},'onUploaded'(){const _0x3ffe7d=_0x23188e;this[_0x3ffe7d(0x1e9)](),_0x4f63ba[_0x3ffe7d(0x1f1)]('refresh');},'fmtSize':_0x19fda4=>null==_0x19fda4?'—':_0x19fda4<0x400?_0x19fda4+'\x20B':_0x19fda4<0x100000?(_0x19fda4/0x400)[_0x23188e(0x1ed)](0x1)+'\x20KB':(_0x19fda4/0x100000)[_0x23188e(0x1ed)](0x1)+_0x23188e(0x1e0),'fmtDate'(_0x47ea7f){const _0xade52=_0x23188e;if(!_0x47ea7f)return'—';const _0x44244e=new Date(_0x47ea7f);return _0x44244e[_0xade52(0x1ca)]()+'\x20'+_0x44244e[_0xade52(0x1cb)]([],{'hour':_0xade52(0x1fb),'minute':_0xade52(0x1fb)});},'mimeColor':_0x387c07=>_0x387c07?_0x387c07['startsWith'](_0x23188e(0x1ee))?_0x23188e(0x1d9):_0x387c07[_0x23188e(0x1d1)](_0x23188e(0x1d7))?_0x23188e(0x1e1):_0x387c07[_0x23188e(0x1d1)](_0x23188e(0x1e2))?'#0d9488':_0x387c07[_0x23188e(0x1d1)]('text/')?_0x23188e(0x1dc):_0x387c07[_0x23188e(0x1f6)](_0x23188e(0x1e7))?_0x23188e(0x1d8):_0x387c07[_0x23188e(0x1f6)](_0x23188e(0x1d2))||_0x387c07[_0x23188e(0x1f6)](_0x23188e(0x1c0))?'#d97706':_0x387c07[_0x23188e(0x1f6)](_0x23188e(0x1fd))||_0x387c07['includes'](_0x23188e(0x1f5))?_0x23188e(0x1fa):_0x23188e(0x1dd):_0x23188e(0x1dd),'shortMime'(_0x12dce4){const _0x36de34=_0x23188e;if(!_0x12dce4)return'—';const _0x8495fd=_0x12dce4[_0x36de34(0x1d5)]('/');return _0x8495fd[0x1]??_0x8495fd[0x0];},'hashShort':_0xbb6b99=>_0xbb6b99?_0xbb6b99[_0x23188e(0x1ce)](0x0,0x8)+'…':'—'}),'watch':{'path'(){const _0x355567=_0x23188e;this['showUpload']=!0x1,this[_0x355567(0x1c9)]=0x0,this[_0x355567(0x1e9)]();}},async 'mount'(){const _0x1c6f8d=_0x23188e;await this[_0x1c6f8d(0x1e9)]();const _0x2a3947=()=>this[_0x1c6f8d(0x1e9)]();this[_0x1c6f8d(0x1c4)]=[_0x47407c['on']('files:uploaded',_0x2a3947),_0x47407c['on'](_0x1c6f8d(0x1de),_0x2a3947)];},'unmount'(){const _0x4d4955=_0x23188e;for(const _0x5f5874 of this[_0x4d4955(0x1c4)])_0x5f5874();this['_unsubs']=[];},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<!--\x20──\x20Toolbar\x20───────────────────────────────────────────────────────\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x20flex-wrap:wrap;\x20margin-bottom:10px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:14px;\x20font-weight:700;\x20color:var(--okdb-accent);\x22>{{\x20path\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>{{\x20files.length\x20}}\x20file(s)</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22showUpload\x20=\x20!showUpload\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22showUpload\x20?\x20\x27font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x27\x20:\x20\x27font-size:12px;\x27\x22\x0a\x20\x20\x20\x20\x20\x20>{{\x20showUpload\x20?\x20\x27✕\x20Close\x20upload\x27\x20:\x20\x27↑\x20Upload\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:12px;\x20opacity:.7;\x22>↻</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Upload\x20panel\x20──────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22showUpload\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20margin-bottom:10px;\x20padding:12px;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<files-upload-panel\x0a\x20\x20\x20\x20\x20\x20\x20\x20:path=\x22path\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@uploaded=\x22onUploaded()\x22\x0a\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Error\x20──────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20color:var(--okdb-danger);\x20font-size:12px;\x20margin-bottom:8px;\x20padding:6px\x2010px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20border-radius:6px;\x20background:var(--okdb-danger-soft-bg);\x22>\x0a\x20\x20\x20\x20\x20\x20{{\x20error\x20}}\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Loading\x20────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.4;\x20padding:8px\x200;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Empty\x20state\x20────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20files.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20display:flex;\x20flex-direction:column;\x20align-items:center;\x20justify-content:center;\x20gap:12px;\x20opacity:.45;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:32px;\x22>📂</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x22>No\x20files\x20under\x20<code>{{\x20path\x20}}</code></div>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22showUpload\x20=\x20true\x22\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20↑\x20Upload\x20a\x20file\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Table\x20──────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22files.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20overflow:auto;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:12px;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead\x20style=\x22position:sticky;\x20top:0;\x20z-index:2;\x20background:var(--okdb-app-bg-deep);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x2010px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Path\x20/\x20Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Type</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Hash</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Uploaded</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:center;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Actions</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20as=\x22repeat\x22\x20:of=\x22pagedFiles\x22\x20let:item=\x22f\x22\x20class=\x22file-row\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Path\x20/\x20name\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x2010px;\x20max-width:300px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:13px;\x20flex-shrink:0;\x22>{{\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27image/\x27)\x20?\x20\x27🖼\x27\x20:\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27video/\x27)\x20?\x20\x27🎬\x27\x20:\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27audio/\x27)\x20?\x20\x27🎵\x27\x20:\x20(f.mime\x20||\x20\x27\x27).includes(\x27pdf\x27)\x20?\x20\x27📄\x27\x20:\x20\x27📎\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x20font-family:monospace;\x20font-size:11px;\x20color:var(--okdb-app-fg-strong);\x22\x20:title=\x22f.path\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20displayPath(f)\x20}}\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\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.3;\x20font-family:monospace;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20f.id\x20?\x20f.id.slice(0,8)\x20:\x20\x27\x27\x20}}…\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</div>\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</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20MIME\x20badge\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27display:inline-block;\x20padding:2px\x207px;\x20border-radius:999px;\x20font-size:10px;\x20font-family:monospace;\x20background:\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x2722;\x20color:\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x27;\x20border:1px\x20solid\x20\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x2744;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20shortMime(f.mime)\x20}}\x0a\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</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Size\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20text-align:right;\x20font-family:monospace;\x20font-size:11px;\x20opacity:.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(f.size)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Hash\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20font-family:monospace;\x20font-size:10px;\x20opacity:.4;\x22\x20:title=\x22f.hash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20hashShort(f.hash)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Date\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20font-size:11px;\x20opacity:.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtDate(f.createdAt)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20text-align:center;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:href=\x22downloadUrl(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:download=\x22filename(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:inline-flex;\x20align-items:center;\x20justify-content:center;\x20width:26px;\x20height:22px;\x20color:var(--okdb-sky);\x20font-size:12px;\x20text-decoration:none;\x20border:1px\x20solid\x20var(--okdb-sky-soft-border);\x20border-radius:4px;\x20margin-right:4px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Download\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>↓</a>\x0a\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@click=\x22deleteFile(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:26px;\x20height:22px;\x20font-size:11px;\x20padding:0;\x20color:var(--okdb-danger);\x20border-color:#5a1e1e44;\x20background:var(--okdb-danger-soft-bg);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Delete\x22\x0a\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</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tbody>\x0a\x20\x20\x20\x20\x20\x20</table>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Pagination\x20────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22ok-pager\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22page--\x22\x20:disabled=\x22!hasPrev\x22>‹\x20Prev</button>\x0a\x20\x20\x20\x20\x20\x20<span>Page\x20{{\x20page\x20+\x201\x20}}\x20/\x20{{\x20totalPages\x20}}\x20·\x20{{\x20files.length\x20}}\x20total</span>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22page++\x22\x20:disabled=\x22!hasNext\x22>Next\x20›</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','style':_0x23188e(0x1f0)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x583597=_0x3974;(function(_0x271a86,_0x43e3a1){const _0x6c78b9=_0x3974,_0xe2b1c8=_0x271a86();while(!![]){try{const _0xad8a9f=-parseInt(_0x6c78b9(0xe1))/0x1+parseInt(_0x6c78b9(0xd6))/0x2+parseInt(_0x6c78b9(0xf3))/0x3+-parseInt(_0x6c78b9(0xdf))/0x4*(parseInt(_0x6c78b9(0xee))/0x5)+-parseInt(_0x6c78b9(0xd3))/0x6+-parseInt(_0x6c78b9(0xef))/0x7*(-parseInt(_0x6c78b9(0xe3))/0x8)+-parseInt(_0x6c78b9(0xe8))/0x9*(-parseInt(_0x6c78b9(0xde))/0xa);if(_0xad8a9f===_0x43e3a1)break;else _0xe2b1c8['push'](_0xe2b1c8['shift']());}catch(_0x21de24){_0xe2b1c8['push'](_0xe2b1c8['shift']());}}}(_0x405d,0xbc03a));export default{'tag':_0x583597(0xcf),'props':['files'],'context':_0x284fe1=>({get 'files'(){const _0x15dd49=_0x583597;return _0x284fe1[_0x15dd49(0xea)][_0x15dd49(0xf1)]??[];},get 'totalFiles'(){const _0xf2f8b2=_0x583597;return this[_0xf2f8b2(0xf1)][_0xf2f8b2(0xd5)];},get 'dirs'(){const _0x1e76ea=_0x583597,_0x14a430=new Set();for(const _0x184d04 of this[_0x1e76ea(0xf1)]){const _0x35e6f6=(_0x184d04['path']??'')[_0x1e76ea(0xdd)](/^(\/[^/]+)\//);_0x35e6f6&&_0x14a430[_0x1e76ea(0xe0)](_0x35e6f6[0x1]);}return[..._0x14a430][_0x1e76ea(0xd1)]();},get 'totalBytes'(){const _0x2bf79f=_0x583597;return this[_0x2bf79f(0xf1)][_0x2bf79f(0xe6)]((_0x3104a5,_0x2d4c28)=>_0x3104a5+(_0x2d4c28[_0x2bf79f(0xdc)]??0x0),0x0);},get 'mimeBreakdown'(){const _0x354e78=_0x583597,_0x13af41={};for(const _0x538ccf of this[_0x354e78(0xf1)]){const _0x31af76=_0x538ccf['mime']??_0x354e78(0xd2),_0x4fc3ee=_0x31af76['startsWith'](_0x354e78(0xf2))?_0x354e78(0xf0):_0x31af76[_0x354e78(0xeb)](_0x354e78(0xe4))?_0x354e78(0xd7):_0x31af76[_0x354e78(0xeb)](_0x354e78(0xce))?_0x354e78(0xe9):_0x31af76['startsWith'](_0x354e78(0xe7))?_0x354e78(0xe2):_0x31af76[_0x354e78(0xec)]('pdf')?'pdf':_0x354e78(0xd2);_0x13af41[_0x4fc3ee]=(_0x13af41[_0x4fc3ee]??0x0)+0x1;}return Object[_0x354e78(0xda)](_0x13af41)[_0x354e78(0xd1)]((_0x26d04f,_0xb2b4be)=>_0xb2b4be[0x1]-_0x26d04f[0x1])[_0x354e78(0xd4)](([_0x4e4271,_0x386afb])=>({'cat':_0x4e4271,'count':_0x386afb}));},'mimeIcon':_0x428753=>({'image':'🖼','video':'🎬','audio':'🎵','text':'📝','pdf':'📄','other':'📎'}[_0x428753]??'📎'),'fmtBytes':_0x33955b=>_0x33955b<0x400?_0x33955b+'\x20B':_0x33955b<0x100000?(_0x33955b/0x400)[_0x583597(0xe5)](0x1)+_0x583597(0xdb):_0x33955b<0x40000000?(_0x33955b/0x100000)[_0x583597(0xe5)](0x1)+'\x20MB':(_0x33955b/0x40000000)[_0x583597(0xe5)](0x2)+_0x583597(0xd9),'browseTo'(_0x109be8){const _0x470567=_0x583597;_0x284fe1[_0x470567(0xd8)]('select',_0x109be8);}}),'template':_0x583597(0xd0),'style':_0x583597(0xed)};function _0x3974(_0xabd05b,_0x4d2d63){_0xabd05b=_0xabd05b-0xce;const _0x405d1d=_0x405d();let _0x397437=_0x405d1d[_0xabd05b];return _0x397437;}function _0x405d(){const _0x38134b=['toFixed','reduce','text/','4652703UVekMg','audio','$attr','startsWith','includes','\x0a[tag]\x20.stat-card\x20{\x0a\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20min-width:\x20120px;\x0a\x20\x20\x20\x20padding:\x2014px\x2016px;\x0a\x20\x20\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20\x20\x20border-radius:\x2010px;\x0a}\x0a[tag]\x20.stat-label\x20{\x0a\x20\x20\x20\x20font-size:\x2010px;\x0a\x20\x20\x20\x20opacity:\x20.5;\x0a\x20\x20\x20\x20text-transform:\x20uppercase;\x0a\x20\x20\x20\x20letter-spacing:\x20.06em;\x0a\x20\x20\x20\x20margin-bottom:\x206px;\x0a}\x0a[tag]\x20.stat-value\x20{\x0a\x20\x20\x20\x20font-size:\x2026px;\x0a\x20\x20\x20\x20font-weight:\x20700;\x0a}\x0a[tag]\x20.stat-sub\x20{\x0a\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20opacity:\x20.4;\x0a\x20\x20\x20\x20margin-top:\x202px;\x0a}\x0a[tag]\x20.dir-btn\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x208px;\x0a\x20\x20\x20\x20padding:\x206px\x2010px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a}\x0a[tag]\x20.dir-btn:hover\x20{\x0a\x20\x20\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20border-color:\x20var(--okdb-app-border);\x0a}\x0a','695xAabqA','14ngQRqL','image','files','image/','83490qToPDN','audio/','files-overview','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:20px;\x20max-width:680px;\x22>\x0a\x0a\x20\x20<div\x20style=\x22font-weight:700;\x20font-size:18px;\x20opacity:.9;\x22>Files</div>\x0a\x0a\x20\x20<!--\x20Stats\x20row\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:12px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stat-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>Total\x20Files</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-value\x22\x20style=\x22color:var(--okdb-info);\x22>{{\x20totalFiles\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-sub\x22>{{\x20fmtBytes(totalBytes)\x20}}</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22stat-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>Directories</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-value\x22\x20style=\x22color:var(--okdb-accent-2);\x22>{{\x20dirs.length\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-sub\x22>top-level</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<if\x20:=\x22mimeBreakdown.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-card\x22\x20style=\x22flex:2;\x20min-width:180px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>By\x20type</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:6px;\x20margin-top:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22mimeBreakdown\x22\x20let:item=\x22m\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-radius:999px;\x20background:var(--okdb-app-surface);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.8;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20mimeIcon(m.cat)\x20}}\x20{{\x20m.cat\x20}}\x20<span\x20style=\x22opacity:.5;\x22>{{\x20m.count\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Directory\x20list\x20with\x20click-through\x20-->\x0a\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x20margin-bottom:8px;\x20text-transform:uppercase;\x20letter-spacing:.06em;\x22>Directories</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:3px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22dir-btn\x22\x20@click=\x22browseTo(\x27/\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.5;\x22>📁</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x22>/\x20(all\x20files)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22margin-left:auto;\x20font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22dir-btn\x22\x20@click=\x22browseTo(dir)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.4;\x22>📂</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x22>{{\x20dir\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22margin-left:auto;\x20font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20files.filter(f\x20=>\x20(f.path\x20||\x20\x27\x27).startsWith(dir\x20+\x20\x27/\x27)).length\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\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<!--\x20Empty\x20state\x20-->\x0a\x20\x20<if\x20:=\x22totalFiles\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22padding:24px;\x20background:var(--okdb-app-bg);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:10px;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20align-items:center;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:32px;\x20opacity:.5;\x22>📂</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20font-weight:600;\x20opacity:.8;\x22>No\x20files\x20yet</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.55;\x20line-height:1.8;\x20max-width:340px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Select\x20<strong\x20style=\x22color:var(--okdb-sky);\x22>/\x20(all\x20files)</strong>\x20in\x20the\x20sidebar,\x0a\x20\x20\x20\x20\x20\x20\x20\x20then\x20click\x20<strong\x20style=\x22color:var(--okdb-sky);\x22>↑\x20Upload</strong>\x20to\x20add\x20files.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Files\x20are\x20organised\x20by\x20path,\x20e.g.\x20<code\x20style=\x22color:#a5f3fc;\x22>/photos/cat.jpg</code>.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22browseTo(\x27/\x27)\x22\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x20margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Browse\x20/\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','sort','other','5261922uwKsNJ','map','length','1428934zKkAuS','video','$dispatch','\x20GB','entries','\x20KB','size','match','40IVhzrZ','42244XDkhjw','add','476907bmPjiQ','text','3127256RaZeaL','video/'];_0x405d=function(){return _0x38134b;};return _0x405d();}
|
|
1
|
+
function _0x541d(_0x53dedb,_0x3b1e38){_0x53dedb=_0x53dedb-0x6b;const _0x459f2e=_0x459f();let _0x541dd6=_0x459f2e[_0x53dedb];return _0x541dd6;}const _0x31b3d3=_0x541d;(function(_0x4f386f,_0x220bbe){const _0x32e8f9=_0x541d,_0x22b264=_0x4f386f();while(!![]){try{const _0x3c2090=parseInt(_0x32e8f9(0x89))/0x1*(parseInt(_0x32e8f9(0x77))/0x2)+parseInt(_0x32e8f9(0x83))/0x3+parseInt(_0x32e8f9(0x6b))/0x4*(parseInt(_0x32e8f9(0x79))/0x5)+-parseInt(_0x32e8f9(0x7b))/0x6*(-parseInt(_0x32e8f9(0x7e))/0x7)+-parseInt(_0x32e8f9(0x7c))/0x8*(parseInt(_0x32e8f9(0x7f))/0x9)+-parseInt(_0x32e8f9(0x7d))/0xa+parseInt(_0x32e8f9(0x73))/0xb;if(_0x3c2090===_0x220bbe)break;else _0x22b264['push'](_0x22b264['shift']());}catch(_0x123f10){_0x22b264['push'](_0x22b264['shift']());}}}(_0x459f,0xbb62a));function _0x459f(){const _0x51c73a=['toFixed','$attr','9707EkUuYT','other','length','\x0a[tag]\x20.stat-card\x20{\x0a\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20min-width:\x20120px;\x0a\x20\x20\x20\x20padding:\x2014px\x2016px;\x0a\x20\x20\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20\x20\x20border-radius:\x2010px;\x0a}\x0a[tag]\x20.stat-label\x20{\x0a\x20\x20\x20\x20font-size:\x2010px;\x0a\x20\x20\x20\x20opacity:\x20.5;\x0a\x20\x20\x20\x20text-transform:\x20uppercase;\x0a\x20\x20\x20\x20letter-spacing:\x20.06em;\x0a\x20\x20\x20\x20margin-bottom:\x206px;\x0a}\x0a[tag]\x20.stat-value\x20{\x0a\x20\x20\x20\x20font-size:\x2026px;\x0a\x20\x20\x20\x20font-weight:\x20700;\x0a}\x0a[tag]\x20.stat-sub\x20{\x0a\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20opacity:\x20.4;\x0a\x20\x20\x20\x20margin-top:\x202px;\x0a}\x0a[tag]\x20.dir-btn\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x208px;\x0a\x20\x20\x20\x20padding:\x206px\x2010px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a}\x0a[tag]\x20.dir-btn:hover\x20{\x0a\x20\x20\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20border-color:\x20var(--okdb-app-border);\x0a}\x0a','video','100XnCkjD','add','match','size','includes','files','\x20GB','audio','6977960AtyWom','select','entries','sort','148woyeBd','text/','69490OOVrYM','path','6zEkZzA','12736KwhGYM','10528470THkInz','306719yjxGZY','1251odzRyY','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:20px;\x20max-width:680px;\x22>\x0a\x0a\x20\x20<div\x20style=\x22font-weight:700;\x20font-size:18px;\x20opacity:.9;\x22>Files</div>\x0a\x0a\x20\x20<!--\x20Stats\x20row\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:12px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stat-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>Total\x20Files</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-value\x22\x20style=\x22color:var(--okdb-info);\x22>{{\x20totalFiles\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-sub\x22>{{\x20fmtBytes(totalBytes)\x20}}</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22stat-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>Directories</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-value\x22\x20style=\x22color:var(--okdb-accent-2);\x22>{{\x20dirs.length\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-sub\x22>top-level</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<if\x20:=\x22mimeBreakdown.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-card\x22\x20style=\x22flex:2;\x20min-width:180px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>By\x20type</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:6px;\x20margin-top:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22mimeBreakdown\x22\x20let:item=\x22m\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-radius:999px;\x20background:var(--okdb-app-surface);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.8;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20mimeIcon(m.cat)\x20}}\x20{{\x20m.cat\x20}}\x20<span\x20style=\x22opacity:.5;\x22>{{\x20m.count\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Directory\x20list\x20with\x20click-through\x20-->\x0a\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x20margin-bottom:8px;\x20text-transform:uppercase;\x20letter-spacing:.06em;\x22>Directories</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:3px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22dir-btn\x22\x20@click=\x22browseTo(\x27/\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.5;\x22>📁</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x22>/\x20(all\x20files)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22margin-left:auto;\x20font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22dir-btn\x22\x20@click=\x22browseTo(dir)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.4;\x22>📂</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x22>{{\x20dir\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22margin-left:auto;\x20font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20files.filter(f\x20=>\x20(f.path\x20||\x20\x27\x27).startsWith(dir\x20+\x20\x27/\x27)).length\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\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<!--\x20Empty\x20state\x20-->\x0a\x20\x20<if\x20:=\x22totalFiles\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22padding:24px;\x20background:var(--okdb-app-bg);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:10px;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20align-items:center;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:32px;\x20opacity:.5;\x22>📂</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20font-weight:600;\x20opacity:.8;\x22>No\x20files\x20yet</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.55;\x20line-height:1.8;\x20max-width:340px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Select\x20<strong\x20style=\x22color:var(--okdb-sky);\x22>/\x20(all\x20files)</strong>\x20in\x20the\x20sidebar,\x0a\x20\x20\x20\x20\x20\x20\x20\x20then\x20click\x20<strong\x20style=\x22color:var(--okdb-sky);\x22>↑\x20Upload</strong>\x20to\x20add\x20files.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Files\x20are\x20organised\x20by\x20path,\x20e.g.\x20<code\x20style=\x22color:#a5f3fc;\x22>/photos/cat.jpg</code>.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22browseTo(\x27/\x27)\x22\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x20margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Browse\x20/\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','text','reduce','893160HVtVnY','pdf','startsWith','map'];_0x459f=function(){return _0x51c73a;};return _0x459f();}export default{'tag':'files-overview','props':[_0x31b3d3(0x70)],'context':_0xe37cc8=>({get 'files'(){const _0x193bfb=_0x31b3d3;return _0xe37cc8[_0x193bfb(0x88)][_0x193bfb(0x70)]??[];},get 'totalFiles'(){const _0x4aed67=_0x31b3d3;return this[_0x4aed67(0x70)][_0x4aed67(0x8b)];},get 'dirs'(){const _0x51af07=_0x31b3d3,_0x3a30e5=new Set();for(const _0x3440ce of this[_0x51af07(0x70)]){const _0xc71139=(_0x3440ce[_0x51af07(0x7a)]??'')[_0x51af07(0x6d)](/^(\/[^/]+)\//);_0xc71139&&_0x3a30e5[_0x51af07(0x6c)](_0xc71139[0x1]);}return[..._0x3a30e5][_0x51af07(0x76)]();},get 'totalBytes'(){const _0x2d3134=_0x31b3d3;return this[_0x2d3134(0x70)][_0x2d3134(0x82)]((_0x25a4e3,_0xa31744)=>_0x25a4e3+(_0xa31744[_0x2d3134(0x6e)]??0x0),0x0);},get 'mimeBreakdown'(){const _0x2d0fa0=_0x31b3d3,_0x2c92b6={};for(const _0x14dfb2 of this['files']){const _0x3d2baf=_0x14dfb2['mime']??_0x2d0fa0(0x8a),_0x12fa68=_0x3d2baf[_0x2d0fa0(0x85)]('image/')?'image':_0x3d2baf[_0x2d0fa0(0x85)]('video/')?_0x2d0fa0(0x8d):_0x3d2baf[_0x2d0fa0(0x85)]('audio/')?_0x2d0fa0(0x72):_0x3d2baf[_0x2d0fa0(0x85)](_0x2d0fa0(0x78))?_0x2d0fa0(0x81):_0x3d2baf[_0x2d0fa0(0x6f)](_0x2d0fa0(0x84))?_0x2d0fa0(0x84):_0x2d0fa0(0x8a);_0x2c92b6[_0x12fa68]=(_0x2c92b6[_0x12fa68]??0x0)+0x1;}return Object[_0x2d0fa0(0x75)](_0x2c92b6)[_0x2d0fa0(0x76)]((_0x1dc2f3,_0x1715b6)=>_0x1715b6[0x1]-_0x1dc2f3[0x1])[_0x2d0fa0(0x86)](([_0x452315,_0x41ffb5])=>({'cat':_0x452315,'count':_0x41ffb5}));},'mimeIcon':_0x4f804c=>({'image':'🖼','video':'🎬','audio':'🎵','text':'📝','pdf':'📄','other':'📎'}[_0x4f804c]??'📎'),'fmtBytes':_0x415c78=>_0x415c78<0x400?_0x415c78+'\x20B':_0x415c78<0x100000?(_0x415c78/0x400)[_0x31b3d3(0x87)](0x1)+'\x20KB':_0x415c78<0x40000000?(_0x415c78/0x100000)[_0x31b3d3(0x87)](0x1)+'\x20MB':(_0x415c78/0x40000000)[_0x31b3d3(0x87)](0x2)+_0x31b3d3(0x71),'browseTo'(_0x19d346){const _0x4eb302=_0x31b3d3;_0xe37cc8['$dispatch'](_0x4eb302(0x74),_0x19d346);}}),'template':_0x31b3d3(0x80),'style':_0x31b3d3(0x8c)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0xa9d93d=_0x5163;(function(_0x18f546,_0x17a370){const _0x5e3944=_0x5163,_0x287f87=_0x18f546();while(!![]){try{const _0x293894=-parseInt(_0x5e3944(0x1f9))/0x1+-parseInt(_0x5e3944(0x1f2))/0x2+parseInt(_0x5e3944(0x20f))/0x3*(parseInt(_0x5e3944(0x1fd))/0x4)+parseInt(_0x5e3944(0x207))/0x5+parseInt(_0x5e3944(0x216))/0x6+parseInt(_0x5e3944(0x205))/0x7*(parseInt(_0x5e3944(0x208))/0x8)+parseInt(_0x5e3944(0x1fc))/0x9;if(_0x293894===_0x17a370)break;else _0x287f87['push'](_0x287f87['shift']());}catch(_0x2a831d){_0x287f87['push'](_0x287f87['shift']());}}}(_0x1dd5,0xdfcf6));function _0x1dd5(){const _0x4f0df4=['files-path-browser\x20load\x20error','7HSrtlq','files:removed','1419240vAZxOS','1722088fXJXwm','_unsubs','\x20KB','files-path-browser','$watch','\x0a[tag]\x20.dir-row\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x206px;\x0a\x20\x20\x20\x20padding:\x205px\x208px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20text-align:\x20left;\x0a\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a}\x0a[tag]\x20.dir-row:hover\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-app-border);\x20}\x0a[tag]\x20.dir-row--on\x20\x20\x20\x20{\x20background:\x20var(--okdb-accent-soft-bg);\x20border-color:\x20var(--okdb-accent-soft-border);\x20color:\x20var(--okdb-accent);\x20}\x0a','loaded','759621abBMqB','error','localeCompare','size','busy','sort','set','1280484zMwCmJ','path','selected','\x20MB','reduce','selectedEnv','1438132rhiBeq','get','\x20GB','allFiles','load','data','select','948638NUVsSp','json','/files?path=/&recursive=true&limit=5000','5452848XwNOZb','20qacovq','$dispatch','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x20height:100%;\x20min-height:0;\x20overflow:hidden;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:6px;\x20margin-bottom:6px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:13px;\x20opacity:.8;\x22>Files</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:11px;\x20opacity:.6;\x22\x20title=\x22Refresh\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Summary\x20-->\x0a\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20margin-bottom:4px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20{{\x20totalFiles\x20}}\x20file(s)\x20·\x20{{\x20totalBytes()\x20}}\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x20&&\x20allFiles.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20padding:4px\x200;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Scrollable\x20dir\x20list\x20-->\x0a\x20\x20<div\x20style=\x22flex:1;\x20overflow-y:auto;\x20overflow-x:hidden;\x20display:flex;\x20flex-direction:column;\x20gap:2px;\x20min-height:0;\x22>\x0a\x0a\x20\x20\x20\x20<!--\x20All\x20Files\x20row\x20-->\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27/\x27\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22select(\x27/\x27)\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:11px;\x20opacity:.5;\x22>📁</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20font-family:monospace;\x22>/</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.35;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-surface-2);\x20margin:4px\x202px;\x22></div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20Per-dir\x20rows\x20-->\x0a\x20\x20\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20dir.path\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22select(dir.path)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22dir.path\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:11px;\x20opacity:.4;\x22>📂</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20font-family:monospace;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20dir.path\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.35;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20dir.count\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22allFiles.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.3;\x20padding:12px\x200;\x20text-align:center;\x20line-height:1.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20No\x20files\x20yet.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x22>Select\x20/\x20and\x20upload.</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20</div>\x0a\x0a</div>','toFixed','failed','apiBase','length'];_0x1dd5=function(){return _0x4f0df4;};return _0x1dd5();}import _0x4dad3f from'../../../stores/events-store.js';function _0x5163(_0x19e774,_0x35638d){_0x19e774=_0x19e774-0x1f0;const _0x1dd521=_0x1dd5();let _0x516366=_0x1dd521[_0x19e774];return _0x516366;}import _0x102bd6 from'../../../stores/okdb-store.js';export default{'tag':_0xa9d93d(0x20b),'context':_0xc72e5c=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0x9dc9ae=_0xa9d93d;this[_0x9dc9ae(0x213)]=!0x0;try{const _0x367e5d=_0x102bd6[_0x9dc9ae(0x202)],_0x3adcd0=await fetch(_0x367e5d+_0x9dc9ae(0x1fb));if(!_0x3adcd0['ok'])throw new Error(_0x9dc9ae(0x201));const _0x10ba01=await _0x3adcd0[_0x9dc9ae(0x1fa)]();this['allFiles']=_0x10ba01[_0x9dc9ae(0x1f7)]??[],_0xc72e5c[_0x9dc9ae(0x1fe)](_0x9dc9ae(0x20e),this[_0x9dc9ae(0x1f5)]);}catch(_0xeaf703){console[_0x9dc9ae(0x210)](_0x9dc9ae(0x204),_0xeaf703);}finally{this['busy']=!0x1;}},'clearSelection'(){const _0x4cc48f=_0xa9d93d;this[_0x4cc48f(0x218)]=null;},'select'(_0x371199){const _0x3e7670=_0xa9d93d;this[_0x3e7670(0x218)]=_0x371199,_0xc72e5c[_0x3e7670(0x1fe)](_0x3e7670(0x1f8),_0x371199);},get 'dirs'(){const _0xaa06eb=_0xa9d93d,_0x2d08fe=new Map();for(const _0x426cb1 of this['allFiles']){const _0x24d375=(_0x426cb1[_0xaa06eb(0x217)]??'')['match'](/^(\/[^/]+)\//);if(!_0x24d375)continue;const _0x16f2b9=_0x24d375[0x1];_0x2d08fe[_0xaa06eb(0x215)](_0x16f2b9,(_0x2d08fe[_0xaa06eb(0x1f3)](_0x16f2b9)??0x0)+0x1);}return[..._0x2d08fe['entries']()][_0xaa06eb(0x214)]((_0x2cc01d,_0xd8b63a)=>_0x2cc01d[0x0][_0xaa06eb(0x211)](_0xd8b63a[0x0]))['map'](([_0x2e291b,_0x598366])=>({'path':_0x2e291b,'count':_0x598366}));},get 'totalFiles'(){const _0x45817b=_0xa9d93d;return this['allFiles'][_0x45817b(0x203)];},'totalBytes'(){const _0x31224a=_0xa9d93d,_0x104236=this[_0x31224a(0x1f5)][_0x31224a(0x1f0)]((_0x224659,_0x4d503e)=>_0x224659+(_0x4d503e[_0x31224a(0x212)]??0x0),0x0);return _0x104236<0x400?_0x104236+'\x20B':_0x104236<0x100000?(_0x104236/0x400)[_0x31224a(0x200)](0x1)+_0x31224a(0x20a):_0x104236<0x40000000?(_0x104236/0x100000)[_0x31224a(0x200)](0x1)+_0x31224a(0x219):(_0x104236/0x40000000)['toFixed'](0x2)+_0x31224a(0x1f4);}}),async 'mount'(_0x12d57d){const _0x3b973d=_0xa9d93d;await this[_0x3b973d(0x1f6)]();const _0x54fd5e=()=>this[_0x3b973d(0x1f6)]();this[_0x3b973d(0x209)]=[_0x4dad3f['on']('files:uploaded',_0x54fd5e),_0x4dad3f['on'](_0x3b973d(0x206),_0x54fd5e)],_0x12d57d[_0x3b973d(0x20c)](()=>_0x102bd6[_0x3b973d(0x1f1)],()=>{const _0x3f8fc4=_0x3b973d;this[_0x3f8fc4(0x218)]=null,this[_0x3f8fc4(0x1f6)]();});},'unmount'(){const _0x5b771e=_0xa9d93d;for(const _0x628f3f of this['_unsubs'])_0x628f3f();this[_0x5b771e(0x209)]=[];},'template':_0xa9d93d(0x1ff),'style':_0xa9d93d(0x20d)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function _0x4771(_0x25295b,_0x17ff4e){_0x25295b=_0x25295b-0x7a;const _0x28ee8f=_0x28ee();let _0x4771de=_0x28ee8f[_0x25295b];return _0x4771de;}const _0x46a9de=_0x4771;(function(_0xdfc63,_0x2bacb5){const _0x277da7=_0x4771,_0x29cdc2=_0xdfc63();while(!![]){try{const _0x2abd9e=parseInt(_0x277da7(0x87))/0x1*(parseInt(_0x277da7(0x86))/0x2)+-parseInt(_0x277da7(0x9f))/0x3+-parseInt(_0x277da7(0x85))/0x4*(-parseInt(_0x277da7(0x81))/0x5)+-parseInt(_0x277da7(0x88))/0x6*(parseInt(_0x277da7(0x7f))/0x7)+parseInt(_0x277da7(0xa3))/0x8+-parseInt(_0x277da7(0x8f))/0x9+parseInt(_0x277da7(0x99))/0xa*(parseInt(_0x277da7(0x91))/0xb);if(_0x2abd9e===_0x2bacb5)break;else _0x29cdc2['push'](_0x29cdc2['shift']());}catch(_0xc431aa){_0x29cdc2['push'](_0x29cdc2['shift']());}}}(_0x28ee,0x4d984));import _0x407361 from'../../../components/ok-dropzone.ok.js';import _0x39b8bc from'../../../stores/okdb-store.js';export default{'tag':'files-upload-panel','props':[_0x46a9de(0x83)],'dependencies':[_0x407361],'context':_0x54dd0b=>({'queue':[],get 'path'(){const _0x21ea8c=_0x46a9de;return _0x54dd0b[_0x21ea8c(0x8b)][_0x21ea8c(0x83)]||'/';},'onFilesDropped'(_0x5adc14){const _0x2d5ead=_0x46a9de,{files:_0x46a219}=_0x5adc14[_0x2d5ead(0xab)];for(const _0x30f01e of _0x46a219)this[_0x2d5ead(0x8e)]['push']({'file':_0x30f01e,'relativePath':_0x30f01e[_0x2d5ead(0x84)]||_0x30f01e[_0x2d5ead(0xa7)],'status':'pending','error':null,'record':null});this[_0x2d5ead(0x9c)]();},'onBrowse'(){const _0x4bbd4f=_0x46a9de,_0x397b54=document[_0x4bbd4f(0x96)](_0x4bbd4f(0x7b));_0x397b54[_0x4bbd4f(0x9a)]='file',_0x397b54['multiple']=!0x0,_0x397b54['onchange']=()=>{const _0xa50d37=_0x4bbd4f;for(const _0x40fc8a of Array[_0xa50d37(0x8d)](_0x397b54[_0xa50d37(0x7c)]))this[_0xa50d37(0x8e)]['push']({'file':_0x40fc8a,'relativePath':_0x40fc8a['name'],'status':_0xa50d37(0x9e),'error':null,'record':null});this[_0xa50d37(0x9c)]();},_0x397b54[_0x4bbd4f(0x97)]();},'_uploading':!0x1,async '_flush'(){const _0x51c230=_0x46a9de;if(!this[_0x51c230(0xa4)]){this[_0x51c230(0xa4)]=!0x0;try{let _0x154427;for(;_0x154427=this[_0x51c230(0x8e)][_0x51c230(0x98)](_0x309d7f=>_0x51c230(0x9e)===_0x309d7f['status']);)await this[_0x51c230(0x7d)](_0x154427);}finally{this[_0x51c230(0xa4)]=!0x1;}}},async '_uploadOne'(_0xaa233b){const _0x6fe2a=_0x46a9de;_0xaa233b[_0x6fe2a(0xa5)]='uploading';const _0x523306=_0x54dd0b[_0x6fe2a(0x8b)][_0x6fe2a(0x83)]||'/';try{const _0x3be9a7=(_0xaa233b[_0x6fe2a(0x84)]||_0xaa233b[_0x6fe2a(0xa1)]['name'])['replace'](/^\//,''),_0x560a9e=(_0x523306[_0x6fe2a(0xa0)]('/')?_0x523306:_0x523306+'/')+_0x3be9a7,_0x398307=await fetch(_0x39b8bc[_0x6fe2a(0x9b)]+'/files?path='+encodeURIComponent(_0x560a9e),{'method':'POST','headers':{'content-type':_0xaa233b[_0x6fe2a(0xa1)][_0x6fe2a(0x9a)]||_0x6fe2a(0x7a),'content-length':String(_0xaa233b[_0x6fe2a(0xa1)][_0x6fe2a(0xa8)])},'body':_0xaa233b['file']}),_0x281a5f=await _0x398307[_0x6fe2a(0x94)]();if(!_0x398307['ok'])throw new Error(_0x281a5f?.[_0x6fe2a(0x7e)]?.['message']||_0x6fe2a(0x95));_0xaa233b[_0x6fe2a(0x82)]=_0x281a5f[_0x6fe2a(0x9d)],_0xaa233b[_0x6fe2a(0xa5)]=_0x6fe2a(0x92),_0x54dd0b[_0x6fe2a(0xac)]('uploaded',_0xaa233b[_0x6fe2a(0x82)]);}catch(_0x3d21b3){_0xaa233b[_0x6fe2a(0x7e)]=_0x3d21b3?.[_0x6fe2a(0x90)]||String(_0x3d21b3),_0xaa233b[_0x6fe2a(0xa5)]=_0x6fe2a(0x7e);}},'retryItem'(_0x4ee969){const _0x12a27e=_0x46a9de;_0x4ee969[_0x12a27e(0xa5)]=_0x12a27e(0x9e),_0x4ee969[_0x12a27e(0x7e)]=null,this[_0x12a27e(0x9c)]();},'removeItem'(_0x29c813){const _0x7dbc19=_0x46a9de,_0x581537=this[_0x7dbc19(0x8e)][_0x7dbc19(0xa2)](_0x29c813);-0x1!==_0x581537&&this[_0x7dbc19(0x8e)][_0x7dbc19(0x89)](_0x581537,0x1);},'clearDone'(){const _0x331c98=_0x46a9de;this[_0x331c98(0x8e)]=this[_0x331c98(0x8e)]['filter'](_0xd91a7b=>_0x331c98(0x92)!==_0xd91a7b[_0x331c98(0xa5)]);},'fmtSize':_0x12eb52=>null==_0x12eb52?'—':_0x12eb52<0x400?_0x12eb52+'\x20B':_0x12eb52<0x100000?(_0x12eb52/0x400)[_0x46a9de(0x8c)](0x1)+_0x46a9de(0xaa):(_0x12eb52/0x100000)['toFixed'](0x1)+_0x46a9de(0xa9),get 'pendingCount'(){const _0x66040a=_0x46a9de;return this[_0x66040a(0x8e)][_0x66040a(0x93)](_0x47c5ec=>'pending'===_0x47c5ec[_0x66040a(0xa5)])['length'];},get 'uploadingCount'(){const _0x3264bf=_0x46a9de;return this['queue']['filter'](_0x4fc4a3=>'uploading'===_0x4fc4a3[_0x3264bf(0xa5)])[_0x3264bf(0xa6)];},get 'doneCount'(){const _0x3e6028=_0x46a9de;return this[_0x3e6028(0x8e)][_0x3e6028(0x93)](_0x14f909=>'done'===_0x14f909['status'])['length'];},get 'errorCount'(){const _0x28e352=_0x46a9de;return this['queue'][_0x28e352(0x93)](_0x2828bb=>_0x28e352(0x7e)===_0x2828bb[_0x28e352(0xa5)])[_0x28e352(0xa6)];}}),'template':_0x46a9de(0x8a),'style':_0x46a9de(0x80)};function _0x28ee(){const _0x5f2479=['files','_uploadOne','error','5271uEsVcX','\x0a@keyframes\x20spin\x20{\x20to\x20{\x20transform:\x20rotate(360deg);\x20}\x20}\x0a','5JrYvHu','record','path','relativePath','417148GvxqTy','3090foivly','255OgMHfn','4674ledCpX','splice','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x0a\x20\x20<!--\x20Drop\x20zone\x20-->\x0a\x20\x20<ok-dropzone\x0a\x20\x20\x20\x20@files-drop=\x22onFilesDropped($event)\x22\x0a\x20\x20\x20\x20style=\x22border:2px\x20dashed\x20var(--okdb-app-border);\x20border-radius:8px;\x20padding:24px\x2012px;\x20text-align:center;\x20cursor:pointer;\x20transition:border-color\x20.15s;\x22\x0a\x20\x20\x20\x20@click=\x22onBrowse()\x22\x0a\x20\x20>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20align-items:center;\x20gap:6px;\x20pointer-events:none;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:28px;\x20opacity:.6;\x22>📁</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20opacity:.7;\x22>Drop\x20files\x20or\x20folders\x20here,\x20or\x20<span\x20style=\x22color:var(--okdb-accent);\x20text-decoration:underline;\x22>browse</span></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x22>Uploading\x20to\x20<strong>{{\x20path\x20}}</strong></div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</ok-dropzone>\x0a\x0a\x20\x20<!--\x20Summary\x20bar\x20-->\x0a\x20\x20<if\x20:=\x22queue.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x22>{{\x20queue.length\x20}}\x20file(s)</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22uploadingCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>↑\x20{{\x20uploadingCount\x20}}\x20uploading</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22doneCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-success);\x22>✓\x20{{\x20doneCount\x20}}\x20done</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22errorCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x22>✗\x20{{\x20errorCount\x20}}\x20failed</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x22></span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22doneCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearDone()\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x22>Clear\x20done</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20File\x20list\x20-->\x0a\x20\x20\x20\x20<div\x20style=\x22max-height:220px;\x20overflow-y:auto;\x20display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22queue\x22\x20let:item=\x22item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20padding:5px\x208px;\x20border-radius:6px;\x20background:var(--okdb-app-surface);\x20font-size:12px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Status\x20dot\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27width:7px;height:7px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(item.status\x20===\x20\x27done\x27\x20?\x20\x27var(--okdb-success)\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item.status\x20===\x20\x27error\x27\x20?\x20\x27var(--okdb-danger)\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item.status\x20===\x20\x27uploading\x27\x20?\x20\x27var(--okdb-accent)\x27\x20:\x20\x27var(--okdb-method-default)\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22></span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Name\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22item.relativePath\x22>{{\x20item.relativePath\x20}}</span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Size\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x20font-family:monospace;\x20font-size:11px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(item.file.size)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Error\x20message\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x20max-width:120px;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22item.error\x22>{{\x20item.error\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryItem(item)\x22\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Spinner\x20for\x20uploading\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20===\x20\x27uploading\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x20font-size:11px;\x20animation:spin\x201s\x20linear\x20infinite;\x22>⟳</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Remove\x20button\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20!==\x20\x27uploading\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22removeItem(item)\x22\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x20opacity:.5;\x22>✕</button>\x0a\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\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','$attr','toFixed','from','queue','2237337tZSfoY','message','3229226cWNwpr','done','filter','json','Upload\x20failed','createElement','click','find','20xjYqsJ','type','apiBase','_flush','data','pending','1472628JWMTgC','endsWith','file','indexOf','4467920TbPbuf','_uploading','status','length','name','size','\x20MB','\x20KB','detail','$dispatch','application/octet-stream','input'];_0x28ee=function(){return _0x5f2479;};return _0x28ee();}
|
|
1
|
+
const _0x2c5997=_0x3faf;(function(_0x471136,_0xe97341){const _0x17a166=_0x3faf,_0x4e665f=_0x471136();while(!![]){try{const _0x4cdfd8=parseInt(_0x17a166(0x159))/0x1*(parseInt(_0x17a166(0x173))/0x2)+-parseInt(_0x17a166(0x16e))/0x3+parseInt(_0x17a166(0x152))/0x4*(parseInt(_0x17a166(0x143))/0x5)+-parseInt(_0x17a166(0x13e))/0x6*(-parseInt(_0x17a166(0x14e))/0x7)+parseInt(_0x17a166(0x140))/0x8*(parseInt(_0x17a166(0x16a))/0x9)+parseInt(_0x17a166(0x155))/0xa*(-parseInt(_0x17a166(0x14b))/0xb)+parseInt(_0x17a166(0x142))/0xc*(parseInt(_0x17a166(0x165))/0xd);if(_0x4cdfd8===_0xe97341)break;else _0x4e665f['push'](_0x4e665f['shift']());}catch(_0x43c774){_0x4e665f['push'](_0x4e665f['shift']());}}}(_0x5685,0xb1f4b));function _0x3faf(_0x392c79,_0x4acdde){_0x392c79=_0x392c79-0x13e;const _0x56855f=_0x5685();let _0x3faf93=_0x56855f[_0x392c79];return _0x3faf93;}import _0x249bee from'../../../components/ok-dropzone.ok.js';import _0x35d1f4 from'../../../stores/okdb-store.js';function _0x5685(){const _0x1ff5e6=['_flush','filter','\x20MB','message','record','files-upload-panel','application/octet-stream','apiBase','createElement','/files?path=','3393GWzJfx','Upload\x20failed','from','size','$dispatch','747HJlcnx','type','endsWith','file','1276266UuMWcD','toFixed','files','\x20KB','replace','373588wanNvG','json','600222qASvhc','name','44408DyHPie','uploaded','10404EytPwK','51165iywAzk','find','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x0a\x20\x20<!--\x20Drop\x20zone\x20-->\x0a\x20\x20<ok-dropzone\x0a\x20\x20\x20\x20@files-drop=\x22onFilesDropped($event)\x22\x0a\x20\x20\x20\x20style=\x22border:2px\x20dashed\x20var(--okdb-app-border);\x20border-radius:8px;\x20padding:24px\x2012px;\x20text-align:center;\x20cursor:pointer;\x20transition:border-color\x20.15s;\x22\x0a\x20\x20\x20\x20@click=\x22onBrowse()\x22\x0a\x20\x20>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20align-items:center;\x20gap:6px;\x20pointer-events:none;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:28px;\x20opacity:.6;\x22>📁</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20opacity:.7;\x22>Drop\x20files\x20or\x20folders\x20here,\x20or\x20<span\x20style=\x22color:var(--okdb-accent);\x20text-decoration:underline;\x22>browse</span></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x22>Uploading\x20to\x20<strong>{{\x20path\x20}}</strong></div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</ok-dropzone>\x0a\x0a\x20\x20<!--\x20Summary\x20bar\x20-->\x0a\x20\x20<if\x20:=\x22queue.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x22>{{\x20queue.length\x20}}\x20file(s)</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22uploadingCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>↑\x20{{\x20uploadingCount\x20}}\x20uploading</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22doneCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-success);\x22>✓\x20{{\x20doneCount\x20}}\x20done</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22errorCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x22>✗\x20{{\x20errorCount\x20}}\x20failed</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x22></span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22doneCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearDone()\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x22>Clear\x20done</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20File\x20list\x20-->\x0a\x20\x20\x20\x20<div\x20style=\x22max-height:220px;\x20overflow-y:auto;\x20display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22queue\x22\x20let:item=\x22item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20padding:5px\x208px;\x20border-radius:6px;\x20background:var(--okdb-app-surface);\x20font-size:12px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Status\x20dot\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27width:7px;height:7px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(item.status\x20===\x20\x27done\x27\x20?\x20\x27var(--okdb-success)\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item.status\x20===\x20\x27error\x27\x20?\x20\x27var(--okdb-danger)\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item.status\x20===\x20\x27uploading\x27\x20?\x20\x27var(--okdb-accent)\x27\x20:\x20\x27var(--okdb-method-default)\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22></span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Name\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22item.relativePath\x22>{{\x20item.relativePath\x20}}</span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Size\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x20font-family:monospace;\x20font-size:11px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(item.file.size)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Error\x20message\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x20max-width:120px;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22item.error\x22>{{\x20item.error\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryItem(item)\x22\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Spinner\x20for\x20uploading\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20===\x20\x27uploading\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x20font-size:11px;\x20animation:spin\x201s\x20linear\x20infinite;\x22>⟳</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Remove\x20button\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20!==\x20\x27uploading\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22removeItem(item)\x22\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x20opacity:.5;\x22>✕</button>\x0a\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\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','length','error','relativePath','click','\x0a@keyframes\x20spin\x20{\x20to\x20{\x20transform:\x20rotate(360deg);\x20}\x20}\x0a','252714kAefvq','done','_uploading','56xyDSuG','queue','data','path','92nrDAwr','status','$attr','410iZSuRA','uploading','pending','input','2KOkQTj','_uploadOne'];_0x5685=function(){return _0x1ff5e6;};return _0x5685();}export default{'tag':_0x2c5997(0x160),'props':[_0x2c5997(0x151)],'dependencies':[_0x249bee],'context':_0x4a6527=>({'queue':[],get 'path'(){const _0x4d669c=_0x2c5997;return _0x4a6527['$attr'][_0x4d669c(0x151)]||'/';},'onFilesDropped'(_0x57bf2b){const _0x4044f7=_0x2c5997,{files:_0x45c595}=_0x57bf2b['detail'];for(const _0x2da3e7 of _0x45c595)this[_0x4044f7(0x14f)]['push']({'file':_0x2da3e7,'relativePath':_0x2da3e7[_0x4044f7(0x148)]||_0x2da3e7[_0x4044f7(0x13f)],'status':_0x4044f7(0x157),'error':null,'record':null});this[_0x4044f7(0x15b)]();},'onBrowse'(){const _0x48e337=_0x2c5997,_0x5a3db9=document[_0x48e337(0x163)](_0x48e337(0x158));_0x5a3db9[_0x48e337(0x16b)]=_0x48e337(0x16d),_0x5a3db9['multiple']=!0x0,_0x5a3db9['onchange']=()=>{const _0x294b24=_0x48e337;for(const _0x4e876a of Array[_0x294b24(0x167)](_0x5a3db9[_0x294b24(0x170)]))this[_0x294b24(0x14f)]['push']({'file':_0x4e876a,'relativePath':_0x4e876a[_0x294b24(0x13f)],'status':_0x294b24(0x157),'error':null,'record':null});this[_0x294b24(0x15b)]();},_0x5a3db9[_0x48e337(0x149)]();},'_uploading':!0x1,async '_flush'(){const _0x576680=_0x2c5997;if(!this[_0x576680(0x14d)]){this[_0x576680(0x14d)]=!0x0;try{let _0x4caa2a;for(;_0x4caa2a=this[_0x576680(0x14f)][_0x576680(0x144)](_0x4cc269=>'pending'===_0x4cc269[_0x576680(0x153)]);)await this[_0x576680(0x15a)](_0x4caa2a);}finally{this[_0x576680(0x14d)]=!0x1;}}},async '_uploadOne'(_0x8bc4ad){const _0x139527=_0x2c5997;_0x8bc4ad[_0x139527(0x153)]=_0x139527(0x156);const _0x4fd3e5=_0x4a6527[_0x139527(0x154)][_0x139527(0x151)]||'/';try{const _0x1bf17d=(_0x8bc4ad[_0x139527(0x148)]||_0x8bc4ad['file'][_0x139527(0x13f)])[_0x139527(0x172)](/^\//,''),_0x3778c4=(_0x4fd3e5[_0x139527(0x16c)]('/')?_0x4fd3e5:_0x4fd3e5+'/')+_0x1bf17d,_0x1cd00a=await fetch(_0x35d1f4[_0x139527(0x162)]+_0x139527(0x164)+encodeURIComponent(_0x3778c4),{'method':'POST','headers':{'content-type':_0x8bc4ad[_0x139527(0x16d)][_0x139527(0x16b)]||_0x139527(0x161),'content-length':String(_0x8bc4ad['file'][_0x139527(0x168)])},'body':_0x8bc4ad[_0x139527(0x16d)]}),_0x5e0256=await _0x1cd00a[_0x139527(0x174)]();if(!_0x1cd00a['ok'])throw new Error(_0x5e0256?.[_0x139527(0x147)]?.[_0x139527(0x15e)]||_0x139527(0x166));_0x8bc4ad[_0x139527(0x15f)]=_0x5e0256[_0x139527(0x150)],_0x8bc4ad[_0x139527(0x153)]=_0x139527(0x14c),_0x4a6527[_0x139527(0x169)](_0x139527(0x141),_0x8bc4ad[_0x139527(0x15f)]);}catch(_0x3db143){_0x8bc4ad[_0x139527(0x147)]=_0x3db143?.['message']||String(_0x3db143),_0x8bc4ad['status']='error';}},'retryItem'(_0x4f9691){const _0x53cb71=_0x2c5997;_0x4f9691[_0x53cb71(0x153)]=_0x53cb71(0x157),_0x4f9691[_0x53cb71(0x147)]=null,this[_0x53cb71(0x15b)]();},'removeItem'(_0xdea860){const _0x2aa8ca=_0x2c5997,_0x4d8b8d=this[_0x2aa8ca(0x14f)]['indexOf'](_0xdea860);-0x1!==_0x4d8b8d&&this[_0x2aa8ca(0x14f)]['splice'](_0x4d8b8d,0x1);},'clearDone'(){const _0xa33be8=_0x2c5997;this[_0xa33be8(0x14f)]=this[_0xa33be8(0x14f)][_0xa33be8(0x15c)](_0x220271=>'done'!==_0x220271[_0xa33be8(0x153)]);},'fmtSize':_0x553c4d=>null==_0x553c4d?'—':_0x553c4d<0x400?_0x553c4d+'\x20B':_0x553c4d<0x100000?(_0x553c4d/0x400)[_0x2c5997(0x16f)](0x1)+_0x2c5997(0x171):(_0x553c4d/0x100000)[_0x2c5997(0x16f)](0x1)+_0x2c5997(0x15d),get 'pendingCount'(){const _0x44df50=_0x2c5997;return this[_0x44df50(0x14f)][_0x44df50(0x15c)](_0x556a42=>_0x44df50(0x157)===_0x556a42['status'])[_0x44df50(0x146)];},get 'uploadingCount'(){const _0x38c722=_0x2c5997;return this[_0x38c722(0x14f)]['filter'](_0x343bbb=>_0x38c722(0x156)===_0x343bbb['status'])[_0x38c722(0x146)];},get 'doneCount'(){const _0x13f998=_0x2c5997;return this[_0x13f998(0x14f)][_0x13f998(0x15c)](_0x36290d=>_0x13f998(0x14c)===_0x36290d[_0x13f998(0x153)])['length'];},get 'errorCount'(){const _0x17bc21=_0x2c5997;return this['queue'][_0x17bc21(0x15c)](_0x5535d0=>_0x17bc21(0x147)===_0x5535d0['status'])['length'];}}),'template':_0x2c5997(0x145),'style':_0x2c5997(0x14a)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x595dbb=_0x3287;(function(_0x1845ea,_0x4782c5){const _0x480e2e=_0x3287,_0x3bb79f=_0x1845ea();while(!![]){try{const _0x36f88b=parseInt(_0x480e2e(0x19f))/0x1*(-parseInt(_0x480e2e(0x1c5))/0x2)+-parseInt(_0x480e2e(0x1b5))/0x3+parseInt(_0x480e2e(0x197))/0x4+parseInt(_0x480e2e(0x1cf))/0x5*(parseInt(_0x480e2e(0x1c0))/0x6)+-parseInt(_0x480e2e(0x19a))/0x7+-parseInt(_0x480e2e(0x1c1))/0x8+-parseInt(_0x480e2e(0x1a1))/0x9*(-parseInt(_0x480e2e(0x190))/0xa);if(_0x36f88b===_0x4782c5)break;else _0x3bb79f['push'](_0x3bb79f['shift']());}catch(_0x5c33a1){_0x3bb79f['push'](_0x3bb79f['shift']());}}}(_0x4a7c,0x4f22d));import _0x19d33f from'@toolkit/elements/ok-icon.ok.js';import _0x109ef6 from'@toolkit/core/ok-overlay.ok.js';import _0x206aa9 from'../../../components/ok-js-input.ok.js';import _0x7d0af7 from'../../../components/ok-text-monaco-input.ok.js';import _0x19b4e6 from'../parts/function-logs.ok.js';function _0x3287(_0x36c7f5,_0x5bb6ca){_0x36c7f5=_0x36c7f5-0x18b;const _0x4a7c2e=_0x4a7c();let _0x328768=_0x4a7c2e[_0x36c7f5];return _0x328768;}function _0x4a7c(){const _0x77e4e6=['setModalSourceDraft','join','$attr','result','1fCLqLJ','setPayloadDraft','15201aFStyM','modalNameDraft','shared','envName','\x0a<div\x20style=\x22position:relative;\x20width:min(1220px,\x20calc(100vw\x20-\x2060px));\x20max-width:calc(100vw\x20-\x2060px);\x20min-width:900px;\x20min-height:760px;\x20display:flex;\x20flex-direction:column;\x20gap:16px;\x22>\x0a\x20\x20<if\x20:=\x22saving\x20||\x20running\x22>\x0a\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:32px;height:32px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:flex-start;\x20justify-content:space-between;\x20gap:16px;\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:18px;\x20font-weight:700;\x20color:var(--okdb-app-fg);\x22>{{\x20titleLabel\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:4px;\x20font-size:12px;\x20color:var(--okdb-app-fg-muted);\x22>Scope:\x20{{\x20scopeLabel\x20}}</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:16px;\x20font-size:12px;\x20color:var(--okdb-app-fg-muted);\x22>\x0a\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22store.modalEnabledDraft\x20!==\x20false\x22\x20@change=\x22setEnabled($el.checked)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Enabled\x0a\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20<label\x20:style=\x22unsafe\x20?\x20\x27display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x20color:var(--okdb-orange);\x20font-weight:600;\x27\x20:\x20\x27display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22store.modalUnsafeDraft\x20===\x20true\x22\x20@change=\x22setUnsafe($el.checked)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span>{{\x20unsafe\x20?\x20\x27⚠️\x20Unsafe\x27\x20:\x20\x27Unsafe\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22unsafe\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22padding:10px\x2014px;\x20border:1px\x20solid\x20#92400e;\x20border-radius:10px;\x20background:#1c0f00;\x20color:#fdba74;\x20font-size:12px;\x20line-height:1.6;\x20display:flex;\x20gap:10px;\x20align-items:flex-start;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:16px;\x20flex-shrink:0;\x22>⚠️</span>\x0a\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<strong\x20style=\x22color:var(--okdb-orange);\x22>Unsafe\x20function</strong>\x20—\x20this\x20function\x20receives\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code\x20style=\x22color:var(--okdb-warning);\x20background:#2c1800;\x20padding:1px\x205px;\x20border-radius:4px;\x22>ctx.okdb</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20in\x20addition\x20to\x20<code\x20style=\x22color:var(--okdb-accent-muted);\x20background:var(--okdb-app-bg-deep);\x20padding:1px\x205px;\x20border-radius:4px;\x22>ctx.env</code>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code\x20style=\x22color:var(--okdb-warning);\x22>ctx.okdb</code>\x20grants\x20full\x20cross-environment\x20database\x20access\x20including\x20creating\x20and\x20removing\x20environments.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Only\x20use\x20this\x20for\x20privileged,\x20trusted\x20operations.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:minmax(320px,\x20380px)\x20minmax(0,\x201fr);\x20gap:16px;\x20min-height:0;\x20flex:1;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:12px;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x20margin-bottom:6px;\x22>Function\x20name</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20box-sizing:border-box;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22e.g.\x20queueFanout\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalNameDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22mode\x20===\x20\x27edit\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22setName($el.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:6px;\x20font-size:11px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Name\x20is\x20immutable\x20after\x20creation\x20and\x20becomes\x20the\x20function\x20entry\x20point.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x20margin-bottom:6px;\x22>Description</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<textarea\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20box-sizing:border-box;\x20min-height:110px;\x20resize:vertical;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x20color:#cfe6f2;\x20padding:10px;\x20font-size:12px;\x20line-height:1.5;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22What\x20does\x20this\x20function\x20do?\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalDescriptionDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22setDescription($el.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20></textarea>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:6px;\x20font-size:11px;\x20color:var(--okdb-app-fg-subtle);\x22>{{\x20descriptionLength\x20}}\x20chars</div>\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<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Runtime</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:1fr\x201fr;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x22>Timeout\x20(ms)</div>\x0a\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\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min=\x221\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20step=\x221000\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20box-sizing:border-box;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x225000\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalTimeoutMsDraft\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22setTimeoutMs($el.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\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:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x22>Memory\x20(MB)</div>\x0a\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\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min=\x221\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20step=\x221\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20box-sizing:border-box;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x2232\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalMemoryMbDraft\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22setMemoryMb($el.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\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\x20\x20<label\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20cursor:pointer;\x20user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22store.modalAllowFetchDraft\x20!==\x20false\x22\x20@change=\x22setAllowFetch($el.checked)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Allow\x20fetch\x0a\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-subtle);\x20line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Leave\x20blank\x20to\x20use\x20system\x20defaults\x20(timeout:\x205000ms,\x20memory:\x2032MB).\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<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Run\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.55;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Define\x20the\x20JSON\x20payload\x20you\x20want\x20to\x20execute\x20right\x20now\x20against\x20this\x20draft\x20before\x20saving\x20it.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22height:220px;\x20min-height:220px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:10px;\x20overflow:hidden;\x20background:var(--okdb-app-bg-deep);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-text-monaco-input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22height:100%;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20language=\x22json\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalPayloadDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@edit:debounce.150=\x22setPayload($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20></ok-text-monaco-input>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22payloadError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-danger);\x20line-height:1.5;\x22>{{\x20payloadError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20justify-content:flex-end;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22toggleModalDryRun()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22running\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22modalDryRunMode\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27font-size:12px;\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27font-size:12px;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Dry\x20Run{{\x20modalDryRunMode\x20?\x20\x27\x20✓\x27\x20:\x20\x27\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runDraft()\x22\x20:disabled=\x22!canRun\x22>{{\x20running\x20?\x20\x27Running…\x27\x20:\x20(modalDryRunMode\x20?\x20\x27Run\x20draft\x20(dry)\x27\x20:\x20\x27Run\x20draft\x27)\x20}}</button>\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<if\x20:=\x22previewTriggerKind\x20&&\x20previewTriggerContext\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Preview\x20trigger\x20context</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-accent-muted);\x20font-family:monospace;\x22>ctx.{{\x20previewTriggerKind\x20}}</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:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.55;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20This\x20draft\x20run\x20simulates\x20the\x20engine\x20metadata\x20shown\x20below\x20so\x20you\x20can\x20reproduce\x20handler\x20behavior\x20before\x20saving.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-word;\x20color:var(--okdb-app-fg-muted);\x20font-size:11px;\x20line-height:1.5;\x20max-height:180px;\x20overflow:auto;\x22>{{\x20formatJson(previewTriggerContext)\x20}}</pre>\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=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Validation</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22validation.ok\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-success);\x20line-height:1.55;\x22>Function\x20source\x20is\x20valid\x20and\x20can\x20be\x20saved.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!validation.ok\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-danger);\x20line-height:1.55;\x22>{{\x20validation.message\x20||\x20\x27Function\x20source\x20is\x20invalid\x27\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:#c38989;\x20font-family:monospace;\x22>{{\x20validation.code\x20||\x20\x27FUNCTION_SCRIPT_INVALID\x27\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-subtle);\x20line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Allowed\x20shape:\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>[async]\x20(ctx)\x20=>\x20{\x20}</span>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Forbidden\x20symbols:\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>require</span>,\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>import</span>,\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>console</span>,\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>process</span>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-rows:minmax(0,1.2fr)\x20minmax(220px,.7fr)\x20minmax(240px,.9fr);\x20min-height:0;\x20gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20min-height:0;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:10px;\x20padding:12px\x2014px;\x20border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Implementation</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x20font-family:monospace;\x22>async\x20(ctx)\x20=>\x20{\x20}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20min-height:0;\x20background:var(--okdb-app-bg-deep);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-js-input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22height:100%;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalSourceDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:unsafe=\x22store.modalUnsafeDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:options=\x22{\x20suggest:\x20{\x20showWords:\x20true\x20},\x20wordBasedSuggestions:\x20\x27currentDocument\x27\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@edit=\x22setSource($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20></ok-js-input>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20justify-content:space-between;\x20align-items:flex-start;\x20gap:12px;\x20font-size:11px;\x20color:var(--okdb-app-fg-subtle);\x20line-height:1.55;\x20padding:10px\x2014px;\x20border-top:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Runtime\x20receives\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>ctx</span>\x20with\x20DB\x20access\x20facades,\x20payload,\x20logs,\x20and\x20execution\x20info.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22unsafe\x22><span\x20style=\x22color:var(--okdb-orange);\x22>\x20⚠\x20Unsafe:\x20also\x20exposes\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-warning);\x22>ctx.okdb</span>\x20(full\x20cross-env\x20access).</span></if>\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=\x22white-space:nowrap;\x22>JS\x20/\x20Monaco</div>\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<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20min-height:0;\x20overflow:auto;\x20display:flex;\x20flex-direction:column;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22previewRun\x20&&\x20modalDryRunActions\x20!==\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-accent);\x22>Dry\x20run\x20—\x20intercepted\x20writes\x20({{\x20modalDryRunActions.length\x20}})</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!previewRun\x20||\x20modalDryRunActions\x20===\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Draft\x20execution\x20result</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22previewRun\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x20font-family:monospace;\x22>{{\x20previewRunId\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\x20\x20<if\x20:=\x22!previewRun\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.5;\x22>Run\x20the\x20draft\x20to\x20see\x20the\x20latest\x20result\x20before\x20you\x20save.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22previewRun\x20&&\x20modalDryRunActions\x20!==\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.5;\x22>Status:\x20<strong>{{\x20previewRun.status\x20||\x20(previewRun.error\x20?\x20\x27error\x27\x20:\x20\x27ok\x27)\x20}}</strong></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22modalDryRunActions.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x22>No\x20writes\x20intercepted.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22modalDryRunActions\x22\x20let:item=\x22action\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:5px\x208px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2020%,\x20transparent);\x20border-radius:6px;\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x204%,\x20transparent);\x20font-family:monospace;\x20font-size:11px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.45;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>{{\x20action.scope\x20}}.{{\x20action.method\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22action.envName\x22><span\x20style=\x22opacity:.6;\x22>\x20[{{\x20action.envName\x20}}]</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22actionArgs(action)\x22><span>\x20({{\x20actionArgs(action)\x20}})</span></if>\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</each>\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:=\x22previewRun.result?.value\x20!==\x20undefined\x20&&\x20previewRun.result?.value\x20!==\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20color:var(--okdb-app-fg-muted);\x20margin-top:4px;\x22>Return\x20value</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-word;\x20color:var(--okdb-app-fg-muted);\x20font-size:11px;\x20line-height:1.5;\x22>{{\x20formatJson(previewRun.result.value)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22previewRun\x20&&\x20modalDryRunActions\x20===\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.5;\x22>Status:\x20<strong>{{\x20previewRun.status\x20||\x20(previewRun.error\x20?\x20\x27error\x27\x20:\x20\x27ok\x27)\x20}}</strong></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-word;\x20color:var(--okdb-app-fg-muted);\x20font-size:11px;\x20line-height:1.5;\x22>{{\x20formatJson(previewRun.result?.value\x20??\x20previewRun.error\x20??\x20previewRun)\x20}}</pre>\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<function-logs\x20:run-id=\x22previewRunId\x22\x20:entries=\x22previewLogs\x22\x20title=\x22Draft\x20live\x20log\x22\x20empty=\x22Run\x20the\x20draft\x20to\x20stream\x20function\x20logs\x20here.\x22></function-logs>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20justify-content:flex-end;\x20gap:10px;\x20padding-top:4px;\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22cancel()\x22>Cancel</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22submit()\x22\x20:disabled=\x22!canSave\x22>{{\x20saveLabel\x20}}</button>\x0a\x20\x20</div>\x0a</div>\x0a\x20\x20\x20\x20','success','Failed\x20to\x20run\x20draft','canRun','Create\x20function','Dry\x20run\x20complete','modalMaterializerContextDraft','name','toast','mode','setModalPayloadDraft','canSaveModal','job','stringify','function-modal','previewRun','1676424ctAhqd','args','modalJobContextDraft','{\x0a\x20\x20\x0a}','dryRunActions','map','saveModalDefinition','modalValidation','modalDescriptionDraft','saving','modalRunning','42hSQUCM','3602176YJVPfQ','Draft\x20executed','message','Edit\x20function','1170142hJFbcL','modalUnsafeDraft','$ok','runModalDraft','Save\x20changes','modalDryRunMode','materializer','functions','selectedName','edit','160030YcykxD','length','isFinite','modalPreviewRun','close','stores','modal','modalTimeoutMsDraft','store','error','logsForRun','processor','Failed\x20to\x20save\x20function','9560UgYDoA','modalAllowFetchDraft','runId','previewRunId','modalPayloadError','canSave','Function\x20saved:\x20','2371980sajLCh','modalProcessorContextDraft','modalMode','3594003trcOGX'];_0x4a7c=function(){return _0x77e4e6;};return _0x4a7c();}export default{'tag':_0x595dbb(0x1b3),'dependencies':[_0x19d33f,_0x109ef6,_0x206aa9,_0x7d0af7,_0x19b4e6],'attr':{'modal':{},'mode':{},'onDone':{}},'context':_0x3b803d=>({get 'store'(){const _0x4de952=_0x595dbb;return _0x3b803d[_0x4de952(0x1c7)][_0x4de952(0x1d4)][_0x4de952(0x1cc)];},get 'mode'(){const _0x3ac3e5=_0x595dbb;return _0x3b803d[_0x3ac3e5(0x19d)][_0x3ac3e5(0x1ae)]||this[_0x3ac3e5(0x18b)][_0x3ac3e5(0x199)]||'create';},get 'saving'(){const _0x67ce5e=_0x595dbb;return this[_0x67ce5e(0x18b)][_0x67ce5e(0x1be)];},get 'running'(){const _0x305b28=_0x595dbb;return this[_0x305b28(0x18b)][_0x305b28(0x1bf)];},get 'validation'(){const _0x3d4b0f=_0x595dbb;return this['store'][_0x3d4b0f(0x1bc)]||{};},get 'canSave'(){const _0x3a53a5=_0x595dbb;return this['store'][_0x3a53a5(0x1b0)];},get 'canRun'(){const _0x4f6142=_0x595dbb;return!!this[_0x4f6142(0x18b)][_0x4f6142(0x1bc)]?.['ok']&&!this[_0x4f6142(0x18b)][_0x4f6142(0x194)]&&!this[_0x4f6142(0x18b)][_0x4f6142(0x1bf)];},get 'modalDryRunMode'(){const _0x2e0a54=_0x595dbb;return this[_0x2e0a54(0x18b)]['modalDryRunMode'];},get 'modalDryRunActions'(){const _0x142c36=_0x595dbb;return this['store'][_0x142c36(0x1d2)]?.[_0x142c36(0x19e)]?.[_0x142c36(0x1b9)]??null;},'toggleModalDryRun'(){const _0x2f4aa8=_0x595dbb;this['store']['modalDryRunMode']=!this[_0x2f4aa8(0x18b)][_0x2f4aa8(0x1ca)];},get 'scopeLabel'(){const _0x332bfd=_0x595dbb;return this[_0x332bfd(0x18b)][_0x332bfd(0x1a4)]||'—';},get 'unsafe'(){const _0x12beeb=_0x595dbb;return!0x0===this['store'][_0x12beeb(0x1c6)];},get 'titleLabel'(){const _0x52d082=_0x595dbb;return _0x52d082(0x1ce)===this['mode']?_0x52d082(0x1c4):'Create\x20function';},get 'saveLabel'(){const _0x257e3e=_0x595dbb;return'edit'===this['mode']?_0x257e3e(0x1c9):_0x257e3e(0x1a9);},get 'descriptionLength'(){const _0x468fd5=_0x595dbb;return String(this[_0x468fd5(0x18b)][_0x468fd5(0x1bd)]||'')[_0x468fd5(0x1d0)];},get 'payloadError'(){const _0x4d834d=_0x595dbb;return this[_0x4d834d(0x18b)][_0x4d834d(0x194)];},get 'previewRun'(){const _0x503cb1=_0x595dbb;return this[_0x503cb1(0x18b)][_0x503cb1(0x1d2)];},get 'previewRunId'(){const _0x166f32=_0x595dbb;return this['previewRun']?.['id']||this[_0x166f32(0x1b4)]?.[_0x166f32(0x192)]||null;},get 'previewLogs'(){const _0x57fd24=_0x595dbb;return this['store'][_0x57fd24(0x18d)](this[_0x57fd24(0x193)]);},get 'previewTriggerKind'(){const _0x497543=_0x595dbb;return this[_0x497543(0x18b)]['modalMaterializerContextDraft']?_0x497543(0x1cb):this[_0x497543(0x18b)][_0x497543(0x198)]?_0x497543(0x18e):this[_0x497543(0x18b)][_0x497543(0x1b7)]?_0x497543(0x1b1):null;},get 'previewTriggerContext'(){const _0x548e5d=_0x595dbb;return this[_0x548e5d(0x18b)][_0x548e5d(0x1ab)]||this[_0x548e5d(0x18b)][_0x548e5d(0x198)]||this[_0x548e5d(0x18b)]['modalJobContextDraft']||null;},'setName'(_0x3c7ebd){const _0xf307cf=_0x595dbb;this[_0xf307cf(0x18b)][_0xf307cf(0x1a2)]=_0x3c7ebd??'';},'setDescription'(_0x46d8b4){const _0x4e3659=_0x595dbb;this[_0x4e3659(0x18b)][_0x4e3659(0x1bd)]=_0x46d8b4??'';},'setEnabled'(_0x2114cb){const _0x1b6539=_0x595dbb;this[_0x1b6539(0x18b)]['modalEnabledDraft']=!!_0x2114cb;},'setUnsafe'(_0x8573c9){const _0x55c9da=_0x595dbb;this[_0x55c9da(0x18b)]['modalUnsafeDraft']=!!_0x8573c9;},'setTimeoutMs'(_0x5a1f96){const _0x134a50=_0x595dbb,_0x2561da=parseInt(_0x5a1f96,0xa);this[_0x134a50(0x18b)][_0x134a50(0x1d6)]=Number[_0x134a50(0x1d1)](_0x2561da)&&_0x2561da>0x0?_0x2561da:null;},'setMemoryMb'(_0x102ed7){const _0x1829cf=parseInt(_0x102ed7,0xa);this['store']['modalMemoryMbDraft']=Number['isFinite'](_0x1829cf)&&_0x1829cf>0x0?_0x1829cf:null;},'setAllowFetch'(_0x3147e5){const _0x3c33b9=_0x595dbb;this[_0x3c33b9(0x18b)][_0x3c33b9(0x191)]=!!_0x3147e5;},'setSource'(_0x4278a2){const _0x39e968=_0x595dbb;this[_0x39e968(0x18b)][_0x39e968(0x19b)](_0x4278a2??'');},'setPayload'(_0x4d0cc1){const _0x4f296b=_0x595dbb;this[_0x4f296b(0x18b)][_0x4f296b(0x1af)](_0x4d0cc1??_0x4f296b(0x1b8));},async 'submit'(){const _0xf3925e=_0x595dbb;if(this[_0xf3925e(0x195)])try{const _0x56e324=await this[_0xf3925e(0x18b)][_0xf3925e(0x1bb)]();this[_0xf3925e(0x18b)][_0xf3925e(0x1a0)](this[_0xf3925e(0x18b)]['modalPayloadDraft']),_0x3b803d[_0xf3925e(0x1c7)][_0xf3925e(0x1a3)]?.[_0xf3925e(0x1ad)]?.[_0xf3925e(0x1a6)]?.(_0xf3925e(0x1ce)===this['mode']?_0xf3925e(0x196)+(_0x56e324?.[_0xf3925e(0x1ac)]||this[_0xf3925e(0x18b)][_0xf3925e(0x1cd)]):'Function\x20created:\x20'+(_0x56e324?.[_0xf3925e(0x1ac)]||this[_0xf3925e(0x18b)]['modalNameDraft'])),await _0x3b803d['$attr'][_0xf3925e(0x1d5)][_0xf3925e(0x1d3)](),await _0x3b803d[_0xf3925e(0x19d)]['onDone']?.(_0x56e324);}catch(_0x3112c5){_0x3b803d[_0xf3925e(0x1c7)][_0xf3925e(0x1a3)]?.['toast']?.[_0xf3925e(0x18c)]?.(_0x3112c5?.[_0xf3925e(0x1c3)]||_0xf3925e(0x18f));}},async 'runDraft'(){const _0x41b04f=_0x595dbb;if(this[_0x41b04f(0x1a8)])try{await this[_0x41b04f(0x18b)][_0x41b04f(0x1c8)](),_0x3b803d[_0x41b04f(0x1c7)][_0x41b04f(0x1a3)]?.['toast']?.['success']?.(this['modalDryRunMode']?_0x41b04f(0x1aa):_0x41b04f(0x1c2));}catch(_0x1756ec){_0x3b803d['$ok']['shared']?.[_0x41b04f(0x1ad)]?.[_0x41b04f(0x18c)]?.(_0x1756ec?.[_0x41b04f(0x1c3)]||_0x41b04f(0x1a7));}},'actionArgs'(_0x28510d){const _0x420640=_0x595dbb,_0x15f43d=_0x28510d[_0x420640(0x1b6)]??[];return 0x0===_0x15f43d[_0x420640(0x1d0)]?'':_0x15f43d[_0x420640(0x1ba)](_0x480ec3=>JSON[_0x420640(0x1b2)](_0x480ec3))[_0x420640(0x19c)](',\x20');},'formatJson'(_0x1c6389){const _0x1f4e49=_0x595dbb;try{return JSON[_0x1f4e49(0x1b2)](_0x1c6389,null,0x2);}catch{return String(_0x1c6389??'');}},'cancel'(){const _0xbc68dd=_0x595dbb;_0x3b803d[_0xbc68dd(0x19d)][_0xbc68dd(0x1d5)]['close']();}}),'template':_0x595dbb(0x1a5)};
|
|
1
|
+
const _0x1cd37d=_0x58a1;(function(_0x5a93f4,_0x4e2cb8){const _0x11ae8f=_0x58a1,_0x96f0f=_0x5a93f4();while(!![]){try{const _0x5524f9=-parseInt(_0x11ae8f(0xb3))/0x1*(-parseInt(_0x11ae8f(0xb4))/0x2)+-parseInt(_0x11ae8f(0xb2))/0x3+parseInt(_0x11ae8f(0xb9))/0x4*(-parseInt(_0x11ae8f(0xa7))/0x5)+-parseInt(_0x11ae8f(0xca))/0x6+parseInt(_0x11ae8f(0xd5))/0x7+parseInt(_0x11ae8f(0xea))/0x8+parseInt(_0x11ae8f(0xd7))/0x9*(parseInt(_0x11ae8f(0xbc))/0xa);if(_0x5524f9===_0x4e2cb8)break;else _0x96f0f['push'](_0x96f0f['shift']());}catch(_0x1f59df){_0x96f0f['push'](_0x96f0f['shift']());}}}(_0x2abf,0x9d6da));import _0x49b155 from'@toolkit/elements/ok-icon.ok.js';import _0x14a412 from'@toolkit/core/ok-overlay.ok.js';function _0x58a1(_0x39f94a,_0x8f963b){_0x39f94a=_0x39f94a-0xa0;const _0x2abfb6=_0x2abf();let _0x58a184=_0x2abfb6[_0x39f94a];return _0x58a184;}function _0x2abf(){const _0x112322=['Failed\x20to\x20save\x20function','modalEnabledDraft','Function\x20created:\x20','1818472vUvfNC','edit','success','isFinite','modalTimeoutMsDraft','modalJobContextDraft','stringify','Function\x20saved:\x20','{\x0a\x20\x20\x0a}','error','function-modal','runModalDraft','2805375yQvpDF','functions','modalDryRunMode','envName','canSave','runId','saveModalDefinition','modalAllowFetchDraft','result','modalRunning','canSaveModal','2406459xadXdW','6287ugiaBH','134sKHsCs','modalUnsafeDraft','modalDescriptionDraft','Failed\x20to\x20run\x20draft','modalPayloadDraft','8koVKyz','\x0a<div\x20style=\x22position:relative;\x20width:min(1220px,\x20calc(100vw\x20-\x2060px));\x20max-width:calc(100vw\x20-\x2060px);\x20min-width:900px;\x20min-height:760px;\x20display:flex;\x20flex-direction:column;\x20gap:16px;\x22>\x0a\x20\x20<if\x20:=\x22saving\x20||\x20running\x22>\x0a\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:32px;height:32px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:flex-start;\x20justify-content:space-between;\x20gap:16px;\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:18px;\x20font-weight:700;\x20color:var(--okdb-app-fg);\x22>{{\x20titleLabel\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:4px;\x20font-size:12px;\x20color:var(--okdb-app-fg-muted);\x22>Scope:\x20{{\x20scopeLabel\x20}}</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:16px;\x20font-size:12px;\x20color:var(--okdb-app-fg-muted);\x22>\x0a\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22store.modalEnabledDraft\x20!==\x20false\x22\x20@change=\x22setEnabled($el.checked)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Enabled\x0a\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20<label\x20:style=\x22unsafe\x20?\x20\x27display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x20color:var(--okdb-orange);\x20font-weight:600;\x27\x20:\x20\x27display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22store.modalUnsafeDraft\x20===\x20true\x22\x20@change=\x22setUnsafe($el.checked)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span>{{\x20unsafe\x20?\x20\x27⚠️\x20Unsafe\x27\x20:\x20\x27Unsafe\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22unsafe\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22padding:10px\x2014px;\x20border:1px\x20solid\x20#92400e;\x20border-radius:10px;\x20background:#1c0f00;\x20color:#fdba74;\x20font-size:12px;\x20line-height:1.6;\x20display:flex;\x20gap:10px;\x20align-items:flex-start;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:16px;\x20flex-shrink:0;\x22>⚠️</span>\x0a\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<strong\x20style=\x22color:var(--okdb-orange);\x22>Unsafe\x20function</strong>\x20—\x20this\x20function\x20receives\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code\x20style=\x22color:var(--okdb-warning);\x20background:#2c1800;\x20padding:1px\x205px;\x20border-radius:4px;\x22>ctx.okdb</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20in\x20addition\x20to\x20<code\x20style=\x22color:var(--okdb-accent-muted);\x20background:var(--okdb-app-bg-deep);\x20padding:1px\x205px;\x20border-radius:4px;\x22>ctx.env</code>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20<code\x20style=\x22color:var(--okdb-warning);\x22>ctx.okdb</code>\x20grants\x20full\x20cross-environment\x20database\x20access\x20including\x20creating\x20and\x20removing\x20environments.\x0a\x20\x20\x20\x20\x20\x20\x20\x20Only\x20use\x20this\x20for\x20privileged,\x20trusted\x20operations.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:minmax(320px,\x20380px)\x20minmax(0,\x201fr);\x20gap:16px;\x20min-height:0;\x20flex:1;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:12px;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x20margin-bottom:6px;\x22>Function\x20name</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20box-sizing:border-box;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22e.g.\x20queueFanout\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalNameDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22mode\x20===\x20\x27edit\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22setName($el.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:6px;\x20font-size:11px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Name\x20is\x20immutable\x20after\x20creation\x20and\x20becomes\x20the\x20function\x20entry\x20point.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x20margin-bottom:6px;\x22>Description</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<textarea\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20box-sizing:border-box;\x20min-height:110px;\x20resize:vertical;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x20color:#cfe6f2;\x20padding:10px;\x20font-size:12px;\x20line-height:1.5;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22What\x20does\x20this\x20function\x20do?\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalDescriptionDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22setDescription($el.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20></textarea>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:6px;\x20font-size:11px;\x20color:var(--okdb-app-fg-subtle);\x22>{{\x20descriptionLength\x20}}\x20chars</div>\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<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Runtime</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:1fr\x201fr;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x22>Timeout\x20(ms)</div>\x0a\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\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min=\x221\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20step=\x221000\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20box-sizing:border-box;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x225000\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalTimeoutMsDraft\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22setTimeoutMs($el.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\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:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x22>Memory\x20(MB)</div>\x0a\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\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min=\x221\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20step=\x221\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20box-sizing:border-box;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x2232\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalMemoryMbDraft\x20??\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22setMemoryMb($el.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\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\x20\x20<label\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20cursor:pointer;\x20user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22store.modalAllowFetchDraft\x20!==\x20false\x22\x20@change=\x22setAllowFetch($el.checked)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Allow\x20fetch\x0a\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-subtle);\x20line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Leave\x20blank\x20to\x20use\x20system\x20defaults\x20(timeout:\x205000ms,\x20memory:\x2032MB).\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<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Run\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.55;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Define\x20the\x20JSON\x20payload\x20you\x20want\x20to\x20execute\x20right\x20now\x20against\x20this\x20draft\x20before\x20saving\x20it.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22height:220px;\x20min-height:220px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:10px;\x20overflow:hidden;\x20background:var(--okdb-app-bg-deep);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-text-monaco-input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22height:100%;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20language=\x22json\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalPayloadDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@edit:debounce.150=\x22setPayload($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20></ok-text-monaco-input>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22payloadError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-danger);\x20line-height:1.5;\x22>{{\x20payloadError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20justify-content:flex-end;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22toggleModalDryRun()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22running\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22modalDryRunMode\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20?\x20\x27font-size:12px;\x20border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27font-size:12px;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Dry\x20Run{{\x20modalDryRunMode\x20?\x20\x27\x20✓\x27\x20:\x20\x27\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runDraft()\x22\x20:disabled=\x22!canRun\x22>{{\x20running\x20?\x20\x27Running…\x27\x20:\x20(modalDryRunMode\x20?\x20\x27Run\x20draft\x20(dry)\x27\x20:\x20\x27Run\x20draft\x27)\x20}}</button>\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<if\x20:=\x22previewTriggerKind\x20&&\x20previewTriggerContext\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Preview\x20trigger\x20context</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-accent-muted);\x20font-family:monospace;\x22>ctx.{{\x20previewTriggerKind\x20}}</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:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.55;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20This\x20draft\x20run\x20simulates\x20the\x20engine\x20metadata\x20shown\x20below\x20so\x20you\x20can\x20reproduce\x20handler\x20behavior\x20before\x20saving.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-word;\x20color:var(--okdb-app-fg-muted);\x20font-size:11px;\x20line-height:1.5;\x20max-height:180px;\x20overflow:auto;\x22>{{\x20formatJson(previewTriggerContext)\x20}}</pre>\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=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Validation</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22validation.ok\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-success);\x20line-height:1.55;\x22>Function\x20source\x20is\x20valid\x20and\x20can\x20be\x20saved.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!validation.ok\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-danger);\x20line-height:1.55;\x22>{{\x20validation.message\x20||\x20\x27Function\x20source\x20is\x20invalid\x27\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:#c38989;\x20font-family:monospace;\x22>{{\x20validation.code\x20||\x20\x27FUNCTION_SCRIPT_INVALID\x27\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-subtle);\x20line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Allowed\x20shape:\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>[async]\x20(ctx)\x20=>\x20{\x20}</span>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Forbidden\x20symbols:\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>require</span>,\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>import</span>,\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>console</span>,\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>process</span>.\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22display:grid;\x20grid-template-rows:minmax(0,1.2fr)\x20minmax(220px,.7fr)\x20minmax(240px,.9fr);\x20min-height:0;\x20gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20min-height:0;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:10px;\x20padding:12px\x2014px;\x20border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Implementation</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x20font-family:monospace;\x22>async\x20(ctx)\x20=>\x20{\x20}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20min-height:0;\x20background:var(--okdb-app-bg-deep);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-js-input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22height:100%;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22store.modalSourceDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:unsafe=\x22store.modalUnsafeDraft\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:options=\x22{\x20suggest:\x20{\x20showWords:\x20true\x20},\x20wordBasedSuggestions:\x20\x27currentDocument\x27\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@edit=\x22setSource($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20></ok-js-input>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20justify-content:space-between;\x20align-items:flex-start;\x20gap:12px;\x20font-size:11px;\x20color:var(--okdb-app-fg-subtle);\x20line-height:1.55;\x20padding:10px\x2014px;\x20border-top:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Runtime\x20receives\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-accent-muted);\x22>ctx</span>\x20with\x20DB\x20access\x20facades,\x20payload,\x20logs,\x20and\x20execution\x20info.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22unsafe\x22><span\x20style=\x22color:var(--okdb-orange);\x22>\x20⚠\x20Unsafe:\x20also\x20exposes\x20<span\x20style=\x22font-family:monospace;\x20color:var(--okdb-warning);\x22>ctx.okdb</span>\x20(full\x20cross-env\x20access).</span></if>\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=\x22white-space:nowrap;\x22>JS\x20/\x20Monaco</div>\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<div\x20style=\x22padding:14px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:12px;\x20background:var(--okdb-app-bg-deep);\x20min-height:0;\x20overflow:auto;\x20display:flex;\x20flex-direction:column;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22previewRun\x20&&\x20modalDryRunActions\x20!==\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-accent);\x22>Dry\x20run\x20—\x20intercepted\x20writes\x20({{\x20modalDryRunActions.length\x20}})</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!previewRun\x20||\x20modalDryRunActions\x20===\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20letter-spacing:.08em;\x20color:var(--okdb-app-fg-muted);\x22>Draft\x20execution\x20result</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22previewRun\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x20font-family:monospace;\x22>{{\x20previewRunId\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\x20\x20<if\x20:=\x22!previewRun\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.5;\x22>Run\x20the\x20draft\x20to\x20see\x20the\x20latest\x20result\x20before\x20you\x20save.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22previewRun\x20&&\x20modalDryRunActions\x20!==\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.5;\x22>Status:\x20<strong>{{\x20previewRun.status\x20||\x20(previewRun.error\x20?\x20\x27error\x27\x20:\x20\x27ok\x27)\x20}}</strong></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22modalDryRunActions.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x22>No\x20writes\x20intercepted.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22modalDryRunActions\x22\x20let:item=\x22action\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:5px\x208px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2020%,\x20transparent);\x20border-radius:6px;\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x204%,\x20transparent);\x20font-family:monospace;\x20font-size:11px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.45;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>{{\x20action.scope\x20}}.{{\x20action.method\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22action.envName\x22><span\x20style=\x22opacity:.6;\x22>\x20[{{\x20action.envName\x20}}]</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22actionArgs(action)\x22><span>\x20({{\x20actionArgs(action)\x20}})</span></if>\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</each>\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:=\x22previewRun.result?.value\x20!==\x20undefined\x20&&\x20previewRun.result?.value\x20!==\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20text-transform:uppercase;\x20color:var(--okdb-app-fg-muted);\x20margin-top:4px;\x22>Return\x20value</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-word;\x20color:var(--okdb-app-fg-muted);\x20font-size:11px;\x20line-height:1.5;\x22>{{\x20formatJson(previewRun.result.value)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22previewRun\x20&&\x20modalDryRunActions\x20===\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20line-height:1.5;\x22>Status:\x20<strong>{{\x20previewRun.status\x20||\x20(previewRun.error\x20?\x20\x27error\x27\x20:\x20\x27ok\x27)\x20}}</strong></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22margin:0;\x20white-space:pre-wrap;\x20word-break:break-word;\x20color:var(--okdb-app-fg-muted);\x20font-size:11px;\x20line-height:1.5;\x22>{{\x20formatJson(previewRun.result?.value\x20??\x20previewRun.error\x20??\x20previewRun)\x20}}</pre>\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<function-logs\x20:run-id=\x22previewRunId\x22\x20:entries=\x22previewLogs\x22\x20title=\x22Draft\x20live\x20log\x22\x20empty=\x22Run\x20the\x20draft\x20to\x20stream\x20function\x20logs\x20here.\x22></function-logs>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20justify-content:flex-end;\x20gap:10px;\x20padding-top:4px;\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22cancel()\x22>Cancel</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22submit()\x22\x20:disabled=\x22!canSave\x22>{{\x20saveLabel\x20}}</button>\x0a\x20\x20</div>\x0a</div>\x0a\x20\x20\x20\x20','name','10jcDOWA','join','length','processor','modal','modalMode','modalNameDraft','toast','modalValidation','args','$ok','stores','logsForRun','setModalPayloadDraft','297228XOhsAI','selectedName','$attr','Save\x20changes','close','Create\x20function','modalMemoryMbDraft','modalProcessorContextDraft','dryRunActions','Draft\x20executed','onDone','4816917xroaOM','previewRunId','11537982AIdUoX','previewRun','modalMaterializerContextDraft','Dry\x20run\x20complete','map','store','job','Edit\x20function','setModalSourceDraft','create','modalPayloadError','canRun','mode','modalPreviewRun','message','shared'];_0x2abf=function(){return _0x112322;};return _0x2abf();}import _0x636380 from'../../../components/ok-js-input.ok.js';import _0x5b9e1c from'../../../components/ok-text-monaco-input.ok.js';import _0x22a5b6 from'../parts/function-logs.ok.js';export default{'tag':_0x1cd37d(0xa5),'dependencies':[_0x49b155,_0x14a412,_0x636380,_0x5b9e1c,_0x22a5b6],'attr':{'modal':{},'mode':{},'onDone':{}},'context':_0x26e872=>({get 'store'(){const _0x552800=_0x1cd37d;return _0x26e872[_0x552800(0xc6)][_0x552800(0xc7)][_0x552800(0xa8)];},get 'mode'(){const _0x3b32fb=_0x1cd37d;return _0x26e872[_0x3b32fb(0xcc)][_0x3b32fb(0xe3)]||this[_0x3b32fb(0xdc)][_0x3b32fb(0xc1)]||_0x3b32fb(0xe0);},get 'saving'(){const _0x310ad4=_0x1cd37d;return this[_0x310ad4(0xdc)]['saving'];},get 'running'(){const _0x1bcfa7=_0x1cd37d;return this[_0x1bcfa7(0xdc)][_0x1bcfa7(0xb0)];},get 'validation'(){const _0x487bda=_0x1cd37d;return this[_0x487bda(0xdc)][_0x487bda(0xc4)]||{};},get 'canSave'(){const _0x97b2ed=_0x1cd37d;return this[_0x97b2ed(0xdc)][_0x97b2ed(0xb1)];},get 'canRun'(){const _0x2b88b1=_0x1cd37d;return!!this[_0x2b88b1(0xdc)][_0x2b88b1(0xc4)]?.['ok']&&!this[_0x2b88b1(0xdc)][_0x2b88b1(0xe1)]&&!this[_0x2b88b1(0xdc)]['modalRunning'];},get 'modalDryRunMode'(){const _0xac6490=_0x1cd37d;return this['store'][_0xac6490(0xa9)];},get 'modalDryRunActions'(){const _0x33625f=_0x1cd37d;return this[_0x33625f(0xdc)][_0x33625f(0xe4)]?.[_0x33625f(0xaf)]?.[_0x33625f(0xd2)]??null;},'toggleModalDryRun'(){const _0x5569af=_0x1cd37d;this[_0x5569af(0xdc)][_0x5569af(0xa9)]=!this[_0x5569af(0xdc)]['modalDryRunMode'];},get 'scopeLabel'(){const _0x54d03c=_0x1cd37d;return this[_0x54d03c(0xdc)][_0x54d03c(0xaa)]||'—';},get 'unsafe'(){const _0x4cf135=_0x1cd37d;return!0x0===this[_0x4cf135(0xdc)]['modalUnsafeDraft'];},get 'titleLabel'(){const _0xbc20d3=_0x1cd37d;return _0xbc20d3(0xeb)===this[_0xbc20d3(0xe3)]?_0xbc20d3(0xde):_0xbc20d3(0xcf);},get 'saveLabel'(){const _0x430d91=_0x1cd37d;return _0x430d91(0xeb)===this[_0x430d91(0xe3)]?_0x430d91(0xcd):_0x430d91(0xcf);},get 'descriptionLength'(){const _0x2a3843=_0x1cd37d;return String(this['store'][_0x2a3843(0xb6)]||'')[_0x2a3843(0xbe)];},get 'payloadError'(){const _0x799b68=_0x1cd37d;return this[_0x799b68(0xdc)][_0x799b68(0xe1)];},get 'previewRun'(){const _0x5665c8=_0x1cd37d;return this[_0x5665c8(0xdc)][_0x5665c8(0xe4)];},get 'previewRunId'(){const _0x32e532=_0x1cd37d;return this[_0x32e532(0xd8)]?.['id']||this[_0x32e532(0xd8)]?.[_0x32e532(0xac)]||null;},get 'previewLogs'(){const _0x3202b9=_0x1cd37d;return this[_0x3202b9(0xdc)][_0x3202b9(0xc8)](this[_0x3202b9(0xd6)]);},get 'previewTriggerKind'(){const _0x5cf816=_0x1cd37d;return this[_0x5cf816(0xdc)][_0x5cf816(0xd9)]?'materializer':this[_0x5cf816(0xdc)][_0x5cf816(0xd1)]?_0x5cf816(0xbf):this['store'][_0x5cf816(0xa0)]?_0x5cf816(0xdd):null;},get 'previewTriggerContext'(){const _0x5a2d00=_0x1cd37d;return this['store'][_0x5a2d00(0xd9)]||this[_0x5a2d00(0xdc)][_0x5a2d00(0xd1)]||this[_0x5a2d00(0xdc)][_0x5a2d00(0xa0)]||null;},'setName'(_0x368404){const _0x3ce233=_0x1cd37d;this[_0x3ce233(0xdc)][_0x3ce233(0xc2)]=_0x368404??'';},'setDescription'(_0x593978){const _0x2551f6=_0x1cd37d;this['store'][_0x2551f6(0xb6)]=_0x593978??'';},'setEnabled'(_0x2114b3){const _0x19b4ac=_0x1cd37d;this[_0x19b4ac(0xdc)][_0x19b4ac(0xe8)]=!!_0x2114b3;},'setUnsafe'(_0x416484){const _0x1f08d6=_0x1cd37d;this[_0x1f08d6(0xdc)][_0x1f08d6(0xb5)]=!!_0x416484;},'setTimeoutMs'(_0x3a4693){const _0x4f0d0a=_0x1cd37d,_0x5cfa58=parseInt(_0x3a4693,0xa);this[_0x4f0d0a(0xdc)][_0x4f0d0a(0xee)]=Number[_0x4f0d0a(0xed)](_0x5cfa58)&&_0x5cfa58>0x0?_0x5cfa58:null;},'setMemoryMb'(_0x5723f3){const _0x1dc353=_0x1cd37d,_0x39edd4=parseInt(_0x5723f3,0xa);this['store'][_0x1dc353(0xd0)]=Number[_0x1dc353(0xed)](_0x39edd4)&&_0x39edd4>0x0?_0x39edd4:null;},'setAllowFetch'(_0x39e959){const _0x1f574f=_0x1cd37d;this[_0x1f574f(0xdc)][_0x1f574f(0xae)]=!!_0x39e959;},'setSource'(_0x10c030){const _0xd2719c=_0x1cd37d;this[_0xd2719c(0xdc)][_0xd2719c(0xdf)](_0x10c030??'');},'setPayload'(_0x33f7ed){const _0x505cbd=_0x1cd37d;this[_0x505cbd(0xdc)][_0x505cbd(0xc9)](_0x33f7ed??_0x505cbd(0xa3));},async 'submit'(){const _0x214948=_0x1cd37d;if(this[_0x214948(0xab)])try{const _0x29419c=await this[_0x214948(0xdc)][_0x214948(0xad)]();this[_0x214948(0xdc)]['setPayloadDraft'](this['store'][_0x214948(0xb8)]),_0x26e872[_0x214948(0xc6)][_0x214948(0xe6)]?.['toast']?.['success']?.('edit'===this[_0x214948(0xe3)]?_0x214948(0xa2)+(_0x29419c?.['name']||this[_0x214948(0xdc)][_0x214948(0xcb)]):_0x214948(0xe9)+(_0x29419c?.[_0x214948(0xbb)]||this['store'][_0x214948(0xc2)])),await _0x26e872[_0x214948(0xcc)][_0x214948(0xc0)][_0x214948(0xce)](),await _0x26e872['$attr'][_0x214948(0xd4)]?.(_0x29419c);}catch(_0x42e4c3){_0x26e872[_0x214948(0xc6)][_0x214948(0xe6)]?.[_0x214948(0xc3)]?.['error']?.(_0x42e4c3?.[_0x214948(0xe5)]||_0x214948(0xe7));}},async 'runDraft'(){const _0x513bc5=_0x1cd37d;if(this[_0x513bc5(0xe2)])try{await this[_0x513bc5(0xdc)][_0x513bc5(0xa6)](),_0x26e872[_0x513bc5(0xc6)][_0x513bc5(0xe6)]?.['toast']?.[_0x513bc5(0xec)]?.(this[_0x513bc5(0xa9)]?_0x513bc5(0xda):_0x513bc5(0xd3));}catch(_0x30fd6c){_0x26e872[_0x513bc5(0xc6)][_0x513bc5(0xe6)]?.[_0x513bc5(0xc3)]?.[_0x513bc5(0xa4)]?.(_0x30fd6c?.[_0x513bc5(0xe5)]||_0x513bc5(0xb7));}},'actionArgs'(_0x433e8c){const _0x4272f1=_0x1cd37d,_0x1329ca=_0x433e8c[_0x4272f1(0xc5)]??[];return 0x0===_0x1329ca[_0x4272f1(0xbe)]?'':_0x1329ca[_0x4272f1(0xdb)](_0x513b06=>JSON[_0x4272f1(0xa1)](_0x513b06))[_0x4272f1(0xbd)](',\x20');},'formatJson'(_0x1e305d){try{return JSON['stringify'](_0x1e305d,null,0x2);}catch{return String(_0x1e305d??'');}},'cancel'(){const _0x33661b=_0x1cd37d;_0x26e872['$attr'][_0x33661b(0xc0)]['close']();}}),'template':_0x1cd37d(0xba)};
|