@kedem/okdb 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +57 -0
- package/README.md +344 -0
- package/banner.jpg +0 -0
- package/bin/okdb.js +2 -0
- package/docs/OKDB-ARCHITECTURE.md +1036 -0
- package/docs/auth-and-sync.md +558 -0
- package/docs/auth-permissions.md +143 -0
- package/docs/change-log.md +169 -0
- package/docs/data-model.md +174 -0
- package/docs/embeddings.md +338 -0
- package/docs/files.md +131 -0
- package/docs/fts.md +139 -0
- package/docs/functions.md +514 -0
- package/docs/getting-started.md +233 -0
- package/docs/http-api.md +705 -0
- package/docs/index.md +115 -0
- package/docs/indexes.md +207 -0
- package/docs/logging.md +116 -0
- package/docs/manifest.json +38 -0
- package/docs/migration.md +154 -0
- package/docs/pipelines.md +598 -0
- package/docs/plugins.md +144 -0
- package/docs/querying.md +204 -0
- package/docs/queue.md +637 -0
- package/docs/sync.md +156 -0
- package/docs/transactions.md +140 -0
- package/docs/ttl.md +375 -0
- package/okdb.js +1 -0
- package/package.json +26 -0
- package/public/admin-app.js +1 -0
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/components/admin-route-host.ok.js +1 -0
- package/public/components/env-picker.ok.js +1 -0
- package/public/components/field-path-input.ok.js +1 -0
- package/public/components/field.html +6 -0
- package/public/components/geo-map.ok.js +1 -0
- package/public/components/ok-cron-input.ok.js +1 -0
- package/public/components/ok-dropzone.ok.js +1 -0
- package/public/components/ok-js-input.ok.js +1 -0
- package/public/components/ok-json-input.ok.js +1 -0
- package/public/components/ok-text-monaco-input.ok.js +1 -0
- package/public/components/theme-toggle.ok.js +1 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/images/logo.png +0 -0
- package/public/images/logo.svg +333 -0
- package/public/index.html +6 -0
- package/public/layouts/_default.ok.html +1 -0
- package/public/layouts/okdb-cube.ok.html +1 -0
- package/public/login-app.js +1 -0
- package/public/login.html +1 -0
- package/public/modules/ok.js +1 -0
- package/public/sections/api/index.ok.html +1 -0
- package/public/sections/api/parts/api-endpoint.ok.js +1 -0
- package/public/sections/auth/index.ok.html +1 -0
- package/public/sections/auth/modals/create-token-modal.ok.js +1 -0
- package/public/sections/auth/modals/edit-token-modal.ok.js +1 -0
- package/public/sections/auth/modals/perm-info-popover.ok.js +1 -0
- package/public/sections/auth/parts/token-detail.ok.js +1 -0
- package/public/sections/auth/parts/token-list.ok.js +1 -0
- package/public/sections/db/index.ok.html +1 -0
- package/public/sections/db/modals/add-item-modal.ok.js +1 -0
- package/public/sections/db/modals/create-env-modal.ok.js +1 -0
- package/public/sections/db/modals/create-fts-modal.ok.js +1 -0
- package/public/sections/db/modals/create-index-modal.ok.js +1 -0
- package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -0
- package/public/sections/db/modals/demo-env-modal.ok.js +1 -0
- package/public/sections/db/modals/remove-env-modal.ok.js +1 -0
- package/public/sections/db/modals/schema-edit-modal.ok.js +1 -0
- package/public/sections/db/parts/db-overview.ok.js +1 -0
- package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -0
- package/public/sections/db/parts/edit-row.ok.js +1 -0
- package/public/sections/db/parts/tm-timeline.ok.js +1 -0
- package/public/sections/db/parts/type-changelog.ok.js +1 -0
- package/public/sections/db/parts/type-list.ok.js +1 -0
- package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -0
- package/public/sections/db/parts/type-schema-tab.ok.js +1 -0
- package/public/sections/db/parts/type-viewer.ok.js +1 -0
- package/public/sections/db/parts/type-violations-tab.ok.js +1 -0
- package/public/sections/docs/index.ok.html +1 -0
- package/public/sections/embeddings/index.ok.html +1 -0
- package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-overview.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -0
- package/public/sections/embeddings/parts/engines-overview.ok.js +1 -0
- package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -0
- package/public/sections/engines/engine-panel-shared-style.js +1 -0
- package/public/sections/engines/engine-ui-utils.js +1 -0
- package/public/sections/engines/index.ok.html +1 -0
- package/public/sections/engines/modals/engine-modal.ok.js +1 -0
- package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -0
- package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -0
- package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -0
- package/public/sections/engines/parts/engine-resource-card.ok.js +1 -0
- package/public/sections/engines/parts/engine-row-item.ok.js +1 -0
- package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -0
- package/public/sections/files/index.ok.html +1 -0
- package/public/sections/files/parts/files-blob-status.ok.js +1 -0
- package/public/sections/files/parts/files-collection-list.ok.js +1 -0
- package/public/sections/files/parts/files-collection-panel.ok.js +1 -0
- package/public/sections/files/parts/files-file-list.ok.js +1 -0
- package/public/sections/files/parts/files-overview.ok.js +1 -0
- package/public/sections/files/parts/files-path-browser.ok.js +1 -0
- package/public/sections/files/parts/files-upload-panel.ok.js +1 -0
- package/public/sections/functions/index.ok.html +1 -0
- package/public/sections/functions/modals/function-modal.ok.js +1 -0
- package/public/sections/functions/parts/function-detail.ok.js +1 -0
- package/public/sections/functions/parts/function-logs.ok.js +1 -0
- package/public/sections/functions/parts/function-runner.ok.js +1 -0
- package/public/sections/functions/parts/functions-list.ok.js +1 -0
- package/public/sections/license/index.ok.html +1 -0
- package/public/sections/license/parts/license-panel.ok.js +1 -0
- package/public/sections/processors/index.ok.html +1 -0
- package/public/sections/queue/index.ok.html +1 -0
- package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -0
- package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -0
- package/public/sections/queue/modals/edit-job-modal.ok.js +1 -0
- package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -0
- package/public/sections/queue/modals/job-type-modal.ok.js +1 -0
- package/public/sections/queue/parts/ok-job-form.ok.js +1 -0
- package/public/sections/queue/parts/queue-buckets.ok.js +1 -0
- package/public/sections/queue/parts/queue-job-types.ok.js +1 -0
- package/public/sections/queue/parts/queue-jobs.ok.js +1 -0
- package/public/sections/queue/parts/queue-types.ok.js +1 -0
- package/public/sections/queue/parts/queue-workers.ok.js +1 -0
- package/public/sections/sync/index.ok.html +5 -0
- package/public/sections/sync/parts/sync-node-detail.ok.js +1 -0
- package/public/sections/sync/parts/sync-retention.ok.js +1 -0
- package/public/sections/sync/parts/sync-topology.ok.js +1 -0
- package/public/sections/system/index.ok.html +1 -0
- package/public/sections/system/modals/data-ops-modal.ok.js +1 -0
- package/public/sections/system/parts/system-api-panel.ok.js +1 -0
- package/public/sections/system/parts/system-auth-panel.ok.js +1 -0
- package/public/sections/system/parts/system-log-history.ok.js +1 -0
- package/public/sections/system/parts/system-log.ok.js +1 -0
- package/public/sections/system/parts/system-status.ok.js +1 -0
- package/public/sections/system/parts/system-sync-panel.ok.js +1 -0
- package/public/sections/views/index.ok.html +1 -0
- package/public/sections/views/modals/create-view-modal.ok.js +1 -0
- package/public/sections/views/parts/view-detail.ok.js +1 -0
- package/public/sections/views/parts/views-list.ok.js +1 -0
- package/public/sections/views/parts/views-overview.ok.js +1 -0
- package/public/setup-app.js +1 -0
- package/public/setup.html +1 -0
- package/public/site.webmanifest +1 -0
- package/public/stores/auth-store.js +1 -0
- package/public/stores/events-store.js +1 -0
- package/public/stores/functions-store.js +1 -0
- package/public/stores/okdb-store.js +1 -0
- package/public/stores/theme-store.js +1 -0
- package/public/styles.css +1 -0
- package/public/test-cron-input.html +10 -0
- package/public/test-json-input.html +101 -0
- package/public/util/permissions.js +1 -0
- package/public/util/sift-schema.js +1 -0
- package/public/vendor/okjs/ok.esm.min.js +2 -0
- package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -0
- package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -0
- package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -0
- package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -0
- package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -0
- package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -0
- package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -0
- package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -0
- package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -0
- package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -0
- package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -0
- package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -0
- package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -0
- package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -0
- package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -0
- package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -0
- package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -0
- package/public/vendor/okjs/toolkit/manifest.js +1 -0
- package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -0
- package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -0
- package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -0
- package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -0
- package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -0
- package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -0
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -0
- package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -0
- package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -0
- package/public/view-models/type-query-vm.js +1 -0
- package/types/environment.d.ts +130 -0
- package/types/errors.d.ts +98 -0
- package/types/features/admin.d.ts +4 -0
- package/types/features/api.d.ts +18 -0
- package/types/features/auth.d.ts +31 -0
- package/types/features/embeddings.d.ts +39 -0
- package/types/features/engines.d.ts +23 -0
- package/types/features/files.d.ts +29 -0
- package/types/features/fts.d.ts +25 -0
- package/types/features/functions.d.ts +23 -0
- package/types/features/mcp.d.ts +17 -0
- package/types/features/pipelines.d.ts +19 -0
- package/types/features/queue.d.ts +189 -0
- package/types/features/sync.d.ts +34 -0
- package/types/features/time-machine.d.ts +32 -0
- package/types/features/views.d.ts +16 -0
- package/types/index.d.ts +153 -0
- package/types/options.d.ts +202 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0x2b1d(){const _0x2d7b12=['engine-panel-shell','$dispatch','meta','borderColor','false','refreshBusyValue','showRefreshAction','reasonLabel','817611ZqPxBr','β»\x20Refresh','eng','type','true','isRunning','engine','onPipeline','online','5550951HnguSr','$attr','pipelineText','pipeline','Engine','refreshDisabled','flex-direction:column','engine-updated','refreshLabel','564Nsgmjk','2984571LadTKX',';background:','filter','9ETvXjK','padStart','statusLabel','%,\x20transparent)','20JhrHWp','color-mix(in\x20srgb,\x20','status','refreshBusy','var(--okdb-app-fg-muted)','name','title','deleted','69604vBxzdn','function','typeColor','gap:16px','reason','startsWith','4765888hsqEaj','pipelineTitle','\x0a<div\x20:style=\x22rootStyle\x22>\x0a\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;gap:12px;justify-content:space-between;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27width:10px;height:10px;border-radius:50%;background:\x27\x20+\x20tone\x20+\x20\x27;flex-shrink:0;\x27\x22></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:18px;font-weight:700;color:var(--okdb-app-fg);word-break:break-word;min-width:0;\x22>{{\x20titleLabel\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27padding:2px\x208px;border-radius:999px;border:1px\x20solid\x20\x27\x20+\x20alpha(typeColorValue,27)\x20+\x20\x27;color:\x27\x20+\x20typeColorValue\x20+\x20\x27;text-transform:uppercase;letter-spacing:.05em;font-size:11px;\x27\x22>{{\x20typeLabelValue\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22showStatusBadge\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27padding:2px\x208px;border-radius:999px;border:1px\x20solid\x20\x27\x20+\x20alpha(tone,33)\x20+\x20\x27;color:\x27\x20+\x20tone\x20+\x20\x27;font-size:11px;\x27\x22>{{\x20statusLabel\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:6px;flex-wrap:wrap;align-items:center;font-size:12px;color:#8aa7bc;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22showReasonBadge\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22padding:2px\x208px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-app-fg-subtle)\x2033%,\x20transparent);color:var(--okdb-app-fg-muted);\x22>{{\x20reasonLabel\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22envName\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22padding:2px\x208px;border-radius:999px;border:1px\x20solid\x20var(--okdb-app-border);color:var(--okdb-app-fg-muted);\x22>env:\x20{{\x20envName\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenPipeline\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openPipeline()\x22\x20:title=\x22pipelineTitleValue\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;padding:2px\x208px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent-2)\x2033%,\x20transparent);color:var(--okdb-accent-2);background:color-mix(in\x20srgb,\x20var(--okdb-accent-2)\x207%,\x20transparent);cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20β\x20{{\x20pipelineText\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22extraBadges\x22\x20let:item=\x22badge\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22badgeStyle(badge)\x22\x20:title=\x22badge.title\x20||\x20badge.text\x20||\x20badge.label\x22>{{\x20badge.text\x20||\x20badge.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.key\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;color:var(--okdb-app-fg-subtle);font-family:monospace;word-break:break-all;\x22>{{\x20eng.key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22showRefreshAction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clickRefresh()\x22\x20:disabled=\x22refreshBusyValue\x20||\x20refreshDisabledValue\x22\x20style=\x22opacity:.8;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20refreshBusyValue\x20?\x20\x27β¦\x27\x20:\x20refreshLabelValue\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22showLifecycleActions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<engine-lifecycle-actions\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:env=\x22envName\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@engine-updated=\x22handleEngineUpdated($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@refresh=\x22handleRefresh()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@deleted=\x22handleDeleted($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22showErrorCard\x20&&\x20eng.error\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-weight:600;margin-bottom:4px;\x22>Engine\x20error</div>\x0a\x20\x20\x20\x20\x20\x20<div>{{\x20eng.error\x20}}</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<slot\x20/>\x0a\x0a\x20\x20<if\x20:=\x22showDeclarationEditor\x22>\x0a\x20\x20\x20\x20<engine-declaration-editor\x0a\x20\x20\x20\x20\x20\x20:engine=\x22eng\x22\x0a\x20\x20\x20\x20\x20\x20:env=\x22envName\x22\x0a\x20\x20\x20\x20\x20\x20@engine-updated=\x22handleEngineUpdated($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20@refresh=\x22handleRefresh()\x22\x0a\x20\x20\x20\x20/>\x0a\x20\x20</if>\x0a</div>\x0a','padding:2px\x208px;border-radius:999px;font-size:11px;border:1px\x20solid\x20','min-height:0','height:100%','error','2dxONsr','var(--okdb-accent)','display:flex','12392919rJgekY','refresh','13785cFsMVD','join','onRefresh','var(','background','alpha','typeLabel','badges','showLifecycle','color','inactive'];_0x2b1d=function(){return _0x2d7b12;};return _0x2b1d();}const _0x4b9b50=_0x4cf2;(function(_0x512dc2,_0x5a1ed0){const _0x45248f=_0x4cf2,_0x59a3a6=_0x512dc2();while(!![]){try{const _0x446650=-parseInt(_0x45248f(0xa1))/0x1*(parseInt(_0x45248f(0x89))/0x2)+parseInt(_0x45248f(0xb7))/0x3*(-parseInt(_0x45248f(0x7c))/0x4)+parseInt(_0x45248f(0x8e))/0x5*(-parseInt(_0x45248f(0xb3))/0x6)+-parseInt(_0x45248f(0xaa))/0x7+parseInt(_0x45248f(0x82))/0x8+parseInt(_0x45248f(0xb4))/0x9*(parseInt(_0x45248f(0x74))/0xa)+parseInt(_0x45248f(0x8c))/0xb;if(_0x446650===_0x5a1ed0)break;else _0x59a3a6['push'](_0x59a3a6['shift']());}catch(_0x502592){_0x59a3a6['push'](_0x59a3a6['shift']());}}}(_0x2b1d,0x71316));import _0x191e7c from'./engine-declaration-editor.ok.js';import _0x47a981 from'./engine-lifecycle-actions.ok.js';import{readableReason as _0x302344,resolveEngineEnvName as _0x99337e,statusTone as _0x37e123}from'../engine-ui-utils.js';function i(_0x528c9d,_0x39e14b=!0x1){const _0x440dae=_0x4cf2;return null==_0x528c9d?_0x39e14b:!0x0===_0x528c9d||_0x440dae(0xa5)===_0x528c9d||!0x1!==_0x528c9d&&_0x440dae(0x9d)!==_0x528c9d&&Boolean(_0x528c9d);}function _0x4cf2(_0x1af84a,_0xe4896b){_0x1af84a=_0x1af84a-0x72;const _0x2b1d1c=_0x2b1d();let _0x4cf2a8=_0x2b1d1c[_0x1af84a];return _0x4cf2a8;}export default{'tag':_0x4b9b50(0x99),'dependencies':[_0x191e7c,_0x47a981],'attr':{'engine':{},'env':{},'title':{},'typeLabel':{},'typeColor':{},'badges':{},'showRefresh':{},'refreshLabel':{},'refreshBusy':{},'refreshDisabled':{},'onRefresh':{},'onPipeline':{},'pipelineLabel':{},'pipelineTitle':{},'showDeclaration':{},'showLifecycle':{},'showError':{},'fill':{}},'context':_0x20ebe0=>({get 'eng'(){const _0x5cf5e7=_0x4b9b50;return _0x20ebe0[_0x5cf5e7(0xab)][_0x5cf5e7(0xa7)]??{};},get 'envName'(){const _0x301b87=_0x4b9b50;return _0x99337e(this['eng'],_0x20ebe0[_0x301b87(0xab)]['env']??null);},get 'titleLabel'(){const _0x5802ae=_0x4b9b50;return _0x20ebe0[_0x5802ae(0xab)][_0x5802ae(0x7a)]??this[_0x5802ae(0xa3)][_0x5802ae(0x79)]??this[_0x5802ae(0xa3)]['key']??_0x5802ae(0xae);},get 'typeLabelValue'(){const _0x51d0bd=_0x4b9b50;return _0x20ebe0[_0x51d0bd(0xab)][_0x51d0bd(0x94)]??this['eng'][_0x51d0bd(0xa4)]??_0x51d0bd(0xa7);},get 'typeColorValue'(){const _0x92a605=_0x4b9b50;return _0x20ebe0[_0x92a605(0xab)][_0x92a605(0x7e)]??_0x92a605(0x8a);},'alpha':(_0x4322ea,_0x2de38f)=>_0x4322ea[_0x4b9b50(0x81)](_0x4b9b50(0x91))?_0x4b9b50(0x75)+_0x4322ea+'\x20'+_0x2de38f+_0x4b9b50(0x73):''+_0x4322ea+Math['round'](2.55*_0x2de38f)['toString'](0x10)[_0x4b9b50(0xb8)](0x2,'0'),get 'tone'(){return _0x37e123(this['eng']);},get 'statusLabel'(){const _0x210b84=_0x4b9b50;return'error'===this[_0x210b84(0xa3)]['status']?_0x210b84(0x88):_0x210b84(0x98)===this[_0x210b84(0xa3)]['status']?'inactive':this[_0x210b84(0xa3)]['isRunning']||_0x210b84(0xa9)===this[_0x210b84(0xa3)][_0x210b84(0x76)]?'running':this[_0x210b84(0xa3)][_0x210b84(0x76)]||'stopped';},get 'showStatusBadge'(){const _0x47af5c=_0x4b9b50;return!(this['eng'][_0x47af5c(0xa6)]||_0x47af5c(0xa9)===this[_0x47af5c(0xa3)]['status']);},get 'reasonLabel'(){const _0x144fda=_0x4b9b50;return _0x302344(this[_0x144fda(0xa3)][_0x144fda(0x80)]);},get 'showReasonBadge'(){const _0x8ebb70=_0x4b9b50;return!!this['reasonLabel']&&this[_0x8ebb70(0xa0)]!==this[_0x8ebb70(0x72)];},get 'extraBadges'(){const _0x1448b6=_0x4b9b50;return Array['isArray'](_0x20ebe0[_0x1448b6(0xab)][_0x1448b6(0x95)])?_0x20ebe0[_0x1448b6(0xab)]['badges'][_0x1448b6(0xb6)](Boolean):[];},get 'showRefreshAction'(){const _0x1a80ff=_0x4b9b50;return i(_0x20ebe0['$attr']['showRefresh'],!0x1)&&'function'==typeof _0x20ebe0[_0x1a80ff(0xab)][_0x1a80ff(0x90)];},get 'refreshLabelValue'(){const _0x51ee15=_0x4b9b50;return _0x20ebe0[_0x51ee15(0xab)][_0x51ee15(0xb2)]??_0x51ee15(0xa2);},get 'refreshBusyValue'(){const _0x562e7d=_0x4b9b50;return i(_0x20ebe0[_0x562e7d(0xab)][_0x562e7d(0x77)],!0x1);},get 'refreshDisabledValue'(){const _0x32513c=_0x4b9b50;return i(_0x20ebe0['$attr'][_0x32513c(0xaf)],!0x1);},get 'showDeclarationEditor'(){const _0x24acbf=_0x4b9b50;return i(_0x20ebe0[_0x24acbf(0xab)]['showDeclaration'],!0x0);},get 'showLifecycleActions'(){const _0x335b18=_0x4b9b50;return i(_0x20ebe0[_0x335b18(0xab)][_0x335b18(0x96)],!0x0);},get 'showErrorCard'(){const _0x2cfc98=_0x4b9b50;return i(_0x20ebe0[_0x2cfc98(0xab)]['showError'],!0x0);},get 'pipelineText'(){const _0x79b74f=_0x4b9b50;return _0x20ebe0[_0x79b74f(0xab)]['pipelineLabel']??this['eng'][_0x79b74f(0x9b)]?.[_0x79b74f(0xad)]??null;},get 'canOpenPipeline'(){const _0x377311=_0x4b9b50;return!!this[_0x377311(0xac)]&&_0x377311(0x7d)==typeof _0x20ebe0[_0x377311(0xab)][_0x377311(0xa8)];},get 'pipelineTitleValue'(){const _0x3626c0=_0x4b9b50;return _0x20ebe0[_0x3626c0(0xab)][_0x3626c0(0x83)]??(this[_0x3626c0(0xac)]?'View\x20pipeline:\x20'+this[_0x3626c0(0xac)]:'View\x20pipeline');},get 'rootStyle'(){const _0x520590=_0x4b9b50,_0x14e018=i(_0x20ebe0['$attr']['fill'],!0x1);return[_0x520590(0x8b),_0x520590(0xb0),_0x520590(0x7f),'min-width:0',_0x14e018?_0x520590(0x87):'',_0x14e018?_0x520590(0x86):'']['filter'](Boolean)[_0x520590(0x8f)](';')+';';},'badgeStyle'(_0x63508c=null){const _0x1af76b=_0x4b9b50;if(!_0x63508c)return'';const _0x5d2461=_0x63508c[_0x1af76b(0x97)]??_0x1af76b(0x78);return _0x1af76b(0x85)+(_0x63508c[_0x1af76b(0x9c)]??this[_0x1af76b(0x93)](_0x5d2461,0x21))+';color:'+_0x5d2461+_0x1af76b(0xb5)+(_0x63508c[_0x1af76b(0x92)]??this[_0x1af76b(0x93)](_0x5d2461,0x7))+';';},async 'clickRefresh'(){const _0x3bc16e=_0x4b9b50;!this[_0x3bc16e(0x9f)]||this[_0x3bc16e(0x9e)]||this['refreshDisabledValue']||(await _0x20ebe0['$attr'][_0x3bc16e(0x90)]?.(),_0x20ebe0[_0x3bc16e(0x9a)](_0x3bc16e(0x8d)));},async 'handleRefresh'(){const _0x4b7709=_0x4b9b50;await _0x20ebe0[_0x4b7709(0xab)]['onRefresh']?.(),_0x20ebe0[_0x4b7709(0x9a)]('refresh');},'handleEngineUpdated'(_0x32b36c){const _0x435bcb=_0x4b9b50;_0x20ebe0[_0x435bcb(0x9a)](_0x435bcb(0xb1),_0x32b36c);},'handleDeleted'(_0x23fa06){const _0x38dd8f=_0x4b9b50;_0x20ebe0[_0x38dd8f(0x9a)](_0x38dd8f(0x7b),_0x23fa06);},'openPipeline'(){const _0x109c3d=_0x4b9b50;_0x20ebe0['$attr'][_0x109c3d(0xa8)]?.(this[_0x109c3d(0xac)]);}}),'template':_0x4b9b50(0x84)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x4bd05f=_0x4771;(function(_0xdb4f29,_0x456712){const _0x1897a2=_0x4771,_0x10ec6f=_0xdb4f29();while(!![]){try{const _0x59b9f5=-parseInt(_0x1897a2(0x248))/0x1+-parseInt(_0x1897a2(0x19b))/0x2*(parseInt(_0x1897a2(0x1b7))/0x3)+-parseInt(_0x1897a2(0x1d5))/0x4+-parseInt(_0x1897a2(0x1f7))/0x5*(parseInt(_0x1897a2(0x24a))/0x6)+parseInt(_0x1897a2(0x1f5))/0x7*(parseInt(_0x1897a2(0x213))/0x8)+-parseInt(_0x1897a2(0x239))/0x9*(parseInt(_0x1897a2(0x1ce))/0xa)+-parseInt(_0x1897a2(0x21d))/0xb*(-parseInt(_0x1897a2(0x219))/0xc);if(_0x59b9f5===_0x456712)break;else _0x10ec6f['push'](_0x10ec6f['shift']());}catch(_0x538e55){_0x10ec6f['push'](_0x10ec6f['shift']());}}}(_0x9be8,0x4a19a));import{buildEngineBasePath as _0x442149,compactEngineConfigMetrics as _0x25ed17,compactEngineErrorText as _0x54d48c,compactEngineRowMetrics as _0x23275d,compactEngineRowStatusBadges as _0x28b8b6,compactEngineRowSummary as _0x42a232,compactEngineStatusMeta as _0x23cb5e,isEmbeddingsEngine as _0x4d531f}from'../engine-ui-utils.js';function _0x4771(_0x71be91,_0xf2fc71){_0x71be91=_0x71be91-0x199;const _0x9be8cf=_0x9be8();let _0x47713a=_0x9be8cf[_0x71be91];return _0x47713a;}function l(_0x3771ed,_0x5683cc=!0x1){const _0x31603d=_0x4771;return null==_0x3771ed?_0x5683cc:!0x0===_0x3771ed||_0x31603d(0x1dc)===_0x3771ed||!0x1!==_0x3771ed&&_0x31603d(0x22c)!==_0x3771ed&&Boolean(_0x3771ed);}const c={'Start':'βΆ','Stop':'β ','Pause':'ββ','Resume':'βΆ','Restart':'β»','Retry':'β»','Reset':'β²','Rebuild':'β','Edit':'β','Type':'β','Delete':'π'};export default{'tag':_0x4bd05f(0x1f9),'attr':{'engine':{},'env':{},'pipeline':{},'hidepipeline':{},'hidetype':{},'hideenv':{},'variant':{},'compact':{},'showdelete':{}},'context':_0x541113=>({'busy':!0x1,'error':null,'typeLabel':{'embedder':_0x4bd05f(0x1d0),'indexer':_0x4bd05f(0x21f),'search':'Search','worker':_0x4bd05f(0x1e8),'vector-search':_0x4bd05f(0x19a),'embed-worker':_0x4bd05f(0x1e8),'materializer':_0x4bd05f(0x1b3),'file-extractor':_0x4bd05f(0x1b5),'file-collection':'Collection','file-extractor-worker':_0x4bd05f(0x1e8),'processor':_0x4bd05f(0x1bf),'queue-worker':_0x4bd05f(0x245)},'typeColor':{'embedder':'var(--okdb-info)','indexer':_0x4bd05f(0x1b4),'vector-search':'var(--okdb-accent)','embed-worker':'var(--okdb-warning)','materializer':_0x4bd05f(0x209),'file-extractor':'var(--okdb-success)','file-collection':_0x4bd05f(0x1d9),'file-extractor-worker':_0x4bd05f(0x237),'processor':_0x4bd05f(0x1a7),'queue-worker':_0x4bd05f(0x1b4)},get 'eng'(){const _0x42e3e1=_0x4bd05f;return _0x541113[_0x42e3e1(0x1c5)][_0x42e3e1(0x21b)]??{};},get 'envName'(){const _0x25d6c5=_0x4bd05f;return _0x541113[_0x25d6c5(0x1c5)][_0x25d6c5(0x246)]??this[_0x25d6c5(0x1c1)]?.['env']??this[_0x25d6c5(0x1c1)]?.['_uiEnv']??this['eng']?.[_0x25d6c5(0x230)]??this[_0x25d6c5(0x1c1)]?.[_0x25d6c5(0x1e5)]?.[_0x25d6c5(0x1ca)]??null;},get 'isMember'(){const _0x3e335d=_0x4bd05f;return'member'===_0x541113[_0x3e335d(0x1c5)][_0x3e335d(0x20f)]||_0x3e335d(0x1de)!==_0x541113[_0x3e335d(0x1c5)][_0x3e335d(0x20f)]&&l(_0x541113[_0x3e335d(0x1c5)][_0x3e335d(0x252)],!0x1);},get 'hidePipeline'(){const _0x5a40a7=_0x4bd05f;return l(_0x541113[_0x5a40a7(0x1c5)][_0x5a40a7(0x218)],!0x1);},get 'hideType'(){const _0x38f37c=_0x4bd05f;return l(_0x541113[_0x38f37c(0x1c5)][_0x38f37c(0x20d)],!0x1);},get 'hideEnv'(){const _0x3962ef=_0x4bd05f;return l(_0x541113[_0x3962ef(0x1c5)]['hideenv'],!0x1);},get 'showDelete'(){const _0x4ad39a=_0x4bd05f;return l(_0x541113[_0x4ad39a(0x1c5)][_0x4ad39a(0x1ec)],!0x1);},get 'basePath'(){const _0x488e51=_0x4bd05f;return _0x442149(this['eng'],this[_0x488e51(0x208)]);},get 'embeddingsMode'(){const _0x1b9ab1=_0x4bd05f;return _0x4d531f(this[_0x1b9ab1(0x1c1)]);},get 'running'(){const _0x54c8d9=_0x4bd05f;return!!this['eng']?.[_0x54c8d9(0x222)];},get 'statusMeta'(){const _0x3f0610=_0x4bd05f;return _0x23cb5e(this[_0x3f0610(0x1c1)]);},get 'paused'(){const _0x36305c=_0x4bd05f;return!0x0===this[_0x36305c(0x1c1)]?.[_0x36305c(0x1dd)]?.[_0x36305c(0x216)]||!0x0===this[_0x36305c(0x1c1)]?.[_0x36305c(0x1ef)]?.[_0x36305c(0x216)]||!0x0===this[_0x36305c(0x1c1)]?.[_0x36305c(0x216)];},get 'pipelineName'(){const _0x55f49c=_0x4bd05f;return _0x541113[_0x55f49c(0x1c5)][_0x55f49c(0x1c9)]??this[_0x55f49c(0x1c1)]?.[_0x55f49c(0x1c7)]?.['pipeline']??this[_0x55f49c(0x1c1)]?.[_0x55f49c(0x1e5)]?.[_0x55f49c(0x1c9)]??this[_0x55f49c(0x1c1)]?.[_0x55f49c(0x1e5)]?.['collectionEngine']??null;},get 'pipelineLabel'(){const _0x5aa8a1=_0x4bd05f;return this[_0x5aa8a1(0x1c4)]?String(this[_0x5aa8a1(0x1c4)])['split'](':')[_0x5aa8a1(0x23e)]():null;},get 'sourceType'(){const _0x35e147=_0x4bd05f;return this[_0x35e147(0x1c1)]?.[_0x35e147(0x1e5)]?.['source_type']??this['eng']?.[_0x35e147(0x1ef)]?.[_0x35e147(0x1fc)]??this[_0x35e147(0x1c1)]?.[_0x35e147(0x1dd)]?.[_0x35e147(0x1fc)]??this[_0x35e147(0x1c1)]?.['stats']?.[_0x35e147(0x1ae)]?.[_0x35e147(0x1fc)]??this['eng']?.['config']?.['target_type']??null;},get 'canRunLifecycle'(){const _0x587298=_0x4bd05f;return!!this[_0x587298(0x19c)];},get 'title'(){const _0x3ad2b9=_0x4bd05f;return this[_0x3ad2b9(0x1c1)]?.[_0x3ad2b9(0x1d3)]??this[_0x3ad2b9(0x1c1)]?.[_0x3ad2b9(0x1ba)]??'Engine';},get 'displayTitle'(){const _0x304a72=_0x4bd05f,_0x31c84d=String(this[_0x304a72(0x1ff)]??'');return _0x31c84d[_0x304a72(0x215)](':')?_0x31c84d[_0x304a72(0x1d2)](':')[_0x304a72(0x23e)]():_0x31c84d;},get 'titleNamespace'(){const _0x19f6ef=_0x4bd05f,_0x5c6488=String(this[_0x19f6ef(0x1ff)]??'');return _0x5c6488[_0x19f6ef(0x215)](':')?_0x5c6488[_0x19f6ef(0x1d2)](':')[_0x19f6ef(0x20a)](0x0,-0x1)[_0x19f6ef(0x238)](':'):null;},get 'description'(){return _0x42a232(this['eng']);},get 'inlineError'(){const _0x10e851=_0x4bd05f;return _0x54d48c(this[_0x10e851(0x1c1)]);},get 'metadata'(){const _0x3ae969=_0x4bd05f,_0x5aa7be=[_0x3ae969(0x225),'Field',_0x3ae969(0x240),_0x3ae969(0x1d0),_0x3ae969(0x1bd),_0x3ae969(0x202),_0x3ae969(0x24e),_0x3ae969(0x22a),_0x3ae969(0x1b8),_0x3ae969(0x20b),_0x3ae969(0x1bb),_0x3ae969(0x1aa),'Prepare',_0x3ae969(0x1e9)],_0x37a53d=new Map(_0x25ed17(this['eng'])[_0x3ae969(0x1fa)](_0x4c12bc=>[_0x4c12bc['label'],_0x4c12bc])),_0x1a9da1=[];for(const _0xd27b5 of _0x5aa7be){if(this[_0x3ae969(0x1a8)]&&_0x3ae969(0x1d0)===_0xd27b5)continue;const _0x359976=_0x37a53d[_0x3ae969(0x236)](_0xd27b5);_0x359976&&(_0x1a9da1[_0x3ae969(0x234)](_0x359976),_0x37a53d['delete'](_0xd27b5));}for(const _0x17c47f of _0x37a53d[_0x3ae969(0x1b1)]())(this[_0x3ae969(0x1a8)]||this[_0x3ae969(0x1a5)])&&_0x3ae969(0x1d6)===_0x17c47f[_0x3ae969(0x1a0)]||_0x1a9da1[_0x3ae969(0x234)](_0x17c47f);return _0x1a9da1[_0x3ae969(0x20a)](0x0,this[_0x3ae969(0x1a8)]?0x6:0xa);},get 'metrics'(){const _0x1eab27=_0x4bd05f,_0x5049d8=[_0x1eab27(0x1da),_0x1eab27(0x1aa),_0x1eab27(0x24b),_0x1eab27(0x1e9),_0x1eab27(0x1d0),_0x1eab27(0x24e),'Model','Algorithm'];return _0x23275d(this[_0x1eab27(0x1c1)])[_0x1eab27(0x22b)](_0x562598=>!_0x5049d8[_0x1eab27(0x215)](_0x562598['label']))[_0x1eab27(0x20a)](0x0,this[_0x1eab27(0x1a8)]?0x5:0x8);},get 'healthBadges'(){const _0x56e63c=_0x4bd05f,_0x137ec4=this['statusMeta'][_0x56e63c(0x1a0)];return _0x28b8b6(this[_0x56e63c(0x1c1)])[_0x56e63c(0x22b)](_0x2df74e=>_0x2df74e?.[_0x56e63c(0x1be)]&&_0x2df74e[_0x56e63c(0x1be)]!==_0x137ec4)[_0x56e63c(0x22b)](_0x32b2d6=>!(this['running']&&_0x56e63c(0x231)===_0x32b2d6[_0x56e63c(0x1be)]))[_0x56e63c(0x20a)](0x0,0x2);},get 'primaryAction'(){const _0x3f0005=_0x4bd05f;return this[_0x3f0005(0x1f8)]?this[_0x3f0005(0x1cb)]?this[_0x3f0005(0x1f3)]?{'label':_0x3f0005(0x232),'method':_0x3f0005(0x1e7),'suffix':_0x3f0005(0x1a4),'color':_0x3f0005(0x237),'confirm':_0x3f0005(0x243)+this[_0x3f0005(0x1ff)]+'\x22?','toast':_0x3f0005(0x1c6)}:_0x3f0005(0x214)===this[_0x3f0005(0x1c1)]?.[_0x3f0005(0x226)]?{'label':_0x3f0005(0x250),'method':'POST','suffix':_0x3f0005(0x1e3),'color':_0x3f0005(0x1a7),'confirm':_0x3f0005(0x1d7)+this[_0x3f0005(0x1ff)]+'\x22?','toast':_0x3f0005(0x1e2)}:{'label':'Start','method':'POST','suffix':_0x3f0005(0x1b2),'color':_0x3f0005(0x24c),'confirm':null,'toast':_0x3f0005(0x247)}:_0x3f0005(0x214)===this['eng']?.['status']?{'label':_0x3f0005(0x1c0),'method':_0x3f0005(0x1e7),'suffix':_0x3f0005(0x212),'color':'var(--okdb-orange)','confirm':null,'toast':_0x3f0005(0x23a)}:this[_0x3f0005(0x216)]?{'label':_0x3f0005(0x21a),'method':_0x3f0005(0x1e7),'suffix':'/resume','color':_0x3f0005(0x24c),'confirm':null,'toast':_0x3f0005(0x249)}:{'label':_0x3f0005(0x1e1),'method':_0x3f0005(0x1e7),'suffix':_0x3f0005(0x1f2),'color':_0x3f0005(0x237),'confirm':null,'toast':_0x3f0005(0x1f0)}:null;},get 'overflowActions'(){const _0x241e49=_0x4bd05f,_0x9be2a2=[];return this['canRunLifecycle']&&(_0x9be2a2['push']({'key':_0x241e49(0x1c8),'label':_0x241e49(0x250),'method':'POST','suffix':_0x241e49(0x1e3),'color':_0x241e49(0x1ed),'confirm':this[_0x241e49(0x1cb)]?_0x241e49(0x1d7)+this[_0x241e49(0x1ff)]+'\x22?':null,'toast':_0x241e49(0x1e2)}),this[_0x241e49(0x1cb)]||_0x9be2a2[_0x241e49(0x234)]({'key':'pause','label':this[_0x241e49(0x216)]?_0x241e49(0x21a):_0x241e49(0x1e1),'method':_0x241e49(0x1e7),'suffix':this[_0x241e49(0x216)]?_0x241e49(0x1d8):'/pause','color':this[_0x241e49(0x216)]?_0x241e49(0x24c):_0x241e49(0x237),'toast':this[_0x241e49(0x216)]?'Engine\x20resumed':_0x241e49(0x1f0)}),_0x241e49(0x1df)===this[_0x241e49(0x1c1)]?.[_0x241e49(0x1b0)]&&(_0x9be2a2[_0x241e49(0x234)]({'key':_0x241e49(0x23d),'label':_0x241e49(0x20e),'title':_0x241e49(0x1eb),'method':_0x241e49(0x1e7),'suffix':'/reset-cursor','color':_0x241e49(0x1f4),'confirm':_0x241e49(0x199)+this[_0x241e49(0x1ff)]+'\x22?','toast':'Engine\x20cursor\x20reset'}),_0x9be2a2['push']({'key':_0x241e49(0x1ad),'label':_0x241e49(0x203),'method':'POST','suffix':_0x241e49(0x1a9),'color':_0x241e49(0x24c),'confirm':'Rebuild\x20engine\x20\x22'+this[_0x241e49(0x1ff)]+'\x22?','toast':_0x241e49(0x200)}))),_0x9be2a2[_0x241e49(0x234)]({'key':_0x241e49(0x22f),'label':_0x241e49(0x1cf),'color':_0x241e49(0x1db),'local':'edit'}),this[_0x241e49(0x24d)]&&!this[_0x241e49(0x22d)]&&_0x9be2a2[_0x241e49(0x234)]({'key':_0x241e49(0x1b0),'label':_0x241e49(0x1f1),'title':_0x241e49(0x1b9),'color':'var(--okdb-accent-2)','local':_0x241e49(0x1b0)}),this[_0x241e49(0x233)]&&this[_0x241e49(0x1f8)]&&_0x9be2a2[_0x241e49(0x234)]({'key':_0x241e49(0x223),'label':_0x241e49(0x1a6),'method':'DELETE','suffix':'','color':_0x241e49(0x1e6),'confirm':'Delete\x20engine\x20\x22'+this['title']+'\x22?','toast':_0x241e49(0x244),'destructive':!0x0}),_0x9be2a2;},'typeName'(_0x24f8bf){const _0x250de4=_0x4bd05f;return this[_0x250de4(0x1ab)][_0x24f8bf]||_0x24f8bf||_0x250de4(0x227);},'glyph':_0x3f2cea=>c[_0x3f2cea]??'','pillStyle'(_0xf1eee0){const _0x53469d=_0x4bd05f,_0x9914c=_0xf1eee0[_0x53469d(0x220)]('var(');return _0x53469d(0x1ea)+(_0x9914c?_0x53469d(0x1e4)+_0xf1eee0+_0x53469d(0x221):_0xf1eee0+'55')+_0x53469d(0x206)+_0xf1eee0+_0x53469d(0x19d)+(_0x9914c?_0x53469d(0x1e4)+_0xf1eee0+_0x53469d(0x1a3):_0xf1eee0+'12')+';';},'typeBadgeStyle'(){const _0xae58f4=_0x4bd05f;return this['pillStyle'](this[_0xae58f4(0x228)][this['eng']?.[_0xae58f4(0x1b0)]]??'var(--okdb-app-fg-muted)');},'pipelineBadgeStyle':()=>_0x4bd05f(0x21c),'envBadgeStyle':()=>'border-color:color-mix(in\x20srgb,\x20var(--okdb-app-border)\x2040%,\x20transparent);\x20color:#7a93a8;\x20background:transparent;','healthBadgeStyle'(_0x3a92bc){const _0x5ad585=_0x4bd05f;return this[_0x5ad585(0x1f6)](_0x3a92bc?.[_0x5ad585(0x1b6)]??_0x5ad585(0x1ed));},'typePillStyle'(){const _0x30f808=_0x4bd05f;return this[_0x30f808(0x210)]();},'statusPillStyle'(){const _0x22e9cb=_0x4bd05f;return this[_0x22e9cb(0x1f6)](this[_0x22e9cb(0x1d1)][_0x22e9cb(0x1b6)]??'var(--okdb-app-fg-muted)');},'metricToneColor'(_0x54f628=null){const _0x3e72d8=_0x4bd05f;if(_0x3e72d8(0x1cc)===_0x54f628?.[_0x3e72d8(0x1a0)]&&Number(String(_0x54f628[_0x3e72d8(0x1e0)])[_0x3e72d8(0x1c2)](/,/g,''))<=0x0)return _0x3e72d8(0x1ed);switch(_0x54f628?.['tone']){case'danger':return _0x3e72d8(0x1e6);case'warning':return'var(--okdb-warning)';default:return _0x3e72d8(0x242);}},'metricPercent'(_0x1bb2fe=null){const _0x594be6=_0x4bd05f,_0x56f880=String(_0x1bb2fe?.[_0x594be6(0x1e0)]??'')[_0x594be6(0x205)](/(?:\(|\b)(\d{1,3})%/);if(!_0x56f880)return null;const _0x261c19=Number(_0x56f880[0x1]);return Number[_0x594be6(0x235)](_0x261c19)?Math[_0x594be6(0x22e)](0x0,Math['min'](0x64,_0x261c19)):null;},'progressMetric'(){const _0x5666c2=_0x4bd05f;return _0x23275d(this[_0x5666c2(0x1c1)])[_0x5666c2(0x201)](_0x32e455=>_0x5666c2(0x19e)===_0x32e455?.[_0x5666c2(0x1a0)])??null;},'progressFillStyle'(){const _0x225911=_0x4bd05f,_0x439d25=this[_0x225911(0x20c)]();return _0x225911(0x23c)+(this[_0x225911(0x251)](_0x439d25)??0x0)+_0x225911(0x1fe)+(_0x225911(0x24f)===_0x439d25?.[_0x225911(0x204)]?_0x225911(0x1e6):'warning'===_0x439d25?.['tone']?'var(--okdb-warning)':_0x225911(0x24c))+';';},'showProgressBar'(){const _0x23e287=_0x4bd05f,_0x4833bd=this[_0x23e287(0x251)](this['progressMetric']());return null!=_0x4833bd&&_0x4833bd<0x64;},async 'runAction'(_0x2bce69){const _0x1dfb6e=_0x4bd05f;if(_0x2bce69){if(_0x1dfb6e(0x22f)!==_0x2bce69[_0x1dfb6e(0x1cd)]){if(_0x1dfb6e(0x1b0)!==_0x2bce69[_0x1dfb6e(0x1cd)]){if(this[_0x1dfb6e(0x19c)]&&(!_0x2bce69[_0x1dfb6e(0x1fd)]||await _0x541113[_0x1dfb6e(0x224)][_0x1dfb6e(0x211)][_0x1dfb6e(0x241)][_0x1dfb6e(0x1fd)](_0x2bce69['confirm']))){this[_0x1dfb6e(0x1af)]=!0x0,this[_0x1dfb6e(0x214)]=null;try{const _0x146837=await fetch(''+this[_0x1dfb6e(0x19c)]+(_0x2bce69[_0x1dfb6e(0x1ac)]??''),{'method':_0x2bce69[_0x1dfb6e(0x1a1)]??'POST'}),_0x56a2a1=await _0x146837[_0x1dfb6e(0x23f)]()[_0x1dfb6e(0x1fb)](()=>({}));if(!_0x146837['ok'])throw new Error(_0x56a2a1?.[_0x1dfb6e(0x214)]?.[_0x1dfb6e(0x21e)]||_0x2bce69[_0x1dfb6e(0x1a0)]+_0x1dfb6e(0x1a2));_0x541113['$ok']['shared']?.[_0x1dfb6e(0x1bc)]?.[_0x1dfb6e(0x207)]?.(_0x2bce69[_0x1dfb6e(0x1bc)]??_0x2bce69[_0x1dfb6e(0x1a0)]+_0x1dfb6e(0x23b)),_0x541113[_0x1dfb6e(0x217)](_0x1dfb6e(0x1c3),_0x2bce69['key']??_0x2bce69[_0x1dfb6e(0x1a0)]),_0x541113[_0x1dfb6e(0x217)](_0x1dfb6e(0x1d4));}catch(_0x5ea161){this[_0x1dfb6e(0x214)]=_0x5ea161?.[_0x1dfb6e(0x21e)]||String(_0x5ea161),_0x541113['$ok'][_0x1dfb6e(0x211)]?.[_0x1dfb6e(0x1bc)]?.[_0x1dfb6e(0x214)]?.(this[_0x1dfb6e(0x214)]);}finally{this[_0x1dfb6e(0x1af)]=!0x1;}}}else _0x541113[_0x1dfb6e(0x217)](_0x1dfb6e(0x1ee),{'engine':this[_0x1dfb6e(0x1c1)],'type':this[_0x1dfb6e(0x24d)],'env':this[_0x1dfb6e(0x208)]});}else _0x541113['$dispatch'](_0x1dfb6e(0x22f),this[_0x1dfb6e(0x1c1)]);}}}),'template':_0x4bd05f(0x229),'style':_0x4bd05f(0x19f)};function _0x9be8(){const _0x28ae04=['join','2007rTtQJc','Engine\x20retry\x20started','\x20complete','height:100%;width:','reset','pop','json','Storage','modal','var(--okdb-app-fg)','Stop\x20engine\x20\x22','Engine\x20deleted','Queue\x20Worker','env','Engine\x20started','180565HERfzx','Engine\x20resumed','6UDnKpl','Prepare','var(--okdb-success)','sourceType','Provider','danger','Restart','metricPercent','compact','Reset\x20cursor\x20for\x20engine\x20\x22','Search','156500wltHkD','basePath',';\x20background:','Progress','\x0aengine-resource-card\x20{\x20display:\x20block;\x20}\x0a\x0a/*\x20ββ\x20Top-level\x20hover\x20(applies\x20when\x20component\x20root\x20carries\x20.engine-resource-card\x20class)\x20ββ\x20*/\x0a.engine-resource-card:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20}\x0a\x0a/*\x20ββ\x20Card\x20variant\x20(standalone)\x20βββββββββββββββββββββββ\x20*/\x0aengine-resource-card\x20.erc--card\x20{\x0a\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20border-radius:\x2010px;\x0a\x20\x20padding:\x2012px\x2014px;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20gap:\x208px;\x0a\x20\x20box-shadow:\x200\x200\x204px\x20rgba(255,255,255,0.03);\x0a\x20\x20transition:\x20border-color\x20.14s;\x0a}\x0aengine-resource-card\x20.erc--card:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20}\x0a\x0a/*\x20ββ\x20Member\x20variant\x20(inside\x20pipeline)\x20ββββββββββββββββ\x20*/\x0aengine-resource-card\x20.erc--member\x20{\x0a\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20border:\x201px\x20solid\x20var(--okdb-app-surface-2);\x0a\x20\x20border-radius:\x208px;\x0a\x20\x20padding:\x209px\x2012px;\x0a\x20\x20display:\x20flex;\x0a\x20\x20flex-direction:\x20column;\x0a\x20\x20gap:\x206px;\x0a\x20\x20transition:\x20border-color\x20.12s,\x20background\x20.12s;\x0a}\x0aengine-resource-card\x20.erc--member:hover\x20{\x20border-color:\x20var(--okdb-app-border-strong);\x20background:\x20var(--okdb-app-surface);\x20}\x0a\x0a/*\x20ββ\x20Header\x20row\x20βββββββββββββββββββββββββββββββββββββ\x20*/\x0aengine-resource-card\x20.erc-header\x20{\x20display:\x20flex;\x20align-items:\x20center;\x20gap:\x205px;\x20flex-wrap:\x20wrap;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-dot\x20{\x20width:\x207px;\x20height:\x207px;\x20border-radius:\x2050%;\x20flex-shrink:\x200;\x20}\x0aengine-resource-card\x20.erc-name-group\x20{\x20display:\x20flex;\x20align-items:\x20baseline;\x20gap:\x205px;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-name\x20{\x20font-size:\x2013px;\x20font-weight:\x20600;\x20color:\x20var(--okdb-app-fg-strong);\x20overflow:\x20hidden;\x20text-overflow:\x20ellipsis;\x20white-space:\x20nowrap;\x20letter-spacing:\x20-.01em;\x20}\x0aengine-resource-card\x20.erc-ns\x20{\x20font-size:\x2010.5px;\x20color:\x20var(--okdb-app-fg-subtle);\x20white-space:\x20nowrap;\x20}\x0aengine-resource-card\x20.erc-spacer\x20{\x20flex:\x201;\x20min-width:\x200;\x20}\x0aengine-resource-card\x20.erc-sep\x20{\x20width:\x201px;\x20height:\x2012px;\x20background:\x20var(--okdb-app-border);\x20flex-shrink:\x200;\x20}\x0a\x0a/*\x20ββ\x20Pills\x20ββββββββββββββββββββββββββββββββββββββββββ\x20*/\x0aengine-resource-card\x20.erc-pill\x20{\x20font-size:\x2010.5px;\x20padding:\x201px\x208px;\x20border-radius:\x20999px;\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x20color:\x20var(--okdb-app-fg-muted);\x20background:\x20transparent;\x20display:\x20inline-flex;\x20align-items:\x20center;\x20white-space:\x20nowrap;\x20flex-shrink:\x200;\x20letter-spacing:\x20.01em;\x20}\x0aengine-resource-card\x20.erc-pill--pipeline\x20{\x20border-color:\x20#6366f144;\x20color:\x20#a5b4fc;\x20background:\x20#6366f110;\x20}\x0aengine-resource-card\x20.erc-pill--env\x20{\x20border-color:\x20color-mix(in\x20srgb,\x20var(--okdb-app-border)\x2040%,\x20transparent);\x20color:\x20#7a93a8;\x20}\x0a\x0a/*\x20ββ\x20Buttons\x20ββββββββββββββββββββββββββββββββββββββββ\x20*/\x0aengine-resource-card\x20.erc-btn\x20{\x20font-size:\x2011px;\x20padding:\x202px\x2010px;\x20border-radius:\x20999px;\x20border:\x201px\x20solid;\x20cursor:\x20pointer;\x20line-height:\x201.5;\x20flex-shrink:\x200;\x20white-space:\x20nowrap;\x20transition:\x20filter\x20.12s;\x20}\x0aengine-resource-card\x20.erc-btn--primary\x20{\x20font-weight:\x20600;\x20}\x0aengine-resource-card\x20.erc-btn--muted\x20{\x20background:\x20var(--okdb-app-bg-deep);\x20border-color:\x20var(--okdb-app-border);\x20}\x0aengine-resource-card\x20.erc-btn:hover:not(:disabled)\x20{\x20filter:\x20brightness(1.3);\x20}\x0aengine-resource-card\x20.erc-btn:disabled\x20{\x20opacity:\x20.4;\x20cursor:\x20not-allowed;\x20}\x0a\x0a/*\x20ββ\x20Content\x20rows\x20βββββββββββββββββββββββββββββββββββ\x20*/\x0aengine-resource-card\x20.erc-summary\x20{\x20font-size:\x2011.5px;\x20line-height:\x201.55;\x20color:\x20#6d8899;\x20padding-left:\x2012px;\x20}\x0aengine-resource-card\x20.erc-kv-row\x20{\x20display:\x20grid;\x20grid-template-columns:repeat(auto-fit,\x20minmax(180px,\x201fr));\x20gap:\x202px\x2012px;\x20padding-left:\x2012px;\x20}\x0aengine-resource-card\x20.erc--member\x20.erc-kv-row\x20{\x20grid-template-columns:\x20repeat(3,\x201fr);\x20gap:\x202px\x2010px;\x20}\x0aengine-resource-card\x20.erc-kv-row--metrics\x20{\x20border-top:\x201px\x20solid\x20var(--okdb-app-border);\x20padding-top:\x206px;\x20}\x0aengine-resource-card\x20.erc-kv\x20{\x20display:\x20inline-flex;\x20gap:\x204px;\x20align-items:\x20baseline;\x20font-size:\x2011px;\x20line-height:\x201.35;\x20}\x0aengine-resource-card\x20.erc-kv__label\x20{\x20font-size:\x209.5px;\x20text-transform:\x20uppercase;\x20letter-spacing:\x20.04em;\x20color:\x20var(--okdb-app-fg-subtle);\x20flex-shrink:\x200;\x20}\x0aengine-resource-card\x20.erc-kv__val\x20{\x20color:\x20#a8c4d9;\x20overflow:\x20hidden;\x20text-overflow:\x20ellipsis;\x20white-space:\x20nowrap;\x20}\x0aengine-resource-card\x20.erc-progress\x20{\x20height:\x203px;\x20width:\x20100%;\x20border-radius:\x20999px;\x20background:\x20var(--okdb-app-bg-deep);\x20overflow:\x20hidden;\x20}\x0aengine-resource-card\x20.erc-error\x20{\x20font-size:\x2011px;\x20line-height:\x201.5;\x20color:\x20var(--okdb-danger);\x20border-top:\x201px\x20solid\x20var(--okdb-app-border);\x20padding-top:\x206px;\x20padding-left:\x2012px;\x20}\x0a','label','method','\x20failed','\x207%,\x20transparent)','/stop','hideEnv','Delete','var(--okdb-orange)','isMember','/rebuild','Mode','typeLabel','suffix','rebuild','indexer','busy','type','values','/start','Materializer','var(--okdb-accent-2)','Extractor','color','6zAZeuN','Concurrency','View\x20Type\x20Context','key','TTL','toast','Dims','text','Processor','Retry','eng','replace','action','pipelineName','$attr','Engine\x20stopped','meta','restart','pipeline','source_env','embeddingsMode','Error','local','25220NuDeiQ','Edit','Embedder','statusMeta','split','name','refresh','515832mHRvGQ','Source\x20env','Restart\x20engine\x20\x22','/resume','var(--okdb-sky)','Field','var(--okdb-accent)','true','stats','card','materializer','value','Pause','Engine\x20restarted','/restart','color-mix(in\x20srgb,\x20','config','var(--okdb-danger)','POST','Worker','Chunk','border-color:','Reset\x20Cursor','showdelete','var(--okdb-app-fg-muted)','type-context','runtime','Engine\x20paused','Type','/pause','running','var(--okdb-info)','21TfkUYm','pillStyle','1487680cjHEiV','canRunLifecycle','engine-resource-card','map','catch','source_type','confirm','%;border-radius:999px;background:','title','Engine\x20rebuild\x20started','find','Algorithm','Rebuild','tone','match',';\x20color:','success','envName','#fb7185','slice','Poll','progressMetric','hidetype','Reset','variant','typeBadgeStyle','shared','/retry','173848HqiOkR','error','includes','paused','$dispatch','hidepipeline','507336qZUXdj','Resume','engine','border-color:#6366f144;\x20color:#a5b4fc;\x20background:#6366f110;','407doGivp','message','Indexer','startsWith','\x2033%,\x20transparent)','isRunning','delete','$ok','Source','status','Engine','typeColor','\x0a<div\x20:class=\x22isMember\x20?\x20\x27engine-resource-card\x20erc\x20erc--member\x27\x20:\x20\x27engine-resource-card\x20erc\x20erc--card\x27\x22>\x0a\x0a\x20\x20<!--\x20ββ\x20Name\x20+\x20type\x20+\x20status\x20+\x20actions\x20row\x20ββ\x20-->\x0a\x20\x20<div\x20class=\x22erc-header\x22>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-dot\x22\x20:style=\x22\x27background:\x27\x20+\x20statusMeta.color\x20+\x20\x27;box-shadow:0\x200\x200\x203px\x20color-mix(in\x20srgb,\x20\x27\x20+\x20statusMeta.color\x20+\x20\x27\x2013%,\x20transparent);\x27\x22\x20:title=\x22statusMeta.title\x22></span>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-name-group\x22>\x0a\x20\x20\x20\x20\x20\x20<code\x20class=\x22erc-name\x22\x20:title=\x22title\x22>{{\x20displayTitle\x20}}</code>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22titleNamespace\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-ns\x22>{{\x20titleNamespace\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22typeBadgeStyle()\x22>{{\x20typeName(eng.role\x20||\x20eng.type)\x20}}</span>\x0a\x20\x20\x20\x20<if\x20:=\x22!running\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22statusPillStyle()\x22>{{\x20statusMeta.label\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22pipelineLabel\x20&&\x20!hidePipeline\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22pipelineBadgeStyle()\x22\x20:title=\x22\x27pipeline:\x20\x27\x20+\x20pipelineName\x22>{{\x20pipelineLabel\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22envName\x20&&\x20!isMember\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22envBadgeStyle()\x22\x20:title=\x22\x27env:\x20\x27\x20+\x20envName\x22>{{\x20envName\x20}}</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<each\x20:of=\x22healthBadges\x22\x20let:item=\x22badge\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-pill\x22\x20:style=\x22healthBadgeStyle(badge)\x22\x20:title=\x22badge.title\x22>{{\x20badge.text\x20}}</span>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20<span\x20class=\x22erc-spacer\x22></span>\x0a\x20\x20\x20\x20<each\x20:of=\x22overflowActions\x22\x20let:item=\x22action\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runAction(action)\x22\x20:disabled=\x22busy\x22\x20:title=\x22action.title\x20||\x20action.label\x22\x20class=\x22erc-btn\x20erc-btn--muted\x22\x20:style=\x22\x27color:\x27\x20+\x20action.color\x20+\x20\x27;\x27\x22>{{\x20glyph(action.label)\x20}}\x20{{\x20action.label\x20}}</button>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20<if\x20:=\x22overflowActions.length\x20>\x200\x20&&\x20primaryAction\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-sep\x22></span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22primaryAction\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22runAction(primaryAction)\x22\x20:disabled=\x22busy\x22\x20class=\x22erc-btn\x20erc-btn--primary\x22\x20:style=\x22pillStyle(primaryAction.color)\x22>{{\x20busy\x20?\x20\x27β¦\x27\x20:\x20(glyph(primaryAction.label)\x20+\x20\x27\x20\x27\x20+\x20primaryAction.label)\x20}}</button>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20ββ\x20Summary\x20(card\x20mode\x20only)\x20ββ\x20-->\x0a\x20\x20<if\x20:=\x22description\x20&&\x20!isMember\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-summary\x22>{{\x20description\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20ββ\x20Config\x20metadata\x20ββ\x20-->\x0a\x20\x20<if\x20:=\x22metadata.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-kv-row\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22metadata\x22\x20let:item=\x22metric\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv\x22\x20:title=\x22metric.title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__label\x22>{{\x20metric.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__val\x22>{{\x20metric.value\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20ββ\x20Runtime\x20metrics\x20ββ\x20-->\x0a\x20\x20<if\x20:=\x22metrics.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-kv-row\x20erc-kv-row--metrics\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22metrics\x22\x20let:item=\x22metric\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv\x22\x20:title=\x22metric.title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__label\x22>{{\x20metric.label\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22erc-kv__val\x22\x20:style=\x22\x27color:\x27\x20+\x20metricToneColor(metric)\x22>{{\x20metric.value\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20ββ\x20Progress\x20bar\x20ββ\x20-->\x0a\x20\x20<if\x20:=\x22showProgressBar()\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-progress\x22\x20:title=\x22progressMetric()?.title\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20:style=\x22progressFillStyle()\x22></div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20ββ\x20Error\x20ββ\x20-->\x0a\x20\x20<if\x20:=\x22inlineError\x20||\x20error\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22erc-error\x22>β \x20{{\x20inlineError\x20||\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','Model','filter','false','hideType','max','edit','storeEnv','healthy','Stop','showDelete','push','isFinite','get','var(--okdb-warning)'];_0x9be8=function(){return _0x28ae04;};return _0x9be8();}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var _0x432ce3=_0x2923;(function(_0x275e1e,_0x2cb4eb){var _0x281a04=_0x2923,_0x33cb71=_0x275e1e();while(!![]){try{var _0x5163b6=parseInt(_0x281a04(0x7c))/0x1+-parseInt(_0x281a04(0x9a))/0x2*(parseInt(_0x281a04(0x91))/0x3)+parseInt(_0x281a04(0x98))/0x4+parseInt(_0x281a04(0x8c))/0x5*(parseInt(_0x281a04(0x86))/0x6)+-parseInt(_0x281a04(0x7d))/0x7*(-parseInt(_0x281a04(0x84))/0x8)+parseInt(_0x281a04(0x85))/0x9*(-parseInt(_0x281a04(0x93))/0xa)+-parseInt(_0x281a04(0x89))/0xb;if(_0x5163b6===_0x2cb4eb)break;else _0x33cb71['push'](_0x33cb71['shift']());}catch(_0x1f21c5){_0x33cb71['push'](_0x33cb71['shift']());}}}(_0x15e0,0x764f1));import{statusTone as _0xdb0a1}from'../engine-ui-utils.js';function _0x2923(_0x118b98,_0x3eb0c7){_0x118b98=_0x118b98-0x79;var _0x15e0ab=_0x15e0();var _0x292316=_0x15e0ab[_0x118b98];return _0x292316;}export default{'tag':_0x432ce3(0x8b),'attr':{'engine':{},'label':{},'labelColor':{},'subtitle':{},'title':{},'actionLabel':{},'selected':{}},'context':_0x31cba1=>({get 'eng'(){var _0x49bf06=_0x432ce3;return _0x31cba1[_0x49bf06(0x92)]['engine']??{};},get 'tone'(){return _0xdb0a1(this['eng']);},get 'rowTitle'(){var _0xfafc87=_0x432ce3;return _0x31cba1[_0xfafc87(0x92)][_0xfafc87(0x96)]??this[_0xfafc87(0x8e)]['name']??_0xfafc87(0x8d);},get 'rowLabel'(){var _0x388eb5=_0x432ce3;return _0x31cba1[_0x388eb5(0x92)][_0x388eb5(0x81)]??this[_0x388eb5(0x8e)][_0x388eb5(0x7b)]??'engine';},get 'rowLabelColor'(){var _0x5470f5=_0x432ce3;return _0x31cba1['$attr'][_0x5470f5(0x88)]??'var(--okdb-accent)';},'labelAlpha':(_0x521eda,_0x394615=0x1b)=>_0x521eda['startsWith'](_0x432ce3(0x97))?_0x432ce3(0x90)+_0x521eda+'\x20'+_0x394615+'%,\x20transparent)':_0x521eda+'44',get 'rowSubtitle'(){var _0x58b567=_0x432ce3;return _0x31cba1[_0x58b567(0x92)][_0x58b567(0x80)]??'';},get 'rowActionLabel'(){var _0xf1c0c3=_0x432ce3;return _0x31cba1[_0xf1c0c3(0x92)][_0xf1c0c3(0x8f)]??_0xf1c0c3(0x87);},get 'hasActionLabel'(){var _0x253051=_0x432ce3;return!!(this['rowActionLabel']||'')[_0x253051(0x7e)]();},get 'isSelected'(){var _0x3dfeda=_0x432ce3;return!0x0===_0x31cba1['$attr']['selected']||_0x3dfeda(0x79)===_0x31cba1[_0x3dfeda(0x92)][_0x3dfeda(0x8a)];},get 'rootStyle'(){var _0x30e88b=_0x432ce3;return _0x30e88b(0x7a)+(this[_0x30e88b(0x95)]?_0x30e88b(0x94):_0x30e88b(0x99))+';background:'+(this[_0x30e88b(0x95)]?'var(--okdb-app-surface)':_0x30e88b(0x7f))+';cursor:pointer;width:100%;text-align:left;color:inherit;min-width:0;';},'select'(){var _0x2a4e3d=_0x432ce3;_0x31cba1[_0x2a4e3d(0x82)](_0x2a4e3d(0x83),this[_0x2a4e3d(0x8e)]);}}),'template':'\x0a<button\x0a\x20\x20@click=\x22select()\x22\x0a\x20\x20:style=\x22rootStyle\x22\x0a>\x0a\x20\x20<span\x20:style=\x22\x27width:6px;height:6px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x20tone\x22></span>\x0a\x20\x20<span\x20:style=\x22\x27font-size:10px;padding:1px\x206px;border-radius:4px;border:1px\x20solid\x20\x27\x20+\x20labelAlpha(rowLabelColor)\x20+\x20\x27;color:\x27\x20+\x20rowLabelColor\x20+\x20\x27;min-width:54px;text-align:center;flex-shrink:0;\x27\x22>{{\x20rowLabel\x20}}</span>\x0a\x20\x20<span\x20style=\x22flex:1;font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\x22>{{\x20rowTitle\x20}}</span>\x0a\x20\x20<if\x20:=\x22rowSubtitle\x22>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:11px;opacity:.4;font-style:italic;flex-shrink:0;\x22>{{\x20rowSubtitle\x20}}</span>\x0a\x20\x20</if>\x0a\x20\x20<slot\x20/>\x0a\x20\x20<if\x20:=\x22hasActionLabel\x22>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:11px;padding:2px\x208px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);color:var(--okdb-accent);flex-shrink:0;\x22>{{\x20rowActionLabel\x20}}</span>\x0a\x20\x20</if>\x0a</button>\x0a'};function _0x15e0(){var _0x52d54a=['691082BeCHxk','trim','var(--okdb-app-bg-deep)','subtitle','label','$dispatch','select','8gNKOuh','5703381CXvdTv','8334GcUGcJ','Edit','labelColor','5556100BAvXoa','selected','engine-row-item','2115oEhraz','engine','eng','actionLabel','color-mix(in\x20srgb,\x20','78756SKmnrh','$attr','10JNkYLM','color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent)','isSelected','title','var(','3199556IaJlcS','var(--okdb-app-border)','44aNhGOL','true','display:flex;align-items:center;gap:7px;padding:7px\x209px;border-radius:6px;border:1px\x20solid\x20','type','714784tUJvYd'];_0x15e0=function(){return _0x52d54a;};return _0x15e0();}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0x55c2(_0x51d4c9,_0x38a948){_0x51d4c9=_0x51d4c9-0x11a;const _0x4421da=_0x4421();let _0x55c2e4=_0x4421da[_0x51d4c9];return _0x55c2e4;}const _0x39feb4=_0x55c2;(function(_0x4d1cd2,_0x33eaf0){const _0x5e6f77=_0x55c2,_0x74a5ed=_0x4d1cd2();while(!![]){try{const _0x46a9e8=-parseInt(_0x5e6f77(0x1b3))/0x1+-parseInt(_0x5e6f77(0x140))/0x2*(-parseInt(_0x5e6f77(0x163))/0x3)+parseInt(_0x5e6f77(0x15f))/0x4*(parseInt(_0x5e6f77(0x1b7))/0x5)+parseInt(_0x5e6f77(0x136))/0x6+parseInt(_0x5e6f77(0x1a2))/0x7*(parseInt(_0x5e6f77(0x185))/0x8)+-parseInt(_0x5e6f77(0x1ac))/0x9*(-parseInt(_0x5e6f77(0x1b0))/0xa)+-parseInt(_0x5e6f77(0x19d))/0xb*(parseInt(_0x5e6f77(0x177))/0xc);if(_0x46a9e8===_0x33eaf0)break;else _0x74a5ed['push'](_0x74a5ed['shift']());}catch(_0x155004){_0x74a5ed['push'](_0x74a5ed['shift']());}}}(_0x4421,0xde1d8));import _0x327d63 from'./engine-panel-shell.ok.js';import _0x4d77ab from'../../functions/modals/function-modal.ok.js';function _0x4421(){const _0x6a1290=['isMaterializer','materializerTargetType','syncWorkerConfig','keys','$attr','formatJson','trunc','120QFTGTE','runningBatches','put','handler','Worker\x20settings\x20saved','key','affinity','appliedOps','cursorKey','number','close','materializerPreviewPayload','info','data','reasonText','Example\x20source\x20row','Poll\x20interval','env','join','/retry','handlerName','$watch','running','config','583UlXQds','message','Reset\x20cursor\x20for\x20materializer\x20\x22','updated','$ok','188657DktaYA','Edit\x20Function\x20Β·\x20','reason','type','progress','inactive','pipelineStats','selectEnv','json','processed','3546wLSLiF','remove','materializerRepairBusy','example-2','1730XKcdNw','Job\x20TTL','pollInterval','988680QDwooh','source_env','replace','select','5aGTWdj','selectedEnv','isArray','materializerPreviewContext','snapshot','state','concurrency','result','toast','target_env','Materializer\x20retry\x20started','catch','onEnvChanged','async','isProcessor','mode','open','functions','source_type','isRunning','/rebuild','eng','queue_env','runtime','filter','processedChanges','stringify','Materializer\x20cursor\x20reset','toLocaleString','okdb','saveConfigError','8910834oigvWX','Failed\x20(','targetCount','Rebuild\x20materializer\x20\x22','all\x20nodes','loadOverviewRuns','isFinite','clearTargetOnRebuild','materializerTargetEnv','boolean','6FilPNL','name','isQueueWorker','online','workerStats','engine','target_type','buildWorkerConfigPatch','lockMode','handlerEnv','stats','materializerSourceType','border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2040%,\x20transparent);color:var(--okdb-accent);background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);','stateText','failedBatches','failed','length','all','recordRuns','workerHandler','error','setModalPayloadDraft','build','materializerSourceEnv','paused','example-1','envName','basePath','stores','success','stopped','1087316rjxHEJ','generic-engine-panel','string','includes','378633xbmtIj','No\x20worker\x20setting\x20changes\x20to\x20save','/reset-cursor','modal','ttl','job_type','bootstrap','status','affinityText','pipelineHandler','batchSize','$dispatch','materializerRepairError','shared','hydrateValues','openHandlerFunction','lag','originMode','runMaterializerRepairAction','round','160656ZIcyfj','saveConfigBusy','entries','failOnHandlerError','workerConfigDraft','yes','refresh'];_0x4421=function(){return _0x6a1290;};return _0x4421();}import{ENGINE_PANEL_SHARED_STYLE as _0x47dbd7}from'../engine-panel-shared-style.js';import{buildEngineBasePath as _0x37202b,formatJsonValue as _0x1a0e4b,getApiErrorMessage as _0x922859,openFunctionRoute as _0x3eef1f,resolveEngineEnvName as _0x20cffe}from'../engine-ui-utils.js';function o(_0x28405f,_0x5590a4='β'){const _0x2e257c=_0x55c2;return null==_0x28405f||''===_0x28405f?_0x5590a4:Array['isArray'](_0x28405f)?_0x28405f[_0x2e257c(0x150)]?_0x28405f[_0x2e257c(0x197)](',\x20'):_0x5590a4:_0x2e257c(0x13f)==typeof _0x28405f?_0x28405f?_0x2e257c(0x17c):'no':String(_0x28405f);}function c(_0x3e9501,_0x24ed23=[]){const _0x570de0=_0x55c2;return function(_0x43aed5){const _0x457074=_0x55c2;return!!_0x43aed5&&'object'==typeof _0x43aed5&&!Array[_0x457074(0x1b9)](_0x43aed5);}(_0x3e9501)?Object[_0x570de0(0x179)](_0x3e9501)[_0x570de0(0x12f)](([_0x351748,_0xaa43a5])=>!_0x24ed23[_0x570de0(0x162)](_0x351748)&&(null==_0xaa43a5||[_0x570de0(0x161),_0x570de0(0x18e),_0x570de0(0x13f)][_0x570de0(0x162)](typeof _0xaa43a5))):[];}function d(_0x588a98,_0x360a97){const _0x5016bb=_0x55c2;if(''===_0x588a98||null==_0x588a98)return null;const _0x24752a=Math[_0x5016bb(0x184)](Number(_0x588a98));if(!Number[_0x5016bb(0x13c)](_0x24752a)||_0x24752a<0x1)throw new Error(_0x360a97+'\x20must\x20be\x20a\x20positive\x20integer');return _0x24752a;}function p(_0x5e7e3a){const _0x25aa05=_0x55c2;if(null==_0x5e7e3a||''===_0x5e7e3a)return'β';const _0xdbb8d3=Number(_0x5e7e3a);if(!Number['isFinite'](_0xdbb8d3))return String(_0x5e7e3a);const _0x23b171=_0xdbb8d3<=0x1?0x64*_0xdbb8d3:_0xdbb8d3;return Math[_0x25aa05(0x176)](_0x23b171)+'%';}export default{'tag':_0x39feb4(0x160),'dependencies':[_0x327d63,_0x4d77ab],'attr':{'engine':{},'env':{},'modal':{}},'context':_0x277553=>({'saveConfigBusy':!0x1,'saveConfigError':null,'materializerRepairBusy':!0x1,'materializerRepairError':null,'showRawRuntime':!0x1,'showRawStats':!0x1,'showRawConfig':!0x1,'workerConfigDraft':{'concurrency':'','pollInterval':'','ttl':''},get 'eng'(){const _0x1d4132=_0x39feb4;return _0x277553[_0x1d4132(0x182)]['engine']??{};},get 'envName'(){const _0x430632=_0x39feb4;return _0x20cffe(this[_0x430632(0x12c)],_0x277553['$attr'][_0x430632(0x196)]??null);},get 'basePath'(){const _0x44c4e1=_0x39feb4;return _0x37202b(this[_0x44c4e1(0x12c)],this['envName']);},get 'isQueueWorker'(){const _0x49e144=_0x39feb4;return'queue-worker'===this[_0x49e144(0x12c)]['type'];},get 'isProcessor'(){const _0x16c659=_0x39feb4;return'processor'===this[_0x16c659(0x12c)]['type'];},get 'isMaterializer'(){const _0x49bb7a=_0x39feb4;return'materializer'===this[_0x49bb7a(0x12c)][_0x49bb7a(0x1a5)];},get 'hasSpecializedPipelineView'(){const _0x5638de=_0x39feb4;return this[_0x5638de(0x142)]||this[_0x5638de(0x125)]||this['isMaterializer'];},get 'stateText'(){const _0x5afa42=_0x39feb4;return _0x5afa42(0x154)===this[_0x5afa42(0x12c)][_0x5afa42(0x16a)]?_0x5afa42(0x154):_0x5afa42(0x1a7)===this[_0x5afa42(0x12c)][_0x5afa42(0x16a)]?_0x5afa42(0x1a7):this[_0x5afa42(0x12c)][_0x5afa42(0x12a)]||'online'===this[_0x5afa42(0x12c)][_0x5afa42(0x16a)]?'running':this[_0x5afa42(0x12c)][_0x5afa42(0x16a)]||_0x5afa42(0x15e);},get 'reasonText'(){const _0x423994=_0x39feb4,_0x2cc1d5=this['eng'][_0x423994(0x1a4)]??null;return _0x2cc1d5&&_0x2cc1d5!==this[_0x423994(0x14d)]?String(_0x2cc1d5)[_0x423994(0x1b5)](/_/g,'\x20'):'β';},get 'affinityText'(){const _0x46da1a=_0x39feb4;return o(this[_0x46da1a(0x12c)][_0x46da1a(0x18b)],_0x46da1a(0x13a));},get 'updatedText'(){const _0x285f3a=_0x39feb4;return function(_0x237d50){const _0x2b6e07=_0x55c2;if(!_0x237d50)return'β';try{return new Date(_0x237d50)[_0x2b6e07(0x133)]();}catch{return String(_0x237d50);}}(this[_0x285f3a(0x12c)][_0x285f3a(0x12e)]?.[_0x285f3a(0x1a0)]);},get 'runtimePreviewEntries'(){const _0x19c43d=_0x39feb4;return c(this['eng'][_0x19c43d(0x12e)],['state','reason',_0x19c43d(0x154),_0x19c43d(0x19b),_0x19c43d(0x1a0)]);},get 'statsPreviewEntries'(){const _0x527673=_0x39feb4;return c(this[_0x527673(0x12c)][_0x527673(0x14a)],['engine_key','job_type',_0x527673(0x12d),_0x527673(0x188),_0x527673(0x11d),'processed',_0x527673(0x14f),_0x527673(0x19b)]);},get 'configPreviewEntries'(){const _0x57a538=_0x39feb4;return c(this[_0x57a538(0x12c)][_0x57a538(0x19c)],[_0x57a538(0x168),_0x57a538(0x12d),_0x57a538(0x188),'concurrency',_0x57a538(0x1b2),_0x57a538(0x167)]);},get 'workerStats'(){const _0x2c3fac=_0x39feb4;return this[_0x2c3fac(0x12c)][_0x2c3fac(0x14a)]??{};},get 'pipelineStats'(){const _0x193a24=_0x39feb4;return this[_0x193a24(0x12c)][_0x193a24(0x14a)]??{};},get 'workerHandler'(){const _0x429e7d=_0x39feb4;return this['workerStats']['handler']??this[_0x429e7d(0x12c)][_0x429e7d(0x19c)]?.[_0x429e7d(0x188)]??null;},get 'pipelineHandler'(){const _0x4d1a2d=_0x39feb4;return this[_0x4d1a2d(0x1a8)][_0x4d1a2d(0x188)]??this[_0x4d1a2d(0x12c)]['config']?.[_0x4d1a2d(0x188)]??null;},get 'handlerName'(){const _0xe81019=_0x39feb4;return this[_0xe81019(0x16c)]?.['name']??null;},get 'handlerEnv'(){const _0x565f17=_0x39feb4;return this[_0x565f17(0x16c)]?.[_0x565f17(0x196)]??this['envName']??'β';},get 'canOpenHandlerFunction'(){const _0xb37fe9=_0x39feb4;return!!this[_0xb37fe9(0x199)];},get 'workerJobType'(){const _0x17cc26=_0x39feb4;return this['workerStats'][_0x17cc26(0x168)]??this[_0x17cc26(0x12c)][_0x17cc26(0x19c)]?.['job_type']??'β';},get 'workerQueueEnv'(){const _0x57a6d0=_0x39feb4;return this['workerStats'][_0x57a6d0(0x12d)]??this[_0x57a6d0(0x12c)]['config']?.[_0x57a6d0(0x12d)]??this[_0x57a6d0(0x15a)]??'β';},get 'workerFunctionEnv'(){const _0x39fd2e=_0x39feb4;return this[_0x39fd2e(0x153)]?.['env']??this[_0x39fd2e(0x15a)]??'β';},get 'workerRecordRuns'(){const _0x564995=_0x39feb4;return this[_0x564995(0x12c)][_0x564995(0x19c)]?.[_0x564995(0x188)]?.[_0x564995(0x152)]??_0x564995(0x151);},get 'workerProcessed'(){const _0x5c68ad=_0x39feb4;return this[_0x5c68ad(0x144)][_0x5c68ad(0x1ab)]??0x0;},get 'workerFailed'(){const _0x21ef81=_0x39feb4;return this[_0x21ef81(0x144)][_0x21ef81(0x14f)]??0x0;},get 'workerRunning'(){const _0xad98fb=_0x39feb4;return this[_0xad98fb(0x144)]['running']??0x0;},get 'workerConcurrency'(){const _0x2f206d=_0x39feb4;return this[_0x2f206d(0x144)][_0x2f206d(0x11d)]??this['eng'][_0x2f206d(0x19c)]?.[_0x2f206d(0x11d)]??0x1;},get 'workerPollInterval'(){const _0x3165fd=_0x39feb4;return this[_0x3165fd(0x12c)][_0x3165fd(0x19c)]?.[_0x3165fd(0x1b2)]??0x3e8;},get 'workerTtl'(){const _0x18f007=_0x39feb4;return this[_0x18f007(0x12c)][_0x18f007(0x19c)]?.['ttl']??0x7530;},get 'canOpenWorkerFunction'(){const _0x1044cc=_0x39feb4;return!!this[_0x1044cc(0x153)]?.[_0x1044cc(0x141)];},get 'showWorkerReason'(){const _0x2ac363=_0x39feb4;return'β'!==this[_0x2ac363(0x193)]&&_0x2ac363(0x19b)!==this[_0x2ac363(0x193)];},get 'showWorkerAffinity'(){const _0x33a1b6=_0x39feb4;return _0x33a1b6(0x13a)!==this[_0x33a1b6(0x16b)];},get 'processorSourceType'(){const _0x301d8b=_0x39feb4;return this[_0x301d8b(0x1a8)][_0x301d8b(0x129)]??this[_0x301d8b(0x12c)][_0x301d8b(0x19c)]?.[_0x301d8b(0x129)]??'β';},get 'processorSourceEnv'(){const _0x4080bc=_0x39feb4;return this[_0x4080bc(0x1a8)][_0x4080bc(0x1b4)]??this['eng'][_0x4080bc(0x19c)]?.[_0x4080bc(0x1b4)]??this[_0x4080bc(0x15a)]??'β';},get 'processorMode'(){const _0x44b035=_0x39feb4;return this[_0x44b035(0x1a8)][_0x44b035(0x126)]??this[_0x44b035(0x12c)]['config']?.[_0x44b035(0x126)]??_0x44b035(0x124);},get 'processorBootstrap'(){const _0x3763b0=_0x39feb4;return this[_0x3763b0(0x1a8)][_0x3763b0(0x169)]??this['eng'][_0x3763b0(0x19c)]?.[_0x3763b0(0x169)]??_0x3763b0(0x11b);},get 'processorOriginMode'(){const _0x1c8f63=_0x39feb4;return this['pipelineStats'][_0x1c8f63(0x174)]??this[_0x1c8f63(0x12c)][_0x1c8f63(0x19c)]?.['originMode']??_0x1c8f63(0x151);},get 'processorBatchSize'(){const _0x12081c=_0x39feb4;return this[_0x12081c(0x1a8)][_0x12081c(0x16d)]??this[_0x12081c(0x12c)][_0x12081c(0x19c)]?.[_0x12081c(0x16d)]??0x100;},get 'processorCursorKey'(){const _0x234fba=_0x39feb4;return this['pipelineStats'][_0x234fba(0x18d)]??this[_0x234fba(0x12c)]['config']?.['cursorKey']??this['eng'][_0x234fba(0x18a)]??'β';},get 'processorLockMode'(){const _0x218f5f=_0x39feb4;return this[_0x218f5f(0x1a8)]['lockMode']??this[_0x218f5f(0x12c)]['config']?.[_0x218f5f(0x148)]??'exclusive';},get 'processorHydrateValues'(){const _0x17602e=_0x39feb4;return o(this[_0x17602e(0x1a8)][_0x17602e(0x171)]??this[_0x17602e(0x12c)][_0x17602e(0x19c)]?.['hydrateValues']??!0x0);},get 'processorFailOnHandlerError'(){const _0x571432=_0x39feb4;return o(this['pipelineStats'][_0x571432(0x17a)]??this[_0x571432(0x12c)][_0x571432(0x19c)]?.[_0x571432(0x17a)]??!0x0);},get 'processorInvocations'(){return this['pipelineStats']['invocations']??0x0;},get 'processorProcessedChanges'(){const _0x319970=_0x39feb4;return this[_0x319970(0x1a8)][_0x319970(0x130)]??0x0;},get 'processorFailedBatches'(){const _0x24fd9f=_0x39feb4;return this['pipelineStats'][_0x24fd9f(0x14e)]??0x0;},get 'processorRunningBatches'(){return this['pipelineStats']['runningBatches']??0x0;},get 'processorLag'(){const _0x5a0972=_0x39feb4;return this[_0x5a0972(0x1a8)]['lag']??'β';},get 'processorProgress'(){const _0x1cf1d0=_0x39feb4;return p(this[_0x1cf1d0(0x1a8)][_0x1cf1d0(0x1a6)]);},get 'processorPaused'(){return!0x0===this['pipelineStats']['paused'];},get 'materializerSourceType'(){const _0x2a86c0=_0x39feb4;return this[_0x2a86c0(0x1a8)]['source_type']??this[_0x2a86c0(0x12c)][_0x2a86c0(0x19c)]?.[_0x2a86c0(0x129)]??'β';},get 'materializerTargetType'(){const _0x15aa4f=_0x39feb4;return this[_0x15aa4f(0x1a8)][_0x15aa4f(0x146)]??this[_0x15aa4f(0x12c)]['config']?.['target_type']??'β';},get 'materializerSourceEnv'(){const _0x1cabc5=_0x39feb4;return this[_0x1cabc5(0x1a8)]['source_env']??this[_0x1cabc5(0x12c)]['config']?.[_0x1cabc5(0x1b4)]??this[_0x1cabc5(0x15a)]??'β';},get 'materializerTargetEnv'(){const _0x2b44a4=_0x39feb4;return this[_0x2b44a4(0x1a8)][_0x2b44a4(0x120)]??this[_0x2b44a4(0x12c)][_0x2b44a4(0x19c)]?.[_0x2b44a4(0x120)]??this[_0x2b44a4(0x15a)]??'β';},get 'materializerBootstrap'(){const _0x50732f=_0x39feb4;return this[_0x50732f(0x1a8)]['bootstrap']??this[_0x50732f(0x12c)][_0x50732f(0x19c)]?.[_0x50732f(0x169)]??_0x50732f(0x11b);},get 'materializerOriginMode'(){const _0x1ea1b7=_0x39feb4;return this['pipelineStats'][_0x1ea1b7(0x174)]??this[_0x1ea1b7(0x12c)][_0x1ea1b7(0x19c)]?.[_0x1ea1b7(0x174)]??_0x1ea1b7(0x151);},get 'materializerBatchSize'(){const _0x20fb85=_0x39feb4;return this[_0x20fb85(0x1a8)][_0x20fb85(0x16d)]??this[_0x20fb85(0x12c)]['config']?.[_0x20fb85(0x16d)]??0x80;},get 'materializerCursorKey'(){const _0x25b480=_0x39feb4;return this[_0x25b480(0x1a8)]['cursorKey']??this['eng'][_0x25b480(0x19c)]?.[_0x25b480(0x18d)]??this['eng'][_0x25b480(0x18a)]??'β';},get 'materializerClearTargetOnRebuild'(){const _0x13a283=_0x39feb4;return o(this[_0x13a283(0x1a8)]['clearTargetOnRebuild']??this[_0x13a283(0x12c)][_0x13a283(0x19c)]?.[_0x13a283(0x13d)]??!0x0);},get 'materializerProcessedChanges'(){const _0x35e188=_0x39feb4;return this['pipelineStats'][_0x35e188(0x130)]??0x0;},get 'materializerAppliedOps'(){const _0x17e8fe=_0x39feb4;return this['pipelineStats'][_0x17e8fe(0x18c)]??0x0;},get 'materializerFailedBatches'(){const _0xbe7236=_0x39feb4;return this[_0xbe7236(0x1a8)][_0xbe7236(0x14e)]??0x0;},get 'materializerRunningBatches'(){const _0x5c8d33=_0x39feb4;return this['pipelineStats'][_0x5c8d33(0x186)]??0x0;},get 'materializerTargetCount'(){const _0x5bc6db=_0x39feb4;return this[_0x5bc6db(0x1a8)][_0x5bc6db(0x138)]??'β';},get 'materializerLag'(){const _0x4ee271=_0x39feb4;return this[_0x4ee271(0x1a8)][_0x4ee271(0x173)]??'β';},get 'materializerProgress'(){const _0x2f6fa2=_0x39feb4;return p(this[_0x2f6fa2(0x1a8)][_0x2f6fa2(0x1a6)]);},get 'materializerPaused'(){const _0xf753f6=_0x39feb4;return!0x0===this[_0xf753f6(0x1a8)][_0xf753f6(0x158)];},get 'materializerErrorText'(){const _0x317e6a=_0x39feb4;return this[_0x317e6a(0x1a8)][_0x317e6a(0x154)]??this[_0x317e6a(0x12c)][_0x317e6a(0x154)]??null;},get 'materializerPreviewPayload'(){const _0x5cd7e0=_0x39feb4;return[{'action':_0x5cd7e0(0x187),'key':_0x5cd7e0(0x159),'value':{'sample':!0x0,'title':_0x5cd7e0(0x194),'sourceType':this[_0x5cd7e0(0x14b)]},'clock':null},{'action':_0x5cd7e0(0x1ad),'key':_0x5cd7e0(0x1af),'clock':0x7b}];},get 'materializerPreviewContext'(){const _0x4b5201=_0x39feb4;return{'mode':_0x4b5201(0x143)===this[_0x4b5201(0x1a8)][_0x4b5201(0x11c)]?'live':_0x4b5201(0x156),'sourceType':this[_0x4b5201(0x14b)],'targetType':this[_0x4b5201(0x17f)],'sourceEnv':this[_0x4b5201(0x157)],'targetEnv':this[_0x4b5201(0x13e)],'engineKey':this[_0x4b5201(0x12c)][_0x4b5201(0x18a)]??null,'cursorKey':this['materializerCursorKey']};},'formatJson':_0x1a0e4b,'labelize':_0x4ecca1=>String(_0x4ecca1||'')[_0x39feb4(0x1b5)](/_/g,'\x20'),'humanValue':o,'rawToggleStyle':_0x9a0238=>_0x9a0238?_0x39feb4(0x14c):'','syncWorkerConfig'(_0x4e2274=null){const _0xb98f51=_0x39feb4,_0x523e8b=_0x4e2274?.[_0xb98f51(0x19c)]??{};this[_0xb98f51(0x17b)]={'concurrency':null==_0x523e8b[_0xb98f51(0x11d)]?'':String(_0x523e8b[_0xb98f51(0x11d)]),'pollInterval':null==_0x523e8b[_0xb98f51(0x1b2)]?'':String(_0x523e8b[_0xb98f51(0x1b2)]),'ttl':null==_0x523e8b[_0xb98f51(0x167)]?'':String(_0x523e8b[_0xb98f51(0x167)])},this[_0xb98f51(0x135)]=null;},'buildWorkerConfigPatch'(){const _0x37c287=_0x39feb4,_0x3f1617=this['eng'][_0x37c287(0x19c)]??{},_0x2cdcdb={'concurrency':d(this[_0x37c287(0x17b)][_0x37c287(0x11d)],'Concurrency'),'pollInterval':d(this[_0x37c287(0x17b)]['pollInterval'],_0x37c287(0x195)),'ttl':d(this[_0x37c287(0x17b)]['ttl'],_0x37c287(0x1b1))},_0x59d27c={};for(const [_0x3d8c4c,_0x62071c]of Object[_0x37c287(0x179)](_0x2cdcdb))null==_0x62071c?void 0x0!==_0x3f1617[_0x3d8c4c]&&(_0x59d27c[_0x3d8c4c]=null):_0x3f1617[_0x3d8c4c]!==_0x62071c&&(_0x59d27c[_0x3d8c4c]=_0x62071c);return _0x59d27c;},'resetWorkerConfig'(){const _0x26fc2c=_0x39feb4;this[_0x26fc2c(0x180)](this[_0x26fc2c(0x12c)]);},'inspectWorkerFunction'(){const _0x3979a2=_0x39feb4;this[_0x3979a2(0x172)](this['workerHandler']?.[_0x3979a2(0x141)]??null);},'openHandlerFunction'(_0xeb1d83=null){const _0x46f651=_0x39feb4,_0x1f8e6d=_0xeb1d83??this[_0x46f651(0x199)];_0x1f8e6d&&_0x3eef1f(_0x277553,_0x1f8e6d,{'beforeNavigate':()=>_0x277553[_0x46f651(0x182)][_0x46f651(0x166)]?.[_0x46f651(0x18f)]?.()});},async 'openHandlerEditor'(){const _0x5042e6=_0x39feb4;if(!this[_0x5042e6(0x199)])return;const _0x44be83=_0x277553[_0x5042e6(0x1a1)]['stores'][_0x5042e6(0x134)],_0x368c42=_0x277553['$ok'][_0x5042e6(0x15c)][_0x5042e6(0x128)],_0xab5638=this[_0x5042e6(0x149)]&&'β'!==this[_0x5042e6(0x149)]?this['handlerEnv']:this[_0x5042e6(0x15a)];_0xab5638?(_0x44be83[_0x5042e6(0x1b8)]!==_0xab5638&&_0x44be83[_0x5042e6(0x1a9)](_0xab5638),await _0x368c42[_0x5042e6(0x123)](),await _0x368c42[_0x5042e6(0x1b6)](this[_0x5042e6(0x199)]),_0x368c42['beginEditDraft'](),_0x368c42[_0x5042e6(0x155)](this[_0x5042e6(0x183)](this[_0x5042e6(0x190)])),_0x368c42['setModalPreviewContext']({'materializerContext':this[_0x5042e6(0x11a)]}),await _0x277553[_0x5042e6(0x1a1)]['shared']['modal'][_0x5042e6(0x127)]({'owner':_0x277553,'title':_0x5042e6(0x1a3)+this[_0x5042e6(0x199)],'canDrag':!0x0,'content':'<function-modal\x20:modal=\x22modal\x22\x20mode=\x22edit\x22\x20:on-done=\x22onDone\x22\x20/>','context':_0x56d02c=>({'modal':_0x56d02c,'onDone':async()=>{const _0x54856e=_0x5042e6;await _0x368c42['select'](this[_0x54856e(0x199)]),await _0x368c42[_0x54856e(0x13b)](),_0x277553[_0x54856e(0x16e)](_0x54856e(0x17d));}})})):this[_0x5042e6(0x172)]();},async 'runMaterializerRepairAction'(_0x1ac682,_0x387344,_0x53f870=null){const _0xc3fab0=_0x39feb4;if(this[_0xc3fab0(0x17e)]&&this[_0xc3fab0(0x15b)]&&!this[_0xc3fab0(0x1ae)]){if(_0x53f870&&!await _0x277553[_0xc3fab0(0x1a1)]['shared'][_0xc3fab0(0x166)]['confirm'](_0x53f870))return;this['materializerRepairBusy']=!0x0,this[_0xc3fab0(0x16f)]=null;try{const _0x4a29e5=await fetch(''+this['basePath']+_0x1ac682,{'method':'POST'}),_0x2ddb8c=await _0x4a29e5[_0xc3fab0(0x1aa)]()[_0xc3fab0(0x122)](()=>({}));if(!_0x4a29e5['ok'])throw new Error(_0x922859(_0x2ddb8c,'Failed\x20('+_0x4a29e5['status']+')'));const _0x4578ea=_0x2ddb8c?.[_0xc3fab0(0x192)]??_0x2ddb8c?.[_0xc3fab0(0x11e)]??null;_0x4578ea&&_0x277553['$dispatch']('engine-updated',_0x4578ea),_0x277553[_0xc3fab0(0x16e)](_0xc3fab0(0x17d)),_0x277553[_0xc3fab0(0x1a1)][_0xc3fab0(0x170)]?.[_0xc3fab0(0x11f)]?.[_0xc3fab0(0x15d)]?.(_0x387344);}catch(_0x62e8a1){this['materializerRepairError']=_0x62e8a1?.[_0xc3fab0(0x19e)]||String(_0x62e8a1),_0x277553[_0xc3fab0(0x1a1)][_0xc3fab0(0x170)]?.[_0xc3fab0(0x11f)]?.[_0xc3fab0(0x154)]?.(this[_0xc3fab0(0x16f)]);}finally{this[_0xc3fab0(0x1ae)]=!0x1;}}},'retryMaterializer'(){const _0xbe110=_0x39feb4;return this[_0xbe110(0x175)](_0xbe110(0x198),_0xbe110(0x121));},'resetMaterializerCursor'(){const _0x281603=_0x39feb4;return this[_0x281603(0x175)](_0x281603(0x165),_0x281603(0x132),_0x281603(0x19f)+this[_0x281603(0x12c)][_0x281603(0x141)]+'\x22?');},'rebuildMaterializer'(){const _0x3b1be6=_0x39feb4;return this['runMaterializerRepairAction'](_0x3b1be6(0x12b),'Materializer\x20rebuild\x20started',_0x3b1be6(0x139)+this[_0x3b1be6(0x12c)][_0x3b1be6(0x141)]+'\x22?');},async 'saveWorkerConfig'(){const _0x5caed9=_0x39feb4;if(this['isQueueWorker']&&this[_0x5caed9(0x15b)]&&!this[_0x5caed9(0x178)]){this[_0x5caed9(0x178)]=!0x0,this[_0x5caed9(0x135)]=null;try{const _0x5cf994=this[_0x5caed9(0x147)]();if(!Object[_0x5caed9(0x181)](_0x5cf994)[_0x5caed9(0x150)])return void _0x277553[_0x5caed9(0x1a1)][_0x5caed9(0x170)]?.[_0x5caed9(0x11f)]?.[_0x5caed9(0x191)]?.(_0x5caed9(0x164));const _0x59a4c4=await fetch(this[_0x5caed9(0x15b)],{'method':'PATCH','headers':{'Content-Type':'application/json'},'body':JSON[_0x5caed9(0x131)]({'config':_0x5cf994})}),_0xa5e541=await _0x59a4c4[_0x5caed9(0x1aa)]()[_0x5caed9(0x122)](()=>({}));if(!_0x59a4c4['ok'])throw new Error(_0x922859(_0xa5e541,_0x5caed9(0x137)+_0x59a4c4['status']+')'));const _0x3a1ea3=_0xa5e541?.[_0x5caed9(0x192)]??_0xa5e541?.['result']??null;_0x3a1ea3&&(this[_0x5caed9(0x180)](_0x3a1ea3),_0x277553[_0x5caed9(0x16e)]('engine-updated',_0x3a1ea3)),_0x277553[_0x5caed9(0x16e)](_0x5caed9(0x17d)),_0x277553[_0x5caed9(0x1a1)]['shared']?.['toast']?.[_0x5caed9(0x15d)]?.(_0x5caed9(0x189));}catch(_0x4c7c98){this[_0x5caed9(0x135)]=_0x4c7c98?.['message']||String(_0x4c7c98),_0x277553['$ok'][_0x5caed9(0x170)]?.[_0x5caed9(0x11f)]?.[_0x5caed9(0x154)]?.(this['saveConfigError']);}finally{this[_0x5caed9(0x178)]=!0x1;}}}}),'init'(_0x330df8){const _0x3bda0d=_0x39feb4;this[_0x3bda0d(0x180)](_0x330df8[_0x3bda0d(0x182)]['engine']),_0x330df8[_0x3bda0d(0x19a)](()=>_0x330df8[_0x3bda0d(0x182)][_0x3bda0d(0x145)],()=>this[_0x3bda0d(0x180)](_0x330df8[_0x3bda0d(0x182)][_0x3bda0d(0x145)]));},'template':'\x0a<engine-panel-shell\x0a\x20\x20:engine=\x22eng\x22\x0a\x20\x20:env=\x22envName\x22\x0a\x20\x20@engine-updated=\x22$dispatch(\x27engine-updated\x27,\x20$event.detail)\x22\x0a\x20\x20@refresh=\x22$dispatch(\x27refresh\x27)\x22\x0a\x20\x20@deleted=\x22$dispatch(\x27deleted\x27,\x20$event.detail)\x22\x0a>\x0a\x20\x20<if\x20:=\x22isQueueWorker\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Queue\x20job\x20type\x20this\x20worker\x20consumes.\x22>{{\x20workerJobType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Environment\x20whose\x20queue\x20is\x20consumed.\x22>queue:\x20{{\x20workerQueueEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20workerFunctionEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22showWorkerReason\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Why\x20the\x20worker\x20is\x20in\x20its\x20current\x20state.\x22>{{\x20reasonText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22showWorkerAffinity\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Node\x20tags\x20required\x20for\x20this\x20worker\x20to\x20run.\x22>affinity:\x20{{\x20affinityText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20style=\x22margin:0;\x22>Function</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenWorkerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22inspectWorkerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Ζ\x20{{\x20workerHandler?.name\x20||\x20\x27β\x27\x20}}\x20β\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!canOpenWorkerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20workerHandler?.name\x20||\x20\x27β\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20360px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Done</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20workerProcessed\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Error</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(workerFailed\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20workerFailed\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Active</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(workerRunning\x20>\x200\x20?\x20\x27var(--okdb-warning)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20workerRunning\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Concurrency</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-accent);\x22>{{\x20workerConcurrency\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</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\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22\x20style=\x22margin:0;\x22>Settings</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22flex:1;\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22story-note\x22\x20style=\x22margin-right:4px;\x22>updated\x20{{\x20updatedText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22resetWorkerConfig()\x22\x20:disabled=\x22saveConfigBusy\x20||\x20!basePath\x22\x20title=\x22Discard\x20unsaved\x20changes.\x22\x20style=\x22font-size:11px;padding:4px\x2010px;opacity:.75;\x22>Reset</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22saveWorkerConfig()\x22\x20:disabled=\x22saveConfigBusy\x20||\x20!basePath\x22\x20title=\x22Save\x20and\x20restart\x20the\x20worker\x20with\x20these\x20values.\x22\x20style=\x22font-size:11px;padding:4px\x2010px;color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20saveConfigBusy\x20?\x20\x27Savingβ¦\x27\x20:\x20\x27Save\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22form-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Parallel\x20worker\x20lanes.\x22>Concurrency</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.concurrency\x22\x20@input=\x22workerConfigDraft.concurrency\x20=\x20$event.target.value\x22\x20placeholder=\x221\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Milliseconds\x20to\x20wait\x20before\x20polling\x20again\x20when\x20the\x20queue\x20is\x20empty.\x22>Poll</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.pollInterval\x22\x20@input=\x22workerConfigDraft.pollInterval\x20=\x20$event.target.value\x22\x20placeholder=\x221000\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Milliseconds\x20an\x20in-flight\x20claim\x20stays\x20reserved\x20before\x20it\x20can\x20be\x20reclaimed.\x22>TTL</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20class=\x22field-input\x22\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22workerConfigDraft.ttl\x22\x20@input=\x22workerConfigDraft.ttl\x20=\x20$event.target.value\x22\x20placeholder=\x2230000\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22field-stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22field-label\x22\x20title=\x22Whether\x20function\x20runs\x20are\x20persisted.\x22>Runs</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-input\x22\x20style=\x22display:flex;align-items:center;min-height:36px;background:var(--okdb-app-bg);\x22>{{\x20workerRecordRuns\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22saveConfigError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20saveConfigError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22isProcessor\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20type\x20this\x20processor\x20watches.\x22>{{\x20processorSourceType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Environment\x20whose\x20changelog\x20is\x20consumed.\x22>source:\x20{{\x20processorSourceEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20handlerEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22How\x20source\x20changes\x20are\x20consumed.\x22>mode:\x20{{\x20processorMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22processorPaused\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Processor\x20registration\x20is\x20currently\x20paused.\x22>paused</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22showWorkerReason\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Why\x20the\x20processor\x20is\x20in\x20its\x20current\x20state.\x22>{{\x20reasonText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Watches\x20<strong>{{\x20processorSourceType\x20}}</strong>\x20in\x20<strong>{{\x20processorSourceEnv\x20}}</strong>\x20and\x20runs\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>Ζ\x20{{\x20handlerName\x20}}\x20β</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20handlerName\x20||\x20\x27β\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20each\x20change\x20batch.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Use\x20this\x20engine\x20for\x20side\x20effects\x20and\x20projections\x20driven\x20by\x20change\x20batches\x20without\x20owning\x20a\x20dedicated\x20target\x20type.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20420px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Invocations</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-accent);\x22>{{\x20processorInvocations\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Changes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20processorProcessedChanges\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Failures</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(processorFailedBatches\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20processorFailedBatches\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Lag</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(processorLag\x20===\x200\x20?\x20\x27var(--okdb-success)\x27\x20:\x20\x27var(--okdb-warning)\x27)\x22>{{\x20processorLag\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</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\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Processing\x20settings</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>bootstrap</span><span\x20class=\x22kv-val\x22>{{\x20processorBootstrap\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>origin\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20processorOriginMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>batch\x20size</span><span\x20class=\x22kv-val\x22>{{\x20processorBatchSize\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>running\x20batches</span><span\x20class=\x22kv-val\x22>{{\x20processorRunningBatches\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>progress</span><span\x20class=\x22kv-val\x22>{{\x20processorProgress\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>cursor\x20key</span><span\x20class=\x22kv-val\x22>{{\x20processorCursorKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>lock\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20processorLockMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>hydrate\x20values</span><span\x20class=\x22kv-val\x22>{{\x20processorHydrateValues\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>fail\x20on\x20fn\x20error</span><span\x20class=\x22kv-val\x22>{{\x20processorFailOnHandlerError\x20}}</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\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22isMaterializer\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stack-compact\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22pill-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20type\x20this\x20materializer\x20watches.\x22>{{\x20materializerSourceType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Target\x20type\x20updated\x20by\x20returned\x20ops.\x22>target:\x20{{\x20materializerTargetType\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Source\x20environment.\x22>source\x20env:\x20{{\x20materializerSourceEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Target\x20environment.\x22>target\x20env:\x20{{\x20materializerTargetEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Function\x20environment.\x22>fn\x20env:\x20{{\x20handlerEnv\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22materializerPaused\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22info-pill\x22\x20title=\x22Materializer\x20registration\x20is\x20currently\x20paused.\x22>paused</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-lead\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Projects\x20<strong>{{\x20materializerSourceType\x20}}</strong>\x20into\x20<strong>{{\x20materializerTargetType\x20}}</strong>\x20using\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerFunction()\x22\x20class=\x22inline-link\x22\x20title=\x22View\x20or\x20edit\x20this\x20function\x20in\x20the\x20Functions\x20section.\x22>Ζ\x20{{\x20handlerName\x20}}\x20β</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!canOpenHandlerFunction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22muted-code\x22\x20style=\x22color:var(--okdb-app-fg);\x22>{{\x20handlerName\x20||\x20\x27β\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20and\x20applies\x20the\x20returned\x20ops\x20to\x20the\x20target\x20collection.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22>Use\x20this\x20engine\x20when\x20you\x20want\x20deterministic,\x20rebuildable\x20derived\x20records\x20instead\x20of\x20free-form\x20side\x20effects.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-grid\x20metric-grid--compact\x22\x20style=\x22min-width:min(100%,\x20420px);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Applied\x20ops</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20materializerAppliedOps\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Target\x20rows</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-accent);\x22>{{\x20materializerTargetCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Changes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20style=\x22color:var(--okdb-success);\x22>{{\x20materializerProcessedChanges\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-card\x20metric-card--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-title\x22>Failures</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22metric-value\x22\x20:style=\x22\x27color:\x27\x20+\x20(materializerFailedBatches\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-strong)\x27)\x22>{{\x20materializerFailedBatches\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</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\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Materialization\x20settings</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>bootstrap</span><span\x20class=\x22kv-val\x22>{{\x20materializerBootstrap\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>origin\x20mode</span><span\x20class=\x22kv-val\x22>{{\x20materializerOriginMode\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>batch\x20size</span><span\x20class=\x22kv-val\x22>{{\x20materializerBatchSize\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>running\x20batches</span><span\x20class=\x22kv-val\x22>{{\x20materializerRunningBatches\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>progress</span><span\x20class=\x22kv-val\x22>{{\x20materializerProgress\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>lag</span><span\x20class=\x22kv-val\x22>{{\x20materializerLag\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>cursor\x20key</span><span\x20class=\x22kv-val\x22>{{\x20materializerCursorKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>clear\x20on\x20rebuild</span><span\x20class=\x22kv-val\x22>{{\x20materializerClearTargetOnRebuild\x20}}</span>\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\x20class=\x22card\x20stack-compact\x22\x20style=\x22padding:14px;gap:12px;border-color:#244057;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;min-width:0;flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Repair\x20workflow</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22story-note\x22\x20style=\x22margin:0;\x22>Edit\x20the\x20handler\x20with\x20seeded\x20sample\x20input,\x20verify\x20the\x20draft\x20run,\x20then\x20retry,\x20rewind,\x20or\x20rebuild\x20from\x20here.</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=\x22display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openHandlerEditor()\x22\x20:disabled=\x22!canOpenHandlerFunction\x20||\x20materializerRepairBusy\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-accent);border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x22>Ζ\x20Edit\x20handler</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryMaterializer()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-orange);border-color:color-mix(in\x20srgb,\x20var(--okdb-orange)\x2033%,\x20transparent);\x22>β»\x20Retry</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22resetMaterializerCursor()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-info);border-color:color-mix(in\x20srgb,\x20var(--okdb-info)\x2033%,\x20transparent);\x22>β€\x20Reset\x20cursor</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22rebuildMaterializer()\x22\x20:disabled=\x22materializerRepairBusy\x20||\x20!basePath\x22\x20style=\x22font-size:12px;padding:4px\x2010px;color:var(--okdb-success);border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);\x22>β³\x20Rebuild</button>\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<if\x20:=\x22materializerErrorText\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-weight:600;margin-bottom:4px;\x22>Last\x20materializer\x20error</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>{{\x20materializerErrorText\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22materializerRepairError\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22alert\x20alert--error\x22>{{\x20materializerRepairError\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:grid;grid-template-columns:minmax(0,1fr)\x20minmax(280px,.9fr);gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Suggested\x20<code>ctx.payload</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22\x20style=\x22margin:0;max-height:220px;overflow:auto;\x22>{{\x20formatJson(materializerPreviewPayload)\x20}}</pre>\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;flex-direction:column;gap:8px;min-width:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Suggested\x20<code>ctx.materializer</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22\x20style=\x22margin:0;max-height:220px;overflow:auto;\x22>{{\x20formatJson(materializerPreviewContext)\x20}}</pre>\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\x20class=\x22story-note\x22\x20style=\x22margin:0;\x22>Recommended\x20order:\x20<strong>Edit\x20handler</strong>\x20β\x20run\x20the\x20seeded\x20draft\x20preview\x20β\x20<strong>Retry</strong>.\x20Use\x20<strong>Reset\x20cursor</strong>\x20to\x20replay\x20without\x20clearing\x20the\x20target,\x20or\x20<strong>Rebuild</strong>\x20to\x20clear\x20and\x20rematerialize\x20from\x20scratch.</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!hasSpecializedPipelineView\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22panel-grid\x20panel-grid--two\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Overview</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>state</span><span\x20class=\x22kv-val\x22>{{\x20stateText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>reason</span><span\x20class=\x22kv-val\x22>{{\x20reasonText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>enabled</span><span\x20class=\x22kv-val\x22>{{\x20eng.enabled\x20===\x20false\x20?\x20\x27no\x27\x20:\x20\x27yes\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>affinity</span><span\x20class=\x22kv-val\x22>{{\x20affinityText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>updated</span><span\x20class=\x22kv-val\x22>{{\x20updatedText\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22runtimePreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Runtime\x20details</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22runtimePreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Configuration</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22configPreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22configPreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22configPreviewEntries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22helper-text\x22>This\x20engine\x20mostly\x20uses\x20structured\x20config.\x20Open\x20the\x20raw\x20JSON\x20below\x20if\x20you\x20need\x20the\x20full\x20payload.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22statsPreviewEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Stats\x20snapshot</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22kv-grid\x20kv-grid--compact\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22statsPreviewEntries\x22\x20let:item=\x22entry\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22kv-key\x22>{{\x20labelize(entry[0])\x20}}</span><span\x20class=\x22kv-val\x22>{{\x20humanValue(entry[1])\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;flex-direction:column;gap:12px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;align-items:center;gap:8px;flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-title\x22\x20style=\x22margin:0;\x22>Raw\x20data</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22card-subtitle\x22>Keep\x20the\x20default\x20view\x20visual\x20first.\x20Open\x20these\x20only\x20when\x20you\x20need\x20the\x20underlying\x20JSON.</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22raw-toggle-row\x22>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.runtime\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawRuntime)\x22\x20@click=\x22showRawRuntime\x20=\x20!showRawRuntime\x22>Runtime\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawStats)\x22\x20@click=\x22showRawStats\x20=\x20!showRawStats\x22>Stats\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22eng.config\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22raw-toggle\x22\x20:style=\x22rawToggleStyle(showRawConfig)\x22\x20@click=\x22showRawConfig\x20=\x20!showRawConfig\x22>Config\x20JSON</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22showRawRuntime\x20&&\x20eng.runtime\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Runtime\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.runtime)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22showRawStats\x20&&\x20eng.stats\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Stats\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.stats)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20<if\x20:=\x22showRawConfig\x20&&\x20eng.config\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;flex-direction:column;gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22field-label\x22>Config\x20payload</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22json-block\x22>{{\x20formatJson(eng.config)\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a</engine-panel-shell>\x0a','style':_0x47dbd7};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script type="module">import filesBlobStatus from"./parts/files-blob-status.ok.js";import filesFileList from"./parts/files-file-list.ok.js";import filesOverview from"./parts/files-overview.ok.js";import filesPathBrowser from"./parts/files-path-browser.ok.js";export default{tag:"files-index",unwrap:!0,dependencies:[filesPathBrowser,filesFileList,filesBlobStatus,filesOverview],context:e=>({allFiles:[],selectedPath:null,pathBrowser:null,get showOverview(){return!this.selectedPath},get showFiles(){return this.selectedPath&&"__blobs__"!==this.selectedPath},get showBlobs(){return"__blobs__"===this.selectedPath},onFilesLoaded(e){this.allFiles=e??[]},onSelect(e){this.selectedPath=e??null},onSelectBlobs(){this.selectedPath="__blobs__",this.pathBrowser?.$scope?.$innerContext?.clearSelection?.()},async onRefresh(){await(this.pathBrowser?.$scope?.$innerContext?.load?.())},async onEnvChanged(){this.selectedPath=null,this.allFiles=[],await(this.pathBrowser?.$scope?.$innerContext?.load?.())}}),init(e){e.$watch(()=>e.$ok.stores.okdb.selectedEnv,()=>this.onEnvChanged())}}</script><style>.action-row{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:6px;border:1px solid transparent;background:0 0;cursor:pointer;width:100%;font-size:12px;transition:background .1s}.action-row:hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border)}.action-row--on{background:var(--okdb-accent-soft-bg);border-color:var(--okdb-accent-soft-border);color:var(--okdb-accent)}</style><template><component import="../../layouts/_default.ok.html"><template name="sidebar"><div style="display:flex;flex-direction:column;gap:0;height:100%;min-height:0"><button :class="showOverview ? 'action-row action-row--on' : 'action-row'" @click="onSelect(null)" style="margin-bottom:4px;flex-shrink:0"><span style="width:15px;text-align:center;flex-shrink:0;font-size:13px">β</span> <span style="font-size:12px">Overview</span></button><div style="border-top:1px solid var(--okdb-app-border);margin:0 0 6px;flex-shrink:0"></div><button :class="showBlobs ? 'action-row action-row--on' : 'action-row'" @click="onSelectBlobs()" style="margin-bottom:6px;flex-shrink:0"><span style="width:15px;text-align:center;flex-shrink:0;color:var(--okdb-sky);font-size:13px">β</span> <span style="font-size:12px;color:var(--okdb-sky)">Blob Sync</span></button><div style="border-top:1px solid var(--okdb-app-border);margin:0 0 8px;flex-shrink:0"></div><div style="flex:1;min-height:0;overflow:hidden"><files-path-browser :ref="pathBrowser = $el" @select="onSelect($event.detail)" @loaded="onFilesLoaded($event.detail)"/></div></div></template><template name="default"><if :="showOverview"><files-overview :files="allFiles" @select="onSelect($event.detail)"/></if><if :="showFiles"><files-file-list :path="selectedPath" @refresh="onRefresh()"/></if><if :="showBlobs"><files-blob-status/></if></template></component></template>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0x5abb(_0x11b1b6,_0x1a2462){_0x11b1b6=_0x11b1b6-0x1dc;const _0x20d1d7=_0x20d1();let _0x5abb96=_0x20d1d7[_0x11b1b6];return _0x5abb96;}const _0x4f9cb8=_0x5abb;function _0x20d1(){const _0x1c23dc=['syncing','files-blob-status','5911488gSrtzc','error','blobs','failed','object','values','busy','length','/files/blobs/sync','data','load','syncResult','56450klqPoJ','toFixed','574512TCgQfV','28qMyARm','json','\x20KB','2776803qxDhat','message','API','1072056pFhJOt','134740bkMsmY','application/json','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:16px;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:15px;\x22>Blob\x20Mesh\x20Sync</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:12px;\x22>β»\x20Refresh</button>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22triggerSync()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22syncing\x20||\x20busy\x22\x0a\x20\x20\x20\x20\x20\x20\x20\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>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20syncing\x20?\x20\x27Syncingβ¦\x27\x20:\x20\x27β\x20Sync\x20Blobs\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22syncResult\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22\x0a\x20\x20\x20\x20\x20\x20padding:8px\x2012px;\x0a\x20\x20\x20\x20\x20\x20border-radius:8px;\x0a\x20\x20\x20\x20\x20\x20background:#1a2f1a;\x0a\x20\x20\x20\x20\x20\x20border:1px\x20solid\x20#2a4a2a;\x0a\x20\x20\x20\x20\x20\x20font-size:12px;\x0a\x20\x20\x20\x20\x20\x20color:#86efac;\x0a\x20\x20\x20\x20\x22>\x0a\x20\x20\x20\x20\x20\x20Sync\x20complete\x20β\x20pulled\x20<strong>{{\x20syncResult.synced\x20}}</strong>\x20blob(s).\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22syncResult.errors?.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20margin-left:8px;\x22>{{\x20syncResult.errors.length\x20}}\x20error(s)</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x22>Loadingβ¦</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20blobs.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20opacity:.4;\x20padding:24px\x200;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20blobs\x20tracked\x20yet.\x20Upload\x20files\x20to\x20see\x20them\x20here.\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22blobs.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;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.6;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x22>Hash</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;\x22>Refs</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;\x22>On\x20Disk</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;\x22>Size</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;\x22>Nodes</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=\x22blobs\x22\x20let:item=\x22b\x22\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-surface-2);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20font-family:monospace;\x20font-size:11px;\x20opacity:.7;\x22\x20:title=\x22b.hash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20b.hash\x20?\x20b.hash.slice(0,\x2012)\x20:\x20\x27\x27\x20}}β¦\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20font-family:monospace;\x22>{{\x20b.refs\x20}}</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22b.onDisk\x20?\x20\x27color:var(--okdb-success);\x27\x20:\x20\x27color:var(--okdb-danger);\x27\x22>{{\x20b.onDisk\x20?\x20\x27β\x27\x20:\x20\x27β\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20font-family:monospace;\x20opacity:.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(b.sizeBytes)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:5px\x208px;\x20text-align:right;\x20opacity:.6;\x22>{{\x20nodeCount(b.nodes)\x20}}</td>\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\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20text-align:right;\x22>{{\x20blobs.length\x20}}\x20blob(s)\x20tracked</div>\x0a\x20\x20</if>\x0a\x0a</div>','5790000kJNPnS','\x20MB','POST','filter','232vFVeIP','/files/blobs/status'];_0x20d1=function(){return _0x1c23dc;};return _0x20d1();}(function(_0x1ba591,_0x3d3525){const _0x36c76e=_0x5abb,_0x25f91b=_0x1ba591();while(!![]){try{const _0x4478f7=parseInt(_0x36c76e(0x1ee))/0x1+parseInt(_0x36c76e(0x1ef))/0x2+-parseInt(_0x36c76e(0x1eb))/0x3+-parseInt(_0x36c76e(0x1f6))/0x4*(-parseInt(_0x36c76e(0x1e5))/0x5)+-parseInt(_0x36c76e(0x1e7))/0x6*(parseInt(_0x36c76e(0x1e8))/0x7)+parseInt(_0x36c76e(0x1f2))/0x8+-parseInt(_0x36c76e(0x1fa))/0x9;if(_0x4478f7===_0x3d3525)break;else _0x25f91b['push'](_0x25f91b['shift']());}catch(_0x51e563){_0x25f91b['push'](_0x25f91b['shift']());}}}(_0x20d1,0x86e6b));export default{'tag':_0x4f9cb8(0x1f9),'context':_0x384f35=>({'busy':!0x1,'syncing':!0x1,'blobs':[],'error':null,'syncResult':null,async 'load'(){const _0x5b0d2a=_0x4f9cb8;this[_0x5b0d2a(0x1df)]=!0x0,this[_0x5b0d2a(0x1fb)]=null;try{const _0x12c8c0=await fetch(__ENV__['API']+_0x5b0d2a(0x1f7)),_0x43ba19=await _0x12c8c0['json']();if(!_0x12c8c0['ok'])throw new Error(_0x43ba19?.[_0x5b0d2a(0x1fb)]?.[_0x5b0d2a(0x1ec)]||_0x5b0d2a(0x1dc));this[_0x5b0d2a(0x1fc)]=_0x43ba19[_0x5b0d2a(0x1e2)]??[];}catch(_0x24490e){this[_0x5b0d2a(0x1fb)]=_0x24490e?.['message']||String(_0x24490e);}finally{this[_0x5b0d2a(0x1df)]=!0x1;}},async 'triggerSync'(){const _0x87a9dc=_0x4f9cb8;this[_0x87a9dc(0x1f8)]=!0x0,this[_0x87a9dc(0x1e4)]=null;try{const _0x2ccda9=await fetch(__ENV__[_0x87a9dc(0x1ed)]+_0x87a9dc(0x1e1),{'method':_0x87a9dc(0x1f4),'headers':{'Content-Type':_0x87a9dc(0x1f0)},'body':'{}'}),_0x353d17=await _0x2ccda9[_0x87a9dc(0x1e9)]();if(!_0x2ccda9['ok'])throw new Error(_0x353d17?.[_0x87a9dc(0x1fb)]?.[_0x87a9dc(0x1ec)]||_0x87a9dc(0x1dc));this[_0x87a9dc(0x1e4)]=_0x353d17[_0x87a9dc(0x1e2)],await this['load']();}catch(_0xf28add){this[_0x87a9dc(0x1fb)]=_0xf28add?.[_0x87a9dc(0x1ec)]||String(_0xf28add);}finally{this[_0x87a9dc(0x1f8)]=!0x1;}},'fmtSize':_0x4bff17=>null==_0x4bff17?'β':_0x4bff17<0x400?_0x4bff17+'\x20B':_0x4bff17<0x100000?(_0x4bff17/0x400)[_0x4f9cb8(0x1e6)](0x1)+_0x4f9cb8(0x1ea):(_0x4bff17/0x100000)[_0x4f9cb8(0x1e6)](0x1)+_0x4f9cb8(0x1f3),'nodeCount':_0x378927=>_0x378927&&_0x4f9cb8(0x1dd)==typeof _0x378927?Object[_0x4f9cb8(0x1de)](_0x378927)[_0x4f9cb8(0x1f5)](Boolean)[_0x4f9cb8(0x1e0)]:0x0}),async 'mount'(){const _0x30d11c=_0x4f9cb8;await this[_0x30d11c(0x1e3)]();},'template':_0x4f9cb8(0x1f1)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0x3fc0(){const _0xf0ea7d=['188470uFKfoi','64lrHpIA','1119HgMCWf','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:6px;\x20margin-bottom:4px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:13px;\x20opacity:.8;\x22>Directories</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:11px;\x20opacity:.7;\x22\x20title=\x22Refresh\x22>β»</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x20&&\x20allFiles.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20padding:4px\x200;\x22>Loadingβ¦</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20All\x20Files\x20entry\x20-->\x0a\x20\x20<button\x0a\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27/\x27\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20@click=\x22select(\x27/\x27)\x22\x0a\x20\x20>\x0a\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.6;\x22>π</span>\x0a\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x22>/\x20(all\x20files)</span>\x0a\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20</button>\x0a\x0a\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-surface-2);\x20margin:2px\x200;\x22></div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Dir\x20rows\x20-->\x0a\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20dir.path\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22select(dir.path)\x22\x0a\x20\x20\x20\x20\x20\x20:title=\x22dir.path\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.5;\x22>π</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20dir.path\x20}}\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.4;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20dir.count\x20}}</span>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</each>\x0a\x0a\x20\x20<if\x20:=\x22allFiles.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.35;\x20padding:8px\x200;\x20text-align:center;\x22>No\x20files\x20yet.</div>\x0a\x20\x20</if>\x0a\x0a</div>','apiBase','path','failed','\x0a[tag]\x20.dir-row\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x207px;\x0a\x20\x20\x20\x20padding:\x205px\x208px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a}\x0a[tag]\x20.dir-row:hover\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-app-border);\x20}\x0a[tag]\x20.dir-row--on\x20\x20\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-accent);\x20}\x0a','1714BiTCXi','match','385oiPOAa','error','449380xOGrPF','3103345ZsMsSz','json','80345Dgasur','busy','_unsubs','$dispatch','16680180yHZWWF','get','allFiles','sort','selected','204957gWAMIG','24iKlnTR','localeCompare','entries','load','6FSkSEC','loaded','files:uploaded','files:removed','length'];_0x3fc0=function(){return _0xf0ea7d;};return _0x3fc0();}const _0x419119=_0x7cda;function _0x7cda(_0x3f94c5,_0xfd3cbe){_0x3f94c5=_0x3f94c5-0xf9;const _0x3fc018=_0x3fc0();let _0x7cda5f=_0x3fc018[_0x3f94c5];return _0x7cda5f;}(function(_0x2d197b,_0x109ed3){const _0x1e2b89=_0x7cda,_0x1eeacb=_0x2d197b();while(!![]){try{const _0x445959=-parseInt(_0x1e2b89(0x118))/0x1+parseInt(_0x1e2b89(0x114))/0x2*(parseInt(_0x1e2b89(0x10e))/0x3)+parseInt(_0x1e2b89(0x10d))/0x4*(parseInt(_0x1e2b89(0xf9))/0x5)+-parseInt(_0x1e2b89(0x107))/0x6*(parseInt(_0x1e2b89(0x119))/0x7)+parseInt(_0x1e2b89(0x103))/0x8*(-parseInt(_0x1e2b89(0x102))/0x9)+-parseInt(_0x1e2b89(0x10c))/0xa*(parseInt(_0x1e2b89(0x116))/0xb)+parseInt(_0x1e2b89(0xfd))/0xc;if(_0x445959===_0x109ed3)break;else _0x1eeacb['push'](_0x1eeacb['shift']());}catch(_0x1b4d1a){_0x1eeacb['push'](_0x1eeacb['shift']());}}}(_0x3fc0,0x547f5));import _0x2b53cd from'../../../stores/events-store.js';import _0x44d78d from'../../../stores/okdb-store.js';export default{'tag':'files-path-browser','context':_0x5b789f=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0xd94b6=_0x7cda;this[_0xd94b6(0xfa)]=!0x0;try{const _0x55feeb=await fetch(_0x44d78d[_0xd94b6(0x110)]+'/files?path=/&limit=5000');if(!_0x55feeb['ok'])throw new Error(_0xd94b6(0x112));const _0x543600=await _0x55feeb[_0xd94b6(0x11a)]();this[_0xd94b6(0xff)]=_0x543600['data']??[],_0x5b789f[_0xd94b6(0xfc)](_0xd94b6(0x108),this[_0xd94b6(0xff)]);}catch(_0x311016){console[_0xd94b6(0x117)]('files-path-browser\x20load\x20error',_0x311016);}finally{this[_0xd94b6(0xfa)]=!0x1;}},'clearSelection'(){this['selected']=null;},'select'(_0x4753e6){const _0x41d668=_0x7cda;this[_0x41d668(0x101)]=_0x4753e6,_0x5b789f['$dispatch']('select',_0x4753e6);},get 'dirs'(){const _0x477e72=_0x7cda,_0x123362=new Map();for(const _0x23b4ba of this[_0x477e72(0xff)]){const _0x3a9dbb=(_0x23b4ba[_0x477e72(0x111)]??'')[_0x477e72(0x115)](/^(\/[^/]+)/),_0x39d4f3=_0x3a9dbb?_0x3a9dbb[0x1]:'/';_0x123362['set'](_0x39d4f3,(_0x123362[_0x477e72(0xfe)](_0x39d4f3)??0x0)+0x1);}return[..._0x123362[_0x477e72(0x105)]()][_0x477e72(0x100)]((_0x4d4159,_0x3f83b1)=>_0x4d4159[0x0][_0x477e72(0x104)](_0x3f83b1[0x0]))['map'](([_0x516f0f,_0x279000])=>({'path':_0x516f0f,'count':_0x279000}));},get 'totalFiles'(){const _0x315d45=_0x7cda;return this[_0x315d45(0xff)][_0x315d45(0x10b)];}}),async 'mount'(){const _0x3972f9=_0x7cda;await this[_0x3972f9(0x106)]();const _0x5a7896=()=>this['load']();this[_0x3972f9(0xfb)]=[_0x2b53cd['on'](_0x3972f9(0x109),_0x5a7896),_0x2b53cd['on'](_0x3972f9(0x10a),_0x5a7896)];},'unmount'(){const _0xea322a=_0x7cda;for(const _0x2b56f7 of this[_0xea322a(0xfb)])_0x2b56f7();this['_unsubs']=[];},'template':_0x419119(0x10f),'style':_0x419119(0x113)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var _0x2bf8d3=_0x4b8d;(function(_0x314da1,_0x29b0d0){var _0xf8f434=_0x4b8d,_0x3b0748=_0x314da1();while(!![]){try{var _0x1e82c5=-parseInt(_0xf8f434(0x1a1))/0x1+-parseInt(_0xf8f434(0x19c))/0x2*(parseInt(_0xf8f434(0x1a4))/0x3)+-parseInt(_0xf8f434(0x1a5))/0x4+parseInt(_0xf8f434(0x1a9))/0x5+parseInt(_0xf8f434(0x1aa))/0x6*(parseInt(_0xf8f434(0x1a3))/0x7)+parseInt(_0xf8f434(0x1a8))/0x8+parseInt(_0xf8f434(0x19e))/0x9;if(_0x1e82c5===_0x29b0d0)break;else _0x3b0748['push'](_0x3b0748['shift']());}catch(_0x5d92f7){_0x3b0748['push'](_0x3b0748['shift']());}}}(_0x3766,0x8f051));import _0x51e247 from'./files-file-list.ok.js';function _0x4b8d(_0x1a956d,_0x590e8e){_0x1a956d=_0x1a956d-0x19c;var _0x376667=_0x3766();var _0x4b8d70=_0x376667[_0x1a956d];return _0x4b8d70;}function _0x3766(){var _0x394a18=['3nmzUoy','4128400sqhNwf','$attr','path','5358440HCZYmn','2918370ATApXI','248754gpOewr','913124aMqRbv','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20height:100%;\x20min-height:0;\x22>\x0a\x20\x20<files-file-list\x20:path=\x22path\x22\x20@refresh=\x22onRefresh()\x22\x20/>\x0a</div>','4456287ohEyoL','files-path-panel','refresh','461872jdkFny','$dispatch','133SAoYAb'];_0x3766=function(){return _0x394a18;};return _0x3766();}export default{'tag':_0x2bf8d3(0x19f),'props':[_0x2bf8d3(0x1a7)],'dependencies':[_0x51e247],'context':_0x3aa76e=>({get 'path'(){var _0x3538e5=_0x2bf8d3;return _0x3aa76e[_0x3538e5(0x1a6)][_0x3538e5(0x1a7)]??'/';},'onRefresh'(){var _0x21a723=_0x2bf8d3;_0x3aa76e[_0x21a723(0x1a2)](_0x21a723(0x1a0));}}),'template':_0x2bf8d3(0x19d)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x5c57d5=_0x1392;(function(_0xc0f3a6,_0x15fda4){const _0xb5be61=_0x1392,_0x5e5f2d=_0xc0f3a6();while(!![]){try{const _0x3da97c=parseInt(_0xb5be61(0xac))/0x1*(-parseInt(_0xb5be61(0x9b))/0x2)+-parseInt(_0xb5be61(0x96))/0x3+-parseInt(_0xb5be61(0xa2))/0x4*(parseInt(_0xb5be61(0xa8))/0x5)+parseInt(_0xb5be61(0xbf))/0x6+parseInt(_0xb5be61(0x95))/0x7*(parseInt(_0xb5be61(0x9e))/0x8)+parseInt(_0xb5be61(0xd0))/0x9*(parseInt(_0xb5be61(0xab))/0xa)+-parseInt(_0xb5be61(0xb5))/0xb*(-parseInt(_0xb5be61(0xd1))/0xc);if(_0x3da97c===_0x15fda4)break;else _0x5e5f2d['push'](_0x5e5f2d['shift']());}catch(_0x15850f){_0x5e5f2d['push'](_0x5e5f2d['shift']());}}}(_0x1024,0x4e980));import _0x2fb332 from'./files-upload-panel.ok.js';function _0x1392(_0x3ad14a,_0x1ec894){_0x3ad14a=_0x3ad14a-0x95;const _0x1024de=_0x1024();let _0x139234=_0x1024de[_0x3ad14a];return _0x139234;}function _0x1024(){const _0x340add=['files-file-list','Delete\x20\x22','max','\x22?\x0a\x0aThis\x20will\x20decrement\x20the\x20blob\x20ref-count.','/status','16175FdksXU','#0d9488','error','2987880cqPOdJ','21uzVcdF','#16a34a','zip','\x0a[tag]\x20.file-row\x20{\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-bg);\x20transition:\x20background\x20.1s;\x20}\x0a[tag]\x20.file-row:hover\x20{\x20background:\x20var(--okdb-app-bg-deep);\x20}\x0a','slice','audio/','showUpload','files','refresh','44YyJvUU','#dc2626','startsWith','split','filter','data','$attr','page','pageSize','failed','1934016uutZea','#7c3aed','\x20KB','#0891b2','busy','ceil','2-digit','json','toFixed','catch','filename','$dispatch','path','load','includes','toLocaleTimeString','/files/','18QcVLzF','662352PjgNCM','toLocaleDateString','var(--okdb-mime-default)','_unsubs','7dXcmPx','1768320dewqfb','files:uploaded','message','totalPages','#ca8a04','52342gwtZsU','apiBase','video/','4477160FHvpVO','length','#d97706','endsWith','296aziSMZ'];_0x1024=function(){return _0x340add;};return _0x1024();}import _0xdbf520 from'../../../stores/events-store.js';import _0x906ed5 from'../../../stores/okdb-store.js';export default{'tag':_0x5c57d5(0xa3),'props':[_0x5c57d5(0xcb)],'dependencies':[_0x2fb332],'context':_0x20ea2b=>({'busy':!0x1,'files':[],'error':null,'showUpload':!0x1,'page':0x0,'pageSize':0x32,'totalLoaded':0x0,'_unsubs':[],get 'path'(){const _0x389075=_0x5c57d5;return _0x20ea2b[_0x389075(0xbb)][_0x389075(0xcb)]??'/';},get 'pagedFiles'(){const _0x497964=_0x5c57d5,_0x663d73=this['page']*this[_0x497964(0xbd)];return this[_0x497964(0xb3)]['slice'](_0x663d73,_0x663d73+this[_0x497964(0xbd)]);},get 'totalPages'(){const _0x4548aa=_0x5c57d5;return Math[_0x4548aa(0xa5)](0x1,Math[_0x4548aa(0xc4)](this[_0x4548aa(0xb3)]['length']/this[_0x4548aa(0xbd)]));},get 'hasNext'(){const _0x48d959=_0x5c57d5;return this[_0x48d959(0xbc)]<this[_0x48d959(0x99)]-0x1;},get 'hasPrev'(){const _0x3215f9=_0x5c57d5;return this[_0x3215f9(0xbc)]>0x0;},async 'load'(){const _0x12bdfe=_0x5c57d5,_0x263ef8=_0x20ea2b[_0x12bdfe(0xbb)][_0x12bdfe(0xcb)];if(null!=_0x263ef8){this['busy']=!0x0,this['error']=null;try{const _0x3097ea=_0x906ed5[_0x12bdfe(0x9c)]+'/files?path='+encodeURIComponent(_0x263ef8)+'&recursive=true&limit=2000',_0x10753d=await fetch(_0x3097ea),_0x5996b5=await _0x10753d[_0x12bdfe(0xc6)]();if(!_0x10753d['ok'])throw new Error(_0x5996b5?.[_0x12bdfe(0xaa)]?.[_0x12bdfe(0x98)]||_0x12bdfe(0xbe));this[_0x12bdfe(0xb3)]=_0x5996b5[_0x12bdfe(0xba)]??[],this['page']=0x0;}catch(_0x111248){this[_0x12bdfe(0xaa)]=_0x111248?.[_0x12bdfe(0x98)]||String(_0x111248),this['files']=[];}finally{this[_0x12bdfe(0xc3)]=!0x1;}}else this[_0x12bdfe(0xb3)]=[];},async 'deleteFile'(_0x156df5){const _0x19f526=_0x5c57d5,_0x25ff8b=this[_0x19f526(0xc9)](_0x156df5);if(confirm(_0x19f526(0xa4)+_0x25ff8b+_0x19f526(0xa6)))try{const _0xd931ea=_0x906ed5[_0x19f526(0x9c)],_0x1fef68=await fetch(_0xd931ea+_0x19f526(0xcf)+encodeURIComponent(_0x156df5['id']),{'method':'DELETE'});if(!_0x1fef68['ok']){const _0x55424a=await _0x1fef68[_0x19f526(0xc6)]()[_0x19f526(0xc8)](()=>({}));throw new Error(_0x55424a?.['error']?.[_0x19f526(0x98)]||'Delete\x20failed');}this[_0x19f526(0xb3)]=this[_0x19f526(0xb3)][_0x19f526(0xb9)](_0x591ef3=>_0x591ef3['id']!==_0x156df5['id']),_0x20ea2b[_0x19f526(0xca)](_0x19f526(0xb4));}catch(_0xb73b2d){this[_0x19f526(0xaa)]=_0xb73b2d?.[_0x19f526(0x98)]||String(_0xb73b2d);}},'downloadUrl':_0x49236b=>_0x906ed5[_0x5c57d5(0x9c)]+'/files/'+encodeURIComponent(_0x49236b['id']),'statusUrl':_0x244cde=>_0x906ed5[_0x5c57d5(0x9c)]+_0x5c57d5(0xcf)+encodeURIComponent(_0x244cde['id'])+_0x5c57d5(0xa7),'filename'(_0x365e5c){const _0x51ef0a=_0x5c57d5,_0x27570c=_0x365e5c[_0x51ef0a(0xcb)]??'';return _0x27570c?_0x27570c['split']('/')[_0x51ef0a(0xb9)](Boolean)['pop']():_0x365e5c['id'];},'displayPath'(_0x113883){const _0x22c9eb=_0x5c57d5,_0x3f2b9=_0x113883[_0x22c9eb(0xcb)]??'',_0xafb5c2=_0x20ea2b[_0x22c9eb(0xbb)][_0x22c9eb(0xcb)]??'/';if('/'===_0xafb5c2)return _0x3f2b9||'/';const _0x418d1c=_0xafb5c2[_0x22c9eb(0xa1)]('/')?_0xafb5c2:_0xafb5c2+'/';return _0x3f2b9['startsWith'](_0x418d1c)?_0x3f2b9[_0x22c9eb(0xb0)](_0x418d1c[_0x22c9eb(0x9f)]):_0x3f2b9;},'onUploaded'(){const _0x3dcc3f=_0x5c57d5;this['load'](),_0x20ea2b[_0x3dcc3f(0xca)](_0x3dcc3f(0xb4));},'fmtSize':_0x4bd0bf=>null==_0x4bd0bf?'β':_0x4bd0bf<0x400?_0x4bd0bf+'\x20B':_0x4bd0bf<0x100000?(_0x4bd0bf/0x400)[_0x5c57d5(0xc7)](0x1)+_0x5c57d5(0xc1):(_0x4bd0bf/0x100000)['toFixed'](0x1)+'\x20MB','fmtDate'(_0x904715){const _0x42422e=_0x5c57d5;if(!_0x904715)return'β';const _0x4cc5b1=new Date(_0x904715);return _0x4cc5b1[_0x42422e(0xd2)]()+'\x20'+_0x4cc5b1[_0x42422e(0xce)]([],{'hour':_0x42422e(0xc5),'minute':_0x42422e(0xc5)});},'mimeColor':_0x162bbb=>_0x162bbb?_0x162bbb['startsWith']('image/')?_0x5c57d5(0xc0):_0x162bbb['startsWith'](_0x5c57d5(0x9d))?_0x5c57d5(0xc2):_0x162bbb['startsWith'](_0x5c57d5(0xb1))?_0x5c57d5(0xa9):_0x162bbb[_0x5c57d5(0xb7)]('text/')?_0x5c57d5(0xad):_0x162bbb[_0x5c57d5(0xcd)]('pdf')?_0x5c57d5(0xb6):_0x162bbb[_0x5c57d5(0xcd)](_0x5c57d5(0xc6))||_0x162bbb[_0x5c57d5(0xcd)]('xml')?_0x5c57d5(0xa0):_0x162bbb['includes'](_0x5c57d5(0xae))||_0x162bbb['includes']('tar')?_0x5c57d5(0x9a):_0x5c57d5(0xd3):_0x5c57d5(0xd3),'shortMime'(_0x92cf3b){const _0x43b4a3=_0x5c57d5;if(!_0x92cf3b)return'β';const _0x30a738=_0x92cf3b[_0x43b4a3(0xb8)]('/');return _0x30a738[0x1]??_0x30a738[0x0];},'hashShort':_0x5f3b13=>_0x5f3b13?_0x5f3b13[_0x5c57d5(0xb0)](0x0,0x8)+'β¦':'β'}),'watch':{'path'(){const _0x1f4d8e=_0x5c57d5;this[_0x1f4d8e(0xb2)]=!0x1,this[_0x1f4d8e(0xbc)]=0x0,this[_0x1f4d8e(0xcc)]();}},async 'mount'(){const _0x303a44=_0x5c57d5;await this[_0x303a44(0xcc)]();const _0x46af62=()=>this[_0x303a44(0xcc)]();this[_0x303a44(0xd4)]=[_0xdbf520['on'](_0x303a44(0x97),_0x46af62),_0xdbf520['on']('files:removed',_0x46af62)];},'unmount'(){const _0x661c7d=_0x5c57d5;for(const _0x1d2e68 of this['_unsubs'])_0x1d2e68();this[_0x661c7d(0xd4)]=[];},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20height:100%;\x20min-height:0;\x22>\x0a\x0a\x20\x20<!--\x20ββ\x20Toolbar\x20βββββββββββββββββββββββββββββββββββββββββββββββββββββββ\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x20flex-wrap:wrap;\x20margin-bottom:10px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:14px;\x20font-weight:700;\x20color:var(--okdb-accent);\x22>{{\x20path\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>{{\x20files.length\x20}}\x20file(s)</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22showUpload\x20=\x20!showUpload\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22showUpload\x20?\x20\x27font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x27\x20:\x20\x27font-size:12px;\x27\x22\x0a\x20\x20\x20\x20\x20\x20>{{\x20showUpload\x20?\x20\x27β\x20Close\x20upload\x27\x20:\x20\x27β\x20Upload\x27\x20}}</button>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:12px;\x20opacity:.7;\x22>β»</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20ββ\x20Upload\x20panel\x20ββββββββββββββββββββββββββββββββββββββββββββββββββ\x20-->\x0a\x20\x20<if\x20:=\x22showUpload\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20margin-bottom:10px;\x20padding:12px;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20<files-upload-panel\x0a\x20\x20\x20\x20\x20\x20\x20\x20:path=\x22path\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@uploaded=\x22onUploaded()\x22\x0a\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20ββ\x20Error\x20ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\x20-->\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20color:var(--okdb-danger);\x20font-size:12px;\x20margin-bottom:8px;\x20padding:6px\x2010px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20border-radius:6px;\x20background:var(--okdb-danger-soft-bg);\x22>\x0a\x20\x20\x20\x20\x20\x20{{\x20error\x20}}\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20ββ\x20Loading\x20ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\x20-->\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex-shrink:0;\x20font-size:12px;\x20opacity:.4;\x20padding:8px\x200;\x22>Loadingβ¦</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20ββ\x20Empty\x20state\x20ββββββββββββββββββββββββββββββββββββββββββββββββββββ\x20-->\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20files.length\x20===\x200\x20&&\x20!error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20display:flex;\x20flex-direction:column;\x20align-items:center;\x20justify-content:center;\x20gap:12px;\x20opacity:.45;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:32px;\x22>π</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x22>No\x20files\x20under\x20<code>{{\x20path\x20}}</code></div>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22showUpload\x20=\x20true\x22\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20β\x20Upload\x20a\x20file\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20ββ\x20Table\x20ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\x20-->\x0a\x20\x20<if\x20:=\x22files.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20overflow:auto;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20style=\x22width:100%;\x20border-collapse:collapse;\x20font-size:12px;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead\x20style=\x22position:sticky;\x20top:0;\x20z-index:2;\x20background:var(--okdb-app-bg-deep);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20style=\x22border-bottom:1px\x20solid\x20var(--okdb-app-border);\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x2010px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Path\x20/\x20Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Type</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:right;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Hash</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:left;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Uploaded</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th\x20style=\x22text-align:center;\x20padding:6px\x208px;\x20font-weight:500;\x20opacity:.6;\x20font-size:11px;\x22>Actions</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr\x20as=\x22repeat\x22\x20:of=\x22pagedFiles\x22\x20let:item=\x22f\x22\x20class=\x22file-row\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Path\x20/\x20name\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x2010px;\x20max-width:300px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:13px;\x20flex-shrink:0;\x22>{{\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27image/\x27)\x20?\x20\x27πΌ\x27\x20:\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27video/\x27)\x20?\x20\x27π¬\x27\x20:\x20(f.mime\x20||\x20\x27\x27).startsWith(\x27audio/\x27)\x20?\x20\x27π΅\x27\x20:\x20(f.mime\x20||\x20\x27\x27).includes(\x27pdf\x27)\x20?\x20\x27π\x27\x20:\x20\x27π\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:hidden;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x20font-family:monospace;\x20font-size:11px;\x20color:var(--okdb-app-fg-strong);\x22\x20:title=\x22f.path\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20displayPath(f)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:10px;\x20opacity:.3;\x20font-family:monospace;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20f.id\x20?\x20f.id.slice(0,8)\x20:\x20\x27\x27\x20}}β¦\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20MIME\x20badge\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27display:inline-block;\x20padding:2px\x207px;\x20border-radius:999px;\x20font-size:10px;\x20font-family:monospace;\x20background:\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x2722;\x20color:\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x27;\x20border:1px\x20solid\x20\x27\x20+\x20mimeColor(f.mime)\x20+\x20\x2744;\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20shortMime(f.mime)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Size\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20text-align:right;\x20font-family:monospace;\x20font-size:11px;\x20opacity:.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(f.size)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Hash\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20font-family:monospace;\x20font-size:10px;\x20opacity:.4;\x22\x20:title=\x22f.hash\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20hashShort(f.hash)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Date\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20font-size:11px;\x20opacity:.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtDate(f.createdAt)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22padding:6px\x208px;\x20text-align:center;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:href=\x22downloadUrl(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:download=\x22filename(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22display:inline-flex;\x20align-items:center;\x20justify-content:center;\x20width:26px;\x20height:22px;\x20color:var(--okdb-sky);\x20font-size:12px;\x20text-decoration:none;\x20border:1px\x20solid\x20var(--okdb-sky-soft-border);\x20border-radius:4px;\x20margin-right:4px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Download\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>β</a>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22deleteFile(f)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:26px;\x20height:22px;\x20font-size:11px;\x20padding:0;\x20color:var(--okdb-danger);\x20border-color:#5a1e1e44;\x20background:var(--okdb-danger-soft-bg);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Delete\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>π</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tbody>\x0a\x20\x20\x20\x20\x20\x20</table>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20ββ\x20Pagination\x20ββββββββββββββββββββββββββββββββββββββββββββββββββββ\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22ok-pager\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22page--\x22\x20:disabled=\x22!hasPrev\x22>βΉ\x20Prev</button>\x0a\x20\x20\x20\x20\x20\x20<span>Page\x20{{\x20page\x20+\x201\x20}}\x20/\x20{{\x20totalPages\x20}}\x20Β·\x20{{\x20files.length\x20}}\x20total</span>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22page++\x22\x20:disabled=\x22!hasNext\x22>Next\x20βΊ</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','style':_0x5c57d5(0xaf)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x583597=_0x3974;(function(_0x271a86,_0x43e3a1){const _0x6c78b9=_0x3974,_0xe2b1c8=_0x271a86();while(!![]){try{const _0xad8a9f=-parseInt(_0x6c78b9(0xe1))/0x1+parseInt(_0x6c78b9(0xd6))/0x2+parseInt(_0x6c78b9(0xf3))/0x3+-parseInt(_0x6c78b9(0xdf))/0x4*(parseInt(_0x6c78b9(0xee))/0x5)+-parseInt(_0x6c78b9(0xd3))/0x6+-parseInt(_0x6c78b9(0xef))/0x7*(-parseInt(_0x6c78b9(0xe3))/0x8)+-parseInt(_0x6c78b9(0xe8))/0x9*(-parseInt(_0x6c78b9(0xde))/0xa);if(_0xad8a9f===_0x43e3a1)break;else _0xe2b1c8['push'](_0xe2b1c8['shift']());}catch(_0x21de24){_0xe2b1c8['push'](_0xe2b1c8['shift']());}}}(_0x405d,0xbc03a));export default{'tag':_0x583597(0xcf),'props':['files'],'context':_0x284fe1=>({get 'files'(){const _0x15dd49=_0x583597;return _0x284fe1[_0x15dd49(0xea)][_0x15dd49(0xf1)]??[];},get 'totalFiles'(){const _0xf2f8b2=_0x583597;return this[_0xf2f8b2(0xf1)][_0xf2f8b2(0xd5)];},get 'dirs'(){const _0x1e76ea=_0x583597,_0x14a430=new Set();for(const _0x184d04 of this[_0x1e76ea(0xf1)]){const _0x35e6f6=(_0x184d04['path']??'')[_0x1e76ea(0xdd)](/^(\/[^/]+)\//);_0x35e6f6&&_0x14a430[_0x1e76ea(0xe0)](_0x35e6f6[0x1]);}return[..._0x14a430][_0x1e76ea(0xd1)]();},get 'totalBytes'(){const _0x2bf79f=_0x583597;return this[_0x2bf79f(0xf1)][_0x2bf79f(0xe6)]((_0x3104a5,_0x2d4c28)=>_0x3104a5+(_0x2d4c28[_0x2bf79f(0xdc)]??0x0),0x0);},get 'mimeBreakdown'(){const _0x354e78=_0x583597,_0x13af41={};for(const _0x538ccf of this[_0x354e78(0xf1)]){const _0x31af76=_0x538ccf['mime']??_0x354e78(0xd2),_0x4fc3ee=_0x31af76['startsWith'](_0x354e78(0xf2))?_0x354e78(0xf0):_0x31af76[_0x354e78(0xeb)](_0x354e78(0xe4))?_0x354e78(0xd7):_0x31af76[_0x354e78(0xeb)](_0x354e78(0xce))?_0x354e78(0xe9):_0x31af76['startsWith'](_0x354e78(0xe7))?_0x354e78(0xe2):_0x31af76[_0x354e78(0xec)]('pdf')?'pdf':_0x354e78(0xd2);_0x13af41[_0x4fc3ee]=(_0x13af41[_0x4fc3ee]??0x0)+0x1;}return Object[_0x354e78(0xda)](_0x13af41)[_0x354e78(0xd1)]((_0x26d04f,_0xb2b4be)=>_0xb2b4be[0x1]-_0x26d04f[0x1])[_0x354e78(0xd4)](([_0x4e4271,_0x386afb])=>({'cat':_0x4e4271,'count':_0x386afb}));},'mimeIcon':_0x428753=>({'image':'πΌ','video':'π¬','audio':'π΅','text':'π','pdf':'π','other':'π'}[_0x428753]??'π'),'fmtBytes':_0x33955b=>_0x33955b<0x400?_0x33955b+'\x20B':_0x33955b<0x100000?(_0x33955b/0x400)[_0x583597(0xe5)](0x1)+_0x583597(0xdb):_0x33955b<0x40000000?(_0x33955b/0x100000)[_0x583597(0xe5)](0x1)+'\x20MB':(_0x33955b/0x40000000)[_0x583597(0xe5)](0x2)+_0x583597(0xd9),'browseTo'(_0x109be8){const _0x470567=_0x583597;_0x284fe1[_0x470567(0xd8)]('select',_0x109be8);}}),'template':_0x583597(0xd0),'style':_0x583597(0xed)};function _0x3974(_0xabd05b,_0x4d2d63){_0xabd05b=_0xabd05b-0xce;const _0x405d1d=_0x405d();let _0x397437=_0x405d1d[_0xabd05b];return _0x397437;}function _0x405d(){const _0x38134b=['toFixed','reduce','text/','4652703UVekMg','audio','$attr','startsWith','includes','\x0a[tag]\x20.stat-card\x20{\x0a\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20min-width:\x20120px;\x0a\x20\x20\x20\x20padding:\x2014px\x2016px;\x0a\x20\x20\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20\x20\x20border-radius:\x2010px;\x0a}\x0a[tag]\x20.stat-label\x20{\x0a\x20\x20\x20\x20font-size:\x2010px;\x0a\x20\x20\x20\x20opacity:\x20.5;\x0a\x20\x20\x20\x20text-transform:\x20uppercase;\x0a\x20\x20\x20\x20letter-spacing:\x20.06em;\x0a\x20\x20\x20\x20margin-bottom:\x206px;\x0a}\x0a[tag]\x20.stat-value\x20{\x0a\x20\x20\x20\x20font-size:\x2026px;\x0a\x20\x20\x20\x20font-weight:\x20700;\x0a}\x0a[tag]\x20.stat-sub\x20{\x0a\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20opacity:\x20.4;\x0a\x20\x20\x20\x20margin-top:\x202px;\x0a}\x0a[tag]\x20.dir-btn\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x208px;\x0a\x20\x20\x20\x20padding:\x206px\x2010px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a}\x0a[tag]\x20.dir-btn:hover\x20{\x0a\x20\x20\x20\x20background:\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20border-color:\x20var(--okdb-app-border);\x0a}\x0a','695xAabqA','14ngQRqL','image','files','image/','83490qToPDN','audio/','files-overview','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:20px;\x20max-width:680px;\x22>\x0a\x0a\x20\x20<div\x20style=\x22font-weight:700;\x20font-size:18px;\x20opacity:.9;\x22>Files</div>\x0a\x0a\x20\x20<!--\x20Stats\x20row\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:12px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22stat-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>Total\x20Files</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-value\x22\x20style=\x22color:var(--okdb-info);\x22>{{\x20totalFiles\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-sub\x22>{{\x20fmtBytes(totalBytes)\x20}}</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22stat-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>Directories</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-value\x22\x20style=\x22color:var(--okdb-accent-2);\x22>{{\x20dirs.length\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-sub\x22>top-level</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<if\x20:=\x22mimeBreakdown.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-card\x22\x20style=\x22flex:2;\x20min-width:180px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22stat-label\x22>By\x20type</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:6px;\x20margin-top:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22mimeBreakdown\x22\x20let:item=\x22m\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20border-radius:999px;\x20background:var(--okdb-app-surface);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20opacity:.8;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20mimeIcon(m.cat)\x20}}\x20{{\x20m.cat\x20}}\x20<span\x20style=\x22opacity:.5;\x22>{{\x20m.count\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Directory\x20list\x20with\x20click-through\x20-->\x0a\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x20margin-bottom:8px;\x20text-transform:uppercase;\x20letter-spacing:.06em;\x22>Directories</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:3px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22dir-btn\x22\x20@click=\x22browseTo(\x27/\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.5;\x22>π</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x22>/\x20(all\x20files)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22margin-left:auto;\x20font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22dir-btn\x22\x20@click=\x22browseTo(dir)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.4;\x22>π</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x22>{{\x20dir\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22margin-left:auto;\x20font-size:11px;\x20opacity:.4;\x20font-family:monospace;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20files.filter(f\x20=>\x20(f.path\x20||\x20\x27\x27).startsWith(dir\x20+\x20\x27/\x27)).length\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Empty\x20state\x20-->\x0a\x20\x20<if\x20:=\x22totalFiles\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22padding:24px;\x20background:var(--okdb-app-bg);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:10px;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20align-items:center;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:32px;\x20opacity:.5;\x22>π</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20font-weight:600;\x20opacity:.8;\x22>No\x20files\x20yet</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.55;\x20line-height:1.8;\x20max-width:340px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Select\x20<strong\x20style=\x22color:var(--okdb-sky);\x22>/\x20(all\x20files)</strong>\x20in\x20the\x20sidebar,\x0a\x20\x20\x20\x20\x20\x20\x20\x20then\x20click\x20<strong\x20style=\x22color:var(--okdb-sky);\x22>β\x20Upload</strong>\x20to\x20add\x20files.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Files\x20are\x20organised\x20by\x20path,\x20e.g.\x20<code\x20style=\x22color:#a5f3fc;\x22>/photos/cat.jpg</code>.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22browseTo(\x27/\x27)\x22\x20style=\x22font-size:12px;\x20background:var(--okdb-sky-soft-bg);\x20border-color:var(--okdb-sky-soft-border);\x20color:var(--okdb-sky);\x20margin-top:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Browse\x20/\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','sort','other','5261922uwKsNJ','map','length','1428934zKkAuS','video','$dispatch','\x20GB','entries','\x20KB','size','match','40IVhzrZ','42244XDkhjw','add','476907bmPjiQ','text','3127256RaZeaL','video/'];_0x405d=function(){return _0x38134b;};return _0x405d();}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x25c208=_0x3035;(function(_0x39b4a1,_0x3e2297){const _0x5e20c8=_0x3035,_0x2619f7=_0x39b4a1();while(!![]){try{const _0x3e3125=-parseInt(_0x5e20c8(0x13b))/0x1+-parseInt(_0x5e20c8(0x12a))/0x2*(parseInt(_0x5e20c8(0x148))/0x3)+parseInt(_0x5e20c8(0x126))/0x4*(parseInt(_0x5e20c8(0x129))/0x5)+parseInt(_0x5e20c8(0x133))/0x6*(parseInt(_0x5e20c8(0x11f))/0x7)+-parseInt(_0x5e20c8(0x143))/0x8+parseInt(_0x5e20c8(0x122))/0x9*(-parseInt(_0x5e20c8(0x13e))/0xa)+parseInt(_0x5e20c8(0x147))/0xb;if(_0x3e3125===_0x3e2297)break;else _0x2619f7['push'](_0x2619f7['shift']());}catch(_0x3bcc5a){_0x2619f7['push'](_0x2619f7['shift']());}}}(_0x32c9,0xe5e4e));import _0x2803e9 from'../../../stores/events-store.js';function _0x32c9(){const _0x26614f=['selectedEnv','7538094EKpdJT','$dispatch','error','selected','get','path','\x20KB','files-path-browser','433364fIfVIi','toFixed','\x20MB','60CWcAPE','loaded','sort','set','localeCompare','9875040ZEmNay','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:4px;\x20height:100%;\x20min-height:0;\x20overflow:hidden;\x22>\x0a\x0a\x20\x20<!--\x20Header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:6px;\x20margin-bottom:6px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:13px;\x20opacity:.8;\x22>Files</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load()\x22\x20:disabled=\x22busy\x22\x20style=\x22font-size:11px;\x20opacity:.6;\x22\x20title=\x22Refresh\x22>β»</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Summary\x20-->\x0a\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20margin-bottom:4px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20{{\x20totalFiles\x20}}\x20file(s)\x20Β·\x20{{\x20totalBytes()\x20}}\x0a\x20\x20</div>\x0a\x0a\x20\x20<if\x20:=\x22busy\x20&&\x20allFiles.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x20padding:4px\x200;\x22>Loadingβ¦</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Scrollable\x20dir\x20list\x20-->\x0a\x20\x20<div\x20style=\x22flex:1;\x20overflow-y:auto;\x20overflow-x:hidden;\x20display:flex;\x20flex-direction:column;\x20gap:2px;\x20min-height:0;\x22>\x0a\x0a\x20\x20\x20\x20<!--\x20All\x20Files\x20row\x20-->\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20\x27/\x27\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20@click=\x22select(\x27/\x27)\x22\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:11px;\x20opacity:.5;\x22>π</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20font-family:monospace;\x22>/</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.35;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20totalFiles\x20}}</span>\x0a\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22dirs.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22border-top:1px\x20solid\x20var(--okdb-app-surface-2);\x20margin:4px\x202px;\x22></div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20Per-dir\x20rows\x20-->\x0a\x20\x20\x20\x20<each\x20:of=\x22dirs\x22\x20let:item=\x22dir\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22selected\x20===\x20dir.path\x20?\x20\x27dir-row\x20dir-row--on\x27\x20:\x20\x27dir-row\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22select(dir.path)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22dir.path\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex-shrink:0;\x20font-size:11px;\x20opacity:.4;\x22>π</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20text-align:left;\x20font-size:12px;\x20font-family:monospace;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20dir.path\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.35;\x20flex-shrink:0;\x20font-family:monospace;\x22>{{\x20dir.count\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22allFiles.length\x20===\x200\x20&&\x20!busy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.3;\x20padding:12px\x200;\x20text-align:center;\x20line-height:1.7;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20No\x20files\x20yet.<br>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x22>Select\x20/\x20and\x20upload.</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20</div>\x0a\x0a</div>','failed','size','17618073cEQmJk','6zstNgA','7reJdkY','map','reduce','1694637kvvtbw','files:uploaded','select','$watch','8BlbtDU','entries','json','3891175GTKkJF','675314Gldmlu','files:removed','busy','_unsubs','load','allFiles','\x20GB','apiBase'];_0x32c9=function(){return _0x26614f;};return _0x32c9();}import _0x369b80 from'../../../stores/okdb-store.js';function _0x3035(_0x52db47,_0x3da96e){_0x52db47=_0x52db47-0x11f;const _0x32c958=_0x32c9();let _0x30357c=_0x32c958[_0x52db47];return _0x30357c;}export default{'tag':_0x25c208(0x13a),'context':_0x1ab100=>({'busy':!0x1,'allFiles':[],'selected':null,'_unsubs':[],async 'load'(){const _0x89c14d=_0x25c208;this[_0x89c14d(0x12c)]=!0x0;try{const _0x597e01=_0x369b80[_0x89c14d(0x131)],_0x1b6c1b=await fetch(_0x597e01+'/files?path=/&recursive=true&limit=5000');if(!_0x1b6c1b['ok'])throw new Error(_0x89c14d(0x145));const _0x132a46=await _0x1b6c1b[_0x89c14d(0x128)]();this[_0x89c14d(0x12f)]=_0x132a46['data']??[],_0x1ab100['$dispatch'](_0x89c14d(0x13f),this[_0x89c14d(0x12f)]);}catch(_0x3b6dce){console[_0x89c14d(0x135)]('files-path-browser\x20load\x20error',_0x3b6dce);}finally{this['busy']=!0x1;}},'clearSelection'(){this['selected']=null;},'select'(_0xc6091c){const _0x36cf9c=_0x25c208;this[_0x36cf9c(0x136)]=_0xc6091c,_0x1ab100[_0x36cf9c(0x134)](_0x36cf9c(0x124),_0xc6091c);},get 'dirs'(){const _0x5b8bab=_0x25c208,_0x35c310=new Map();for(const _0x55c3c1 of this[_0x5b8bab(0x12f)]){const _0x2c1613=(_0x55c3c1[_0x5b8bab(0x138)]??'')['match'](/^(\/[^/]+)\//);if(!_0x2c1613)continue;const _0x54dc18=_0x2c1613[0x1];_0x35c310[_0x5b8bab(0x141)](_0x54dc18,(_0x35c310[_0x5b8bab(0x137)](_0x54dc18)??0x0)+0x1);}return[..._0x35c310[_0x5b8bab(0x127)]()][_0x5b8bab(0x140)]((_0x4466fe,_0x222c16)=>_0x4466fe[0x0][_0x5b8bab(0x142)](_0x222c16[0x0]))[_0x5b8bab(0x120)](([_0x1c84c8,_0x3c445c])=>({'path':_0x1c84c8,'count':_0x3c445c}));},get 'totalFiles'(){const _0x2b2e54=_0x25c208;return this[_0x2b2e54(0x12f)]['length'];},'totalBytes'(){const _0x5c88b1=_0x25c208,_0x3d2862=this[_0x5c88b1(0x12f)][_0x5c88b1(0x121)]((_0x29d438,_0x25aa84)=>_0x29d438+(_0x25aa84[_0x5c88b1(0x146)]??0x0),0x0);return _0x3d2862<0x400?_0x3d2862+'\x20B':_0x3d2862<0x100000?(_0x3d2862/0x400)[_0x5c88b1(0x13c)](0x1)+_0x5c88b1(0x139):_0x3d2862<0x40000000?(_0x3d2862/0x100000)[_0x5c88b1(0x13c)](0x1)+_0x5c88b1(0x13d):(_0x3d2862/0x40000000)[_0x5c88b1(0x13c)](0x2)+_0x5c88b1(0x130);}}),async 'mount'(_0x4d580d){const _0x5c19ce=_0x25c208;await this[_0x5c19ce(0x12e)]();const _0x386b2f=()=>this['load']();this['_unsubs']=[_0x2803e9['on'](_0x5c19ce(0x123),_0x386b2f),_0x2803e9['on'](_0x5c19ce(0x12b),_0x386b2f)],_0x4d580d[_0x5c19ce(0x125)](()=>_0x369b80[_0x5c19ce(0x132)],()=>{const _0x262c04=_0x5c19ce;this[_0x262c04(0x136)]=null,this[_0x262c04(0x12e)]();});},'unmount'(){const _0x142ccd=_0x25c208;for(const _0x25ebf7 of this[_0x142ccd(0x12d)])_0x25ebf7();this['_unsubs']=[];},'template':_0x25c208(0x144),'style':'\x0a[tag]\x20.dir-row\x20{\x0a\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20gap:\x206px;\x0a\x20\x20\x20\x20padding:\x205px\x208px;\x0a\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20border:\x201px\x20solid\x20transparent;\x0a\x20\x20\x20\x20background:\x20transparent;\x0a\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20width:\x20100%;\x0a\x20\x20\x20\x20text-align:\x20left;\x0a\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a}\x0a[tag]\x20.dir-row:hover\x20\x20{\x20background:\x20var(--okdb-app-surface);\x20border-color:\x20var(--okdb-app-border);\x20}\x0a[tag]\x20.dir-row--on\x20\x20\x20\x20{\x20background:\x20var(--okdb-accent-soft-bg);\x20border-color:\x20var(--okdb-accent-soft-border);\x20color:\x20var(--okdb-accent);\x20}\x0a'};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _0x4771(_0x25295b,_0x17ff4e){_0x25295b=_0x25295b-0x7a;const _0x28ee8f=_0x28ee();let _0x4771de=_0x28ee8f[_0x25295b];return _0x4771de;}const _0x46a9de=_0x4771;(function(_0xdfc63,_0x2bacb5){const _0x277da7=_0x4771,_0x29cdc2=_0xdfc63();while(!![]){try{const _0x2abd9e=parseInt(_0x277da7(0x87))/0x1*(parseInt(_0x277da7(0x86))/0x2)+-parseInt(_0x277da7(0x9f))/0x3+-parseInt(_0x277da7(0x85))/0x4*(-parseInt(_0x277da7(0x81))/0x5)+-parseInt(_0x277da7(0x88))/0x6*(parseInt(_0x277da7(0x7f))/0x7)+parseInt(_0x277da7(0xa3))/0x8+-parseInt(_0x277da7(0x8f))/0x9+parseInt(_0x277da7(0x99))/0xa*(parseInt(_0x277da7(0x91))/0xb);if(_0x2abd9e===_0x2bacb5)break;else _0x29cdc2['push'](_0x29cdc2['shift']());}catch(_0xc431aa){_0x29cdc2['push'](_0x29cdc2['shift']());}}}(_0x28ee,0x4d984));import _0x407361 from'../../../components/ok-dropzone.ok.js';import _0x39b8bc from'../../../stores/okdb-store.js';export default{'tag':'files-upload-panel','props':[_0x46a9de(0x83)],'dependencies':[_0x407361],'context':_0x54dd0b=>({'queue':[],get 'path'(){const _0x21ea8c=_0x46a9de;return _0x54dd0b[_0x21ea8c(0x8b)][_0x21ea8c(0x83)]||'/';},'onFilesDropped'(_0x5adc14){const _0x2d5ead=_0x46a9de,{files:_0x46a219}=_0x5adc14[_0x2d5ead(0xab)];for(const _0x30f01e of _0x46a219)this[_0x2d5ead(0x8e)]['push']({'file':_0x30f01e,'relativePath':_0x30f01e[_0x2d5ead(0x84)]||_0x30f01e[_0x2d5ead(0xa7)],'status':'pending','error':null,'record':null});this[_0x2d5ead(0x9c)]();},'onBrowse'(){const _0x4bbd4f=_0x46a9de,_0x397b54=document[_0x4bbd4f(0x96)](_0x4bbd4f(0x7b));_0x397b54[_0x4bbd4f(0x9a)]='file',_0x397b54['multiple']=!0x0,_0x397b54['onchange']=()=>{const _0xa50d37=_0x4bbd4f;for(const _0x40fc8a of Array[_0xa50d37(0x8d)](_0x397b54[_0xa50d37(0x7c)]))this[_0xa50d37(0x8e)]['push']({'file':_0x40fc8a,'relativePath':_0x40fc8a['name'],'status':_0xa50d37(0x9e),'error':null,'record':null});this[_0xa50d37(0x9c)]();},_0x397b54[_0x4bbd4f(0x97)]();},'_uploading':!0x1,async '_flush'(){const _0x51c230=_0x46a9de;if(!this[_0x51c230(0xa4)]){this[_0x51c230(0xa4)]=!0x0;try{let _0x154427;for(;_0x154427=this[_0x51c230(0x8e)][_0x51c230(0x98)](_0x309d7f=>_0x51c230(0x9e)===_0x309d7f['status']);)await this[_0x51c230(0x7d)](_0x154427);}finally{this[_0x51c230(0xa4)]=!0x1;}}},async '_uploadOne'(_0xaa233b){const _0x6fe2a=_0x46a9de;_0xaa233b[_0x6fe2a(0xa5)]='uploading';const _0x523306=_0x54dd0b[_0x6fe2a(0x8b)][_0x6fe2a(0x83)]||'/';try{const _0x3be9a7=(_0xaa233b[_0x6fe2a(0x84)]||_0xaa233b[_0x6fe2a(0xa1)]['name'])['replace'](/^\//,''),_0x560a9e=(_0x523306[_0x6fe2a(0xa0)]('/')?_0x523306:_0x523306+'/')+_0x3be9a7,_0x398307=await fetch(_0x39b8bc[_0x6fe2a(0x9b)]+'/files?path='+encodeURIComponent(_0x560a9e),{'method':'POST','headers':{'content-type':_0xaa233b[_0x6fe2a(0xa1)][_0x6fe2a(0x9a)]||_0x6fe2a(0x7a),'content-length':String(_0xaa233b[_0x6fe2a(0xa1)][_0x6fe2a(0xa8)])},'body':_0xaa233b['file']}),_0x281a5f=await _0x398307[_0x6fe2a(0x94)]();if(!_0x398307['ok'])throw new Error(_0x281a5f?.[_0x6fe2a(0x7e)]?.['message']||_0x6fe2a(0x95));_0xaa233b[_0x6fe2a(0x82)]=_0x281a5f[_0x6fe2a(0x9d)],_0xaa233b[_0x6fe2a(0xa5)]=_0x6fe2a(0x92),_0x54dd0b[_0x6fe2a(0xac)]('uploaded',_0xaa233b[_0x6fe2a(0x82)]);}catch(_0x3d21b3){_0xaa233b[_0x6fe2a(0x7e)]=_0x3d21b3?.[_0x6fe2a(0x90)]||String(_0x3d21b3),_0xaa233b[_0x6fe2a(0xa5)]=_0x6fe2a(0x7e);}},'retryItem'(_0x4ee969){const _0x12a27e=_0x46a9de;_0x4ee969[_0x12a27e(0xa5)]=_0x12a27e(0x9e),_0x4ee969[_0x12a27e(0x7e)]=null,this[_0x12a27e(0x9c)]();},'removeItem'(_0x29c813){const _0x7dbc19=_0x46a9de,_0x581537=this[_0x7dbc19(0x8e)][_0x7dbc19(0xa2)](_0x29c813);-0x1!==_0x581537&&this[_0x7dbc19(0x8e)][_0x7dbc19(0x89)](_0x581537,0x1);},'clearDone'(){const _0x331c98=_0x46a9de;this[_0x331c98(0x8e)]=this[_0x331c98(0x8e)]['filter'](_0xd91a7b=>_0x331c98(0x92)!==_0xd91a7b[_0x331c98(0xa5)]);},'fmtSize':_0x12eb52=>null==_0x12eb52?'β':_0x12eb52<0x400?_0x12eb52+'\x20B':_0x12eb52<0x100000?(_0x12eb52/0x400)[_0x46a9de(0x8c)](0x1)+_0x46a9de(0xaa):(_0x12eb52/0x100000)['toFixed'](0x1)+_0x46a9de(0xa9),get 'pendingCount'(){const _0x66040a=_0x46a9de;return this[_0x66040a(0x8e)][_0x66040a(0x93)](_0x47c5ec=>'pending'===_0x47c5ec[_0x66040a(0xa5)])['length'];},get 'uploadingCount'(){const _0x3264bf=_0x46a9de;return this['queue']['filter'](_0x4fc4a3=>'uploading'===_0x4fc4a3[_0x3264bf(0xa5)])[_0x3264bf(0xa6)];},get 'doneCount'(){const _0x3e6028=_0x46a9de;return this[_0x3e6028(0x8e)][_0x3e6028(0x93)](_0x14f909=>'done'===_0x14f909['status'])['length'];},get 'errorCount'(){const _0x28e352=_0x46a9de;return this['queue'][_0x28e352(0x93)](_0x2828bb=>_0x28e352(0x7e)===_0x2828bb[_0x28e352(0xa5)])[_0x28e352(0xa6)];}}),'template':_0x46a9de(0x8a),'style':_0x46a9de(0x80)};function _0x28ee(){const _0x5f2479=['files','_uploadOne','error','5271uEsVcX','\x0a@keyframes\x20spin\x20{\x20to\x20{\x20transform:\x20rotate(360deg);\x20}\x20}\x0a','5JrYvHu','record','path','relativePath','417148GvxqTy','3090foivly','255OgMHfn','4674ledCpX','splice','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x0a\x20\x20<!--\x20Drop\x20zone\x20-->\x0a\x20\x20<ok-dropzone\x0a\x20\x20\x20\x20@files-drop=\x22onFilesDropped($event)\x22\x0a\x20\x20\x20\x20style=\x22border:2px\x20dashed\x20var(--okdb-app-border);\x20border-radius:8px;\x20padding:24px\x2012px;\x20text-align:center;\x20cursor:pointer;\x20transition:border-color\x20.15s;\x22\x0a\x20\x20\x20\x20@click=\x22onBrowse()\x22\x0a\x20\x20>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20align-items:center;\x20gap:6px;\x20pointer-events:none;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:28px;\x20opacity:.6;\x22>π</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20opacity:.7;\x22>Drop\x20files\x20or\x20folders\x20here,\x20or\x20<span\x20style=\x22color:var(--okdb-accent);\x20text-decoration:underline;\x22>browse</span></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.4;\x22>Uploading\x20to\x20<strong>{{\x20path\x20}}</strong></div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</ok-dropzone>\x0a\x0a\x20\x20<!--\x20Summary\x20bar\x20-->\x0a\x20\x20<if\x20:=\x22queue.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x22>{{\x20queue.length\x20}}\x20file(s)</span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22uploadingCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x22>β\x20{{\x20uploadingCount\x20}}\x20uploading</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22doneCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-success);\x22>β\x20{{\x20doneCount\x20}}\x20done</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22errorCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x22>β\x20{{\x20errorCount\x20}}\x20failed</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x22></span>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22doneCount\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearDone()\x22\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x22>Clear\x20done</button>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20File\x20list\x20-->\x0a\x20\x20\x20\x20<div\x20style=\x22max-height:220px;\x20overflow-y:auto;\x20display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20<each\x20:of=\x22queue\x22\x20let:item=\x22item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:8px;\x20padding:5px\x208px;\x20border-radius:6px;\x20background:var(--okdb-app-surface);\x20font-size:12px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Status\x20dot\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x27width:7px;height:7px;border-radius:50%;flex-shrink:0;background:\x27\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(item.status\x20===\x20\x27done\x27\x20?\x20\x27var(--okdb-success)\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item.status\x20===\x20\x27error\x27\x20?\x20\x27var(--okdb-danger)\x27\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20item.status\x20===\x20\x27uploading\x27\x20?\x20\x27var(--okdb-accent)\x27\x20:\x20\x27var(--okdb-method-default)\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22></span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Name\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22item.relativePath\x22>{{\x20item.relativePath\x20}}</span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Size\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x20font-family:monospace;\x20font-size:11px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fmtSize(item.file.size)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Error\x20message\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20===\x20\x27error\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-danger);\x20font-size:11px;\x20max-width:120px;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22item.error\x22>{{\x20item.error\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryItem(item)\x22\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x22>β»</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Spinner\x20for\x20uploading\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20===\x20\x27uploading\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-accent);\x20font-size:11px;\x20animation:spin\x201s\x20linear\x20infinite;\x22>β³</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Remove\x20button\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.status\x20!==\x20\x27uploading\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22removeItem(item)\x22\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x20opacity:.5;\x22>β</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>','$attr','toFixed','from','queue','2237337tZSfoY','message','3229226cWNwpr','done','filter','json','Upload\x20failed','createElement','click','find','20xjYqsJ','type','apiBase','_flush','data','pending','1472628JWMTgC','endsWith','file','indexOf','4467920TbPbuf','_uploading','status','length','name','size','\x20MB','\x20KB','detail','$dispatch','application/octet-stream','input'];_0x28ee=function(){return _0x5f2479;};return _0x28ee();}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script type="module">import functionDetail from"./parts/function-detail.ok.js";import functionLogs from"./parts/function-logs.ok.js";import functionRunner from"./parts/function-runner.ok.js";import functionModal from"./modals/function-modal.ok.js";import functionsList from"./parts/functions-list.ok.js";export default{tag:"functions-index",unwrap:!0,dependencies:[functionsList,functionDetail,functionRunner,functionLogs,functionModal],context:n=>({get functions(){return n.$ok.stores.functions},get isGlobal(){return this.functions.isGlobalScope},get envName(){return this.functions.envName},get canManage(){return this.functions.canOpenModal},get isDetailView(){return"detail"===this.functions.currentView&&this.functions.hasSelected},get isOverviewView(){return!this.isDetailView},get selectedName(){return this.functions.selectedName},get totalFunctions(){return this.functions.functionsOverview.length},get enabledCount(){return this.functions.functionsOverview.filter(n=>!1!==n.value?.enabled).length},get disabledCount(){return this.functions.functionsOverview.filter(n=>!1===n.value?.enabled).length},get neverRunCount(){return this.functions.functionsOverview.filter(n=>!n.latestRun).length},get recentSuccessCount(){return this.functions.overviewRuns.filter(n=>"success"===n.value?.status).length},get recentErrorCount(){return this.functions.overviewRuns.filter(n=>["error","timeout","killed"].includes(n.value?.status)).length},fmt:n=>Number(n||0).toLocaleString(),relTime(n){if(!n)return"β";const t=Date.now()-n;return t<5e3?"just now":t<6e4?`${Math.round(t/1e3)}s ago`:t<36e5?`${Math.round(t/6e4)}m ago`:t<864e5?`${Math.round(t/36e5)}h ago`:new Date(n).toLocaleDateString()},latestLogLine(n){const t=n?.latestRun?.id||n?.latestRun?.runId;if(!t)return null;const e=this.functions.logsForRun(t);return e.length?e[e.length-1]?.msg:null},getRouteFunctionName(){try{const n=globalThis.location?.hash||"",t=n.includes("?")?n.split("?")[1]:"";return new URLSearchParams(t).get("name")}catch{return null}},goOverview(){const t=n.$ok.stores.functions;t.setView("overview"),t.select(null),n.$vars.$router?.push?.("/functions")},async openFunction(t){t&&(await n.$ok.stores.functions.select(t),n.$vars.$router?.push?.("/functions?name="+encodeURIComponent(t)))},async openCreateModal(){const t=n.$ok.stores.functions;t.canOpenModal&&(t.beginCreateDraft(),await n.$ok.shared.modal.open({owner:n,title:"Create Function",canDrag:!0,content:'<function-modal :modal="modal" mode="create" :on-done="onDone" />',context:e=>({modal:e,onDone:async e=>{await t.hydrateOverview(),e?.name&&await n.openFunction(e.name)}})}))},async openEditModal(){const t=n.$ok.stores.functions;t.hasSelected&&(t.beginEditDraft(),await n.$ok.shared.modal.open({owner:n,title:`Edit Function Β· ${t.selectedName}`,canDrag:!0,content:'<function-modal :modal="modal" mode="edit" :on-done="onDone" />',context:n=>({modal:n,onDone:async()=>{await t.select(t.selectedName),await t.loadOverviewRuns()}})}))}}),init(n){const t=async()=>{const t=this.getRouteFunctionName();t?await n.$ok.stores.functions.select(t):n.$ok.stores.functions.setView("overview")};n.$watch(()=>n.$ok.stores.okdb.selectedEnv,()=>n.$ok.stores.functions.onEnvChanged()),n.$watch(()=>globalThis.location?.hash,()=>t()),this.functions.onEnvChanged(),t()}}</script><template><component import="../../layouts/_default.ok.html"><template name="header"><div style="display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%"><div><div style="font-size:22px;font-weight:700;color:var(--okdb-app-fg)">Functions</div><div style="margin-top:4px;font-size:12px;color:var(--okdb-app-fg-muted)"><if :="envName">{{ envName }}</if><if :="!envName">No environment selected</if></div><if :="isDetailView"><div style="margin-top:8px;font-size:13px;color:#a7c0d1">Viewing <strong>{{ selectedName }}</strong></div></if></div><div style="font-size:11px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.08em"><div>{{ envName || 'β' }}</div></div></div></template><template name="sidebar"><functions-list @create="openCreateModal()" @overview="goOverview()" @open="openFunction($event.detail)"></functions-list></template><template name="default"><if :="isOverviewView"><div style="display:flex;flex-direction:column;gap:20px;max-width:980px"><div style="display:flex;align-items:center;gap:10px"><div style="font-weight:600;font-size:18px">Functions Overview</div><div style="margin-left:auto"><button @click="openCreateModal()" :disabled="!canManage" style="font-size:12px;padding:5px 12px;opacity:.85">+ New function</button></div></div><div class="fn-ov-stat-row"><div class="fn-ov-stat-card"><div class="fn-ov-stat-label">Functions</div><div class="fn-ov-stat-value" style="color:var(--okdb-accent)">{{ fmt(totalFunctions) }}</div></div><div class="fn-ov-stat-card"><div class="fn-ov-stat-label">Enabled</div><div class="fn-ov-stat-value" style="color:#4ade80">{{ fmt(enabledCount) }}</div></div><div class="fn-ov-stat-card"><div class="fn-ov-stat-label">Recent Success</div><div class="fn-ov-stat-value" style="color:var(--okdb-success)">{{ fmt(recentSuccessCount) }}</div></div><div class="fn-ov-stat-card"><div class="fn-ov-stat-label">Recent Failures</div><div class="fn-ov-stat-value" style="color:var(--okdb-danger)">{{ fmt(recentErrorCount) }}</div></div></div><if :="functions.functionsOverview.length === 0"><div class="fn-ov-empty"><div style="font-size:30px;margin-bottom:12px">Ζ</div><div style="font-weight:600;font-size:15px;margin-bottom:5px">No functions registered yet</div><div style="font-size:13px;opacity:.6;line-height:1.7">Create your first function from the sidebar and use the draft runner to validate it before saving.</div></div></if><if :="functions.functionsOverview.length > 0"><div class="fn-ov-card"><div class="fn-ov-card-head"><span style="font-weight:600;font-size:14px">Functions</span> <span style="font-size:12px;opacity:.45;margin-left:auto">{{ totalFunctions }} total Β· {{ neverRunCount }} never run</span></div><table class="fn-ov-table"><thead><tr><th>Name</th><th>Status</th><th style="text-align:right">Runs</th><th style="text-align:right">Latest</th><th></th></tr></thead><tbody><tr as="repeat" :of="functions.functionsOverview" let:item="fn" class="fn-ov-row" @click="openFunction(fn.key)"><td><div style="display:flex;flex-direction:column;gap:4px"><span style="font-family:monospace;font-size:13px;color:var(--okdb-app-fg)">{{ fn.key }}</span> <span style="font-size:11px;color:var(--okdb-app-fg-muted);max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">{{ fn.value?.metadata?.description || 'No description yet.' }}</span><if :="latestLogLine(fn)"><span style="font-size:11px;color:#8db1c8;max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">log: {{ latestLogLine(fn) }}</span></if></div></td><td><span :style="fn.value?.enabled === false ? 'font-size:10px; color:var(--okdb-danger); text-transform:uppercase;' : 'font-size:10px; color:var(--okdb-success); text-transform:uppercase;'">{{ fn.value?.enabled === false ? 'disabled' : (fn.latestRun?.status || 'ready') }}</span></td><td style="text-align:right;color:var(--okdb-accent);font-weight:600">{{ fmt(functions.overviewRuns.filter(row => row.value?.functionName === fn.key).length) }}</td><td style="text-align:right;opacity:.55;font-size:12px">{{ relTime(fn.latestRun?.execution?.finishedAt ?? fn.latestRun?.request?.requestedAt) }}</td><td style="text-align:right;opacity:.3;font-size:11px;padding-right:16px">β</td></tr></tbody></table></div><div class="fn-ov-card"><div class="fn-ov-card-head"><span style="font-weight:600;font-size:14px">Recent Executions</span> <span style="font-size:12px;opacity:.4;margin-left:auto">last {{ functions.overviewRuns.length }}</span></div><table style="width:100%;border-collapse:collapse;font-size:12px"><tbody><tr as="repeat" :of="functions.overviewRuns" let:item="row" class="fn-ov-row fn-ov-row--sm" @click="openFunction(row.value?.functionName)"><td class="fn-ov-td" style="font-family:monospace;font-size:11px;color:var(--okdb-app-fg);padding-left:16px">{{ row.value?.functionName || row.key }}</td><td class="fn-ov-td"><span :style="row.value?.status === 'success' ? 'font-size:10px; color:var(--okdb-success);' : 'font-size:10px; color:var(--okdb-danger);'">{{ row.value?.status || 'β' }}</span></td><td class="fn-ov-td" style="font-family:monospace;font-size:11px;opacity:.45;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">{{ row.value?.id || row.key }}</td><td class="fn-ov-td" style="text-align:right;opacity:.35;white-space:nowrap;font-size:11px;padding-right:16px">{{ relTime(row.value?.execution?.finishedAt ?? row.value?.request?.requestedAt) }}</td></tr></tbody></table></div><function-logs title="Live function logs" empty="Run a function to see logs here."></function-logs></if></div></if><if :="isDetailView"><div style="display:grid;grid-template-columns:minmax(0,1.45fr) minmax(360px,.95fr);gap:16px;height:100%;min-height:0"><div style="display:grid;grid-template-rows:minmax(0,1fr) minmax(260px,.85fr);gap:16px;min-height:0"><div style="min-height:0;overflow:auto"><function-detail :on-edit="openEditModal"></function-detail></div><div style="min-height:0;overflow:auto"><function-logs :run-id="functions.selectedRun?.id || functions.selectedRun?.runId" :entries="functions.selectedLogEntries" title="Selected function live logs" empty="No logs captured for the selected run yet."></function-logs></div></div><div style="min-height:0;overflow:auto"><function-runner></function-runner></div></div></if></template></component></template><style>.fn-ov-stat-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.fn-ov-card,.fn-ov-stat-card{border:1px solid var(--okdb-app-border);border-radius:12px;background:var(--okdb-app-bg-deep)}.fn-ov-stat-card{padding:14px}.fn-ov-stat-label{font-size:11px;text-transform:uppercase;color:var(--okdb-app-fg-muted);margin-bottom:6px}.fn-ov-stat-value{font-size:24px;font-weight:700;color:var(--okdb-app-fg)}.fn-ov-empty{border:1px dashed var(--okdb-app-border);border-radius:12px;padding:24px;text-align:center;color:var(--okdb-app-fg-muted);background:var(--okdb-app-bg-deep)}.fn-ov-card-head{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--okdb-app-border)}.fn-ov-table{width:100%;border-collapse:collapse;font-size:12px}.fn-ov-table thead th{text-align:left;padding:10px 16px;color:var(--okdb-app-fg-muted);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--okdb-app-border)}.fn-ov-row{cursor:pointer}.fn-ov-row:hover{background:var(--okdb-app-bg-deep)}.fn-ov-row td,.fn-ov-td{padding:12px 16px;border-bottom:1px solid var(--okdb-app-border)}.fn-ov-row--sm .fn-ov-td,.fn-ov-row--sm td{padding-top:10px;padding-bottom:10px}</style>
|