@kedem/okdb 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +1 -1
  2. package/bin/okdb.js +1 -1
  3. package/okdb-data/default/data.mdb +0 -0
  4. package/okdb-data/default/lock.mdb +0 -0
  5. package/okdb-data/~log/data.mdb +0 -0
  6. package/okdb-data/~log/lock.mdb +0 -0
  7. package/okdb-data/~system/data.mdb +0 -0
  8. package/okdb-data/~system/lock.mdb +0 -0
  9. package/okdb.js +1 -1
  10. package/package.json +1 -1
  11. package/public/admin-app.js +1 -1
  12. package/public/components/admin-route-host.ok.js +1 -1
  13. package/public/components/env-picker.ok.js +1 -1
  14. package/public/components/field-path-input.ok.js +1 -1
  15. package/public/components/geo-map.ok.js +1 -1
  16. package/public/components/ok-cron-input.ok.js +1 -1
  17. package/public/components/ok-dropzone.ok.js +1 -1
  18. package/public/components/ok-js-input.ok.js +1 -1
  19. package/public/components/ok-json-input.ok.js +1 -1
  20. package/public/components/ok-text-monaco-input.ok.js +1 -1
  21. package/public/components/theme-toggle.ok.js +1 -1
  22. package/public/login-app.js +1 -1
  23. package/public/modules/ok.js +1 -1
  24. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  25. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  26. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  27. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  28. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  29. package/public/sections/auth/parts/token-list.ok.js +1 -1
  30. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  31. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  32. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  33. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  34. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  35. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  36. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  37. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  38. package/public/sections/db/parts/db-overview.ok.js +1 -1
  39. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  40. package/public/sections/db/parts/edit-row.ok.js +1 -1
  41. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  42. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  43. package/public/sections/db/parts/type-list.ok.js +1 -1
  44. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  45. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  46. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  47. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  48. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  49. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  50. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  51. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  52. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  55. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  56. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  57. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  58. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  59. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  60. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  61. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  62. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  63. package/public/sections/engines/engine-ui-utils.js +1 -1
  64. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  65. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  66. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  67. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  68. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  69. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  70. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  71. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  72. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  73. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  74. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  75. package/public/sections/files/parts/files-overview.ok.js +1 -1
  76. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  77. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  78. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  79. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  80. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  81. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  82. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  83. package/public/sections/license/parts/license-panel.ok.js +1 -1
  84. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  85. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  86. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  87. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  88. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  89. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  90. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  91. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  92. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  93. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  94. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  95. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  96. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  97. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  98. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  99. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  100. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  101. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  102. package/public/sections/system/parts/system-log.ok.js +1 -1
  103. package/public/sections/system/parts/system-status.ok.js +1 -1
  104. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  105. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  106. package/public/sections/views/parts/view-detail.ok.js +1 -1
  107. package/public/sections/views/parts/views-list.ok.js +1 -1
  108. package/public/sections/views/parts/views-overview.ok.js +1 -1
  109. package/public/setup-app.js +1 -1
  110. package/public/stores/auth-store.js +1 -1
  111. package/public/stores/events-store.js +1 -1
  112. package/public/stores/functions-store.js +1 -1
  113. package/public/stores/okdb-store.js +1 -1
  114. package/public/stores/theme-store.js +1 -1
  115. package/public/util/permissions.js +1 -1
  116. package/public/util/sift-schema.js +1 -1
  117. package/public/view-models/type-query-vm.js +1 -1
@@ -1 +1 @@
1
- function _0x3fc0(){const _0xf0ea7d=['188470uFKfoi','64lrHpIA','1119HgMCWf','\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>','apiBase','path','failed','\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','1714BiTCXi','match','385oiPOAa','error','449380xOGrPF','3103345ZsMsSz','json','80345Dgasur','busy','_unsubs','$dispatch','16680180yHZWWF','get','allFiles','sort','selected','204957gWAMIG','24iKlnTR','localeCompare','entries','load','6FSkSEC','loaded','files:uploaded','files:removed','length'];_0x3fc0=function(){return _0xf0ea7d;};return _0x3fc0();}const _0x419119=_0x7cda;function _0x7cda(_0x3f94c5,_0xfd3cbe){_0x3f94c5=_0x3f94c5-0xf9;const _0x3fc018=_0x3fc0();let _0x7cda5f=_0x3fc018[_0x3f94c5];return _0x7cda5f;}(function(_0x2d197b,_0x109ed3){const _0x1e2b89=_0x7cda,_0x1eeacb=_0x2d197b();while(!![]){try{const _0x445959=-parseInt(_0x1e2b89(0x118))/0x1+parseInt(_0x1e2b89(0x114))/0x2*(parseInt(_0x1e2b89(0x10e))/0x3)+parseInt(_0x1e2b89(0x10d))/0x4*(parseInt(_0x1e2b89(0xf9))/0x5)+-parseInt(_0x1e2b89(0x107))/0x6*(parseInt(_0x1e2b89(0x119))/0x7)+parseInt(_0x1e2b89(0x103))/0x8*(-parseInt(_0x1e2b89(0x102))/0x9)+-parseInt(_0x1e2b89(0x10c))/0xa*(parseInt(_0x1e2b89(0x116))/0xb)+parseInt(_0x1e2b89(0xfd))/0xc;if(_0x445959===_0x109ed3)break;else _0x1eeacb['push'](_0x1eeacb['shift']());}catch(_0x1b4d1a){_0x1eeacb['push'](_0x1eeacb['shift']());}}}(_0x3fc0,0x547f5));import _0x2b53cd from'../../../stores/events-store.js';import _0x44d78d from'../../../stores/okdb-store.js';export default{'tag':'files-path-browser','context':_0x5b789f=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0xd94b6=_0x7cda;this[_0xd94b6(0xfa)]=!0x0;try{const _0x55feeb=await fetch(_0x44d78d[_0xd94b6(0x110)]+'/files?path=/&limit=5000');if(!_0x55feeb['ok'])throw new Error(_0xd94b6(0x112));const _0x543600=await _0x55feeb[_0xd94b6(0x11a)]();this[_0xd94b6(0xff)]=_0x543600['data']??[],_0x5b789f[_0xd94b6(0xfc)](_0xd94b6(0x108),this[_0xd94b6(0xff)]);}catch(_0x311016){console[_0xd94b6(0x117)]('files-path-browser\x20load\x20error',_0x311016);}finally{this[_0xd94b6(0xfa)]=!0x1;}},'clearSelection'(){this['selected']=null;},'select'(_0x4753e6){const _0x41d668=_0x7cda;this[_0x41d668(0x101)]=_0x4753e6,_0x5b789f['$dispatch']('select',_0x4753e6);},get 'dirs'(){const _0x477e72=_0x7cda,_0x123362=new Map();for(const _0x23b4ba of this[_0x477e72(0xff)]){const _0x3a9dbb=(_0x23b4ba[_0x477e72(0x111)]??'')[_0x477e72(0x115)](/^(\/[^/]+)/),_0x39d4f3=_0x3a9dbb?_0x3a9dbb[0x1]:'/';_0x123362['set'](_0x39d4f3,(_0x123362[_0x477e72(0xfe)](_0x39d4f3)??0x0)+0x1);}return[..._0x123362[_0x477e72(0x105)]()][_0x477e72(0x100)]((_0x4d4159,_0x3f83b1)=>_0x4d4159[0x0][_0x477e72(0x104)](_0x3f83b1[0x0]))['map'](([_0x516f0f,_0x279000])=>({'path':_0x516f0f,'count':_0x279000}));},get 'totalFiles'(){const _0x315d45=_0x7cda;return this[_0x315d45(0xff)][_0x315d45(0x10b)];}}),async 'mount'(){const _0x3972f9=_0x7cda;await this[_0x3972f9(0x106)]();const _0x5a7896=()=>this['load']();this[_0x3972f9(0xfb)]=[_0x2b53cd['on'](_0x3972f9(0x109),_0x5a7896),_0x2b53cd['on'](_0x3972f9(0x10a),_0x5a7896)];},'unmount'(){const _0xea322a=_0x7cda;for(const _0x2b56f7 of this[_0xea322a(0xfb)])_0x2b56f7();this['_unsubs']=[];},'template':_0x419119(0x10f),'style':_0x419119(0x113)};
1
+ const _0x50fd56=_0x1958;(function(_0x2dba62,_0xa8f38a){const _0xebe2e=_0x1958,_0x576b1d=_0x2dba62();while(!![]){try{const _0x24d307=-parseInt(_0xebe2e(0xa8))/0x1+parseInt(_0xebe2e(0xa6))/0x2+parseInt(_0xebe2e(0xa2))/0x3*(-parseInt(_0xebe2e(0xa7))/0x4)+-parseInt(_0xebe2e(0x9a))/0x5+-parseInt(_0xebe2e(0xa3))/0x6+parseInt(_0xebe2e(0x94))/0x7*(parseInt(_0xebe2e(0x8c))/0x8)+parseInt(_0xebe2e(0x95))/0x9*(parseInt(_0xebe2e(0x9d))/0xa);if(_0x24d307===_0xa8f38a)break;else _0x576b1d['push'](_0x576b1d['shift']());}catch(_0x182d79){_0x576b1d['push'](_0x576b1d['shift']());}}}(_0x4499,0x38925));import _0x1c8b07 from'../../../stores/events-store.js';import _0x12e3ed from'../../../stores/okdb-store.js';function _0x1958(_0x1a09ef,_0x5e730d){_0x1a09ef=_0x1a09ef-0x8a;const _0x44998e=_0x4499();let _0x195879=_0x44998e[_0x1a09ef];return _0x195879;}export default{'tag':'files-path-browser','context':_0x5c59aa=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0x3f92b0=_0x1958;this[_0x3f92b0(0x8b)]=!0x0;try{const _0x28b758=await fetch(_0x12e3ed[_0x3f92b0(0xa9)]+_0x3f92b0(0x91));if(!_0x28b758['ok'])throw new Error(_0x3f92b0(0x97));const _0x37dbf0=await _0x28b758['json']();this['allFiles']=_0x37dbf0[_0x3f92b0(0x98)]??[],_0x5c59aa[_0x3f92b0(0x90)](_0x3f92b0(0xa5),this[_0x3f92b0(0x9f)]);}catch(_0x59633a){console['error'](_0x3f92b0(0x96),_0x59633a);}finally{this['busy']=!0x1;}},'clearSelection'(){const _0xd446ae=_0x1958;this[_0xd446ae(0x8a)]=null;},'select'(_0x3b7baa){const _0x2b2cd8=_0x1958;this[_0x2b2cd8(0x8a)]=_0x3b7baa,_0x5c59aa['$dispatch']('select',_0x3b7baa);},get 'dirs'(){const _0x12593d=_0x1958,_0x222ffd=new Map();for(const _0x5329d7 of this[_0x12593d(0x9f)]){const _0xaedf27=(_0x5329d7[_0x12593d(0xaa)]??'')[_0x12593d(0x8f)](/^(\/[^/]+)/),_0x309e57=_0xaedf27?_0xaedf27[0x1]:'/';_0x222ffd['set'](_0x309e57,(_0x222ffd[_0x12593d(0x9e)](_0x309e57)??0x0)+0x1);}return[..._0x222ffd[_0x12593d(0xa4)]()][_0x12593d(0x92)]((_0x5200ff,_0x2d2562)=>_0x5200ff[0x0][_0x12593d(0xa1)](_0x2d2562[0x0]))[_0x12593d(0x99)](([_0x181610,_0x1d3eda])=>({'path':_0x181610,'count':_0x1d3eda}));},get 'totalFiles'(){const _0x55afb5=_0x1958;return this[_0x55afb5(0x9f)][_0x55afb5(0xa0)];}}),async 'mount'(){const _0x319e66=_0x1958;await this[_0x319e66(0x93)]();const _0x206e28=()=>this[_0x319e66(0x93)]();this[_0x319e66(0x9c)]=[_0x1c8b07['on'](_0x319e66(0x8e),_0x206e28),_0x1c8b07['on'](_0x319e66(0x8d),_0x206e28)];},'unmount'(){const _0xfe1051=_0x1958;for(const _0x1f66cb of this[_0xfe1051(0x9c)])_0x1f66cb();this[_0xfe1051(0x9c)]=[];},'template':'\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>','style':_0x50fd56(0x9b)};function _0x4499(){const _0x3676f7=['allFiles','length','localeCompare','9xwiVnc','1820004WgTuIU','entries','loaded','913706BKXzJG','120448dEoHtr','395907uiPpNa','apiBase','path','selected','busy','3025544iYJMfo','files:removed','files:uploaded','match','$dispatch','/files?path=/&limit=5000','sort','load','7DvMeTS','2855484LOSOQg','files-path-browser\x20load\x20error','failed','data','map','2241520YMtLdE','\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','_unsubs','20EsoQNT','get'];_0x4499=function(){return _0x3676f7;};return _0x4499();}
@@ -1 +1 @@
1
- var _0x2bf8d3=_0x4b8d;(function(_0x314da1,_0x29b0d0){var _0xf8f434=_0x4b8d,_0x3b0748=_0x314da1();while(!![]){try{var _0x1e82c5=-parseInt(_0xf8f434(0x1a1))/0x1+-parseInt(_0xf8f434(0x19c))/0x2*(parseInt(_0xf8f434(0x1a4))/0x3)+-parseInt(_0xf8f434(0x1a5))/0x4+parseInt(_0xf8f434(0x1a9))/0x5+parseInt(_0xf8f434(0x1aa))/0x6*(parseInt(_0xf8f434(0x1a3))/0x7)+parseInt(_0xf8f434(0x1a8))/0x8+parseInt(_0xf8f434(0x19e))/0x9;if(_0x1e82c5===_0x29b0d0)break;else _0x3b0748['push'](_0x3b0748['shift']());}catch(_0x5d92f7){_0x3b0748['push'](_0x3b0748['shift']());}}}(_0x3766,0x8f051));import _0x51e247 from'./files-file-list.ok.js';function _0x4b8d(_0x1a956d,_0x590e8e){_0x1a956d=_0x1a956d-0x19c;var _0x376667=_0x3766();var _0x4b8d70=_0x376667[_0x1a956d];return _0x4b8d70;}function _0x3766(){var _0x394a18=['3nmzUoy','4128400sqhNwf','$attr','path','5358440HCZYmn','2918370ATApXI','248754gpOewr','913124aMqRbv','\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>','4456287ohEyoL','files-path-panel','refresh','461872jdkFny','$dispatch','133SAoYAb'];_0x3766=function(){return _0x394a18;};return _0x3766();}export default{'tag':_0x2bf8d3(0x19f),'props':[_0x2bf8d3(0x1a7)],'dependencies':[_0x51e247],'context':_0x3aa76e=>({get 'path'(){var _0x3538e5=_0x2bf8d3;return _0x3aa76e[_0x3538e5(0x1a6)][_0x3538e5(0x1a7)]??'/';},'onRefresh'(){var _0x21a723=_0x2bf8d3;_0x3aa76e[_0x21a723(0x1a2)](_0x21a723(0x1a0));}}),'template':_0x2bf8d3(0x19d)};
1
+ function _0x534d(_0x404475,_0x3e61c3){_0x404475=_0x404475-0x1ec;var _0x2ba293=_0x2ba2();var _0x534d24=_0x2ba293[_0x404475];return _0x534d24;}function _0x2ba2(){var _0x242d14=['$dispatch','files-path-panel','5752872bGkcjQ','1236490AQZQZc','3414rjGAzS','6853AoqLYA','4295133lqcepH','18dcSKVd','\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>','69617uhkyAE','path','7535871UDQmfz','$attr','1195630qDDlVC','refresh','33tUDsnF','16BbfGZt'];_0x2ba2=function(){return _0x242d14;};return _0x2ba2();}var _0x559173=_0x534d;(function(_0x3b923f,_0x525e46){var _0x476670=_0x534d,_0x1b6ab3=_0x3b923f();while(!![]){try{var _0x275504=-parseInt(_0x476670(0x1fc))/0x1*(-parseInt(_0x476670(0x1fa))/0x2)+parseInt(_0x476670(0x1f9))/0x3+-parseInt(_0x476670(0x1f2))/0x4*(parseInt(_0x476670(0x1f6))/0x5)+-parseInt(_0x476670(0x1f7))/0x6*(parseInt(_0x476670(0x1f8))/0x7)+parseInt(_0x476670(0x1f5))/0x8+-parseInt(_0x476670(0x1ed))/0x9+parseInt(_0x476670(0x1ef))/0xa*(parseInt(_0x476670(0x1f1))/0xb);if(_0x275504===_0x525e46)break;else _0x1b6ab3['push'](_0x1b6ab3['shift']());}catch(_0xfa67bf){_0x1b6ab3['push'](_0x1b6ab3['shift']());}}}(_0x2ba2,0xb7b74));import _0x1279c0 from'./files-file-list.ok.js';export default{'tag':_0x559173(0x1f4),'props':['path'],'dependencies':[_0x1279c0],'context':_0x2ab490=>({get 'path'(){var _0x52b517=_0x559173;return _0x2ab490[_0x52b517(0x1ee)][_0x52b517(0x1ec)]??'/';},'onRefresh'(){var _0x5d9bdd=_0x559173;_0x2ab490[_0x5d9bdd(0x1f3)](_0x5d9bdd(0x1f0));}}),'template':_0x559173(0x1fb)};
@@ -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
+ function _0x5ca0(_0x173836,_0x169f20){_0x173836=_0x173836-0xb5;const _0x34b308=_0x34b3();let _0x5ca02c=_0x34b308[_0x173836];return _0x5ca02c;}const _0x52e649=_0x5ca0;(function(_0x419f57,_0x3cf62b){const _0x476027=_0x5ca0,_0x353ec0=_0x419f57();while(!![]){try{const _0x1d3c93=-parseInt(_0x476027(0xca))/0x1+-parseInt(_0x476027(0xe9))/0x2*(-parseInt(_0x476027(0xe2))/0x3)+-parseInt(_0x476027(0xb6))/0x4*(-parseInt(_0x476027(0xb7))/0x5)+-parseInt(_0x476027(0xb9))/0x6*(-parseInt(_0x476027(0xd0))/0x7)+-parseInt(_0x476027(0xd4))/0x8*(parseInt(_0x476027(0xe3))/0x9)+-parseInt(_0x476027(0xc8))/0xa*(-parseInt(_0x476027(0xdf))/0xb)+parseInt(_0x476027(0xe1))/0xc*(parseInt(_0x476027(0xc9))/0xd);if(_0x1d3c93===_0x3cf62b)break;else _0x353ec0['push'](_0x353ec0['shift']());}catch(_0x436173){_0x353ec0['push'](_0x353ec0['shift']());}}}(_0x34b3,0x3bcea));import _0x13db8b from'./files-upload-panel.ok.js';function _0x34b3(){const _0x4b4afc=['files','&recursive=true&limit=2000','#16a34a','audio/','18010xOqStQ','#ca8a04','catch','path','#0891b2','files:uploaded','refresh','video/','filter','\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>','4nZORMn','458320fWlfrj','ceil','36dqYDtx','\x20KB','var(--okdb-mime-default)','startsWith','zip','error','page','pop','#0d9488','#7c3aed','load','$attr','message','apiBase','busy','2700lkhEzT','135993fEoPot','347250BQkhYQ','toFixed','slice','2-digit','_unsubs','/files/','43169XTkbQM','xml','toLocaleDateString','Delete\x20failed','2715224iDSCSH','failed','data','files-file-list','\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','json','includes','toLocaleTimeString','filename','pageSize','/files?path=','16819EspQgE','tar','24IlIHaH','123dernDs','9lkYJbl','pdf'];_0x34b3=function(){return _0x4b4afc;};return _0x34b3();}import _0x2b896c from'../../../stores/events-store.js';import _0x1d10af from'../../../stores/okdb-store.js';export default{'tag':_0x52e649(0xd7),'props':[_0x52e649(0xec)],'dependencies':[_0x13db8b],'context':_0x5b9d9d=>({'busy':!0x1,'files':[],'error':null,'showUpload':!0x1,'page':0x0,'pageSize':0x32,'totalLoaded':0x0,'_unsubs':[],get 'path'(){const _0x3b98a3=_0x52e649;return _0x5b9d9d[_0x3b98a3(0xc4)][_0x3b98a3(0xec)]??'/';},get 'pagedFiles'(){const _0x10e6c0=_0x52e649,_0x29aba6=this[_0x10e6c0(0xbf)]*this[_0x10e6c0(0xdd)];return this[_0x10e6c0(0xe5)][_0x10e6c0(0xcc)](_0x29aba6,_0x29aba6+this[_0x10e6c0(0xdd)]);},get 'totalPages'(){const _0x5b8cec=_0x52e649;return Math['max'](0x1,Math[_0x5b8cec(0xb8)](this['files']['length']/this[_0x5b8cec(0xdd)]));},get 'hasNext'(){const _0x1c4af8=_0x52e649;return this[_0x1c4af8(0xbf)]<this['totalPages']-0x1;},get 'hasPrev'(){const _0x1fece3=_0x52e649;return this[_0x1fece3(0xbf)]>0x0;},async 'load'(){const _0x23345b=_0x52e649,_0x454e73=_0x5b9d9d[_0x23345b(0xc4)][_0x23345b(0xec)];if(null!=_0x454e73){this['busy']=!0x0,this[_0x23345b(0xbe)]=null;try{const _0x10f003=_0x1d10af[_0x23345b(0xc6)]+_0x23345b(0xde)+encodeURIComponent(_0x454e73)+_0x23345b(0xe6),_0x6fd146=await fetch(_0x10f003),_0xb041b6=await _0x6fd146[_0x23345b(0xd9)]();if(!_0x6fd146['ok'])throw new Error(_0xb041b6?.[_0x23345b(0xbe)]?.['message']||_0x23345b(0xd5));this['files']=_0xb041b6[_0x23345b(0xd6)]??[],this[_0x23345b(0xbf)]=0x0;}catch(_0x1f5053){this[_0x23345b(0xbe)]=_0x1f5053?.['message']||String(_0x1f5053),this[_0x23345b(0xe5)]=[];}finally{this[_0x23345b(0xc7)]=!0x1;}}else this[_0x23345b(0xe5)]=[];},async 'deleteFile'(_0x3a7195){const _0x2d1d79=_0x52e649,_0x7fabfd=this[_0x2d1d79(0xdc)](_0x3a7195);if(confirm('Delete\x20\x22'+_0x7fabfd+'\x22?\x0a\x0aThis\x20will\x20decrement\x20the\x20blob\x20ref-count.'))try{const _0x2d3e4a=_0x1d10af[_0x2d1d79(0xc6)],_0x137e2e=await fetch(_0x2d3e4a+_0x2d1d79(0xcf)+encodeURIComponent(_0x3a7195['id']),{'method':'DELETE'});if(!_0x137e2e['ok']){const _0x29acfa=await _0x137e2e[_0x2d1d79(0xd9)]()[_0x2d1d79(0xeb)](()=>({}));throw new Error(_0x29acfa?.[_0x2d1d79(0xbe)]?.[_0x2d1d79(0xc5)]||_0x2d1d79(0xd3));}this['files']=this[_0x2d1d79(0xe5)][_0x2d1d79(0xf1)](_0x14bf58=>_0x14bf58['id']!==_0x3a7195['id']),_0x5b9d9d['$dispatch'](_0x2d1d79(0xef));}catch(_0x4ddc38){this['error']=_0x4ddc38?.[_0x2d1d79(0xc5)]||String(_0x4ddc38);}},'downloadUrl':_0x4b8757=>_0x1d10af[_0x52e649(0xc6)]+'/files/'+encodeURIComponent(_0x4b8757['id']),'statusUrl':_0x528d44=>_0x1d10af[_0x52e649(0xc6)]+'/files/'+encodeURIComponent(_0x528d44['id'])+'/status','filename'(_0x38f216){const _0x3e8b25=_0x52e649,_0x23298e=_0x38f216['path']??'';return _0x23298e?_0x23298e['split']('/')['filter'](Boolean)[_0x3e8b25(0xc0)]():_0x38f216['id'];},'displayPath'(_0x299c13){const _0x26659d=_0x52e649,_0x40897a=_0x299c13['path']??'',_0x2a93bb=_0x5b9d9d[_0x26659d(0xc4)]['path']??'/';if('/'===_0x2a93bb)return _0x40897a||'/';const _0x32f230=_0x2a93bb['endsWith']('/')?_0x2a93bb:_0x2a93bb+'/';return _0x40897a[_0x26659d(0xbc)](_0x32f230)?_0x40897a['slice'](_0x32f230['length']):_0x40897a;},'onUploaded'(){const _0x5f28f9=_0x52e649;this[_0x5f28f9(0xc3)](),_0x5b9d9d['$dispatch'](_0x5f28f9(0xef));},'fmtSize':_0x473f32=>null==_0x473f32?'—':_0x473f32<0x400?_0x473f32+'\x20B':_0x473f32<0x100000?(_0x473f32/0x400)[_0x52e649(0xcb)](0x1)+_0x52e649(0xba):(_0x473f32/0x100000)['toFixed'](0x1)+'\x20MB','fmtDate'(_0x1f2f62){const _0x2cb84e=_0x52e649;if(!_0x1f2f62)return'—';const _0x5e13c3=new Date(_0x1f2f62);return _0x5e13c3[_0x2cb84e(0xd2)]()+'\x20'+_0x5e13c3[_0x2cb84e(0xdb)]([],{'hour':_0x2cb84e(0xcd),'minute':'2-digit'});},'mimeColor':_0x2841ef=>_0x2841ef?_0x2841ef[_0x52e649(0xbc)]('image/')?_0x52e649(0xc2):_0x2841ef[_0x52e649(0xbc)](_0x52e649(0xf0))?_0x52e649(0xed):_0x2841ef[_0x52e649(0xbc)](_0x52e649(0xe8))?_0x52e649(0xc1):_0x2841ef[_0x52e649(0xbc)]('text/')?_0x52e649(0xe7):_0x2841ef[_0x52e649(0xda)](_0x52e649(0xe4))?'#dc2626':_0x2841ef[_0x52e649(0xda)]('json')||_0x2841ef['includes'](_0x52e649(0xd1))?'#d97706':_0x2841ef[_0x52e649(0xda)](_0x52e649(0xbd))||_0x2841ef[_0x52e649(0xda)](_0x52e649(0xe0))?_0x52e649(0xea):_0x52e649(0xbb):_0x52e649(0xbb),'shortMime'(_0x4e3b79){if(!_0x4e3b79)return'—';const _0x4b2dd7=_0x4e3b79['split']('/');return _0x4b2dd7[0x1]??_0x4b2dd7[0x0];},'hashShort':_0x4047b0=>_0x4047b0?_0x4047b0[_0x52e649(0xcc)](0x0,0x8)+'…':'—'}),'watch':{'path'(){const _0x39cfe8=_0x52e649;this['showUpload']=!0x1,this[_0x39cfe8(0xbf)]=0x0,this[_0x39cfe8(0xc3)]();}},async 'mount'(){const _0x3eab70=_0x52e649;await this['load']();const _0x7ef8c7=()=>this[_0x3eab70(0xc3)]();this[_0x3eab70(0xce)]=[_0x2b896c['on'](_0x3eab70(0xee),_0x7ef8c7),_0x2b896c['on']('files:removed',_0x7ef8c7)];},'unmount'(){const _0x3d7c72=_0x52e649;for(const _0x50afd3 of this[_0x3d7c72(0xce)])_0x50afd3();this[_0x3d7c72(0xce)]=[];},'template':_0x52e649(0xb5),'style':_0x52e649(0xd8)};
@@ -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 _0xb947(_0x18f269,_0x1d915a){_0x18f269=_0x18f269-0x16c;const _0x51c93b=_0x51c9();let _0xb947f8=_0x51c93b[_0x18f269];return _0xb947f8;}const _0x35629b=_0xb947;(function(_0x43ee81,_0x35cf66){const _0x23962d=_0xb947,_0x297785=_0x43ee81();while(!![]){try{const _0x333f5c=parseInt(_0x23962d(0x16c))/0x1*(parseInt(_0x23962d(0x189))/0x2)+parseInt(_0x23962d(0x187))/0x3*(-parseInt(_0x23962d(0x17d))/0x4)+parseInt(_0x23962d(0x174))/0x5*(-parseInt(_0x23962d(0x17b))/0x6)+parseInt(_0x23962d(0x177))/0x7+parseInt(_0x23962d(0x183))/0x8*(-parseInt(_0x23962d(0x17a))/0x9)+parseInt(_0x23962d(0x176))/0xa+-parseInt(_0x23962d(0x188))/0xb*(-parseInt(_0x23962d(0x182))/0xc);if(_0x333f5c===_0x35cf66)break;else _0x297785['push'](_0x297785['shift']());}catch(_0x39f9ef){_0x297785['push'](_0x297785['shift']());}}}(_0x51c9,0x8a168));export default{'tag':'files-overview','props':['files'],'context':_0x1f7860=>({get 'files'(){const _0x31c8ba=_0xb947;return _0x1f7860['$attr'][_0x31c8ba(0x16e)]??[];},get 'totalFiles'(){const _0x5d1880=_0xb947;return this[_0x5d1880(0x16e)][_0x5d1880(0x178)];},get 'dirs'(){const _0xa2e3d3=_0xb947,_0x3146e6=new Set();for(const _0x4b8575 of this[_0xa2e3d3(0x16e)]){const _0x38d791=(_0x4b8575['path']??'')[_0xa2e3d3(0x171)](/^(\/[^/]+)\//);_0x38d791&&_0x3146e6['add'](_0x38d791[0x1]);}return[..._0x3146e6][_0xa2e3d3(0x17e)]();},get 'totalBytes'(){const _0x3dc497=_0xb947;return this[_0x3dc497(0x16e)][_0x3dc497(0x16f)]((_0x20ab9d,_0x3e142c)=>_0x20ab9d+(_0x3e142c[_0x3dc497(0x17c)]??0x0),0x0);},get 'mimeBreakdown'(){const _0x28d0f4=_0xb947,_0x1a1d0b={};for(const _0x509172 of this['files']){const _0x42e471=_0x509172[_0x28d0f4(0x186)]??_0x28d0f4(0x173),_0x3d5553=_0x42e471[_0x28d0f4(0x170)](_0x28d0f4(0x18d))?_0x28d0f4(0x184):_0x42e471['startsWith'](_0x28d0f4(0x179))?'video':_0x42e471[_0x28d0f4(0x170)](_0x28d0f4(0x172))?'audio':_0x42e471[_0x28d0f4(0x170)](_0x28d0f4(0x18a))?_0x28d0f4(0x18b):_0x42e471[_0x28d0f4(0x181)](_0x28d0f4(0x16d))?'pdf':_0x28d0f4(0x173);_0x1a1d0b[_0x3d5553]=(_0x1a1d0b[_0x3d5553]??0x0)+0x1;}return Object['entries'](_0x1a1d0b)[_0x28d0f4(0x17e)]((_0x3df9bf,_0x2cd6c5)=>_0x2cd6c5[0x1]-_0x3df9bf[0x1])[_0x28d0f4(0x17f)](([_0x2ef1a8,_0x43e429])=>({'cat':_0x2ef1a8,'count':_0x43e429}));},'mimeIcon':_0x16b17e=>({'image':'🖼','video':'🎬','audio':'🎵','text':'📝','pdf':'📄','other':'📎'}[_0x16b17e]??'📎'),'fmtBytes':_0x4f44a6=>_0x4f44a6<0x400?_0x4f44a6+'\x20B':_0x4f44a6<0x100000?(_0x4f44a6/0x400)[_0x35629b(0x185)](0x1)+'\x20KB':_0x4f44a6<0x40000000?(_0x4f44a6/0x100000)['toFixed'](0x1)+'\x20MB':(_0x4f44a6/0x40000000)[_0x35629b(0x185)](0x2)+_0x35629b(0x18c),'browseTo'(_0x459a1c){const _0x46c243=_0x35629b;_0x1f7860['$dispatch'](_0x46c243(0x180),_0x459a1c);}}),'template':'\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>','style':_0x35629b(0x175)};function _0x51c9(){const _0x481302=['other','25TnXysW','\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','10956980BrcxFD','56273GPgxRv','length','video/','63OrlUiR','811710xgMsar','size','4QAYOXF','sort','map','select','includes','13464516MTUFge','960864ZuJqTI','image','toFixed','mime','1350036DcCabO','11ByXIGa','614042EdLUee','text/','text','\x20GB','image/','1nzmAuZ','pdf','files','reduce','startsWith','match','audio/'];_0x51c9=function(){return _0x481302;};return _0x51c9();}
@@ -1 +1 @@
1
- const _0x25c208=_0x3035;(function(_0x39b4a1,_0x3e2297){const _0x5e20c8=_0x3035,_0x2619f7=_0x39b4a1();while(!![]){try{const _0x3e3125=-parseInt(_0x5e20c8(0x13b))/0x1+-parseInt(_0x5e20c8(0x12a))/0x2*(parseInt(_0x5e20c8(0x148))/0x3)+parseInt(_0x5e20c8(0x126))/0x4*(parseInt(_0x5e20c8(0x129))/0x5)+parseInt(_0x5e20c8(0x133))/0x6*(parseInt(_0x5e20c8(0x11f))/0x7)+-parseInt(_0x5e20c8(0x143))/0x8+parseInt(_0x5e20c8(0x122))/0x9*(-parseInt(_0x5e20c8(0x13e))/0xa)+parseInt(_0x5e20c8(0x147))/0xb;if(_0x3e3125===_0x3e2297)break;else _0x2619f7['push'](_0x2619f7['shift']());}catch(_0x3bcc5a){_0x2619f7['push'](_0x2619f7['shift']());}}}(_0x32c9,0xe5e4e));import _0x2803e9 from'../../../stores/events-store.js';function _0x32c9(){const _0x26614f=['selectedEnv','7538094EKpdJT','$dispatch','error','selected','get','path','\x20KB','files-path-browser','433364fIfVIi','toFixed','\x20MB','60CWcAPE','loaded','sort','set','localeCompare','9875040ZEmNay','\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>','failed','size','17618073cEQmJk','6zstNgA','7reJdkY','map','reduce','1694637kvvtbw','files:uploaded','select','$watch','8BlbtDU','entries','json','3891175GTKkJF','675314Gldmlu','files:removed','busy','_unsubs','load','allFiles','\x20GB','apiBase'];_0x32c9=function(){return _0x26614f;};return _0x32c9();}import _0x369b80 from'../../../stores/okdb-store.js';function _0x3035(_0x52db47,_0x3da96e){_0x52db47=_0x52db47-0x11f;const _0x32c958=_0x32c9();let _0x30357c=_0x32c958[_0x52db47];return _0x30357c;}export default{'tag':_0x25c208(0x13a),'context':_0x1ab100=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0x89c14d=_0x25c208;this[_0x89c14d(0x12c)]=!0x0;try{const _0x597e01=_0x369b80[_0x89c14d(0x131)],_0x1b6c1b=await fetch(_0x597e01+'/files?path=/&recursive=true&limit=5000');if(!_0x1b6c1b['ok'])throw new Error(_0x89c14d(0x145));const _0x132a46=await _0x1b6c1b[_0x89c14d(0x128)]();this[_0x89c14d(0x12f)]=_0x132a46['data']??[],_0x1ab100['$dispatch'](_0x89c14d(0x13f),this[_0x89c14d(0x12f)]);}catch(_0x3b6dce){console[_0x89c14d(0x135)]('files-path-browser\x20load\x20error',_0x3b6dce);}finally{this['busy']=!0x1;}},'clearSelection'(){this['selected']=null;},'select'(_0xc6091c){const _0x36cf9c=_0x25c208;this[_0x36cf9c(0x136)]=_0xc6091c,_0x1ab100[_0x36cf9c(0x134)](_0x36cf9c(0x124),_0xc6091c);},get 'dirs'(){const _0x5b8bab=_0x25c208,_0x35c310=new Map();for(const _0x55c3c1 of this[_0x5b8bab(0x12f)]){const _0x2c1613=(_0x55c3c1[_0x5b8bab(0x138)]??'')['match'](/^(\/[^/]+)\//);if(!_0x2c1613)continue;const _0x54dc18=_0x2c1613[0x1];_0x35c310[_0x5b8bab(0x141)](_0x54dc18,(_0x35c310[_0x5b8bab(0x137)](_0x54dc18)??0x0)+0x1);}return[..._0x35c310[_0x5b8bab(0x127)]()][_0x5b8bab(0x140)]((_0x4466fe,_0x222c16)=>_0x4466fe[0x0][_0x5b8bab(0x142)](_0x222c16[0x0]))[_0x5b8bab(0x120)](([_0x1c84c8,_0x3c445c])=>({'path':_0x1c84c8,'count':_0x3c445c}));},get 'totalFiles'(){const _0x2b2e54=_0x25c208;return this[_0x2b2e54(0x12f)]['length'];},'totalBytes'(){const _0x5c88b1=_0x25c208,_0x3d2862=this[_0x5c88b1(0x12f)][_0x5c88b1(0x121)]((_0x29d438,_0x25aa84)=>_0x29d438+(_0x25aa84[_0x5c88b1(0x146)]??0x0),0x0);return _0x3d2862<0x400?_0x3d2862+'\x20B':_0x3d2862<0x100000?(_0x3d2862/0x400)[_0x5c88b1(0x13c)](0x1)+_0x5c88b1(0x139):_0x3d2862<0x40000000?(_0x3d2862/0x100000)[_0x5c88b1(0x13c)](0x1)+_0x5c88b1(0x13d):(_0x3d2862/0x40000000)[_0x5c88b1(0x13c)](0x2)+_0x5c88b1(0x130);}}),async 'mount'(_0x4d580d){const _0x5c19ce=_0x25c208;await this[_0x5c19ce(0x12e)]();const _0x386b2f=()=>this['load']();this['_unsubs']=[_0x2803e9['on'](_0x5c19ce(0x123),_0x386b2f),_0x2803e9['on'](_0x5c19ce(0x12b),_0x386b2f)],_0x4d580d[_0x5c19ce(0x125)](()=>_0x369b80[_0x5c19ce(0x132)],()=>{const _0x262c04=_0x5c19ce;this[_0x262c04(0x136)]=null,this[_0x262c04(0x12e)]();});},'unmount'(){const _0x142ccd=_0x25c208;for(const _0x25ebf7 of this[_0x142ccd(0x12d)])_0x25ebf7();this['_unsubs']=[];},'template':_0x25c208(0x144),'style':'\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'};
1
+ function _0xb66a(){const _0x566b40=['select','busy','1413708idxYzg','error','1223091uwHGnK','data','files-path-browser','length','loaded','\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>','reduce','apiBase','set','\x20GB','map','/files?path=/&recursive=true&limit=5000','7030737jQtRXG','1083789QCRvGB','path','90QQynZw','failed','selected','toFixed','722296bvKMDq','load','6dNYGym','2030152Ucgbom','allFiles','get','files:uploaded','_unsubs','files:removed','946275NWQUOK','localeCompare','files-path-browser\x20load\x20error','\x20KB','6qCrtEo','sort','entries'];_0xb66a=function(){return _0x566b40;};return _0xb66a();}const _0x507f03=_0x1968;(function(_0x42e647,_0x3a376f){const _0x1b2481=_0x1968,_0x3ad043=_0x42e647();while(!![]){try{const _0x46f145=-parseInt(_0x1b2481(0x15b))/0x1+parseInt(_0x1b2481(0x14c))/0x2+-parseInt(_0x1b2481(0x147))/0x3*(-parseInt(_0x1b2481(0x13d))/0x4)+-parseInt(_0x1b2481(0x143))/0x5*(parseInt(_0x1b2481(0x163))/0x6)+-parseInt(_0x1b2481(0x15a))/0x7+parseInt(_0x1b2481(0x161))/0x8+-parseInt(_0x1b2481(0x14e))/0x9*(-parseInt(_0x1b2481(0x15d))/0xa);if(_0x46f145===_0x3a376f)break;else _0x3ad043['push'](_0x3ad043['shift']());}catch(_0xdc25b9){_0x3ad043['push'](_0x3ad043['shift']());}}}(_0xb66a,0xb9071));import _0x472ca2 from'../../../stores/events-store.js';function _0x1968(_0x73ba07,_0x5ef674){_0x73ba07=_0x73ba07-0x13d;const _0xb66af1=_0xb66a();let _0x196839=_0xb66af1[_0x73ba07];return _0x196839;}import _0x5ab6b9 from'../../../stores/okdb-store.js';export default{'tag':_0x507f03(0x150),'context':_0x484f5e=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0x1e4d88=_0x507f03;this[_0x1e4d88(0x14b)]=!0x0;try{const _0x419e69=_0x5ab6b9[_0x1e4d88(0x155)],_0x3e5820=await fetch(_0x419e69+_0x1e4d88(0x159));if(!_0x3e5820['ok'])throw new Error(_0x1e4d88(0x15e));const _0x5f1b85=await _0x3e5820['json']();this[_0x1e4d88(0x13e)]=_0x5f1b85[_0x1e4d88(0x14f)]??[],_0x484f5e['$dispatch'](_0x1e4d88(0x152),this[_0x1e4d88(0x13e)]);}catch(_0x3ba8c5){console[_0x1e4d88(0x14d)](_0x1e4d88(0x145),_0x3ba8c5);}finally{this[_0x1e4d88(0x14b)]=!0x1;}},'clearSelection'(){this['selected']=null;},'select'(_0x20da90){const _0xe1a872=_0x507f03;this['selected']=_0x20da90,_0x484f5e['$dispatch'](_0xe1a872(0x14a),_0x20da90);},get 'dirs'(){const _0x43dc6d=_0x507f03,_0x18506b=new Map();for(const _0x2943a7 of this[_0x43dc6d(0x13e)]){const _0xaf7851=(_0x2943a7[_0x43dc6d(0x15c)]??'')['match'](/^(\/[^/]+)\//);if(!_0xaf7851)continue;const _0x5c2202=_0xaf7851[0x1];_0x18506b[_0x43dc6d(0x156)](_0x5c2202,(_0x18506b[_0x43dc6d(0x13f)](_0x5c2202)??0x0)+0x1);}return[..._0x18506b[_0x43dc6d(0x149)]()][_0x43dc6d(0x148)]((_0x4dc915,_0x1b43c5)=>_0x4dc915[0x0][_0x43dc6d(0x144)](_0x1b43c5[0x0]))[_0x43dc6d(0x158)](([_0x2ebdd9,_0x27a8ed])=>({'path':_0x2ebdd9,'count':_0x27a8ed}));},get 'totalFiles'(){const _0x22dcac=_0x507f03;return this[_0x22dcac(0x13e)][_0x22dcac(0x151)];},'totalBytes'(){const _0x2c8691=_0x507f03,_0x284840=this[_0x2c8691(0x13e)][_0x2c8691(0x154)]((_0x23b1c6,_0x4d720c)=>_0x23b1c6+(_0x4d720c['size']??0x0),0x0);return _0x284840<0x400?_0x284840+'\x20B':_0x284840<0x100000?(_0x284840/0x400)['toFixed'](0x1)+_0x2c8691(0x146):_0x284840<0x40000000?(_0x284840/0x100000)['toFixed'](0x1)+'\x20MB':(_0x284840/0x40000000)[_0x2c8691(0x160)](0x2)+_0x2c8691(0x157);}}),async 'mount'(_0x2e1bd2){const _0x1281de=_0x507f03;await this[_0x1281de(0x162)]();const _0x4b27b0=()=>this[_0x1281de(0x162)]();this[_0x1281de(0x141)]=[_0x472ca2['on'](_0x1281de(0x140),_0x4b27b0),_0x472ca2['on'](_0x1281de(0x142),_0x4b27b0)],_0x2e1bd2['$watch'](()=>_0x5ab6b9['selectedEnv'],()=>{const _0x16baa1=_0x1281de;this[_0x16baa1(0x15f)]=null,this[_0x16baa1(0x162)]();});},'unmount'(){const _0x36c577=_0x507f03;for(const _0x1cbf7c of this[_0x36c577(0x141)])_0x1cbf7c();this['_unsubs']=[];},'template':_0x507f03(0x153),'style':'\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'};
@@ -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 _0x49f344=_0x528c;function _0x528c(_0x4f889c,_0x45d7b8){_0x4f889c=_0x4f889c-0x19b;const _0x259ccc=_0x259c();let _0x528c4b=_0x259ccc[_0x4f889c];return _0x528c4b;}(function(_0x4fcd06,_0x3356f6){const _0x3156e6=_0x528c,_0x17624e=_0x4fcd06();while(!![]){try{const _0x3e2abb=-parseInt(_0x3156e6(0x1c3))/0x1*(-parseInt(_0x3156e6(0x1b4))/0x2)+parseInt(_0x3156e6(0x1a1))/0x3*(-parseInt(_0x3156e6(0x1a9))/0x4)+-parseInt(_0x3156e6(0x1be))/0x5*(parseInt(_0x3156e6(0x1b2))/0x6)+parseInt(_0x3156e6(0x1c4))/0x7*(parseInt(_0x3156e6(0x1a3))/0x8)+-parseInt(_0x3156e6(0x1c6))/0x9+parseInt(_0x3156e6(0x1b3))/0xa*(parseInt(_0x3156e6(0x1c5))/0xb)+parseInt(_0x3156e6(0x1c8))/0xc;if(_0x3e2abb===_0x3356f6)break;else _0x17624e['push'](_0x17624e['shift']());}catch(_0x753c3d){_0x17624e['push'](_0x17624e['shift']());}}}(_0x259c,0x549cd));function _0x259c(){const _0x4447ed=['$attr','12HAZsat','830CllDEC','1570VuYzMb','uploading','name','click','size','json','push','application/octet-stream','status','multiple','187345Bpbacl','\x20KB','filter','type','toFixed','569kubggf','119VYntaZ','37631hawmqq','1271016HnUSMX','splice','5299992ZiUAZV','\x0a@keyframes\x20spin\x20{\x20to\x20{\x20transform:\x20rotate(360deg);\x20}\x20}\x0a','POST','error','\x20MB','$dispatch','apiBase','find','length','createElement','6vKOLyV','done','18632GVNWpx','_uploading','uploaded','file','queue','files-upload-panel','1298264gYrhiX','onchange','pending','path','input','Upload\x20failed','message','_flush'];_0x259c=function(){return _0x4447ed;};return _0x259c();}import _0x1863a7 from'../../../components/ok-dropzone.ok.js';import _0x1ca71c from'../../../stores/okdb-store.js';export default{'tag':_0x49f344(0x1a8),'props':[_0x49f344(0x1ac)],'dependencies':[_0x1863a7],'context':_0x21993e=>({'queue':[],get 'path'(){const _0x3e5d15=_0x49f344;return _0x21993e[_0x3e5d15(0x1b1)]['path']||'/';},'onFilesDropped'(_0x3a7d44){const _0x94acf1=_0x49f344,{files:_0x2419e8}=_0x3a7d44['detail'];for(const _0x36d0dc of _0x2419e8)this['queue'][_0x94acf1(0x1ba)]({'file':_0x36d0dc,'relativePath':_0x36d0dc['relativePath']||_0x36d0dc[_0x94acf1(0x1b6)],'status':_0x94acf1(0x1ab),'error':null,'record':null});this[_0x94acf1(0x1b0)]();},'onBrowse'(){const _0xba30d0=_0x49f344,_0x43245e=document[_0xba30d0(0x1a0)](_0xba30d0(0x1ad));_0x43245e[_0xba30d0(0x1c1)]='file',_0x43245e[_0xba30d0(0x1bd)]=!0x0,_0x43245e[_0xba30d0(0x1aa)]=()=>{const _0xdb63ae=_0xba30d0;for(const _0x59c632 of Array['from'](_0x43245e['files']))this[_0xdb63ae(0x1a7)]['push']({'file':_0x59c632,'relativePath':_0x59c632['name'],'status':_0xdb63ae(0x1ab),'error':null,'record':null});this[_0xdb63ae(0x1b0)]();},_0x43245e[_0xba30d0(0x1b7)]();},'_uploading':!0x1,async '_flush'(){const _0x1502d7=_0x49f344;if(!this[_0x1502d7(0x1a4)]){this[_0x1502d7(0x1a4)]=!0x0;try{let _0x3f9792;for(;_0x3f9792=this['queue'][_0x1502d7(0x19e)](_0x44eafa=>'pending'===_0x44eafa[_0x1502d7(0x1bc)]);)await this['_uploadOne'](_0x3f9792);}finally{this['_uploading']=!0x1;}}},async '_uploadOne'(_0x337b5f){const _0x8c506c=_0x49f344;_0x337b5f[_0x8c506c(0x1bc)]=_0x8c506c(0x1b5);const _0x38b3e4=_0x21993e['$attr'][_0x8c506c(0x1ac)]||'/';try{const _0x48d70d=(_0x337b5f['relativePath']||_0x337b5f['file'][_0x8c506c(0x1b6)])['replace'](/^\//,''),_0x127ff9=(_0x38b3e4['endsWith']('/')?_0x38b3e4:_0x38b3e4+'/')+_0x48d70d,_0x1c655c=await fetch(_0x1ca71c[_0x8c506c(0x19d)]+'/files?path='+encodeURIComponent(_0x127ff9),{'method':_0x8c506c(0x1ca),'headers':{'content-type':_0x337b5f[_0x8c506c(0x1a6)][_0x8c506c(0x1c1)]||_0x8c506c(0x1bb),'content-length':String(_0x337b5f[_0x8c506c(0x1a6)][_0x8c506c(0x1b8)])},'body':_0x337b5f[_0x8c506c(0x1a6)]}),_0x3e0945=await _0x1c655c[_0x8c506c(0x1b9)]();if(!_0x1c655c['ok'])throw new Error(_0x3e0945?.[_0x8c506c(0x1cb)]?.['message']||_0x8c506c(0x1ae));_0x337b5f['record']=_0x3e0945['data'],_0x337b5f['status']='done',_0x21993e[_0x8c506c(0x19c)](_0x8c506c(0x1a5),_0x337b5f['record']);}catch(_0x26793d){_0x337b5f[_0x8c506c(0x1cb)]=_0x26793d?.[_0x8c506c(0x1af)]||String(_0x26793d),_0x337b5f[_0x8c506c(0x1bc)]=_0x8c506c(0x1cb);}},'retryItem'(_0x1f4b94){const _0x599c9e=_0x49f344;_0x1f4b94[_0x599c9e(0x1bc)]=_0x599c9e(0x1ab),_0x1f4b94['error']=null,this['_flush']();},'removeItem'(_0x51a2b0){const _0x360833=_0x49f344,_0xeec292=this[_0x360833(0x1a7)]['indexOf'](_0x51a2b0);-0x1!==_0xeec292&&this['queue'][_0x360833(0x1c7)](_0xeec292,0x1);},'clearDone'(){const _0x173559=_0x49f344;this['queue']=this[_0x173559(0x1a7)][_0x173559(0x1c0)](_0x4b6f9c=>_0x173559(0x1a2)!==_0x4b6f9c['status']);},'fmtSize':_0x5a11af=>null==_0x5a11af?'—':_0x5a11af<0x400?_0x5a11af+'\x20B':_0x5a11af<0x100000?(_0x5a11af/0x400)[_0x49f344(0x1c2)](0x1)+_0x49f344(0x1bf):(_0x5a11af/0x100000)[_0x49f344(0x1c2)](0x1)+_0x49f344(0x19b),get 'pendingCount'(){const _0x24b6cf=_0x49f344;return this[_0x24b6cf(0x1a7)][_0x24b6cf(0x1c0)](_0x119c06=>_0x24b6cf(0x1ab)===_0x119c06[_0x24b6cf(0x1bc)])['length'];},get 'uploadingCount'(){const _0x8ebdda=_0x49f344;return this[_0x8ebdda(0x1a7)][_0x8ebdda(0x1c0)](_0x4ac7ad=>_0x8ebdda(0x1b5)===_0x4ac7ad[_0x8ebdda(0x1bc)])[_0x8ebdda(0x19f)];},get 'doneCount'(){const _0x4058b8=_0x49f344;return this[_0x4058b8(0x1a7)]['filter'](_0x2da49e=>_0x4058b8(0x1a2)===_0x2da49e['status'])[_0x4058b8(0x19f)];},get 'errorCount'(){const _0x4a14df=_0x49f344;return this[_0x4a14df(0x1a7)][_0x4a14df(0x1c0)](_0x354053=>'error'===_0x354053[_0x4a14df(0x1bc)])[_0x4a14df(0x19f)];}}),'template':'\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>','style':_0x49f344(0x1c9)};
@@ -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>&#9888;&#65039;</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&mdash;\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=&gt;\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=&gt;\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&#9888;\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 _0x38fc4a=_0x4d5f;function _0xb7a4(){const _0x46398a=['onDone','modalEnabledDraft','stores','modalProcessorContextDraft','modalValidation','isFinite','2aIcmGL','Edit\x20function','join','modalAllowFetchDraft','Dry\x20run\x20complete','{\x0a\x20\x20\x0a}','72335CTQSul','modalPayloadDraft','mode','modalRunning','toast','success','canSave','store','modalDryRunMode','Create\x20function','1393407agPHLX','342384iFjWyX','dryRunActions','$ok','functions','Failed\x20to\x20run\x20draft','modalDescriptionDraft','Function\x20created:\x20','edit','canRun','modalNameDraft','Failed\x20to\x20save\x20function','stringify','name','previewRunId','modalTimeoutMsDraft','2326535pTHOkT','error','modalJobContextDraft','$attr','modalMemoryMbDraft','length','modalPayloadError','close','message','8119296nBuhWa','modalUnsafeDraft','\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>&#9888;&#65039;</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&mdash;\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=&gt;\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=&gt;\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&#9888;\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','modalMaterializerContextDraft','setModalSourceDraft','runModalDraft','function-modal','Save\x20changes','7jOodDy','previewRun','envName','create','3684744CpeEkp','map','setPayloadDraft','shared','213258CdvyWD','modal','modalPreviewRun'];_0xb7a4=function(){return _0x46398a;};return _0xb7a4();}(function(_0x397165,_0x3d3a94){const _0x162851=_0x4d5f,_0x454e79=_0x397165();while(!![]){try{const _0x584222=-parseInt(_0x162851(0x13c))/0x1+-parseInt(_0x162851(0x136))/0x2*(-parseInt(_0x162851(0x146))/0x3)+-parseInt(_0x162851(0x147))/0x4+-parseInt(_0x162851(0x156))/0x5+-parseInt(_0x162851(0x12d))/0x6*(parseInt(_0x162851(0x167))/0x7)+-parseInt(_0x162851(0x129))/0x8+parseInt(_0x162851(0x15f))/0x9;if(_0x584222===_0x3d3a94)break;else _0x454e79['push'](_0x454e79['shift']());}catch(_0x39d7d5){_0x454e79['push'](_0x454e79['shift']());}}}(_0xb7a4,0x3c5c7));import _0x2f524d from'@toolkit/elements/ok-icon.ok.js';import _0x18cfbf from'@toolkit/core/ok-overlay.ok.js';import _0xb6b7f2 from'../../../components/ok-js-input.ok.js';import _0x2791fc from'../../../components/ok-text-monaco-input.ok.js';function _0x4d5f(_0x50498c,_0x37a1d8){_0x50498c=_0x50498c-0x129;const _0xb7a493=_0xb7a4();let _0x4d5f92=_0xb7a493[_0x50498c];return _0x4d5f92;}import _0x2498eb from'../parts/function-logs.ok.js';export default{'tag':_0x38fc4a(0x165),'dependencies':[_0x2f524d,_0x18cfbf,_0xb6b7f2,_0x2791fc,_0x2498eb],'attr':{'modal':{},'mode':{},'onDone':{}},'context':_0x2655d6=>({get 'store'(){const _0x5becba=_0x38fc4a;return _0x2655d6[_0x5becba(0x149)][_0x5becba(0x132)][_0x5becba(0x14a)];},get 'mode'(){const _0x299d26=_0x38fc4a;return _0x2655d6[_0x299d26(0x159)][_0x299d26(0x13e)]||this[_0x299d26(0x143)]['modalMode']||_0x299d26(0x16a);},get 'saving'(){const _0x19baba=_0x38fc4a;return this[_0x19baba(0x143)]['saving'];},get 'running'(){const _0x198a0c=_0x38fc4a;return this[_0x198a0c(0x143)]['modalRunning'];},get 'validation'(){const _0x37f83a=_0x38fc4a;return this[_0x37f83a(0x143)]['modalValidation']||{};},get 'canSave'(){const _0x2a1480=_0x38fc4a;return this[_0x2a1480(0x143)]['canSaveModal'];},get 'canRun'(){const _0x380a9e=_0x38fc4a;return!!this[_0x380a9e(0x143)][_0x380a9e(0x134)]?.['ok']&&!this[_0x380a9e(0x143)][_0x380a9e(0x15c)]&&!this[_0x380a9e(0x143)][_0x380a9e(0x13f)];},get 'modalDryRunMode'(){const _0x3ae1c7=_0x38fc4a;return this[_0x3ae1c7(0x143)][_0x3ae1c7(0x144)];},get 'modalDryRunActions'(){const _0x4a057c=_0x38fc4a;return this['store'][_0x4a057c(0x12f)]?.['result']?.[_0x4a057c(0x148)]??null;},'toggleModalDryRun'(){const _0x33c320=_0x38fc4a;this[_0x33c320(0x143)][_0x33c320(0x144)]=!this['store']['modalDryRunMode'];},get 'scopeLabel'(){const _0x225a38=_0x38fc4a;return this[_0x225a38(0x143)][_0x225a38(0x169)]||'—';},get 'unsafe'(){const _0x213908=_0x38fc4a;return!0x0===this['store'][_0x213908(0x160)];},get 'titleLabel'(){const _0x52c716=_0x38fc4a;return _0x52c716(0x14e)===this[_0x52c716(0x13e)]?_0x52c716(0x137):'Create\x20function';},get 'saveLabel'(){const _0x4cc3ff=_0x38fc4a;return _0x4cc3ff(0x14e)===this[_0x4cc3ff(0x13e)]?_0x4cc3ff(0x166):_0x4cc3ff(0x145);},get 'descriptionLength'(){const _0x1d088c=_0x38fc4a;return String(this[_0x1d088c(0x143)][_0x1d088c(0x14c)]||'')[_0x1d088c(0x15b)];},get 'payloadError'(){const _0xd84278=_0x38fc4a;return this['store'][_0xd84278(0x15c)];},get 'previewRun'(){return this['store']['modalPreviewRun'];},get 'previewRunId'(){const _0x2123f3=_0x38fc4a;return this[_0x2123f3(0x168)]?.['id']||this['previewRun']?.['runId']||null;},get 'previewLogs'(){const _0x49a040=_0x38fc4a;return this['store']['logsForRun'](this[_0x49a040(0x154)]);},get 'previewTriggerKind'(){const _0x2a9f4c=_0x38fc4a;return this[_0x2a9f4c(0x143)]['modalMaterializerContextDraft']?'materializer':this[_0x2a9f4c(0x143)][_0x2a9f4c(0x133)]?'processor':this[_0x2a9f4c(0x143)][_0x2a9f4c(0x158)]?'job':null;},get 'previewTriggerContext'(){const _0xa19b3f=_0x38fc4a;return this[_0xa19b3f(0x143)][_0xa19b3f(0x162)]||this[_0xa19b3f(0x143)]['modalProcessorContextDraft']||this['store']['modalJobContextDraft']||null;},'setName'(_0x2cf7f8){const _0x2fbe2b=_0x38fc4a;this['store'][_0x2fbe2b(0x150)]=_0x2cf7f8??'';},'setDescription'(_0x2ae687){this['store']['modalDescriptionDraft']=_0x2ae687??'';},'setEnabled'(_0x437437){const _0x3e5a46=_0x38fc4a;this[_0x3e5a46(0x143)][_0x3e5a46(0x131)]=!!_0x437437;},'setUnsafe'(_0xf158e7){const _0x545ed6=_0x38fc4a;this[_0x545ed6(0x143)][_0x545ed6(0x160)]=!!_0xf158e7;},'setTimeoutMs'(_0x31f699){const _0x18b9a5=_0x38fc4a,_0x203e58=parseInt(_0x31f699,0xa);this['store'][_0x18b9a5(0x155)]=Number[_0x18b9a5(0x135)](_0x203e58)&&_0x203e58>0x0?_0x203e58:null;},'setMemoryMb'(_0x145387){const _0x2158a9=_0x38fc4a,_0x20245d=parseInt(_0x145387,0xa);this[_0x2158a9(0x143)][_0x2158a9(0x15a)]=Number[_0x2158a9(0x135)](_0x20245d)&&_0x20245d>0x0?_0x20245d:null;},'setAllowFetch'(_0x158cc6){const _0x1ec7a4=_0x38fc4a;this[_0x1ec7a4(0x143)][_0x1ec7a4(0x139)]=!!_0x158cc6;},'setSource'(_0x59afd1){const _0x552589=_0x38fc4a;this['store'][_0x552589(0x163)](_0x59afd1??'');},'setPayload'(_0x9fe359){const _0x2682f6=_0x38fc4a;this['store']['setModalPayloadDraft'](_0x9fe359??_0x2682f6(0x13b));},async 'submit'(){const _0x5f0810=_0x38fc4a;if(this[_0x5f0810(0x142)])try{const _0xd0734c=await this[_0x5f0810(0x143)]['saveModalDefinition']();this[_0x5f0810(0x143)][_0x5f0810(0x12b)](this[_0x5f0810(0x143)][_0x5f0810(0x13d)]),_0x2655d6[_0x5f0810(0x149)][_0x5f0810(0x12c)]?.[_0x5f0810(0x140)]?.[_0x5f0810(0x141)]?.(_0x5f0810(0x14e)===this[_0x5f0810(0x13e)]?'Function\x20saved:\x20'+(_0xd0734c?.[_0x5f0810(0x153)]||this[_0x5f0810(0x143)]['selectedName']):_0x5f0810(0x14d)+(_0xd0734c?.['name']||this[_0x5f0810(0x143)]['modalNameDraft'])),await _0x2655d6['$attr'][_0x5f0810(0x12e)]['close'](),await _0x2655d6[_0x5f0810(0x159)][_0x5f0810(0x130)]?.(_0xd0734c);}catch(_0x48da1e){_0x2655d6[_0x5f0810(0x149)][_0x5f0810(0x12c)]?.[_0x5f0810(0x140)]?.[_0x5f0810(0x157)]?.(_0x48da1e?.[_0x5f0810(0x15e)]||_0x5f0810(0x151));}},async 'runDraft'(){const _0x4335b0=_0x38fc4a;if(this[_0x4335b0(0x14f)])try{await this['store'][_0x4335b0(0x164)](),_0x2655d6[_0x4335b0(0x149)][_0x4335b0(0x12c)]?.[_0x4335b0(0x140)]?.[_0x4335b0(0x141)]?.(this[_0x4335b0(0x144)]?_0x4335b0(0x13a):'Draft\x20executed');}catch(_0x3efb3d){_0x2655d6[_0x4335b0(0x149)][_0x4335b0(0x12c)]?.[_0x4335b0(0x140)]?.[_0x4335b0(0x157)]?.(_0x3efb3d?.[_0x4335b0(0x15e)]||_0x4335b0(0x14b));}},'actionArgs'(_0x145fc2){const _0x5b8a8a=_0x38fc4a,_0x54712e=_0x145fc2['args']??[];return 0x0===_0x54712e[_0x5b8a8a(0x15b)]?'':_0x54712e[_0x5b8a8a(0x12a)](_0x5d0d07=>JSON['stringify'](_0x5d0d07))[_0x5b8a8a(0x138)](',\x20');},'formatJson'(_0x1591dd){const _0xf13387=_0x38fc4a;try{return JSON[_0xf13387(0x152)](_0x1591dd,null,0x2);}catch{return String(_0x1591dd??'');}},'cancel'(){const _0x4349d2=_0x38fc4a;_0x2655d6[_0x4349d2(0x159)][_0x4349d2(0x12e)][_0x4349d2(0x15d)]();}}),'template':_0x38fc4a(0x161)};