@kedem/okdb 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/bin/okdb.js +1 -1
  2. package/keys/public.pem +3 -0
  3. package/okdb.js +1 -1
  4. package/package.json +2 -2
  5. package/public/admin-app.js +1 -1
  6. package/public/components/admin-route-host.ok.js +1 -1
  7. package/public/components/env-picker.ok.js +1 -1
  8. package/public/components/field-path-input.ok.js +1 -1
  9. package/public/components/geo-map.ok.js +1 -1
  10. package/public/components/ok-cron-input.ok.js +1 -1
  11. package/public/components/ok-dropzone.ok.js +1 -1
  12. package/public/components/ok-js-input.ok.js +1 -1
  13. package/public/components/ok-json-input.ok.js +1 -1
  14. package/public/components/ok-text-monaco-input.ok.js +1 -1
  15. package/public/components/theme-toggle.ok.js +1 -1
  16. package/public/login-app.js +1 -1
  17. package/public/modules/ok.js +1 -1
  18. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  19. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  20. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  21. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  22. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  23. package/public/sections/auth/parts/token-list.ok.js +1 -1
  24. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  25. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  26. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  27. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  28. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  29. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  30. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  31. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  32. package/public/sections/db/parts/db-overview.ok.js +1 -1
  33. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  34. package/public/sections/db/parts/edit-row.ok.js +1 -1
  35. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  36. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  37. package/public/sections/db/parts/type-list.ok.js +1 -1
  38. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  39. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  40. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  41. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  42. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  43. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  44. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  45. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  46. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  47. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  48. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  49. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  50. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  51. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  52. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  55. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  56. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  57. package/public/sections/engines/engine-ui-utils.js +1 -1
  58. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  59. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  60. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  61. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  62. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  63. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  64. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  65. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  66. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  67. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  68. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  69. package/public/sections/files/parts/files-overview.ok.js +1 -1
  70. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  71. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  72. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  73. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  74. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  75. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  76. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  77. package/public/sections/license/parts/license-panel.ok.js +1 -1
  78. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  79. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  80. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  81. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  82. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  83. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  84. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  85. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  86. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  87. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  88. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  89. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  90. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  91. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  92. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  93. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  94. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  95. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  96. package/public/sections/system/parts/system-log.ok.js +1 -1
  97. package/public/sections/system/parts/system-status.ok.js +1 -1
  98. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  99. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  100. package/public/sections/views/parts/view-detail.ok.js +1 -1
  101. package/public/sections/views/parts/views-list.ok.js +1 -1
  102. package/public/sections/views/parts/views-overview.ok.js +1 -1
  103. package/public/setup-app.js +1 -1
  104. package/public/stores/auth-store.js +1 -1
  105. package/public/stores/events-store.js +1 -1
  106. package/public/stores/functions-store.js +1 -1
  107. package/public/stores/okdb-store.js +1 -1
  108. package/public/stores/theme-store.js +1 -1
  109. package/public/util/permissions.js +1 -1
  110. package/public/util/sift-schema.js +1 -1
  111. package/public/vendor/okjs/ok.esm.min.js +1 -2
  112. package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
  113. package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
  114. package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
  115. package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
  116. package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
  117. package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
  118. package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
  119. package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
  120. package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
  121. package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
  122. package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
  123. package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
  124. package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
  125. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
  126. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
  127. package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
  128. package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
  129. package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
  130. package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
  131. package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
  132. package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
  133. package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
  134. package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
  135. package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
  136. package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
  137. package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
  138. package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
  139. package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
  140. package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
  141. package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
  142. package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
  143. package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
  144. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
  145. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
  146. package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
  147. package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
  148. package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
  149. package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
  150. package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
  151. package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
  152. package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
  153. package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
  154. package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
  155. package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
  156. package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
  157. package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
  158. package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
  159. package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
  160. package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
  161. package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
  162. package/public/vendor/okjs/toolkit/manifest.js +1 -1
  163. package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
  164. package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
  165. package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
  166. package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
  167. package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
  168. package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
  169. package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
  170. package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
  171. package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
  172. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
  173. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
  174. package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
  175. package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
  176. package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
  177. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
  178. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
  179. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
  180. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
  181. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
  182. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
  183. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
  184. package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
  185. package/public/view-models/type-query-vm.js +1 -1
  186. package/okdb-data/default/data.mdb +0 -0
  187. package/okdb-data/default/lock.mdb +0 -0
  188. package/okdb-data/~log/data.mdb +0 -0
  189. package/okdb-data/~log/lock.mdb +0 -0
  190. package/okdb-data/~system/data.mdb +0 -0
  191. package/okdb-data/~system/lock.mdb +0 -0
  192. package/public/images/logo.png +0 -0
  193. package/public/images/logo.svg +0 -333
@@ -1 +1 @@
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
+ const _0x3fcb53=_0xb89e;(function(_0x16d553,_0x13fc54){const _0x349870=_0xb89e,_0x566d2b=_0x16d553();while(!![]){try{const _0x2fb71b=parseInt(_0x349870(0x10b))/0x1*(parseInt(_0x349870(0x107))/0x2)+-parseInt(_0x349870(0x10f))/0x3+parseInt(_0x349870(0x10c))/0x4*(parseInt(_0x349870(0x122))/0x5)+parseInt(_0x349870(0x106))/0x6*(parseInt(_0x349870(0x11d))/0x7)+parseInt(_0x349870(0x110))/0x8*(parseInt(_0x349870(0x125))/0x9)+-parseInt(_0x349870(0x111))/0xa+parseInt(_0x349870(0x109))/0xb*(-parseInt(_0x349870(0x117))/0xc);if(_0x2fb71b===_0x13fc54)break;else _0x566d2b['push'](_0x566d2b['shift']());}catch(_0x1f3631){_0x566d2b['push'](_0x566d2b['shift']());}}}(_0x3a07,0xdf04c));import _0x34c9c3 from'../../../stores/events-store.js';function _0xb89e(_0x148ae5,_0x583961){_0x148ae5=_0x148ae5-0x105;const _0x3a0793=_0x3a07();let _0xb89eab=_0x3a0793[_0x148ae5];return _0xb89eab;}import _0x12c0c4 from'../../../stores/okdb-store.js';export default{'tag':_0x3fcb53(0x10d),'context':_0x1560b2=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0x3b951b=_0x3fcb53;this['busy']=!0x0;try{const _0x242fc0=await fetch(_0x12c0c4['apiBase']+'/files?path=/&limit=5000');if(!_0x242fc0['ok'])throw new Error(_0x3b951b(0x11e));const _0x392d2d=await _0x242fc0[_0x3b951b(0x10a)]();this[_0x3b951b(0x121)]=_0x392d2d[_0x3b951b(0x11f)]??[],_0x1560b2[_0x3b951b(0x127)](_0x3b951b(0x118),this[_0x3b951b(0x121)]);}catch(_0x426063){console['error'](_0x3b951b(0x116),_0x426063);}finally{this['busy']=!0x1;}},'clearSelection'(){this['selected']=null;},'select'(_0x1f2dc4){const _0x5d0533=_0x3fcb53;this[_0x5d0533(0x11c)]=_0x1f2dc4,_0x1560b2[_0x5d0533(0x127)](_0x5d0533(0x119),_0x1f2dc4);},get 'dirs'(){const _0x16f4fd=_0x3fcb53,_0x5753c5=new Map();for(const _0x2778e0 of this[_0x16f4fd(0x121)]){const _0x1de08a=(_0x2778e0[_0x16f4fd(0x113)]??'')[_0x16f4fd(0x126)](/^(\/[^/]+)/),_0x1f46bb=_0x1de08a?_0x1de08a[0x1]:'/';_0x5753c5[_0x16f4fd(0x108)](_0x1f46bb,(_0x5753c5[_0x16f4fd(0x114)](_0x1f46bb)??0x0)+0x1);}return[..._0x5753c5[_0x16f4fd(0x112)]()][_0x16f4fd(0x124)]((_0x49b5da,_0x8d131c)=>_0x49b5da[0x0][_0x16f4fd(0x11b)](_0x8d131c[0x0]))['map'](([_0x334d3e,_0x58a702])=>({'path':_0x334d3e,'count':_0x58a702}));},get 'totalFiles'(){const _0x1194a1=_0x3fcb53;return this[_0x1194a1(0x121)][_0x1194a1(0x10e)];}}),async 'mount'(){const _0xe9d3f0=_0x3fcb53;await this['load']();const _0x4dfe79=()=>this[_0xe9d3f0(0x11a)]();this[_0xe9d3f0(0x105)]=[_0x34c9c3['on'](_0xe9d3f0(0x120),_0x4dfe79),_0x34c9c3['on']('files:removed',_0x4dfe79)];},'unmount'(){const _0x1cb9c8=_0x3fcb53;for(const _0xb61621 of this[_0x1cb9c8(0x105)])_0xb61621();this[_0x1cb9c8(0x105)]=[];},'template':_0x3fcb53(0x115),'style':_0x3fcb53(0x123)};function _0x3a07(){const _0x5a20cf=['data','files:uploaded','allFiles','70bZMRpq','\x0a[tag]\x20.dir-row\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x207px;\x0a\x20\x20\x20\x20padding:\x205px\x208px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a}\x0a[tag]\x20.dir-row:hover\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-app-border);\x20}\x0a[tag]\x20.dir-row--on\x20\x20\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-accent);\x20}\x0a','sort','25911EhbIQE','match','$dispatch','_unsubs','254280CsXyXc','2pSNxHO','set','19826609JnbKMA','json','1216682DHWFDH','496076WBocOd','files-path-browser','length','286521tufMes','3848nkBpEw','10376980gDzbmd','entries','path','get','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:6px;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:13px;\x20opacity:.8;\x22>Directories</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:11px;\x20opacity:.7;\x22\x20title=\x22Refresh\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x20&&\x20allFiles.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20padding:4px\x200;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20All\x20Files\x20entry\x20-->\x0a\x20\x20<button\x0a\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27/\x27\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20@click=\x22select(\x27/\x27)\x22\x0a\x20\x20>\x0a\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.6;\x22>📁</span>\x0a\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x22>/\x20(all\x20files)</span>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20</button>\x0a\x0a\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-surface-2);\x20margin:2px\x200;\x22></div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Dir\x20rows\x20-->\x0a\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20dir.path\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22select(dir.path)\x22\x0a\x20\x20\x20\x20\x20\x20:title=\x22dir.path\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.5;\x22>📂</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20dir.path\x20}}\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20dir.count\x20}}</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</each>\x0a\x0a\x20\x20<if\x20:=\x22allFiles.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.35;\x20padding:8px\x200;\x20text-align:center;\x22>No\x20files\x20yet.</div>\x0a\x20\x20</if>\x0a\x0a</div>','files-path-browser\x20load\x20error','24rZDUMw','loaded','select','load','localeCompare','selected','217SPfYYj','failed'];_0x3a07=function(){return _0x5a20cf;};return _0x3a07();}
@@ -1 +1 @@
1
- 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
+ var _0x3660d8=_0x1a5d;function _0x2dc6(){var _0x4c8a85=['path','93lfYuuZ','139335pmThXe','797620ydhfFL','1233848SNyJWw','38404NhtEcE','refresh','48kXMpko','17636vZgPmT','441425PfLhsV','18uACscT','10PqobZJ','files-path-panel','9BcPqqg','1130162QLUDtT'];_0x2dc6=function(){return _0x4c8a85;};return _0x2dc6();}(function(_0x3cabdc,_0xab5c5){var _0x11d3bd=_0x1a5d,_0x11a6a7=_0x3cabdc();while(!![]){try{var _0x3fe518=parseInt(_0x11d3bd(0x1e6))/0x1*(parseInt(_0x11d3bd(0x1dd))/0x2)+parseInt(_0x11d3bd(0x1e2))/0x3*(parseInt(_0x11d3bd(0x1da))/0x4)+-parseInt(_0x11d3bd(0x1db))/0x5+-parseInt(_0x11d3bd(0x1dc))/0x6*(-parseInt(_0x11d3bd(0x1e3))/0x7)+parseInt(_0x11d3bd(0x1e5))/0x8+parseInt(_0x11d3bd(0x1df))/0x9*(parseInt(_0x11d3bd(0x1e4))/0xa)+parseInt(_0x11d3bd(0x1e0))/0xb*(-parseInt(_0x11d3bd(0x1d9))/0xc);if(_0x3fe518===_0xab5c5)break;else _0x11a6a7['push'](_0x11a6a7['shift']());}catch(_0x195173){_0x11a6a7['push'](_0x11a6a7['shift']());}}}(_0x2dc6,0x1e112));function _0x1a5d(_0x28a359,_0x41d609){_0x28a359=_0x28a359-0x1d9;var _0x2dc698=_0x2dc6();var _0x1a5d09=_0x2dc698[_0x28a359];return _0x1a5d09;}import _0x1e5ec4 from'./files-file-list.ok.js';export default{'tag':_0x3660d8(0x1de),'props':[_0x3660d8(0x1e1)],'dependencies':[_0x1e5ec4],'context':_0x40f87e=>({get 'path'(){var _0x12e0eb=_0x3660d8;return _0x40f87e['$attr'][_0x12e0eb(0x1e1)]??'/';},'onRefresh'(){var _0x15465a=_0x3660d8;_0x40f87e['$dispatch'](_0x15465a(0x1e7));}}),'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20height:100%;\x20min-height:0;\x22>\x0a\x20\x20<files-file-list\x20:path=\x22path\x22\x20@refresh=\x22onRefresh()\x22\x20/>\x0a</div>'};
@@ -1 +1 @@
1
- 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
+ const _0x23188e=_0x488d;(function(_0x10f634,_0x42c6bf){const _0x220021=_0x488d,_0x32936e=_0x10f634();while(!![]){try{const _0x2b3bda=-parseInt(_0x220021(0x1cd))/0x1+-parseInt(_0x220021(0x1f9))/0x2*(parseInt(_0x220021(0x1eb))/0x3)+-parseInt(_0x220021(0x1df))/0x4*(-parseInt(_0x220021(0x1db))/0x5)+parseInt(_0x220021(0x1bd))/0x6*(-parseInt(_0x220021(0x1bf))/0x7)+-parseInt(_0x220021(0x1fc))/0x8*(-parseInt(_0x220021(0x1f4))/0x9)+parseInt(_0x220021(0x1c7))/0xa+parseInt(_0x220021(0x1e5))/0xb*(-parseInt(_0x220021(0x1e6))/0xc);if(_0x2b3bda===_0x42c6bf)break;else _0x32936e['push'](_0x32936e['shift']());}catch(_0x1b2634){_0x32936e['push'](_0x32936e['shift']());}}}(_0x6f97,0xa87e6));function _0x6f97(){const _0x2864b2=['pageSize','20637hFYWuM','tar','includes','files','/status','4Sxcwzk','#ca8a04','2-digit','3824TOObzt','zip','ceil','6vLbEsd','failed','4000738qecYnf','xml','\x22?\x0a\x0aThis\x20will\x20decrement\x20the\x20blob\x20ref-count.','totalPages','DELETE','_unsubs','pop','path','10152160oKtYFN','&recursive=true&limit=2000','page','toLocaleDateString','toLocaleTimeString','error','72304OKmncY','slice','filter','$attr','startsWith','json','/files?path=','catch','split','files-file-list','video/','#dc2626','#7c3aed','busy','385705LpdWhU','#16a34a','var(--okdb-mime-default)','files:removed','68kfgfAH','\x20MB','#0891b2','audio/','length','endsWith','231RprbkY','545796HMQmzR','pdf','refresh','load','message','1700304mIRUMO','/files/','toFixed','image/','filename','\x0a[tag]\x20.file-row\x20{\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-bg);\x20transition:\x20background\x20.1s;\x20}\x0a[tag]\x20.file-row:hover\x20{\x20background:\x20var(--okdb-app-bg-deep);\x20}\x0a','$dispatch','apiBase'];_0x6f97=function(){return _0x2864b2;};return _0x6f97();}import _0xf8a313 from'./files-upload-panel.ok.js';function _0x488d(_0xc92e4f,_0xd4fc4){_0xc92e4f=_0xc92e4f-0x1bc;const _0x6f97c3=_0x6f97();let _0x488d1c=_0x6f97c3[_0xc92e4f];return _0x488d1c;}import _0x47407c from'../../../stores/events-store.js';import _0x1d1981 from'../../../stores/okdb-store.js';export default{'tag':_0x23188e(0x1d6),'props':[_0x23188e(0x1c6)],'dependencies':[_0xf8a313],'context':_0x4f63ba=>({'busy':!0x1,'files':[],'error':null,'showUpload':!0x1,'page':0x0,'pageSize':0x32,'totalLoaded':0x0,'_unsubs':[],get 'path'(){const _0x457185=_0x23188e;return _0x4f63ba['$attr'][_0x457185(0x1c6)]??'/';},get 'pagedFiles'(){const _0x4391fb=_0x23188e,_0x238321=this[_0x4391fb(0x1c9)]*this[_0x4391fb(0x1f3)];return this[_0x4391fb(0x1f7)][_0x4391fb(0x1ce)](_0x238321,_0x238321+this[_0x4391fb(0x1f3)]);},get 'totalPages'(){const _0x311c6a=_0x23188e;return Math['max'](0x1,Math[_0x311c6a(0x1bc)](this[_0x311c6a(0x1f7)][_0x311c6a(0x1e3)]/this[_0x311c6a(0x1f3)]));},get 'hasNext'(){const _0x17b2cb=_0x23188e;return this[_0x17b2cb(0x1c9)]<this[_0x17b2cb(0x1c2)]-0x1;},get 'hasPrev'(){const _0x3c8dbf=_0x23188e;return this[_0x3c8dbf(0x1c9)]>0x0;},async 'load'(){const _0x2488ee=_0x23188e,_0x407683=_0x4f63ba[_0x2488ee(0x1d0)][_0x2488ee(0x1c6)];if(null!=_0x407683){this['busy']=!0x0,this[_0x2488ee(0x1cc)]=null;try{const _0x394caf=_0x1d1981[_0x2488ee(0x1f2)]+_0x2488ee(0x1d3)+encodeURIComponent(_0x407683)+_0x2488ee(0x1c8),_0x189aee=await fetch(_0x394caf),_0x39b547=await _0x189aee[_0x2488ee(0x1d2)]();if(!_0x189aee['ok'])throw new Error(_0x39b547?.[_0x2488ee(0x1cc)]?.[_0x2488ee(0x1ea)]||_0x2488ee(0x1be));this[_0x2488ee(0x1f7)]=_0x39b547['data']??[],this[_0x2488ee(0x1c9)]=0x0;}catch(_0xb1859){this[_0x2488ee(0x1cc)]=_0xb1859?.[_0x2488ee(0x1ea)]||String(_0xb1859),this[_0x2488ee(0x1f7)]=[];}finally{this[_0x2488ee(0x1da)]=!0x1;}}else this['files']=[];},async 'deleteFile'(_0x354f22){const _0x196edf=_0x23188e,_0x58dfda=this[_0x196edf(0x1ef)](_0x354f22);if(confirm('Delete\x20\x22'+_0x58dfda+_0x196edf(0x1c1)))try{const _0x3c813b=_0x1d1981[_0x196edf(0x1f2)],_0x25dfa4=await fetch(_0x3c813b+_0x196edf(0x1ec)+encodeURIComponent(_0x354f22['id']),{'method':_0x196edf(0x1c3)});if(!_0x25dfa4['ok']){const _0x13c925=await _0x25dfa4['json']()[_0x196edf(0x1d4)](()=>({}));throw new Error(_0x13c925?.[_0x196edf(0x1cc)]?.[_0x196edf(0x1ea)]||'Delete\x20failed');}this[_0x196edf(0x1f7)]=this['files'][_0x196edf(0x1cf)](_0x5ec93b=>_0x5ec93b['id']!==_0x354f22['id']),_0x4f63ba['$dispatch'](_0x196edf(0x1e8));}catch(_0x4173b4){this[_0x196edf(0x1cc)]=_0x4173b4?.[_0x196edf(0x1ea)]||String(_0x4173b4);}},'downloadUrl':_0x5afb71=>_0x1d1981[_0x23188e(0x1f2)]+_0x23188e(0x1ec)+encodeURIComponent(_0x5afb71['id']),'statusUrl':_0x2cadbd=>_0x1d1981[_0x23188e(0x1f2)]+_0x23188e(0x1ec)+encodeURIComponent(_0x2cadbd['id'])+_0x23188e(0x1f8),'filename'(_0x5266c6){const _0x2a2c50=_0x23188e,_0x54a0b7=_0x5266c6[_0x2a2c50(0x1c6)]??'';return _0x54a0b7?_0x54a0b7[_0x2a2c50(0x1d5)]('/')['filter'](Boolean)[_0x2a2c50(0x1c5)]():_0x5266c6['id'];},'displayPath'(_0x438c3f){const _0x42d7e9=_0x23188e,_0x194536=_0x438c3f[_0x42d7e9(0x1c6)]??'',_0x51bf3d=_0x4f63ba[_0x42d7e9(0x1d0)]['path']??'/';if('/'===_0x51bf3d)return _0x194536||'/';const _0x316ccb=_0x51bf3d[_0x42d7e9(0x1e4)]('/')?_0x51bf3d:_0x51bf3d+'/';return _0x194536[_0x42d7e9(0x1d1)](_0x316ccb)?_0x194536[_0x42d7e9(0x1ce)](_0x316ccb['length']):_0x194536;},'onUploaded'(){const _0x3ffe7d=_0x23188e;this[_0x3ffe7d(0x1e9)](),_0x4f63ba[_0x3ffe7d(0x1f1)]('refresh');},'fmtSize':_0x19fda4=>null==_0x19fda4?'—':_0x19fda4<0x400?_0x19fda4+'\x20B':_0x19fda4<0x100000?(_0x19fda4/0x400)[_0x23188e(0x1ed)](0x1)+'\x20KB':(_0x19fda4/0x100000)[_0x23188e(0x1ed)](0x1)+_0x23188e(0x1e0),'fmtDate'(_0x47ea7f){const _0xade52=_0x23188e;if(!_0x47ea7f)return'—';const _0x44244e=new Date(_0x47ea7f);return _0x44244e[_0xade52(0x1ca)]()+'\x20'+_0x44244e[_0xade52(0x1cb)]([],{'hour':_0xade52(0x1fb),'minute':_0xade52(0x1fb)});},'mimeColor':_0x387c07=>_0x387c07?_0x387c07['startsWith'](_0x23188e(0x1ee))?_0x23188e(0x1d9):_0x387c07[_0x23188e(0x1d1)](_0x23188e(0x1d7))?_0x23188e(0x1e1):_0x387c07[_0x23188e(0x1d1)](_0x23188e(0x1e2))?'#0d9488':_0x387c07[_0x23188e(0x1d1)]('text/')?_0x23188e(0x1dc):_0x387c07[_0x23188e(0x1f6)](_0x23188e(0x1e7))?_0x23188e(0x1d8):_0x387c07[_0x23188e(0x1f6)](_0x23188e(0x1d2))||_0x387c07[_0x23188e(0x1f6)](_0x23188e(0x1c0))?'#d97706':_0x387c07[_0x23188e(0x1f6)](_0x23188e(0x1fd))||_0x387c07['includes'](_0x23188e(0x1f5))?_0x23188e(0x1fa):_0x23188e(0x1dd):_0x23188e(0x1dd),'shortMime'(_0x12dce4){const _0x36de34=_0x23188e;if(!_0x12dce4)return'—';const _0x8495fd=_0x12dce4[_0x36de34(0x1d5)]('/');return _0x8495fd[0x1]??_0x8495fd[0x0];},'hashShort':_0xbb6b99=>_0xbb6b99?_0xbb6b99[_0x23188e(0x1ce)](0x0,0x8)+'…':'—'}),'watch':{'path'(){const _0x355567=_0x23188e;this['showUpload']=!0x1,this[_0x355567(0x1c9)]=0x0,this[_0x355567(0x1e9)]();}},async 'mount'(){const _0x1c6f8d=_0x23188e;await this[_0x1c6f8d(0x1e9)]();const _0x2a3947=()=>this[_0x1c6f8d(0x1e9)]();this[_0x1c6f8d(0x1c4)]=[_0x47407c['on']('files:uploaded',_0x2a3947),_0x47407c['on'](_0x1c6f8d(0x1de),_0x2a3947)];},'unmount'(){const _0x4d4955=_0x23188e;for(const _0x5f5874 of this[_0x4d4955(0x1c4)])_0x5f5874();this['_unsubs']=[];},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<!--\x20──\x20Toolbar\x20───────────────────────────────────────────────────────\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x20flex-wrap:wrap;\x20margin-bottom:10px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:14px;\x20font-weight:700;\x20color:var(--okdb-accent);\x22>{{\x20path\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>{{\x20files.length\x20}}\x20file(s)</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22showUpload\x20=\x20!showUpload\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22showUpload\x20?\x20\x27font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x27\x20:\x20\x27font-size:12px;\x27\x22\x0a\x20\x20\x20\x20\x20\x20>{{\x20showUpload\x20?\x20\x27✕\x20Close\x20upload\x27\x20:\x20\x27↑\x20Upload\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:12px;\x20opacity:.7;\x22>↻</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Upload\x20panel\x20──────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22showUpload\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20margin-bottom:10px;\x20padding:12px;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<files-upload-panel\x0a\x20\x20\x20\x20\x20\x20\x20\x20:path=\x22path\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@uploaded=\x22onUploaded()\x22\x0a\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Error\x20──────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20color:var(--okdb-danger);\x20font-size:12px;\x20margin-bottom:8px;\x20padding:6px\x2010px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20border-radius:6px;\x20background:var(--okdb-danger-soft-bg);\x22>\x0a\x20\x20\x20\x20\x20\x20{{\x20error\x20}}\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Loading\x20────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.4;\x20padding:8px\x200;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Empty\x20state\x20────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20files.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20display:flex;\x20flex-direction:column;\x20align-items:center;\x20justify-content:center;\x20gap:12px;\x20opacity:.45;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:32px;\x22>📂</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x22>No\x20files\x20under\x20<code>{{\x20path\x20}}</code></div>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22showUpload\x20=\x20true\x22\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20↑\x20Upload\x20a\x20file\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Table\x20──────────────────────────────────────────────────────────\x20-->\x0a\x20\x20<if\x20:=\x22files.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20overflow:auto;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:12px;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead\x20style=\x22position:sticky;\x20top:0;\x20z-index:2;\x20background:var(--okdb-app-bg-deep);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x2010px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Path\x20/\x20Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Type</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Hash</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Uploaded</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:center;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Actions</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20as=\x22repeat\x22\x20:of=\x22pagedFiles\x22\x20let:item=\x22f\x22\x20class=\x22file-row\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Path\x20/\x20name\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x2010px;\x20max-width:300px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:13px;\x20flex-shrink:0;\x22>{{\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27image/\x27)\x20?\x20\x27🖼\x27\x20:\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27video/\x27)\x20?\x20\x27🎬\x27\x20:\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27audio/\x27)\x20?\x20\x27🎵\x27\x20:\x20(f.mime\x20||\x20\x27\x27).includes(\x27pdf\x27)\x20?\x20\x27📄\x27\x20:\x20\x27📎\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x20font-family:monospace;\x20font-size:11px;\x20color:var(--okdb-app-fg-strong);\x22\x20:title=\x22f.path\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20displayPath(f)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.3;\x20font-family:monospace;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20f.id\x20?\x20f.id.slice(0,8)\x20:\x20\x27\x27\x20}}…\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20MIME\x20badge\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27display:inline-block;\x20padding:2px\x207px;\x20border-radius:999px;\x20font-size:10px;\x20font-family:monospace;\x20background:\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x2722;\x20color:\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x27;\x20border:1px\x20solid\x20\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x2744;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20shortMime(f.mime)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Size\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20text-align:right;\x20font-family:monospace;\x20font-size:11px;\x20opacity:.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(f.size)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Hash\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20font-family:monospace;\x20font-size:10px;\x20opacity:.4;\x22\x20:title=\x22f.hash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20hashShort(f.hash)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Date\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20font-size:11px;\x20opacity:.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtDate(f.createdAt)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20text-align:center;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:href=\x22downloadUrl(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:download=\x22filename(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:inline-flex;\x20align-items:center;\x20justify-content:center;\x20width:26px;\x20height:22px;\x20color:var(--okdb-sky);\x20font-size:12px;\x20text-decoration:none;\x20border:1px\x20solid\x20var(--okdb-sky-soft-border);\x20border-radius:4px;\x20margin-right:4px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Download\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>↓</a>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22deleteFile(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:26px;\x20height:22px;\x20font-size:11px;\x20padding:0;\x20color:var(--okdb-danger);\x20border-color:#5a1e1e44;\x20background:var(--okdb-danger-soft-bg);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Delete\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>🗑</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tbody>\x0a\x20\x20\x20\x20\x20\x20</table>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Pagination\x20────────────────────────────────────────────────────\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22ok-pager\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22page--\x22\x20:disabled=\x22!hasPrev\x22>‹\x20Prev</button>\x0a\x20\x20\x20\x20\x20\x20<span>Page\x20{{\x20page\x20+\x201\x20}}\x20/\x20{{\x20totalPages\x20}}\x20·\x20{{\x20files.length\x20}}\x20total</span>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22page++\x22\x20:disabled=\x22!hasNext\x22>Next\x20›</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','style':_0x23188e(0x1f0)};
@@ -1 +1 @@
1
- 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
+ function _0x541d(_0x53dedb,_0x3b1e38){_0x53dedb=_0x53dedb-0x6b;const _0x459f2e=_0x459f();let _0x541dd6=_0x459f2e[_0x53dedb];return _0x541dd6;}const _0x31b3d3=_0x541d;(function(_0x4f386f,_0x220bbe){const _0x32e8f9=_0x541d,_0x22b264=_0x4f386f();while(!![]){try{const _0x3c2090=parseInt(_0x32e8f9(0x89))/0x1*(parseInt(_0x32e8f9(0x77))/0x2)+parseInt(_0x32e8f9(0x83))/0x3+parseInt(_0x32e8f9(0x6b))/0x4*(parseInt(_0x32e8f9(0x79))/0x5)+-parseInt(_0x32e8f9(0x7b))/0x6*(-parseInt(_0x32e8f9(0x7e))/0x7)+-parseInt(_0x32e8f9(0x7c))/0x8*(parseInt(_0x32e8f9(0x7f))/0x9)+-parseInt(_0x32e8f9(0x7d))/0xa+parseInt(_0x32e8f9(0x73))/0xb;if(_0x3c2090===_0x220bbe)break;else _0x22b264['push'](_0x22b264['shift']());}catch(_0x123f10){_0x22b264['push'](_0x22b264['shift']());}}}(_0x459f,0xbb62a));function _0x459f(){const _0x51c73a=['toFixed','$attr','9707EkUuYT','other','length','\x0a[tag]\x20.stat-card\x20{\x0a\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20min-width:\x20120px;\x0a\x20\x20\x20\x20padding:\x2014px\x2016px;\x0a\x20\x20\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20\x20\x20border-radius:\x2010px;\x0a}\x0a[tag]\x20.stat-label\x20{\x0a\x20\x20\x20\x20font-size:\x2010px;\x0a\x20\x20\x20\x20opacity:\x20.5;\x0a\x20\x20\x20\x20text-transform:\x20uppercase;\x0a\x20\x20\x20\x20letter-spacing:\x20.06em;\x0a\x20\x20\x20\x20margin-bottom:\x206px;\x0a}\x0a[tag]\x20.stat-value\x20{\x0a\x20\x20\x20\x20font-size:\x2026px;\x0a\x20\x20\x20\x20font-weight:\x20700;\x0a}\x0a[tag]\x20.stat-sub\x20{\x0a\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20opacity:\x20.4;\x0a\x20\x20\x20\x20margin-top:\x202px;\x0a}\x0a[tag]\x20.dir-btn\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x208px;\x0a\x20\x20\x20\x20padding:\x206px\x2010px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a}\x0a[tag]\x20.dir-btn:hover\x20{\x0a\x20\x20\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20border-color:\x20var(--okdb-app-border);\x0a}\x0a','video','100XnCkjD','add','match','size','includes','files','\x20GB','audio','6977960AtyWom','select','entries','sort','148woyeBd','text/','69490OOVrYM','path','6zEkZzA','12736KwhGYM','10528470THkInz','306719yjxGZY','1251odzRyY','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:20px;\x20max-width:680px;\x22>\x0a\x0a\x20\x20<div\x20style=\x22font-weight:700;\x20font-size:18px;\x20opacity:.9;\x22>Files</div>\x0a\x0a\x20\x20<!--\x20Stats\x20row\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:12px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stat-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>Total\x20Files</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-value\x22\x20style=\x22color:var(--okdb-info);\x22>{{\x20totalFiles\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-sub\x22>{{\x20fmtBytes(totalBytes)\x20}}</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22stat-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>Directories</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-value\x22\x20style=\x22color:var(--okdb-accent-2);\x22>{{\x20dirs.length\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-sub\x22>top-level</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<if\x20:=\x22mimeBreakdown.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-card\x22\x20style=\x22flex:2;\x20min-width:180px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>By\x20type</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:6px;\x20margin-top:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22mimeBreakdown\x22\x20let:item=\x22m\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-radius:999px;\x20background:var(--okdb-app-surface);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.8;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20mimeIcon(m.cat)\x20}}\x20{{\x20m.cat\x20}}\x20<span\x20style=\x22opacity:.5;\x22>{{\x20m.count\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Directory\x20list\x20with\x20click-through\x20-->\x0a\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x20margin-bottom:8px;\x20text-transform:uppercase;\x20letter-spacing:.06em;\x22>Directories</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:3px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22dir-btn\x22\x20@click=\x22browseTo(\x27/\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.5;\x22>📁</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x22>/\x20(all\x20files)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22margin-left:auto;\x20font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22dir-btn\x22\x20@click=\x22browseTo(dir)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.4;\x22>📂</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x22>{{\x20dir\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22margin-left:auto;\x20font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20files.filter(f\x20=>\x20(f.path\x20||\x20\x27\x27).startsWith(dir\x20+\x20\x27/\x27)).length\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Empty\x20state\x20-->\x0a\x20\x20<if\x20:=\x22totalFiles\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22padding:24px;\x20background:var(--okdb-app-bg);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:10px;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20align-items:center;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:32px;\x20opacity:.5;\x22>📂</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20font-weight:600;\x20opacity:.8;\x22>No\x20files\x20yet</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.55;\x20line-height:1.8;\x20max-width:340px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Select\x20<strong\x20style=\x22color:var(--okdb-sky);\x22>/\x20(all\x20files)</strong>\x20in\x20the\x20sidebar,\x0a\x20\x20\x20\x20\x20\x20\x20\x20then\x20click\x20<strong\x20style=\x22color:var(--okdb-sky);\x22>↑\x20Upload</strong>\x20to\x20add\x20files.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Files\x20are\x20organised\x20by\x20path,\x20e.g.\x20<code\x20style=\x22color:#a5f3fc;\x22>/photos/cat.jpg</code>.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22browseTo(\x27/\x27)\x22\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x20margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Browse\x20/\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','text','reduce','893160HVtVnY','pdf','startsWith','map'];_0x459f=function(){return _0x51c73a;};return _0x459f();}export default{'tag':'files-overview','props':[_0x31b3d3(0x70)],'context':_0xe37cc8=>({get 'files'(){const _0x193bfb=_0x31b3d3;return _0xe37cc8[_0x193bfb(0x88)][_0x193bfb(0x70)]??[];},get 'totalFiles'(){const _0x4aed67=_0x31b3d3;return this[_0x4aed67(0x70)][_0x4aed67(0x8b)];},get 'dirs'(){const _0x51af07=_0x31b3d3,_0x3a30e5=new Set();for(const _0x3440ce of this[_0x51af07(0x70)]){const _0xc71139=(_0x3440ce[_0x51af07(0x7a)]??'')[_0x51af07(0x6d)](/^(\/[^/]+)\//);_0xc71139&&_0x3a30e5[_0x51af07(0x6c)](_0xc71139[0x1]);}return[..._0x3a30e5][_0x51af07(0x76)]();},get 'totalBytes'(){const _0x2d3134=_0x31b3d3;return this[_0x2d3134(0x70)][_0x2d3134(0x82)]((_0x25a4e3,_0xa31744)=>_0x25a4e3+(_0xa31744[_0x2d3134(0x6e)]??0x0),0x0);},get 'mimeBreakdown'(){const _0x2d0fa0=_0x31b3d3,_0x2c92b6={};for(const _0x14dfb2 of this['files']){const _0x3d2baf=_0x14dfb2['mime']??_0x2d0fa0(0x8a),_0x12fa68=_0x3d2baf[_0x2d0fa0(0x85)]('image/')?'image':_0x3d2baf[_0x2d0fa0(0x85)]('video/')?_0x2d0fa0(0x8d):_0x3d2baf[_0x2d0fa0(0x85)]('audio/')?_0x2d0fa0(0x72):_0x3d2baf[_0x2d0fa0(0x85)](_0x2d0fa0(0x78))?_0x2d0fa0(0x81):_0x3d2baf[_0x2d0fa0(0x6f)](_0x2d0fa0(0x84))?_0x2d0fa0(0x84):_0x2d0fa0(0x8a);_0x2c92b6[_0x12fa68]=(_0x2c92b6[_0x12fa68]??0x0)+0x1;}return Object[_0x2d0fa0(0x75)](_0x2c92b6)[_0x2d0fa0(0x76)]((_0x1dc2f3,_0x1715b6)=>_0x1715b6[0x1]-_0x1dc2f3[0x1])[_0x2d0fa0(0x86)](([_0x452315,_0x41ffb5])=>({'cat':_0x452315,'count':_0x41ffb5}));},'mimeIcon':_0x4f804c=>({'image':'🖼','video':'🎬','audio':'🎵','text':'📝','pdf':'📄','other':'📎'}[_0x4f804c]??'📎'),'fmtBytes':_0x415c78=>_0x415c78<0x400?_0x415c78+'\x20B':_0x415c78<0x100000?(_0x415c78/0x400)[_0x31b3d3(0x87)](0x1)+'\x20KB':_0x415c78<0x40000000?(_0x415c78/0x100000)[_0x31b3d3(0x87)](0x1)+'\x20MB':(_0x415c78/0x40000000)[_0x31b3d3(0x87)](0x2)+_0x31b3d3(0x71),'browseTo'(_0x19d346){const _0x4eb302=_0x31b3d3;_0xe37cc8['$dispatch'](_0x4eb302(0x74),_0x19d346);}}),'template':_0x31b3d3(0x80),'style':_0x31b3d3(0x8c)};
@@ -1 +1 @@
1
- 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
+ const _0xa9d93d=_0x5163;(function(_0x18f546,_0x17a370){const _0x5e3944=_0x5163,_0x287f87=_0x18f546();while(!![]){try{const _0x293894=-parseInt(_0x5e3944(0x1f9))/0x1+-parseInt(_0x5e3944(0x1f2))/0x2+parseInt(_0x5e3944(0x20f))/0x3*(parseInt(_0x5e3944(0x1fd))/0x4)+parseInt(_0x5e3944(0x207))/0x5+parseInt(_0x5e3944(0x216))/0x6+parseInt(_0x5e3944(0x205))/0x7*(parseInt(_0x5e3944(0x208))/0x8)+parseInt(_0x5e3944(0x1fc))/0x9;if(_0x293894===_0x17a370)break;else _0x287f87['push'](_0x287f87['shift']());}catch(_0x2a831d){_0x287f87['push'](_0x287f87['shift']());}}}(_0x1dd5,0xdfcf6));function _0x1dd5(){const _0x4f0df4=['files-path-browser\x20load\x20error','7HSrtlq','files:removed','1419240vAZxOS','1722088fXJXwm','_unsubs','\x20KB','files-path-browser','$watch','\x0a[tag]\x20.dir-row\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x206px;\x0a\x20\x20\x20\x20padding:\x205px\x208px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20text-align:\x20left;\x0a\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a}\x0a[tag]\x20.dir-row:hover\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-app-border);\x20}\x0a[tag]\x20.dir-row--on\x20\x20\x20\x20{\x20background:\x20var(--okdb-accent-soft-bg);\x20border-color:\x20var(--okdb-accent-soft-border);\x20color:\x20var(--okdb-accent);\x20}\x0a','loaded','759621abBMqB','error','localeCompare','size','busy','sort','set','1280484zMwCmJ','path','selected','\x20MB','reduce','selectedEnv','1438132rhiBeq','get','\x20GB','allFiles','load','data','select','948638NUVsSp','json','/files?path=/&recursive=true&limit=5000','5452848XwNOZb','20qacovq','$dispatch','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x20height:100%;\x20min-height:0;\x20overflow:hidden;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:6px;\x20margin-bottom:6px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:13px;\x20opacity:.8;\x22>Files</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:11px;\x20opacity:.6;\x22\x20title=\x22Refresh\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Summary\x20-->\x0a\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20margin-bottom:4px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20{{\x20totalFiles\x20}}\x20file(s)\x20·\x20{{\x20totalBytes()\x20}}\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x20&&\x20allFiles.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20padding:4px\x200;\x22>Loading…</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Scrollable\x20dir\x20list\x20-->\x0a\x20\x20<div\x20style=\x22flex:1;\x20overflow-y:auto;\x20overflow-x:hidden;\x20display:flex;\x20flex-direction:column;\x20gap:2px;\x20min-height:0;\x22>\x0a\x0a\x20\x20\x20\x20<!--\x20All\x20Files\x20row\x20-->\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27/\x27\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22select(\x27/\x27)\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:11px;\x20opacity:.5;\x22>📁</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20font-family:monospace;\x22>/</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.35;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-surface-2);\x20margin:4px\x202px;\x22></div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20Per-dir\x20rows\x20-->\x0a\x20\x20\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20dir.path\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22select(dir.path)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22dir.path\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:11px;\x20opacity:.4;\x22>📂</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20font-family:monospace;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20dir.path\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.35;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20dir.count\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22allFiles.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.3;\x20padding:12px\x200;\x20text-align:center;\x20line-height:1.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20No\x20files\x20yet.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x22>Select\x20/\x20and\x20upload.</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20</div>\x0a\x0a</div>','toFixed','failed','apiBase','length'];_0x1dd5=function(){return _0x4f0df4;};return _0x1dd5();}import _0x4dad3f from'../../../stores/events-store.js';function _0x5163(_0x19e774,_0x35638d){_0x19e774=_0x19e774-0x1f0;const _0x1dd521=_0x1dd5();let _0x516366=_0x1dd521[_0x19e774];return _0x516366;}import _0x102bd6 from'../../../stores/okdb-store.js';export default{'tag':_0xa9d93d(0x20b),'context':_0xc72e5c=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0x9dc9ae=_0xa9d93d;this[_0x9dc9ae(0x213)]=!0x0;try{const _0x367e5d=_0x102bd6[_0x9dc9ae(0x202)],_0x3adcd0=await fetch(_0x367e5d+_0x9dc9ae(0x1fb));if(!_0x3adcd0['ok'])throw new Error(_0x9dc9ae(0x201));const _0x10ba01=await _0x3adcd0[_0x9dc9ae(0x1fa)]();this['allFiles']=_0x10ba01[_0x9dc9ae(0x1f7)]??[],_0xc72e5c[_0x9dc9ae(0x1fe)](_0x9dc9ae(0x20e),this[_0x9dc9ae(0x1f5)]);}catch(_0xeaf703){console[_0x9dc9ae(0x210)](_0x9dc9ae(0x204),_0xeaf703);}finally{this['busy']=!0x1;}},'clearSelection'(){const _0x4cc48f=_0xa9d93d;this[_0x4cc48f(0x218)]=null;},'select'(_0x371199){const _0x3e7670=_0xa9d93d;this[_0x3e7670(0x218)]=_0x371199,_0xc72e5c[_0x3e7670(0x1fe)](_0x3e7670(0x1f8),_0x371199);},get 'dirs'(){const _0xaa06eb=_0xa9d93d,_0x2d08fe=new Map();for(const _0x426cb1 of this['allFiles']){const _0x24d375=(_0x426cb1[_0xaa06eb(0x217)]??'')['match'](/^(\/[^/]+)\//);if(!_0x24d375)continue;const _0x16f2b9=_0x24d375[0x1];_0x2d08fe[_0xaa06eb(0x215)](_0x16f2b9,(_0x2d08fe[_0xaa06eb(0x1f3)](_0x16f2b9)??0x0)+0x1);}return[..._0x2d08fe['entries']()][_0xaa06eb(0x214)]((_0x2cc01d,_0xd8b63a)=>_0x2cc01d[0x0][_0xaa06eb(0x211)](_0xd8b63a[0x0]))['map'](([_0x2e291b,_0x598366])=>({'path':_0x2e291b,'count':_0x598366}));},get 'totalFiles'(){const _0x45817b=_0xa9d93d;return this['allFiles'][_0x45817b(0x203)];},'totalBytes'(){const _0x31224a=_0xa9d93d,_0x104236=this[_0x31224a(0x1f5)][_0x31224a(0x1f0)]((_0x224659,_0x4d503e)=>_0x224659+(_0x4d503e[_0x31224a(0x212)]??0x0),0x0);return _0x104236<0x400?_0x104236+'\x20B':_0x104236<0x100000?(_0x104236/0x400)[_0x31224a(0x200)](0x1)+_0x31224a(0x20a):_0x104236<0x40000000?(_0x104236/0x100000)[_0x31224a(0x200)](0x1)+_0x31224a(0x219):(_0x104236/0x40000000)['toFixed'](0x2)+_0x31224a(0x1f4);}}),async 'mount'(_0x12d57d){const _0x3b973d=_0xa9d93d;await this[_0x3b973d(0x1f6)]();const _0x54fd5e=()=>this[_0x3b973d(0x1f6)]();this[_0x3b973d(0x209)]=[_0x4dad3f['on']('files:uploaded',_0x54fd5e),_0x4dad3f['on'](_0x3b973d(0x206),_0x54fd5e)],_0x12d57d[_0x3b973d(0x20c)](()=>_0x102bd6[_0x3b973d(0x1f1)],()=>{const _0x3f8fc4=_0x3b973d;this[_0x3f8fc4(0x218)]=null,this[_0x3f8fc4(0x1f6)]();});},'unmount'(){const _0x5b771e=_0xa9d93d;for(const _0x628f3f of this['_unsubs'])_0x628f3f();this[_0x5b771e(0x209)]=[];},'template':_0xa9d93d(0x1ff),'style':_0xa9d93d(0x20d)};
@@ -1 +1 @@
1
- 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
+ const _0x2c5997=_0x3faf;(function(_0x471136,_0xe97341){const _0x17a166=_0x3faf,_0x4e665f=_0x471136();while(!![]){try{const _0x4cdfd8=parseInt(_0x17a166(0x159))/0x1*(parseInt(_0x17a166(0x173))/0x2)+-parseInt(_0x17a166(0x16e))/0x3+parseInt(_0x17a166(0x152))/0x4*(parseInt(_0x17a166(0x143))/0x5)+-parseInt(_0x17a166(0x13e))/0x6*(-parseInt(_0x17a166(0x14e))/0x7)+parseInt(_0x17a166(0x140))/0x8*(parseInt(_0x17a166(0x16a))/0x9)+parseInt(_0x17a166(0x155))/0xa*(-parseInt(_0x17a166(0x14b))/0xb)+parseInt(_0x17a166(0x142))/0xc*(parseInt(_0x17a166(0x165))/0xd);if(_0x4cdfd8===_0xe97341)break;else _0x4e665f['push'](_0x4e665f['shift']());}catch(_0x43c774){_0x4e665f['push'](_0x4e665f['shift']());}}}(_0x5685,0xb1f4b));function _0x3faf(_0x392c79,_0x4acdde){_0x392c79=_0x392c79-0x13e;const _0x56855f=_0x5685();let _0x3faf93=_0x56855f[_0x392c79];return _0x3faf93;}import _0x249bee from'../../../components/ok-dropzone.ok.js';import _0x35d1f4 from'../../../stores/okdb-store.js';function _0x5685(){const _0x1ff5e6=['_flush','filter','\x20MB','message','record','files-upload-panel','application/octet-stream','apiBase','createElement','/files?path=','3393GWzJfx','Upload\x20failed','from','size','$dispatch','747HJlcnx','type','endsWith','file','1276266UuMWcD','toFixed','files','\x20KB','replace','373588wanNvG','json','600222qASvhc','name','44408DyHPie','uploaded','10404EytPwK','51165iywAzk','find','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x0a\x20\x20<!--\x20Drop\x20zone\x20-->\x0a\x20\x20<ok-dropzone\x0a\x20\x20\x20\x20@files-drop=\x22onFilesDropped($event)\x22\x0a\x20\x20\x20\x20style=\x22border:2px\x20dashed\x20var(--okdb-app-border);\x20border-radius:8px;\x20padding:24px\x2012px;\x20text-align:center;\x20cursor:pointer;\x20transition:border-color\x20.15s;\x22\x0a\x20\x20\x20\x20@click=\x22onBrowse()\x22\x0a\x20\x20>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20align-items:center;\x20gap:6px;\x20pointer-events:none;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:28px;\x20opacity:.6;\x22>📁</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20opacity:.7;\x22>Drop\x20files\x20or\x20folders\x20here,\x20or\x20<span\x20style=\x22color:var(--okdb-accent);\x20text-decoration:underline;\x22>browse</span></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x22>Uploading\x20to\x20<strong>{{\x20path\x20}}</strong></div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</ok-dropzone>\x0a\x0a\x20\x20<!--\x20Summary\x20bar\x20-->\x0a\x20\x20<if\x20:=\x22queue.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x22>{{\x20queue.length\x20}}\x20file(s)</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22uploadingCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>↑\x20{{\x20uploadingCount\x20}}\x20uploading</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22doneCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-success);\x22>✓\x20{{\x20doneCount\x20}}\x20done</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22errorCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x22>✗\x20{{\x20errorCount\x20}}\x20failed</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x22></span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22doneCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearDone()\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x22>Clear\x20done</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20File\x20list\x20-->\x0a\x20\x20\x20\x20<div\x20style=\x22max-height:220px;\x20overflow-y:auto;\x20display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22queue\x22\x20let:item=\x22item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20padding:5px\x208px;\x20border-radius:6px;\x20background:var(--okdb-app-surface);\x20font-size:12px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Status\x20dot\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27width:7px;height:7px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(item.status\x20===\x20\x27done\x27\x20?\x20\x27var(--okdb-success)\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item.status\x20===\x20\x27error\x27\x20?\x20\x27var(--okdb-danger)\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item.status\x20===\x20\x27uploading\x27\x20?\x20\x27var(--okdb-accent)\x27\x20:\x20\x27var(--okdb-method-default)\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22></span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Name\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22item.relativePath\x22>{{\x20item.relativePath\x20}}</span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Size\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x20font-family:monospace;\x20font-size:11px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(item.file.size)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Error\x20message\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x20max-width:120px;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22item.error\x22>{{\x20item.error\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryItem(item)\x22\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x22>↻</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Spinner\x20for\x20uploading\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20===\x20\x27uploading\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x20font-size:11px;\x20animation:spin\x201s\x20linear\x20infinite;\x22>⟳</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Remove\x20button\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20!==\x20\x27uploading\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22removeItem(item)\x22\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x20opacity:.5;\x22>✕</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','length','error','relativePath','click','\x0a@keyframes\x20spin\x20{\x20to\x20{\x20transform:\x20rotate(360deg);\x20}\x20}\x0a','252714kAefvq','done','_uploading','56xyDSuG','queue','data','path','92nrDAwr','status','$attr','410iZSuRA','uploading','pending','input','2KOkQTj','_uploadOne'];_0x5685=function(){return _0x1ff5e6;};return _0x5685();}export default{'tag':_0x2c5997(0x160),'props':[_0x2c5997(0x151)],'dependencies':[_0x249bee],'context':_0x4a6527=>({'queue':[],get 'path'(){const _0x4d669c=_0x2c5997;return _0x4a6527['$attr'][_0x4d669c(0x151)]||'/';},'onFilesDropped'(_0x57bf2b){const _0x4044f7=_0x2c5997,{files:_0x45c595}=_0x57bf2b['detail'];for(const _0x2da3e7 of _0x45c595)this[_0x4044f7(0x14f)]['push']({'file':_0x2da3e7,'relativePath':_0x2da3e7[_0x4044f7(0x148)]||_0x2da3e7[_0x4044f7(0x13f)],'status':_0x4044f7(0x157),'error':null,'record':null});this[_0x4044f7(0x15b)]();},'onBrowse'(){const _0x48e337=_0x2c5997,_0x5a3db9=document[_0x48e337(0x163)](_0x48e337(0x158));_0x5a3db9[_0x48e337(0x16b)]=_0x48e337(0x16d),_0x5a3db9['multiple']=!0x0,_0x5a3db9['onchange']=()=>{const _0x294b24=_0x48e337;for(const _0x4e876a of Array[_0x294b24(0x167)](_0x5a3db9[_0x294b24(0x170)]))this[_0x294b24(0x14f)]['push']({'file':_0x4e876a,'relativePath':_0x4e876a[_0x294b24(0x13f)],'status':_0x294b24(0x157),'error':null,'record':null});this[_0x294b24(0x15b)]();},_0x5a3db9[_0x48e337(0x149)]();},'_uploading':!0x1,async '_flush'(){const _0x576680=_0x2c5997;if(!this[_0x576680(0x14d)]){this[_0x576680(0x14d)]=!0x0;try{let _0x4caa2a;for(;_0x4caa2a=this[_0x576680(0x14f)][_0x576680(0x144)](_0x4cc269=>'pending'===_0x4cc269[_0x576680(0x153)]);)await this[_0x576680(0x15a)](_0x4caa2a);}finally{this[_0x576680(0x14d)]=!0x1;}}},async '_uploadOne'(_0x8bc4ad){const _0x139527=_0x2c5997;_0x8bc4ad[_0x139527(0x153)]=_0x139527(0x156);const _0x4fd3e5=_0x4a6527[_0x139527(0x154)][_0x139527(0x151)]||'/';try{const _0x1bf17d=(_0x8bc4ad[_0x139527(0x148)]||_0x8bc4ad['file'][_0x139527(0x13f)])[_0x139527(0x172)](/^\//,''),_0x3778c4=(_0x4fd3e5[_0x139527(0x16c)]('/')?_0x4fd3e5:_0x4fd3e5+'/')+_0x1bf17d,_0x1cd00a=await fetch(_0x35d1f4[_0x139527(0x162)]+_0x139527(0x164)+encodeURIComponent(_0x3778c4),{'method':'POST','headers':{'content-type':_0x8bc4ad[_0x139527(0x16d)][_0x139527(0x16b)]||_0x139527(0x161),'content-length':String(_0x8bc4ad['file'][_0x139527(0x168)])},'body':_0x8bc4ad[_0x139527(0x16d)]}),_0x5e0256=await _0x1cd00a[_0x139527(0x174)]();if(!_0x1cd00a['ok'])throw new Error(_0x5e0256?.[_0x139527(0x147)]?.[_0x139527(0x15e)]||_0x139527(0x166));_0x8bc4ad[_0x139527(0x15f)]=_0x5e0256[_0x139527(0x150)],_0x8bc4ad[_0x139527(0x153)]=_0x139527(0x14c),_0x4a6527[_0x139527(0x169)](_0x139527(0x141),_0x8bc4ad[_0x139527(0x15f)]);}catch(_0x3db143){_0x8bc4ad[_0x139527(0x147)]=_0x3db143?.['message']||String(_0x3db143),_0x8bc4ad['status']='error';}},'retryItem'(_0x4f9691){const _0x53cb71=_0x2c5997;_0x4f9691[_0x53cb71(0x153)]=_0x53cb71(0x157),_0x4f9691[_0x53cb71(0x147)]=null,this[_0x53cb71(0x15b)]();},'removeItem'(_0xdea860){const _0x2aa8ca=_0x2c5997,_0x4d8b8d=this[_0x2aa8ca(0x14f)]['indexOf'](_0xdea860);-0x1!==_0x4d8b8d&&this[_0x2aa8ca(0x14f)]['splice'](_0x4d8b8d,0x1);},'clearDone'(){const _0xa33be8=_0x2c5997;this[_0xa33be8(0x14f)]=this[_0xa33be8(0x14f)][_0xa33be8(0x15c)](_0x220271=>'done'!==_0x220271[_0xa33be8(0x153)]);},'fmtSize':_0x553c4d=>null==_0x553c4d?'—':_0x553c4d<0x400?_0x553c4d+'\x20B':_0x553c4d<0x100000?(_0x553c4d/0x400)[_0x2c5997(0x16f)](0x1)+_0x2c5997(0x171):(_0x553c4d/0x100000)[_0x2c5997(0x16f)](0x1)+_0x2c5997(0x15d),get 'pendingCount'(){const _0x44df50=_0x2c5997;return this[_0x44df50(0x14f)][_0x44df50(0x15c)](_0x556a42=>_0x44df50(0x157)===_0x556a42['status'])[_0x44df50(0x146)];},get 'uploadingCount'(){const _0x38c722=_0x2c5997;return this[_0x38c722(0x14f)]['filter'](_0x343bbb=>_0x38c722(0x156)===_0x343bbb['status'])[_0x38c722(0x146)];},get 'doneCount'(){const _0x13f998=_0x2c5997;return this[_0x13f998(0x14f)][_0x13f998(0x15c)](_0x36290d=>_0x13f998(0x14c)===_0x36290d[_0x13f998(0x153)])['length'];},get 'errorCount'(){const _0x17bc21=_0x2c5997;return this['queue'][_0x17bc21(0x15c)](_0x5535d0=>_0x17bc21(0x147)===_0x5535d0['status'])['length'];}}),'template':_0x2c5997(0x145),'style':_0x2c5997(0x14a)};
@@ -1 +1 @@
1
- const _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)};
1
+ const _0x1cd37d=_0x58a1;(function(_0x5a93f4,_0x4e2cb8){const _0x11ae8f=_0x58a1,_0x96f0f=_0x5a93f4();while(!![]){try{const _0x5524f9=-parseInt(_0x11ae8f(0xb3))/0x1*(-parseInt(_0x11ae8f(0xb4))/0x2)+-parseInt(_0x11ae8f(0xb2))/0x3+parseInt(_0x11ae8f(0xb9))/0x4*(-parseInt(_0x11ae8f(0xa7))/0x5)+-parseInt(_0x11ae8f(0xca))/0x6+parseInt(_0x11ae8f(0xd5))/0x7+parseInt(_0x11ae8f(0xea))/0x8+parseInt(_0x11ae8f(0xd7))/0x9*(parseInt(_0x11ae8f(0xbc))/0xa);if(_0x5524f9===_0x4e2cb8)break;else _0x96f0f['push'](_0x96f0f['shift']());}catch(_0x1f59df){_0x96f0f['push'](_0x96f0f['shift']());}}}(_0x2abf,0x9d6da));import _0x49b155 from'@toolkit/elements/ok-icon.ok.js';import _0x14a412 from'@toolkit/core/ok-overlay.ok.js';function _0x58a1(_0x39f94a,_0x8f963b){_0x39f94a=_0x39f94a-0xa0;const _0x2abfb6=_0x2abf();let _0x58a184=_0x2abfb6[_0x39f94a];return _0x58a184;}function _0x2abf(){const _0x112322=['Failed\x20to\x20save\x20function','modalEnabledDraft','Function\x20created:\x20','1818472vUvfNC','edit','success','isFinite','modalTimeoutMsDraft','modalJobContextDraft','stringify','Function\x20saved:\x20','{\x0a\x20\x20\x0a}','error','function-modal','runModalDraft','2805375yQvpDF','functions','modalDryRunMode','envName','canSave','runId','saveModalDefinition','modalAllowFetchDraft','result','modalRunning','canSaveModal','2406459xadXdW','6287ugiaBH','134sKHsCs','modalUnsafeDraft','modalDescriptionDraft','Failed\x20to\x20run\x20draft','modalPayloadDraft','8koVKyz','\x0a<div\x20style=\x22position:relative;\x20width:min(1220px,\x20calc(100vw\x20-\x2060px));\x20max-width:calc(100vw\x20-\x2060px);\x20min-width:900px;\x20min-height:760px;\x20display:flex;\x20flex-direction:column;\x20gap:16px;\x22>\x0a\x20\x20<if\x20:=\x22saving\x20||\x20running\x22>\x0a\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:32px;height:32px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:flex-start;\x20justify-content:space-between;\x20gap:16px;\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:18px;\x20font-weight:700;\x20color:var(--okdb-app-fg);\x22>{{\x20titleLabel\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-top:4px;\x20font-size:12px;\x20color:var(--okdb-app-fg-muted);\x22>Scope:\x20{{\x20scopeLabel\x20}}</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:16px;\x20font-size:12px;\x20color:var(--okdb-app-fg-muted);\x22>\x0a\x20\x20\x20\x20\x20\x20<label\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22store.modalEnabledDraft\x20!==\x20false\x22\x20@change=\x22setEnabled($el.checked)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Enabled\x0a\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20<label\x20:style=\x22unsafe\x20?\x20\x27display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x20color:var(--okdb-orange);\x20font-weight:600;\x27\x20:\x20\x27display:flex;\x20align-items:center;\x20gap:6px;\x20cursor:pointer;\x20user-select:none;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22store.modalUnsafeDraft\x20===\x20true\x22\x20@change=\x22setUnsafe($el.checked)\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span>{{\x20unsafe\x20?\x20\x27⚠️\x20Unsafe\x27\x20:\x20\x27Unsafe\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22unsafe\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22padding:10px\x2014px;\x20border:1px\x20solid\x20#92400e;\x20border-radius:10px;\x20background:#1c0f00;\x20color:#fdba74;\x20font-size:12px;\x20line-height:1.6;\x20display:flex;\x20gap:10px;\x20align-items:flex-start;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:16px;\x20flex-shrink:0;\x22>&#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','name','10jcDOWA','join','length','processor','modal','modalMode','modalNameDraft','toast','modalValidation','args','$ok','stores','logsForRun','setModalPayloadDraft','297228XOhsAI','selectedName','$attr','Save\x20changes','close','Create\x20function','modalMemoryMbDraft','modalProcessorContextDraft','dryRunActions','Draft\x20executed','onDone','4816917xroaOM','previewRunId','11537982AIdUoX','previewRun','modalMaterializerContextDraft','Dry\x20run\x20complete','map','store','job','Edit\x20function','setModalSourceDraft','create','modalPayloadError','canRun','mode','modalPreviewRun','message','shared'];_0x2abf=function(){return _0x112322;};return _0x2abf();}import _0x636380 from'../../../components/ok-js-input.ok.js';import _0x5b9e1c from'../../../components/ok-text-monaco-input.ok.js';import _0x22a5b6 from'../parts/function-logs.ok.js';export default{'tag':_0x1cd37d(0xa5),'dependencies':[_0x49b155,_0x14a412,_0x636380,_0x5b9e1c,_0x22a5b6],'attr':{'modal':{},'mode':{},'onDone':{}},'context':_0x26e872=>({get 'store'(){const _0x552800=_0x1cd37d;return _0x26e872[_0x552800(0xc6)][_0x552800(0xc7)][_0x552800(0xa8)];},get 'mode'(){const _0x3b32fb=_0x1cd37d;return _0x26e872[_0x3b32fb(0xcc)][_0x3b32fb(0xe3)]||this[_0x3b32fb(0xdc)][_0x3b32fb(0xc1)]||_0x3b32fb(0xe0);},get 'saving'(){const _0x310ad4=_0x1cd37d;return this[_0x310ad4(0xdc)]['saving'];},get 'running'(){const _0x1bcfa7=_0x1cd37d;return this[_0x1bcfa7(0xdc)][_0x1bcfa7(0xb0)];},get 'validation'(){const _0x487bda=_0x1cd37d;return this[_0x487bda(0xdc)][_0x487bda(0xc4)]||{};},get 'canSave'(){const _0x97b2ed=_0x1cd37d;return this[_0x97b2ed(0xdc)][_0x97b2ed(0xb1)];},get 'canRun'(){const _0x2b88b1=_0x1cd37d;return!!this[_0x2b88b1(0xdc)][_0x2b88b1(0xc4)]?.['ok']&&!this[_0x2b88b1(0xdc)][_0x2b88b1(0xe1)]&&!this[_0x2b88b1(0xdc)]['modalRunning'];},get 'modalDryRunMode'(){const _0xac6490=_0x1cd37d;return this['store'][_0xac6490(0xa9)];},get 'modalDryRunActions'(){const _0x33625f=_0x1cd37d;return this[_0x33625f(0xdc)][_0x33625f(0xe4)]?.[_0x33625f(0xaf)]?.[_0x33625f(0xd2)]??null;},'toggleModalDryRun'(){const _0x5569af=_0x1cd37d;this[_0x5569af(0xdc)][_0x5569af(0xa9)]=!this[_0x5569af(0xdc)]['modalDryRunMode'];},get 'scopeLabel'(){const _0x54d03c=_0x1cd37d;return this[_0x54d03c(0xdc)][_0x54d03c(0xaa)]||'—';},get 'unsafe'(){const _0x4cf135=_0x1cd37d;return!0x0===this[_0x4cf135(0xdc)]['modalUnsafeDraft'];},get 'titleLabel'(){const _0xbc20d3=_0x1cd37d;return _0xbc20d3(0xeb)===this[_0xbc20d3(0xe3)]?_0xbc20d3(0xde):_0xbc20d3(0xcf);},get 'saveLabel'(){const _0x430d91=_0x1cd37d;return _0x430d91(0xeb)===this[_0x430d91(0xe3)]?_0x430d91(0xcd):_0x430d91(0xcf);},get 'descriptionLength'(){const _0x2a3843=_0x1cd37d;return String(this['store'][_0x2a3843(0xb6)]||'')[_0x2a3843(0xbe)];},get 'payloadError'(){const _0x799b68=_0x1cd37d;return this[_0x799b68(0xdc)][_0x799b68(0xe1)];},get 'previewRun'(){const _0x5665c8=_0x1cd37d;return this[_0x5665c8(0xdc)][_0x5665c8(0xe4)];},get 'previewRunId'(){const _0x32e532=_0x1cd37d;return this[_0x32e532(0xd8)]?.['id']||this[_0x32e532(0xd8)]?.[_0x32e532(0xac)]||null;},get 'previewLogs'(){const _0x3202b9=_0x1cd37d;return this[_0x3202b9(0xdc)][_0x3202b9(0xc8)](this[_0x3202b9(0xd6)]);},get 'previewTriggerKind'(){const _0x5cf816=_0x1cd37d;return this[_0x5cf816(0xdc)][_0x5cf816(0xd9)]?'materializer':this[_0x5cf816(0xdc)][_0x5cf816(0xd1)]?_0x5cf816(0xbf):this['store'][_0x5cf816(0xa0)]?_0x5cf816(0xdd):null;},get 'previewTriggerContext'(){const _0x5a2d00=_0x1cd37d;return this['store'][_0x5a2d00(0xd9)]||this[_0x5a2d00(0xdc)][_0x5a2d00(0xd1)]||this[_0x5a2d00(0xdc)][_0x5a2d00(0xa0)]||null;},'setName'(_0x368404){const _0x3ce233=_0x1cd37d;this[_0x3ce233(0xdc)][_0x3ce233(0xc2)]=_0x368404??'';},'setDescription'(_0x593978){const _0x2551f6=_0x1cd37d;this['store'][_0x2551f6(0xb6)]=_0x593978??'';},'setEnabled'(_0x2114b3){const _0x19b4ac=_0x1cd37d;this[_0x19b4ac(0xdc)][_0x19b4ac(0xe8)]=!!_0x2114b3;},'setUnsafe'(_0x416484){const _0x1f08d6=_0x1cd37d;this[_0x1f08d6(0xdc)][_0x1f08d6(0xb5)]=!!_0x416484;},'setTimeoutMs'(_0x3a4693){const _0x4f0d0a=_0x1cd37d,_0x5cfa58=parseInt(_0x3a4693,0xa);this[_0x4f0d0a(0xdc)][_0x4f0d0a(0xee)]=Number[_0x4f0d0a(0xed)](_0x5cfa58)&&_0x5cfa58>0x0?_0x5cfa58:null;},'setMemoryMb'(_0x5723f3){const _0x1dc353=_0x1cd37d,_0x39edd4=parseInt(_0x5723f3,0xa);this['store'][_0x1dc353(0xd0)]=Number[_0x1dc353(0xed)](_0x39edd4)&&_0x39edd4>0x0?_0x39edd4:null;},'setAllowFetch'(_0x39e959){const _0x1f574f=_0x1cd37d;this[_0x1f574f(0xdc)][_0x1f574f(0xae)]=!!_0x39e959;},'setSource'(_0x10c030){const _0xd2719c=_0x1cd37d;this[_0xd2719c(0xdc)][_0xd2719c(0xdf)](_0x10c030??'');},'setPayload'(_0x33f7ed){const _0x505cbd=_0x1cd37d;this[_0x505cbd(0xdc)][_0x505cbd(0xc9)](_0x33f7ed??_0x505cbd(0xa3));},async 'submit'(){const _0x214948=_0x1cd37d;if(this[_0x214948(0xab)])try{const _0x29419c=await this[_0x214948(0xdc)][_0x214948(0xad)]();this[_0x214948(0xdc)]['setPayloadDraft'](this['store'][_0x214948(0xb8)]),_0x26e872[_0x214948(0xc6)][_0x214948(0xe6)]?.['toast']?.['success']?.('edit'===this[_0x214948(0xe3)]?_0x214948(0xa2)+(_0x29419c?.['name']||this[_0x214948(0xdc)][_0x214948(0xcb)]):_0x214948(0xe9)+(_0x29419c?.[_0x214948(0xbb)]||this['store'][_0x214948(0xc2)])),await _0x26e872[_0x214948(0xcc)][_0x214948(0xc0)][_0x214948(0xce)](),await _0x26e872['$attr'][_0x214948(0xd4)]?.(_0x29419c);}catch(_0x42e4c3){_0x26e872[_0x214948(0xc6)][_0x214948(0xe6)]?.[_0x214948(0xc3)]?.['error']?.(_0x42e4c3?.[_0x214948(0xe5)]||_0x214948(0xe7));}},async 'runDraft'(){const _0x513bc5=_0x1cd37d;if(this[_0x513bc5(0xe2)])try{await this[_0x513bc5(0xdc)][_0x513bc5(0xa6)](),_0x26e872[_0x513bc5(0xc6)][_0x513bc5(0xe6)]?.['toast']?.[_0x513bc5(0xec)]?.(this[_0x513bc5(0xa9)]?_0x513bc5(0xda):_0x513bc5(0xd3));}catch(_0x30fd6c){_0x26e872[_0x513bc5(0xc6)][_0x513bc5(0xe6)]?.[_0x513bc5(0xc3)]?.[_0x513bc5(0xa4)]?.(_0x30fd6c?.[_0x513bc5(0xe5)]||_0x513bc5(0xb7));}},'actionArgs'(_0x433e8c){const _0x4272f1=_0x1cd37d,_0x1329ca=_0x433e8c[_0x4272f1(0xc5)]??[];return 0x0===_0x1329ca[_0x4272f1(0xbe)]?'':_0x1329ca[_0x4272f1(0xdb)](_0x513b06=>JSON[_0x4272f1(0xa1)](_0x513b06))[_0x4272f1(0xbd)](',\x20');},'formatJson'(_0x1e305d){try{return JSON['stringify'](_0x1e305d,null,0x2);}catch{return String(_0x1e305d??'');}},'cancel'(){const _0x33661b=_0x1cd37d;_0x26e872['$attr'][_0x33661b(0xc0)]['close']();}}),'template':_0x1cd37d(0xba)};