@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
|
+
const _0xce419c=_0x3b62;function _0x3b62(_0x294a90,_0x20bb12){_0x294a90=_0x294a90-0x1ec;const _0x39b0b5=_0x39b0();let _0x3b62ca=_0x39b0b5[_0x294a90];return _0x3b62ca;}function _0x39b0(){const _0x39f016=['minimum','Schema\x20·\x20','4068420TYgRiJ','any','/type/','\x20|\x20','exclusiveMaximum','$watch','16605281lPaKhM','<schema-edit-modal\x20:modal=\x22modal\x22\x20:type=\x22type\x22\x20:schema=\x22schema\x22\x20:env-api-base=\x22envApiBase\x22\x20:on-done=\x22onDone\x22\x20/>','refViolationsError','push','33832yrZcsf','refViolations','description','enum','result','definition','now','ref\x20→\x20','properties','stringify','no_action','exclusiveMinimum','envApiBase','statusText','items≥','join','\x20props','message','modal','$attr','split','apiBase','additionalProperties','1251kOXhyE','violations','just\x20now','has','errorCount','propertyEntries','2408hRiskI','error','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:16px;\x20flex:1;\x20overflow:auto;\x20padding-right:4px;\x22>\x0a\x0a\x20\x20<!--\x20──\x20Schema\x20summary\x20card\x20────────────────────────────────────\x20-->\x0a\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22manage-section-header\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>Schema\x20Definition</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22schemaBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.4;\x22>Loading…</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22hasSchema\x20&&\x20!schemaBusy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27font-size:10px;\x20padding:2px\x208px;\x20border-radius:999px;\x20border:1px\x20solid;\x20\x27\x20+\x20(enforceMode\x20?\x20\x27color:var(--okdb-success);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);\x27\x20:\x20\x27color:var(--okdb-app-fg-muted);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-app-fg-muted)\x2033%,\x20transparent);\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20enforceMode\x20?\x20\x27enforcing\x27\x20:\x20\x27passive\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openEditModal()\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:12px;\x20padding:4px\x2014px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22edit-2\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20hasSchema\x20?\x20\x27Edit\x20Schema\x27\x20:\x20\x27Set\x20Schema\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22schemaError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-bottom:12px;\x20color:var(--okdb-danger);\x20font-size:12px;\x20padding:8px\x2010px;\x20border-radius:8px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-danger)\x204%,\x20transparent);\x22>{{\x20schemaError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20No\x20schema\x20state\x20-->\x0a\x20\x20\x20\x20<if\x20:=\x22schemaLoaded\x20&&\x20!hasSchema\x20&&\x20!schemaBusy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:13px;\x20padding:8px\x200;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20No\x20schema\x20defined\x20for\x20this\x20type.\x20Click\x20<b>Set\x20Schema</b>\x20to\x20add\x20one.\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20Schema\x20summary\x20-->\x0a\x20\x20\x20\x20<if\x20:=\x22hasSchema\x20&&\x20!schemaBusy\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Properties\x20table\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22propertyEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-grid\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-hd\x22>Property</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-hd\x22>Type</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-hd\x22>Req</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-hd\x22>Constraints</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-hd\x22>Description</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22propertyEntries\x22\x20let:item=\x22p\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-cell\x22><code\x20style=\x22font-size:12px;\x20color:var(--okdb-json-key);\x22>{{\x20p.name\x20}}</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-cell\x20sts-dim\x22>{{\x20p.type\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-cell\x22\x20style=\x22text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22p.required\x22><span\x20style=\x22color:var(--okdb-success);\x20font-size:11px;\x22>✓</span></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\x20:class=\x22\x27sts-cell\x20sts-dim\x27\x20+\x20(p.hasRef\x20?\x20\x27\x20sts-ref-hint\x27\x20:\x20\x27\x27)\x22\x20style=\x22font-size:11px;\x22>{{\x20p.constraints\x20||\x20\x27—\x27\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-cell\x20sts-dim\x22>{{\x20p.description\x20||\x20\x27—\x27\x20}}</div>\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\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.35;\x20margin-top:6px;\x20user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20propertyEntries.length\x20}}\x20propert{{\x20propertyEntries.length\x20===\x201\x20?\x20\x27y\x27\x20:\x20\x27ies\x27\x20}}{{\x20additionalAllowed\x20?\x20\x27\x20·\x20additional\x20properties\x20allowed\x27\x20:\x20\x27\x20·\x20no\x20additional\x20properties\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22propertyEntries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x20padding:4px\x200;\x22>Schema\x20has\x20no\x20top-level\x20properties\x20defined.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Collapsed\x20JSON\x20preview\x20-->\x0a\x20\x20\x20\x20\x20\x20<details\x20style=\x22margin-top:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<summary\x20style=\x22font-size:11px;\x20opacity:.45;\x20cursor:pointer;\x20user-select:none;\x22>Raw\x20JSON\x20Schema</summary>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20class=\x22sts-json-preview\x22>{{\x20jsonPreview\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20</details>\x0a\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Schema\x20Violations\x20panel\x20───────────────\x20-->\x0a\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22manage-section-header\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Schema\x20Violations\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22violations.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22sts-viol-badge\x22>{{\x20violations.length\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\x20\x20<button\x20@click=\x22loadViolations()\x22\x20:disabled=\x22violationsBusy\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20opacity:.75;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22refresh-cw\x22></ok-icon>Refresh\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22violationsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:13px;\x22>Loading\x20violations…</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22violationsError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x20padding:8px\x2010px;\x20border-radius:8px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-danger)\x204%,\x20transparent);\x22>{{\x20violationsError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!violationsBusy\x20&&\x20!violationsError\x20&&\x20violations.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x22>No\x20violations\x20—\x20all\x20documents\x20conform\x20to\x20the\x20schema.</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22violations.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22>Key</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22>Errors</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22>When</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22></div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22violations\x22\x20let:item=\x22v\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x20sts-viol-key\x22\x20@click=\x22toggleViolation(v.key)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x20color:var(--okdb-json-key);\x22>{{\x20v.key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x22\x20@click=\x22toggleViolation(v.key)\x22\x20style=\x22font-size:12px;\x20opacity:.65;\x22>{{\x20errorCount(v)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x22\x20@click=\x22toggleViolation(v.key)\x22\x20style=\x22font-size:11px;\x20opacity:.45;\x22>{{\x20relTime(v.timestamp)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x22\x20style=\x22justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22$attr.onViewKey\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\x20\x20\x20\x20@click:stop=\x22viewDocument(v.key)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22btn-icon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20opacity:.75;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Switch\x20to\x20data\x20tab\x20for\x20this\x20document\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>View\x20→</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22expandedViolation\x20===\x20v.key\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-expanded\x22\x20style=\x22grid-column:1/-1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22(v.errors\x20??\x20[])\x22\x20let:item=\x22err\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-err-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22sts-viol-path\x22>{{\x20err.path\x20||\x20\x27/\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.85;\x20flex:1;\x20min-width:0;\x22>{{\x20err.message\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22err.expected\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x20white-space:nowrap;\x22>expected:\x20<code\x20style=\x22font-size:11px;\x22>{{\x20err.expected\x20}}</code></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22err.actual\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x20white-space:nowrap;\x22>got:\x20<code\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x22>{{\x20err.actual\x20}}</code></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\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\x20\x20<if\x20:=\x22!(v.errors\x20??\x20[]).length\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x20padding:4px\x200;\x22>No\x20error\x20details\x20stored.</div>\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Ref\x20Violations\x20panel\x20(foreign\x20key)\x20───────────────\x20-->\x0a\x20\x20<if\x20:=\x22hasRefs\x20||\x20refViolations.length\x20>\x200\x22>\x0a\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22manage-section-header\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Ref\x20Violations\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22refViolations.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22sts-ref-badge\x22>{{\x20refViolations.length\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\x20\x20<button\x20@click=\x22loadRefViolations()\x22\x20:disabled=\x22refViolationsBusy\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20opacity:.75;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22refresh-cw\x22></ok-icon>Refresh\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22refViolationsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:13px;\x22>Loading\x20ref\x20violations…</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22refViolationsError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x20padding:8px\x2010px;\x20border-radius:8px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-danger)\x204%,\x20transparent);\x22>{{\x20refViolationsError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!refViolationsBusy\x20&&\x20!refViolationsError\x20&&\x20refViolations.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x22>No\x20ref\x20violations\x20—\x20all\x20foreign\x20key\x20references\x20are\x20valid.</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22refViolations.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-ref-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22>Source</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22>Field</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22>Target</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22>When</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-hd\x22></div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22refViolations\x22\x20let:item=\x22rv\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x20sts-viol-key\x22\x20@click=\x22toggleRefViolation(rv.sourceKey\x20+\x20\x27@\x27\x20+\x20rv.fieldPath)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x20color:var(--okdb-json-key);\x22>{{\x20rv.sourceKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x22\x20@click=\x22toggleRefViolation(rv.sourceKey\x20+\x20\x27@\x27\x20+\x20rv.fieldPath)\x22\x20style=\x22font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code\x20style=\x22font-size:11px;\x20color:var(--okdb-purple);\x22>{{\x20rv.fieldPath\x20}}</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x22\x20@click=\x22toggleRefViolation(rv.sourceKey\x20+\x20\x27@\x27\x20+\x20rv.fieldPath)\x22\x20style=\x22font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.5;\x22>{{\x20rv.targetType\x20}}</span><span\x20style=\x22color:var(--okdb-danger);\x22>@{{\x20rv.targetKey\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x22\x20@click=\x22toggleRefViolation(rv.sourceKey\x20+\x20\x27@\x27\x20+\x20rv.fieldPath)\x22\x20style=\x22font-size:11px;\x20opacity:.45;\x22>{{\x20relTime(rv.timestamp\x20||\x20rv.detectedAt)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-cell\x22\x20style=\x22justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22$attr.onViewKey\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\x20\x20\x20\x20@click:stop=\x22viewDocument(rv.sourceKey)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22btn-icon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20opacity:.75;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22View\x20the\x20document\x20with\x20the\x20dangling\x20ref\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>View\x20→</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22expandedRefViolation\x20===\x20(rv.sourceKey\x20+\x20\x27@\x27\x20+\x20rv.fieldPath)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-expanded\x22\x20style=\x22grid-column:1/-1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22sts-viol-err-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22sts-viol-path\x22>{{\x20rv.fieldPath\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.85;\x20flex:1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20References\x20<code\x20style=\x22font-size:12px;\x22>{{\x20rv.targetType\x20}}@{{\x20rv.targetKey\x20}}</code>\x20which\x20does\x20not\x20exist\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a</div>\x0a','stores','multipleOf','refViolationsBusy','Failed\x20to\x20load\x20violations','format','function','3492155XFcvHD','6QlYIaI','len≤','maxItems','violationsError','items≤','\x0a\x20\x20…','status','entries','length','violationsBusy','3558296IAuPmV','expandedRefViolation','violationCount','data','all','10gIfqxq','minLength','errors','loadViolations','4863932MukVpS','onDelete','_notifyViolationCount','schemaError','uniqueItems','open','catch','schemaLoaded','shared','required','expandedViolation','794GwTyso','schema','onViewKey','round','type-schema-tab','/schema','enum(','loadRefViolations','items','map','some','json','loadSchema','\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-grid\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20grid;\x0a\x20\x20\x20\x20\x20\x20\x20\x20grid-template-columns:\x20minmax(80px,\x201.5fr)\x20minmax(60px,\x201fr)\x2040px\x20minmax(80px,\x201.5fr)\x202fr;\x0a\x20\x20\x20\x20\x20\x20\x20\x20gap:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-hd\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20opacity:\x20.4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x200\x2012px\x206px\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-weight:\x20normal;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-cell\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x206px\x2012px\x206px\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2013px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-dim\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20opacity:\x20.5;\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2012px;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-json-preview\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20margin-top:\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x2010px\x2012px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20background:\x20var(--okdb-app-bg-deep);\x0a\x20\x20\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20var(--okdb-app-surface-2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x206px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20line-height:\x201.6;\x0a\x20\x20\x20\x20\x20\x20\x20\x20overflow:\x20auto;\x0a\x20\x20\x20\x20\x20\x20\x20\x20max-height:\x20280px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20white-space:\x20pre-wrap;\x0a\x20\x20\x20\x20\x20\x20\x20\x20word-break:\x20break-word;\x0a\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-app-fg-muted);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20/*\x20──\x20Violations\x20sub-panel\x20──\x20*/\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-badge\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20margin-left:\x206px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2010px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x202px\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x20999px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);\x0a\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-danger);\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-weight:\x20600;\x0a\x20\x20\x20\x20\x20\x20\x20\x20text-transform:\x20none;\x0a\x20\x20\x20\x20\x20\x20\x20\x20letter-spacing:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-table\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20grid;\x0a\x20\x20\x20\x20\x20\x20\x20\x20grid-template-columns:\x20minmax(120px,\x202fr)\x2060px\x2090px\x20auto;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-hd\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20opacity:\x20.4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x200\x2012px\x206px\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-cell\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x207px\x2012px\x207px\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20overflow:\x20hidden;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-cell:hover\x20{\x20background:\x20#ffffff07;\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-key\x20{\x20overflow:\x20hidden;\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-key\x20span\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20overflow:\x20hidden;\x0a\x20\x20\x20\x20\x20\x20\x20\x20text-overflow:\x20ellipsis;\x0a\x20\x20\x20\x20\x20\x20\x20\x20white-space:\x20nowrap;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-expanded\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x2010px\x2012px\x2012px\x2014px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20background:\x20var(--okdb-app-bg-deep);\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20flex-direction:\x20column;\x0a\x20\x20\x20\x20\x20\x20\x20\x20gap:\x204px;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-err-row\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20gap:\x2010px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20align-items:\x20baseline;\x0a\x20\x20\x20\x20\x20\x20\x20\x20flex-wrap:\x20wrap;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x204px\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-surface-2);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-err-row:last-child\x20{\x20border-bottom:\x20none;\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-viol-path\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-danger);\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-family:\x20monospace;\x0a\x20\x20\x20\x20\x20\x20\x20\x20white-space:\x20nowrap;\x0a\x20\x20\x20\x20\x20\x20\x20\x20flex-shrink:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20/*\x20──\x20Ref\x20violations\x20sub-panel\x20──\x20*/\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-ref-badge\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20margin-left:\x206px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2010px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x202px\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x20999px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-purple)\x2033%,\x20transparent);\x0a\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-purple);\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-weight:\x20600;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-ref-table\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20grid;\x0a\x20\x20\x20\x20\x20\x20\x20\x20grid-template-columns:\x20minmax(100px,\x201.5fr)\x20minmax(80px,\x201fr)\x20minmax(120px,\x202fr)\x2080px\x20auto;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-schema-tab\x20.sts-ref-hint\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-purple);\x0a\x20\x20\x20\x20\x20\x20\x20\x20opacity:\x20.85;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20','type','items:\x20','$ok','minItems'];_0x39b0=function(){return _0x39f016;};return _0x39b0();}(function(_0x184fef,_0x2985ce){const _0x845c04=_0x3b62,_0x240ed3=_0x184fef();while(!![]){try{const _0x5dd80a=parseInt(_0x845c04(0x222))/0x1*(-parseInt(_0x845c04(0x1fa))/0x2)+-parseInt(_0x845c04(0x236))/0x3+parseInt(_0x845c04(0x217))/0x4+-parseInt(_0x845c04(0x203))/0x5*(parseInt(_0x845c04(0x204))/0x6)+parseInt(_0x845c04(0x20e))/0x7+-parseInt(_0x845c04(0x240))/0x8*(-parseInt(_0x845c04(0x1f4))/0x9)+-parseInt(_0x845c04(0x213))/0xa*(-parseInt(_0x845c04(0x23c))/0xb);if(_0x5dd80a===_0x2985ce)break;else _0x240ed3['push'](_0x240ed3['shift']());}catch(_0x55db94){_0x240ed3['push'](_0x240ed3['shift']());}}}(_0x39b0,0xc609e));import _0x5f46c8 from'@toolkit/elements/ok-icon.ok.js';import _0x5774b9 from'../modals/schema-edit-modal.ok.js';export default{'tag':_0xce419c(0x226),'dependencies':[_0x5f46c8,_0x5774b9],'attr':{'type':{},'onViewKey':{},'onSchemaChanged':{},'onViolationCountChanged':{}},'context':_0x5879ea=>({'schema':null,'schemaBusy':!0x1,'schemaError':null,'schemaLoaded':!0x1,'violations':[],'violationsBusy':!0x1,'violationsError':null,'expandedViolation':null,'refViolations':[],'refViolationsBusy':!0x1,'refViolationsError':null,'expandedRefViolation':null,get 'type'(){const _0x447d8c=_0xce419c;return _0x5879ea[_0x447d8c(0x1f0)]['type'];},get 'envApiBase'(){const _0x51ea4c=_0xce419c;return _0x5879ea[_0x51ea4c(0x232)][_0x51ea4c(0x1fd)]['okdb'][_0x51ea4c(0x1f2)];},get 'hasSchema'(){const _0x3281dd=_0xce419c;return!!this['schema']?.[_0x3281dd(0x245)];},get 'enforceMode'(){return this['schema']?.['enforce']??!0x1;},get 'definition'(){const _0x41ae82=_0xce419c;return this[_0x41ae82(0x223)]?.[_0x41ae82(0x245)]??null;},get 'violationCount'(){const _0x5e9fb3=_0xce419c;return this[_0x5e9fb3(0x1f5)][_0x5e9fb3(0x20c)]+this[_0x5e9fb3(0x241)][_0x5e9fb3(0x20c)];},get 'hasRefs'(){const _0x72fcf0=_0xce419c;return this[_0x72fcf0(0x1f9)][_0x72fcf0(0x22c)](_0x559836=>_0x559836['hasRef']);},get 'propertyEntries'(){const _0x66188a=_0xce419c,_0x384b00=this[_0x66188a(0x245)];if(!_0x384b00?.['properties'])return[];const _0x313f89=new Set(_0x384b00[_0x66188a(0x220)]||[]);return Object[_0x66188a(0x20b)](_0x384b00[_0x66188a(0x248)])[_0x66188a(0x22b)](([_0x19d1b3,_0x1490fc])=>{const _0x4f6dc3=_0x66188a,_0x4c0c8f=Array['isArray'](_0x1490fc[_0x4f6dc3(0x230)])?_0x1490fc[_0x4f6dc3(0x230)]['join'](_0x4f6dc3(0x239)):_0x1490fc[_0x4f6dc3(0x230)]||'—',_0x49e622=[];_0x1490fc[_0x4f6dc3(0x201)]&&_0x49e622[_0x4f6dc3(0x23f)](_0x1490fc[_0x4f6dc3(0x201)]),_0x1490fc[_0x4f6dc3(0x243)]&&_0x49e622['push'](_0x4f6dc3(0x228)+_0x1490fc[_0x4f6dc3(0x243)][_0x4f6dc3(0x20c)]+')'),void 0x0!==_0x1490fc['const']&&_0x49e622[_0x4f6dc3(0x23f)]('const'),void 0x0!==_0x1490fc['minimum']&&_0x49e622[_0x4f6dc3(0x23f)]('≥'+_0x1490fc[_0x4f6dc3(0x234)]),void 0x0!==_0x1490fc['maximum']&&_0x49e622[_0x4f6dc3(0x23f)]('≤'+_0x1490fc['maximum']),void 0x0!==_0x1490fc[_0x4f6dc3(0x24b)]&&_0x49e622['push']('>'+_0x1490fc[_0x4f6dc3(0x24b)]),void 0x0!==_0x1490fc[_0x4f6dc3(0x23a)]&&_0x49e622[_0x4f6dc3(0x23f)]('<'+_0x1490fc[_0x4f6dc3(0x23a)]),void 0x0!==_0x1490fc[_0x4f6dc3(0x1fe)]&&_0x49e622['push']('×'+_0x1490fc[_0x4f6dc3(0x1fe)]),void 0x0!==_0x1490fc[_0x4f6dc3(0x214)]&&_0x49e622[_0x4f6dc3(0x23f)]('len≥'+_0x1490fc[_0x4f6dc3(0x214)]),void 0x0!==_0x1490fc['maxLength']&&_0x49e622[_0x4f6dc3(0x23f)](_0x4f6dc3(0x205)+_0x1490fc['maxLength']),_0x1490fc['pattern']&&_0x49e622['push']('pattern'),void 0x0!==_0x1490fc[_0x4f6dc3(0x233)]&&_0x49e622[_0x4f6dc3(0x23f)](_0x4f6dc3(0x24e)+_0x1490fc[_0x4f6dc3(0x233)]),void 0x0!==_0x1490fc[_0x4f6dc3(0x206)]&&_0x49e622[_0x4f6dc3(0x23f)](_0x4f6dc3(0x208)+_0x1490fc[_0x4f6dc3(0x206)]),_0x1490fc[_0x4f6dc3(0x21b)]&&_0x49e622[_0x4f6dc3(0x23f)]('unique'),_0x1490fc[_0x4f6dc3(0x248)]&&_0x49e622['push'](Object['keys'](_0x1490fc[_0x4f6dc3(0x248)])[_0x4f6dc3(0x20c)]+_0x4f6dc3(0x1ed)),_0x1490fc[_0x4f6dc3(0x22a)]&&_0x49e622['push'](_0x4f6dc3(0x231)+(_0x1490fc['items']['type']||_0x4f6dc3(0x237)));const _0x509218=_0x1490fc['ref'];if(_0x509218?.[_0x4f6dc3(0x230)]){const _0x19e59c=_0x509218[_0x4f6dc3(0x218)]||_0x4f6dc3(0x24a);_0x49e622[_0x4f6dc3(0x23f)](_0x4f6dc3(0x247)+_0x509218[_0x4f6dc3(0x230)]+'\x20('+_0x19e59c+')');}return{'name':_0x19d1b3,'type':_0x4c0c8f,'required':_0x313f89[_0x4f6dc3(0x1f7)](_0x19d1b3),'description':_0x1490fc[_0x4f6dc3(0x242)]||'','constraints':_0x49e622['join'](',\x20'),'hasRef':!!_0x509218?.[_0x4f6dc3(0x230)],'refTarget':_0x509218?.[_0x4f6dc3(0x230)]||null};});},get 'additionalAllowed'(){const _0x11a611=_0xce419c;return!0x1!==this[_0x11a611(0x245)]?.[_0x11a611(0x1f3)];},get 'jsonPreview'(){const _0x258289=_0xce419c;if(!this[_0x258289(0x245)])return'';const _0xd00f2e=JSON[_0x258289(0x249)](this[_0x258289(0x245)],null,0x2),_0x3326bb=_0xd00f2e[_0x258289(0x1f1)]('\x0a');return _0x3326bb[_0x258289(0x20c)]<=0x14?_0xd00f2e:_0x3326bb['slice'](0x0,0x14)[_0x258289(0x1ec)]('\x0a')+_0x258289(0x209);},async 'loadSchema'(){const _0x50359b=_0xce419c;if(this[_0x50359b(0x230)]){this['schemaBusy']=!0x0,this[_0x50359b(0x21a)]=null;try{const _0x4ccc4d=await fetch(this['envApiBase']+_0x50359b(0x238)+encodeURIComponent(this['type'])+_0x50359b(0x227));if(0x194===_0x4ccc4d[_0x50359b(0x20a)])this[_0x50359b(0x223)]=null;else{if(!_0x4ccc4d['ok']){const _0x9494fc=await _0x4ccc4d[_0x50359b(0x22d)]()[_0x50359b(0x21d)](()=>({}));throw new Error(_0x9494fc?.[_0x50359b(0x1fb)]?.[_0x50359b(0x1ee)]||_0x4ccc4d[_0x50359b(0x24d)]);}{const _0x5be5a0=await _0x4ccc4d['json']();this[_0x50359b(0x223)]=_0x5be5a0[_0x50359b(0x211)]??_0x5be5a0[_0x50359b(0x244)]??_0x5be5a0;}}this[_0x50359b(0x21e)]=!0x0;}catch(_0x13b74a){this[_0x50359b(0x21a)]=_0x13b74a['message']||'Failed\x20to\x20load\x20schema';}finally{this['schemaBusy']=!0x1;}}},async 'loadViolations'(){const _0xc27a04=_0xce419c;if(this[_0xc27a04(0x230)]){this['violationsBusy']=!0x0,this['violationsError']=null;try{const _0x4e5f59=await fetch(this[_0xc27a04(0x24c)]+'/violations/'+encodeURIComponent(this[_0xc27a04(0x230)]));if(0x194===_0x4e5f59[_0xc27a04(0x20a)])return void(this[_0xc27a04(0x1f5)]=[]);if(!_0x4e5f59['ok']){const _0x37a65a=await _0x4e5f59[_0xc27a04(0x22d)]()['catch'](()=>({}));throw new Error(_0x37a65a?.['error']?.[_0xc27a04(0x1ee)]||_0x4e5f59[_0xc27a04(0x24d)]);}const _0x4b1eaf=await _0x4e5f59['json']();this[_0xc27a04(0x1f5)]=_0x4b1eaf?.['data']?.[_0xc27a04(0x1f5)]??_0x4b1eaf?.[_0xc27a04(0x244)]?.[_0xc27a04(0x1f5)]??[];}catch(_0x3bbc34){this[_0xc27a04(0x207)]=_0x3bbc34[_0xc27a04(0x1ee)]||_0xc27a04(0x200),this['violations']=[];}finally{this[_0xc27a04(0x20d)]=!0x1,this[_0xc27a04(0x219)]();}}},async 'loadRefViolations'(){const _0x29f031=_0xce419c;if(this[_0x29f031(0x230)]){this['refViolationsBusy']=!0x0,this[_0x29f031(0x23e)]=null;try{const _0x34ec51=await fetch(this[_0x29f031(0x24c)]+'/ref-violations/'+encodeURIComponent(this['type']));if(0x194===_0x34ec51['status'])return void(this[_0x29f031(0x241)]=[]);if(!_0x34ec51['ok']){const _0x320a21=await _0x34ec51[_0x29f031(0x22d)]()[_0x29f031(0x21d)](()=>({}));throw new Error(_0x320a21?.[_0x29f031(0x1fb)]?.[_0x29f031(0x1ee)]||_0x34ec51[_0x29f031(0x24d)]);}const _0xc59455=await _0x34ec51['json']();this[_0x29f031(0x241)]=_0xc59455?.[_0x29f031(0x211)]?.[_0x29f031(0x1f5)]??_0xc59455?.[_0x29f031(0x244)]?.['violations']??[];}catch(_0x33f66c){this[_0x29f031(0x23e)]=_0x33f66c[_0x29f031(0x1ee)]||'Failed\x20to\x20load\x20ref\x20violations',this[_0x29f031(0x241)]=[];}finally{this[_0x29f031(0x1ff)]=!0x1,this[_0x29f031(0x219)]();}}},'_notifyViolationCount'(){const _0x387609=_0xce419c,_0x24db52=_0x5879ea[_0x387609(0x1f0)]['onViolationCountChanged'];_0x387609(0x202)==typeof _0x24db52&&_0x24db52(this[_0x387609(0x210)]);},'toggleViolation'(_0x5adc99){const _0x5b5fb6=_0xce419c;this[_0x5b5fb6(0x221)]=this[_0x5b5fb6(0x221)]===_0x5adc99?null:_0x5adc99;},'toggleRefViolation'(_0x1fcec0){const _0x5e7a53=_0xce419c;this[_0x5e7a53(0x20f)]=this['expandedRefViolation']===_0x1fcec0?null:_0x1fcec0;},'viewDocument'(_0x1b4f18){const _0x5c3d2e=_0xce419c,_0x1c6466=_0x5879ea['$attr'][_0x5c3d2e(0x224)];_0x5c3d2e(0x202)==typeof _0x1c6466&&_0x1c6466(_0x1b4f18);},'relTime'(_0x34ad8b){const _0x5c5759=_0xce419c;if(!_0x34ad8b)return'—';const _0x1eebbf=Date[_0x5c5759(0x246)]()-_0x34ad8b;return _0x1eebbf<0x1388?_0x5c5759(0x1f6):_0x1eebbf<0xea60?Math[_0x5c5759(0x225)](_0x1eebbf/0x3e8)+'s\x20ago':_0x1eebbf<0x36ee80?Math[_0x5c5759(0x225)](_0x1eebbf/0xea60)+'m\x20ago':_0x1eebbf<0x5265c00?Math[_0x5c5759(0x225)](_0x1eebbf/0x36ee80)+'h\x20ago':new Date(_0x34ad8b)['toLocaleDateString']();},'errorCount':_0x5c1b3d=>(_0x5c1b3d[_0xce419c(0x215)]??[])['length']||(_0x5c1b3d[_0xce419c(0x1f8)]??0x0),async 'openEditModal'(){const _0x294ab1=_0xce419c;await _0x5879ea['$ok'][_0x294ab1(0x21f)][_0x294ab1(0x1ef)][_0x294ab1(0x21c)]({'owner':_0x5879ea,'title':_0x294ab1(0x235)+this[_0x294ab1(0x230)],'canDrag':!0x0,'content':_0x294ab1(0x23d),'context':_0x431fa1=>({'modal':_0x431fa1,'type':this[_0x294ab1(0x230)],'schema':this[_0x294ab1(0x223)],'envApiBase':this[_0x294ab1(0x24c)],'onDone':async()=>{const _0x471a76=_0x294ab1;await Promise['all']([this[_0x471a76(0x22e)](),this[_0x471a76(0x216)](),this[_0x471a76(0x229)]()]);const _0x4fea4f=_0x5879ea[_0x471a76(0x1f0)]['onSchemaChanged'];_0x471a76(0x202)==typeof _0x4fea4f&&_0x4fea4f();}})});}}),async 'init'(_0x3f4824){const _0x2123bd=_0xce419c;_0x3f4824[_0x2123bd(0x23b)](()=>this['type'],async()=>{const _0x5b44b2=_0x2123bd;this['schemaLoaded']=!0x1,this[_0x5b44b2(0x223)]=null,this[_0x5b44b2(0x1f5)]=[],this['expandedViolation']=null,this[_0x5b44b2(0x241)]=[],this[_0x5b44b2(0x20f)]=null,this[_0x5b44b2(0x230)]&&await Promise[_0x5b44b2(0x212)]([this['loadSchema'](),this['loadViolations'](),this['loadRefViolations']()]);}),this[_0x2123bd(0x230)]&&await Promise[_0x2123bd(0x212)]([this[_0x2123bd(0x22e)](),this['loadViolations'](),this[_0x2123bd(0x229)]()]);},'template':_0xce419c(0x1fc),'style':_0xce419c(0x22f)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x1b645b=_0x33ca;(function(_0x5f010d,_0x300df7){const _0x2c3d4b=_0x33ca,_0x39965f=_0x5f010d();while(!![]){try{const _0x510049=-parseInt(_0x2c3d4b(0x206))/0x1+parseInt(_0x2c3d4b(0x271))/0x2+-parseInt(_0x2c3d4b(0x1b5))/0x3+parseInt(_0x2c3d4b(0x290))/0x4+parseInt(_0x2c3d4b(0x2a5))/0x5+-parseInt(_0x2c3d4b(0x26d))/0x6+parseInt(_0x2c3d4b(0x201))/0x7*(parseInt(_0x2c3d4b(0x1b7))/0x8);if(_0x510049===_0x300df7)break;else _0x39965f['push'](_0x39965f['shift']());}catch(_0x62f3d1){_0x39965f['push'](_0x39965f['shift']());}}}(_0x11f9,0xc7608));import _0x171b5f from'@toolkit/elements/ok-icon.ok.js';import _0x46a359 from'@toolkit/elements/ok-table.ok.js';import _0x25007f from'@toolkit/core/ok-overlay.ok.js';import _0x46bb9a from'../../../components/geo-map.ok.js';import _0x393513 from'../../../components/ok-json-input.ok.js';import _0x946eea from'../../../view-models/type-query-vm.js';import{buildSiftSchema as _0xf653e}from'../../../util/sift-schema.js';import _0x3ac0ed from'../modals/add-item-modal.ok.js';import _0x5501e3 from'../modals/create-fts-modal.ok.js';import _0x1ea0d1 from'../modals/create-index-modal.ok.js';import _0x3a1f30 from'../modals/create-pipeline-modal.ok.js';import _0x3198ff from'./edit-row.ok.js';import _0x266dde from'../../../stores/events-store.js';function _0x33ca(_0x4c8639,_0x4f0767){_0x4c8639=_0x4c8639-0x1ac;const _0x11f931=_0x11f9();let _0x33ca75=_0x11f931[_0x4c8639];return _0x33ca75;}function _0x11f9(){const _0x3fa6fd=['INDEX_HAS_CONSUMERS','keys','engines','__create_pipeline__','error','indexStatuses','Geo\x20query\x20error','searchMode','POST','API','Rebuilding\x20index\x20\x22','$ok','isArray','defaultTTLPreset','typeFields','fts:registered','trim','loadTypeEnginesCount','ttlStatsLoading','ftsScoreMap','find','hasNext','type','dropped','vector-search','Error\x20fetching\x20indexes','index:drop','1610880xPDtmD','index:registered','map','geoConfig','773534qwaweK','openTypePipelines','$watch','\x20km','toast','ready','geoHighlightedKey','flatMap','Default\x20TTL\x20cleared','pipeline','DELETE','action','total','indexer','index:ready','Drop\x20type\x20error','_geoSelSource','entries','geoDistanceMap','<create-pipeline-modal\x20:modal=\x22modal\x22\x20:type=\x22type\x22\x20:env=\x22envName\x22\x20:on-done=\x22onDone\x22\x20/>','scalar','geoField','confirm','displayRows','expand','numTerms','overview','json','lat','config','loadViolations','3401812KPLWOb','value','_search','embeddings:pipeline:ready','unshift','geo','typeEngineCount','Rebuild\x20index\x20error','status','apiBase','push','Remove\x20failed','select','geoViewMode','fts:drop','Drop\x20FTS\x20error','stringify','queryMode','Rebuild\x20failed','engine:uninstalled','/deep-properties','2312000ZQVzWg','source_env','stores','selectedIndexStart','array','geoLat','ftsList','distance','catch','/env/','object','target','\x22?\x20This\x20will\x20re-scan\x20all\x20records.','Failed\x20to\x20clear\x20default\x20TTL','clearSelection','join','result','$attr','detail','open','ftsPrefix','maxScore','Rebuild\x20FTS\x20error','lon','$el','name','Sweep\x20done:\x20','/recompute-fields','querySelector','loadFtsIndexes','Failed\x20to\x20set\x20default\x20TTL','Create\x20FTS\x20Index','removeIndex','changelog','load','selectedIndex','round','2072106ppxgGY','info','140432fdHlgm','currentRoutePipeline','items','all','defineProperty','has','add','ttlSweepBusy','/ttl/sweep','key','dispatchEvent','stopped','\x22?\x20This\x20will\x20re-index\x20all\x20records.','/engines','score','/type/','a\x20consumer','geoIndexes','split','usedBy','running','statusText','Remove\x20index\x20\x22','selectedVectorEngineMeta','\x22?\x20This\x20cannot\x20be\x20undone.','index','Index\x20rebuild\x20complete','length','/reset','title','engine:started','/ttl/default','selectedEnv','selectedVectorEngine','query','openEnginesCreatePipeline','create','/pipelines','modal','Rebuild\x20FTS\x20index\x20\x22','unique','recomputeFields\x20error','splice','some','geoSortAsc','vectorScoreMap','__drop_fts__','sizeBytes','Item\x20updated','displayVectorName','$router','geoLon','findIndex','\x20expired\x20item(s)\x20removed','null','floor','rowValueOf','<create-index-modal\x20:modal=\x22modal\x22\x20:type=\x22type\x22\x20:deep-paths=\x22deepPaths\x22\x20:geo-fields=\x22geoFields\x22\x20:on-done=\x22onDone\x22\x20/>','includes','defaultTTLBusy','envApiBase','violations','types','Fields\x20recomputed','slice','/fts','geoRadius','Add\x20item','resetPaging','selectedPrefix','loadDefaultTTL','clearExpanded','ftsText','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:0;\x20height:100%;\x22>\x0a\x0a\x20\x20<!--\x20Tab\x20bar\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:2px;\x20border-bottom:1px\x20solid\x20var(--okdb-app-border);\x20margin-bottom:12px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20@click=\x22setTab(\x27data\x27)\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27data\x27\x20?\x20\x27border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x20border-bottom-color:transparent;\x27\x20:\x20\x27border-color:transparent;\x20background:transparent;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;\x20border-radius:6px\x206px\x200\x200;\x20font-size:13px;\x20cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20Data\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20@click=\x22setTab(\x27changelog\x27)\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27changelog\x27\x20?\x20\x27border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x20border-bottom-color:transparent;\x27\x20:\x20\x27border-color:transparent;\x20background:transparent;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;\x20border-radius:6px\x206px\x200\x200;\x20font-size:13px;\x20cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20Changelog\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20@click=\x22setTab(\x27manage\x27)\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27manage\x27\x20?\x20\x27border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x20border-bottom-color:transparent;\x27\x20:\x20\x27border-color:transparent;\x20background:transparent;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;\x20border-radius:6px\x206px\x200\x200;\x20font-size:13px;\x20cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20Manage\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20@click=\x22setTab(\x27schema\x27)\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27schema\x27\x20?\x20(\x27border-color:\x27\x20+\x20(violationCount\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-success)\x27)\x20+\x20\x27;\x20color:\x27\x20+\x20(violationCount\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-success)\x27)\x20+\x20\x27;\x20background:\x27\x20+\x20(violationCount\x20>\x200\x20?\x20\x27#f8717111\x27\x20:\x20\x27color-mix(in\x20srgb,\x20var(--okdb-success)\x207%,\x20transparent)\x27)\x20+\x20\x27;\x20border-bottom-color:transparent;\x27)\x20:\x20(violationCount\x20>\x200\x20?\x20\x27border-color:transparent;\x20background:transparent;\x20color:var(--okdb-danger);\x27\x20:\x20\x27border-color:transparent;\x20background:transparent;\x27)\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;\x20border-radius:6px\x206px\x200\x200;\x20font-size:13px;\x20cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20Schema<if\x20:=\x22violationCount\x20>\x200\x22><span\x20style=\x22margin-left:6px;\x20font-size:10px;\x20padding:2px\x207px;\x20border-radius:999px;\x20background:color-mix(in\x20srgb,\x20var(--okdb-danger)\x2013%,\x20transparent);\x20color:var(--okdb-danger);\x20font-weight:600;\x22>{{\x20violationCount\x20}}</span></if>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20@click=\x22switchToEngines()\x22\x0a\x20\x20\x20\x20\x20\x20:style=\x22tab===\x27engines\x27\x20?\x20\x27border-color:var(--okdb-purple);\x20color:var(--okdb-purple);\x20background:color-mix(in\x20srgb,\x20var(--okdb-purple)\x207%,\x20transparent);\x20border-bottom-color:transparent;\x27\x20:\x20\x27border-color:transparent;\x20background:transparent;\x27\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22padding:6px\x2016px;\x20border-radius:6px\x206px\x200\x200;\x20font-size:13px;\x20cursor:pointer;\x22>\x0a\x20\x20\x20\x20\x20\x20Engines<if\x20:=\x22typeEngineCount\x20>\x200\x22><span\x20class=\x22mode-count\x22>{{\x20typeEngineCount\x20}}</span></if>\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Data\x20tab\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27data\x27\x22>\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:16px;\x20flex:1;\x20min-height:0;\x22>\x0a\x0a\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;\x20gap:16px;\x22>\x0a\x0a\x20\x20\x20\x20<!--\x20──\x20Left\x20column:\x20query\x20controls\x20──\x20-->\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x20min-width:0;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Row\x201:\x20filter\x20label\x20+\x20accordion\x20+\x20JSON\x20input\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Label\x20row\x20-->\x0a\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<span\x20style=\x22font-size:12px;\x20color:#6a8a9a;\x20user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20searchMode\x20===\x20\x27vector\x27\x20?\x20\x27Post-filter\x20vector\x20results\x20with\x20sift\x27\x20:\x20searchMode\x20===\x20\x27fts\x27\x20?\x20\x27Post-filter\x20FTS\x20results\x20with\x20sift\x27\x20:\x20searchMode\x20===\x20\x27geo\x27\x20?\x20\x27Post-filter\x20geo\x20results\x20with\x20sift\x27\x20:\x20\x27Filter\x20with\x20sift\x20query\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22help-toggle\x22\x20@click=\x22helpOpen\x20=\x20!helpOpen\x22\x20:class=\x22helpOpen\x20?\x20\x27help-toggle--open\x27\x20:\x20\x27\x27\x22>i</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Accordion:\x20query\x20reference\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22helpOpen\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22help-accordion\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22ht-row\x22><code>{}</code><span>match\x20all\x20records</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22ht-row\x22><code>{\x22field\x22:\x20\x22value\x22}</code><span>exact\x20match</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22ht-row\x22><code>{\x22n\x22:\x20{\x22$gt\x22:\x205,\x20\x22$lt\x22:\x2050}}</code><span>numeric\x20comparison</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22ht-row\x22><code>{\x22x\x22:\x20{\x22$in\x22:\x20[\x22a\x22,\x22b\x22]}}</code><span>set\x20membership</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22ht-row\x22><code>{\x22x\x22:\x20{\x22$exists\x22:\x20true}}</code><span>field\x20presence</span></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22ht-row\x20ht-row--note\x22>Nested\x20fields\x20use\x20dot\x20notation:\x20<code>\x22a.b\x22</code></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<ok-json-input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22query.query\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22query.query\x20=\x20$event.detail\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:schema=\x22siftSchema\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22min-width:220px;\x20min-height:60px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</ok-json-input>\x0a\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Mode\x20bar:\x20Scan\x20/\x20Index\x20/\x20FTS\x20/\x20Vector\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:4px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22seg-toggle\x22\x20style=\x22flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22searchMode\x20===\x20\x27scan\x27\x20\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22setSearchMode(\x27scan\x27)\x22>Scan</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22searchMode\x20===\x20\x27index\x27\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22setSearchMode(\x27index\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Index<if\x20:=\x22possibleIndexes.length\x20>\x200\x22><span\x20class=\x22mode-count\x22>{{\x20possibleIndexes.length\x20}}</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22searchMode\x20===\x20\x27fts\x27\x20\x20\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22setSearchMode(\x27fts\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FTS<if\x20:=\x22ftsList.length\x20>\x200\x22><span\x20class=\x22mode-count\x22>{{\x20ftsList.length\x20}}</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22searchMode\x20===\x20\x27vector\x27\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22setSearchMode(\x27vector\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Vector<if\x20:=\x22vectorEngines.length\x20>\x200\x22><span\x20class=\x22mode-count\x22>{{\x20vectorEngines.length\x20}}</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22searchMode\x20===\x20\x27geo\x27\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22setSearchMode(\x27geo\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Geo<if\x20:=\x22geoIndexes.length\x20>\x200\x22><span\x20class=\x22mode-count\x22>{{\x20geoIndexes.length\x20}}</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20──\x20Scan\x20panel\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27scan\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22query.selectedDirection\x20=\x20query.selectedDirection\x20===\x20\x27desc\x27\x20?\x20\x27asc\x27\x20:\x20\x27desc\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22min-width:78px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Toggle\x20key\x20scan\x20direction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20query.selectedDirection\x20===\x20\x27desc\x27\x20?\x20\x27↓\x20Desc\x27\x20:\x20\x27↑\x20Asc\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.4;\x20user-select:none;\x22>Full\x20key-ordered\x20scan\x20·\x20sift\x20applied\x20as\x20filter</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20──\x20Index\x20panel\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27index\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:8px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20@change=\x22selectIndex($event.target.value)\x22\x20style=\x22min-width:160px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20none\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22possibleIndexes\x22\x20let:item=\x22idx\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22idx\x22\x20:selected=\x22query.selectedIndex\x20===\x20idx\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20idx\x20}}{{\x20indexStatuses[idx]?.unique\x20?\x20\x27\x20◆\x27\x20:\x20\x27\x27\x20}}{{\x20indexStatusBadge(idx)\x20?\x20\x27\x20⚠\x20\x27\x20+\x20indexStatusBadge(idx)\x20:\x20\x27\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</option>\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\x20\x20<option\x20value=\x22__create_index__\x22\x20style=\x22color:var(--okdb-accent);\x22>+\x20Create\x20index…</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22__remove_index__\x22\x20style=\x22color:var(--okdb-danger);\x22>×\x20Remove\x20\x22{{\x20query.selectedIndex\x20}}\x22</option>\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</select>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22query.selectedDirection\x20=\x20query.selectedDirection\x20===\x20\x27desc\x27\x20?\x20\x27asc\x27\x20:\x20\x27desc\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22min-width:78px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Toggle\x20sort\x20direction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20query.selectedDirection\x20===\x20\x27desc\x27\x20?\x20\x27↓\x20Desc\x27\x20:\x20\x27↑\x20Asc\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22seg-toggle\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22query.queryMode\x20===\x20\x27prefix\x27\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22query.queryMode\x20=\x20\x27prefix\x27,\x20query.selectedIndexStart\x20=\x20undefined,\x20query.selectedIndexEnd\x20=\x20undefined\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Prefix\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22query.queryMode\x20===\x20\x27range\x27\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22query.queryMode\x20=\x20\x27range\x27,\x20query.selectedPrefix\x20=\x20undefined\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Range\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</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20──\x20Index\x20detail\x20strip\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedIndex\x20&&\x20selectedIndexInfo\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22idx-info-strip\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-info-label\x22>Fields:</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22selectedIndexInfo.fields\x22\x20let:item=\x22f\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code\x20class=\x22idx-info-field\x22>{{\x20f\x20}}</code>\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\x20\x20<if\x20:=\x22selectedIndexInfo.isUnique\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-info-badge\x20idx-info-badge--unique\x22>◆\x20unique</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:=\x22selectedIndexInfo.isGeo\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-info-badge\x20idx-info-badge--geo\x22>◎\x20geo\x20·\x20precision\x20{{\x20selectedIndexInfo.geoPrecision\x20??\x207\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:=\x22!selectedIndexInfo.isUnique\x20&&\x20!selectedIndexInfo.isGeo\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-info-badge\x20idx-info-badge--regular\x22>regular</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</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.queryMode\x20===\x20\x27prefix\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x20font-size:12px;\x22>Prefix:</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-json-input\x20mode=\x22input\x22\x20:value=\x22query.selectedPrefix\x22\x20@change=\x22query.selectedPrefix\x20=\x20$event.detail\x22\x20style=\x22width:220px;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.35;\x20font-size:11px;\x22>scalar\x20or\x20array\x20for\x20composite\x20indexes</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:=\x22query.queryMode\x20===\x20\x27range\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x20font-size:12px;\x22>Start:</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-json-input\x20mode=\x22input\x22\x20:value=\x22query.selectedIndexStart\x22\x20@change=\x22query.selectedIndexStart\x20=\x20$event.detail\x22\x20style=\x22width:180px;\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.6;\x20font-size:12px;\x22>End:</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-json-input\x20mode=\x22input\x22\x20:value=\x22query.selectedIndexEnd\x22\x20@change=\x22query.selectedIndexEnd\x20=\x20$event.detail\x22\x20style=\x22width:180px;\x22\x20/>\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</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20──\x20FTS\x20panel\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27fts\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20@change=\x22selectFtsIndex($event.target.value,\x20$event)\x22\x20style=\x22min-width:160px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20none\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22ftsList\x22\x20let:item=\x22fts\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22fts.name\x22\x20:selected=\x22query.selectedFtsIndex\x20===\x20fts.name\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20fts.name\x20}}{{\x20ftsStatusBadge(fts)\x20?\x20\x27\x20⚠\x20\x27\x20+\x20ftsStatusBadge(fts)\x20:\x20\x27\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</option>\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\x20\x20<option\x20value=\x22__create_fts__\x22\x20style=\x22color:var(--okdb-accent);\x22>+\x20Create\x20FTS\x20index…</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedFtsIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22__drop_fts__\x22\x20style=\x22color:var(--okdb-danger);\x22>×\x20Drop\x20\x22{{\x20query.selectedFtsIndex\x20}}\x22</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedFtsIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22text\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22Search…\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22query.ftsText\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22query.ftsText\x20=\x20$event.target.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;\x20min-width:140px;\x20max-width:300px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22seg-toggle\x22\x20title=\x22AND:\x20all\x20terms\x20required\x20·\x20OR:\x20any\x20term\x20matches,\x20ranked\x20by\x20hit\x20count\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22query.ftsMode\x20===\x20\x27and\x27\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22query.ftsMode\x20=\x20\x27and\x27\x22>AND</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22query.ftsMode\x20===\x20\x27or\x27\x20\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22query.ftsMode\x20=\x20\x27or\x27\x22>OR</button>\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<label\x20style=\x22font-size:12px;\x20display:flex;\x20align-items:center;\x20gap:4px;\x20cursor:pointer;\x20white-space:nowrap;\x20user-select:none;\x22\x20title=\x22Prefix:\x20\x27sta\x27\x20matches\x20\x27start\x27,\x20\x27stack\x27,\x20etc.\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x20type=\x22checkbox\x22\x20:checked=\x22query.ftsPrefix\x22\x20@change=\x22query.ftsPrefix\x20=\x20$event.target.checked\x22\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Prefix\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20──\x20Vector\x20panel\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27vector\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorEngines.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.7;\x20display:flex;\x20align-items:center;\x20gap:8px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22cpu\x22\x20style=\x22width:13px;height:13px;opacity:.5;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>No\x20vector\x20search\x20engines\x20for\x20<b>{{\x20type\x20}}</b>\x20yet.</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openEnginesCreatePipeline()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x2010px;\x20border-radius:999px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-indigo)\x2033%,\x20transparent);\x20color:var(--okdb-indigo);\x20background:color-mix(in\x20srgb,\x20var(--okdb-indigo)\x206%,\x20transparent);\x20cursor:pointer;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>⛓\x20Create\x20Pipeline…</button>\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:=\x22vectorEngines.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20@change=\x22selectVectorEngine($event.target.value,\x20$event)\x22\x20style=\x22min-width:160px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>—\x20none\x20—</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22vectorEngines\x22\x20let:item=\x22ve\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22displayVectorName(ve.name)\x22\x20:selected=\x22query.selectedVectorEngine\x20===\x20displayVectorName(ve.name)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20displayVectorName(ve.name)\x20}}{{\x20ve.isRunning\x20?\x20\x27\x27\x20:\x20\x27\x20(stopped)\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</option>\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\x20\x20<option\x20value=\x22__create_pipeline__\x22\x20style=\x22color:var(--okdb-indigo);\x22>+\x20Create\x20pipeline…</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedVectorEngine\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22text\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22Semantic\x20query…\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22query.vectorText\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input:debounce.500=\x22query.vectorText\x20=\x20$event.target.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;\x20min-width:160px;\x20max-width:340px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.55;\x20white-space:nowrap;\x20user-select:none;\x22>top</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22query.vectorLimit\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22query.vectorLimit\x20=\x20Math.max(1,\x20Math.min(200,\x20Number($event.target.value)\x20||\x2020))\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min=\x221\x22\x20max=\x22200\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:56px;\x20text-align:center;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Max\x20results\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Pipeline\x20badge\x20—\x20clickable,\x20navigates\x20to\x20local\x20Engines\x20tab\x20in\x20pipeline\x20mode\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22selectedVectorEngineMeta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22selectedVectorEngineMeta.meta\x20&&\x20selectedVectorEngineMeta.meta.pipeline\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openEnginesPipeline(selectedVectorEngineMeta.meta.pipeline)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x209px;\x20border-radius:999px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-indigo)\x2033%,\x20transparent);\x20color:var(--okdb-indigo);\x20background:color-mix(in\x20srgb,\x20var(--okdb-indigo)\x206%,\x20transparent);\x20cursor:pointer;\x20white-space:nowrap;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22\x27Open\x20the\x20type\x20pipeline\x20view\x20focused\x20on:\x20\x27\x20+\x20selectedVectorEngineMeta.meta.pipeline\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>⛓\x20{{\x20selectedVectorEngineMeta.meta.pipeline\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</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Link\x20to\x20local\x20type\x20engines\x20workspace\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openTypePipelinesForSelectedVector()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x209px;\x20border-radius:999px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-indigo)\x2020%,\x20transparent);\x20color:color-mix(in\x20srgb,\x20var(--okdb-indigo)\x2060%,\x20transparent);\x20background:transparent;\x20cursor:pointer;\x20white-space:nowrap;\x20margin-left:auto;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Open\x20the\x20type-scoped\x20engines\x20view\x20for\x20this\x20vector\x20search\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>⛓\x20Type\x20Engines\x20→</button>\x0a\x0a\x20\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</if>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20──\x20Geo\x20panel\x20──\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27geo\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22geoIndexes.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.7;\x20display:flex;\x20align-items:center;\x20gap:8px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>◎</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>No\x20geo\x20indexes\x20for\x20<b>{{\x20type\x20}}</b>\x20yet.\x20Create\x20one\x20from\x20the\x20Manage\x20tab.</span>\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:=\x22geoIndexes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x20@change=\x22geoField\x20=\x20$event.target.value\x22\x20style=\x22min-width:140px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22geoIndexes\x22\x20let:item=\x22gf\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20:value=\x22gf\x22\x20:selected=\x22geoField\x20===\x20gf\x22>{{\x20gf\x20}}</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.5;\x22>Lat</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22number\x22\x20step=\x22any\x22\x20placeholder=\x2240.7484\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22geoLat\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input:debounce.100=\x22geoLat\x20=\x20$event.target.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:110px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.5;\x22>Lon</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22number\x22\x20step=\x22any\x22\x20placeholder=\x22-73.9856\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22geoLon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input:debounce.100=\x22geoLon\x20=\x20$event.target.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:110px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.5;\x22>Radius\x20(m)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22number\x22\x20step=\x22any\x22\x20placeholder=\x22∞\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22geoRadius\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input:debounce.100=\x22geoRadius\x20=\x20$event.target.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:90px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Leave\x20empty\x20for\x20unlimited\x20radius\x20(sorted\x20by\x20distance)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22geoSortAsc\x20=\x20!geoSortAsc\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22min-width:78px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Toggle\x20sort\x20direction\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20geoSortAsc\x20?\x20\x27↑\x20Nearest\x27\x20:\x20\x27↓\x20Farthest\x27\x20}}\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</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.35;\x20user-select:none;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Results\x20sorted\x20by\x20distance\x20·\x20sift\x20filter\x20applied\x20as\x20post-filter\x20·\x20leave\x20radius\x20empty\x20for\x20no\x20cutoff\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</if>\x0a\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Geo\x20view\x20toggle\x20(only\x20in\x20geo\x20mode)\x20──\x20-->\x0a\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27geo\x27\x20&&\x20geoIndexes.length\x20>\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:4px;\x20flex-shrink:0;\x20padding:2px\x200;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22seg-toggle\x22\x20style=\x22flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22geoViewMode\x20===\x20\x27table\x27\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22geoViewMode\x20=\x20\x27table\x27\x22\x20title=\x22Table\x20only\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22table-2\x22\x20style=\x22width:13px;height:13px;vertical-align:middle;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22geoViewMode\x20===\x20\x27map\x27\x20\x20\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22geoViewMode\x20=\x20\x27map\x27\x22\x20\x20\x20title=\x22Map\x20only\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22map-pin\x22\x20style=\x22width:13px;height:13px;vertical-align:middle;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20:class=\x22geoViewMode\x20===\x20\x27split\x27\x20?\x20\x27active\x27\x20:\x20\x27\x27\x22\x20@click=\x22geoViewMode\x20=\x20\x27split\x27\x22\x20title=\x22Table\x20+\x20Map\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22columns\x22\x20style=\x22width:13px;height:13px;vertical-align:middle;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.3;\x20user-select:none;\x22>view</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20──\x20Results\x20area\x20──\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20position:relative;\x20flex:1;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20<if\x20:=\x22query.busy\x22>\x0a\x20\x20\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<!--\x20Results\x20bar:\x20timing\x20+\x20Add\x20item\x20-->\x0a\x20\x20\x20\x20<div\x20style=\x22margin-bottom:8px;\x20display:flex;\x20align-items:center;\x20gap:8px;\x20flex-shrink:0;\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.45;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20query.time\x20!=\x20null\x20?\x20query.time\x20+\x20\x27ms\x27\x20:\x20\x27\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20<b\x20style=\x22opacity:.7;\x22>{{\x20type\x20}}</b>\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-left:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openAddModal\x22\x20class=\x22btn-primary\x20btn-icon\x22\x20style=\x22font-size:12px;\x20padding:3px\x2012px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27data:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27data:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.permTooltip(\x27data:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22plus\x22></ok-icon>Add\x20item\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20Content\x20row\x20—\x20table\x20+\x20map\x20as\x20siblings,\x20shown/hidden\x20via\x20display:none\x20-->\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex:1;\x20min-height:0;\x20gap:10px;\x22>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20TABLE\x20col\x20—\x20hidden\x20only\x20in\x20pure\x20map\x20mode\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x0a\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22searchMode\x20===\x20\x27geo\x27\x20&&\x20geoViewMode\x20===\x20\x27map\x27\x20?\x20\x27display:none\x27\x20:\x20\x27flex:1;\x20min-width:0;\x20display:flex;\x20flex-direction:column;\x20min-height:0;\x27\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22hasDirectValueRows\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-table\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ref=\x22table\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:data=\x22displayRows\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20select=\x22single\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20no-scroll\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;\x20min-height:0;\x20overflow:auto;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select-change=\x22onGeoTableSelect($event)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22min-content\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22key__header\x22>key</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedFtsIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20color:var(--okdb-accent);\x20opacity:.6;\x20margin-left:6px;\x20font-weight:normal;\x22>score</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedVectorEngine\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20color:var(--okdb-indigo);\x20opacity:.6;\x20margin-left:6px;\x20font-weight:normal;\x22>sim</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27geo\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20color:var(--okdb-success);\x20opacity:.6;\x20margin-left:6px;\x20font-weight:normal;\x22>dist</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22key__cell\x22>{{\x20keyOf(row)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22directValueKindOf(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:class=\x22\x27direct-value-badge\x20direct-value-badge--\x27\x20+\x20directValueKindOf(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20directValueKindOf(row)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedFtsIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22fts-score-badge\x22>{{\x20matchOf(row)\x20??\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedVectorEngine\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22vec-score-badge\x22>{{\x20vectorScoreOf(row)\x20??\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorChunkMetaOf(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20color:var(--okdb-orange);\x20opacity:.8;\x20margin-left:4px;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20chunk\x20{{\x20vectorChunkMetaOf(row).start\x20}}–{{\x20vectorChunkMetaOf(row).end\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27geo\x27\x20&&\x20distanceOf(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22geo-dist-badge\x22>{{\x20distanceOf(row)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>value</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code\x20:title=\x22prettyValueOf(row)\x22\x20style=\x22display:block;\x20white-space:pre-wrap;\x20word-break:break-word;\x20font-size:12px;\x22>{{\x20inlineValueOf(row)\x20}}</code>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Chunk\x20info\x20panel\x20—\x20shown\x20only\x20in\x20vector\x20mode\x20for\x20chunked\x20pipeline\x20results\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedVectorEngine\x20&&\x20vectorChunkMetaOf(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:8px\x2010px\x200;\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorChunkMetaOf(row).text\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20margin-bottom:2px;\x22>Matched\x20chunk\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-orange);\x20margin-left:6px;\x22>chars\x20{{\x20vectorChunkMetaOf(row).start\x20}}–{{\x20vectorChunkMetaOf(row).end\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-size:11px;\x20max-height:140px;\x20overflow:auto;\x20white-space:pre-wrap;\x20word-break:break-word;\x20line-height:1.5;\x22>{{\x20vectorChunkMetaOf(row).text\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!vectorChunkMetaOf(row).text\x20&&\x20vectorChunkMetaOf(row).start\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20margin-bottom:2px;\x22>Matched\x20chunk\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-orange);\x20margin-left:6px;\x22>chars\x20{{\x20vectorChunkMetaOf(row).start\x20}}–{{\x20vectorChunkMetaOf(row).end\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.55;\x20margin-left:4px;\x22>(highlighted\x20in\x20document\x20below)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22height:1px;\x20background:var(--okdb-app-border);\x20margin:2px\x200;\x22></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</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<edit-row\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:row=\x22rowValueOf(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:key=\x22keyOf(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22type\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@remove=\x22onRemoveRow(keyOf(row))\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22onRowChanged($event)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</edit-row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</expanded>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</ok-table>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!hasDirectValueRows\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-table\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ref=\x22table\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:data=\x22displayRows\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20select=\x22single\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20no-scroll\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;\x20min-height:0;\x20overflow:auto;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select-change=\x22onGeoTableSelect($event)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22min-content\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22key__header\x22>key</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedFtsIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20color:var(--okdb-accent);\x20opacity:.6;\x20margin-left:6px;\x20font-weight:normal;\x22>score</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedVectorEngine\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20color:var(--okdb-indigo);\x20opacity:.6;\x20margin-left:6px;\x20font-weight:normal;\x22>sim</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27geo\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20color:var(--okdb-success);\x20opacity:.6;\x20margin-left:6px;\x20font-weight:normal;\x22>dist</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22key__cell\x22>{{\x20keyOf(row)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedFtsIndex\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22fts-score-badge\x22>{{\x20matchOf(row)\x20??\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedVectorEngine\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22vec-score-badge\x22>{{\x20vectorScoreOf(row)\x20??\x20\x27—\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorChunkMetaOf(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20color:var(--okdb-orange);\x20opacity:.8;\x20margin-left:4px;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20chunk\x20{{\x20vectorChunkMetaOf(row).start\x20}}–{{\x20vectorChunkMetaOf(row).end\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27geo\x27\x20&&\x20distanceOf(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22geo-dist-badge\x22>{{\x20distanceOf(row)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<auto\x20max=\x2210\x22\x20:show-more-content=\x22(n)\x20=>\x20\x27+\x27\x20+\x20n\x20+\x20\x27\x20cols\x27\x22\x20show-more-title=\x22Click\x20to\x20show\x20all\x20columns\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row\x20let:value>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:class=\x22[typeof\x20value,\x20value\x20===\x20null\x20?\x20\x27null\x27\x20:\x20\x27\x27]\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20value\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</auto>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20Chunk\x20info\x20panel\x20—\x20shown\x20only\x20in\x20vector\x20mode\x20for\x20chunked\x20pipeline\x20results\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22query.selectedVectorEngine\x20&&\x20vectorChunkMetaOf(row)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:8px\x2010px\x200;\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorChunkMetaOf(row).text\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20margin-bottom:2px;\x22>Matched\x20chunk\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-orange);\x20margin-left:6px;\x22>chars\x20{{\x20vectorChunkMetaOf(row).start\x20}}–{{\x20vectorChunkMetaOf(row).end\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x20padding:8px;\x20font-size:11px;\x20max-height:140px;\x20overflow:auto;\x20white-space:pre-wrap;\x20word-break:break-word;\x20line-height:1.5;\x22>{{\x20vectorChunkMetaOf(row).text\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22!vectorChunkMetaOf(row).text\x20&&\x20vectorChunkMetaOf(row).start\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20margin-bottom:2px;\x22>Matched\x20chunk\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22color:var(--okdb-orange);\x20margin-left:6px;\x22>chars\x20{{\x20vectorChunkMetaOf(row).start\x20}}–{{\x20vectorChunkMetaOf(row).end\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.55;\x20margin-left:4px;\x22>(highlighted\x20in\x20document\x20below)</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22height:1px;\x20background:var(--okdb-app-border);\x20margin:2px\x200;\x22></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</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<edit-row\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:row=\x22rowValueOf(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:key=\x22keyOf(row)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:type=\x22type\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@remove=\x22onRemoveRow(keyOf(row))\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22onRowChanged($event)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</edit-row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</expanded>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</ok-table>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22ok-pager\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22query.prevPage()\x22\x20:disabled=\x22!query.hasPrev\x20||\x20query.busy\x22>‹\x20Prev</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>{{\x20query.total\x20}}\x20result{{\x20query.total\x20===\x201\x20?\x20\x27\x27\x20:\x20\x27s\x27\x20}}\x20·\x20{{\x20query.pageSize\x20}}/page</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22query.nextPage()\x22\x20:disabled=\x22!query.hasNext\x20||\x20query.busy\x22>Next\x20›</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22searchMode\x20===\x20\x27geo\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<!--\x20MAP\x20col\x20—\x20always\x20mounted,\x20shown\x20only\x20in\x20geo\x20map/split\x20mode\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x0a\x20\x20\x20\x20\x20\x20\x20\x20style=\x22flex:1;\x20min-width:0;\x20min-height:0;\x20border-radius:8px;\x20overflow:hidden;\x20border:1px\x20solid\x20#23292e;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:style=\x22{\x20\x27display\x27:\x20(geoViewMode\x20===\x20\x27map\x27\x20||\x20geoViewMode\x20===\x20\x27split\x27)?\x20\x27block\x27\x20:\x20\x27none\x27\x20}\x22\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<geo-map\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:points=\x22geoMapPoints\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:origin-lat=\x22geoLat\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:origin-lon=\x22geoLon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:radius=\x22geoRadius\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:highlight-key=\x22geoHighlightedKey\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@move=\x22geoLat\x20=\x20String($event.detail.lat.toFixed(6)),\x20geoLon\x20=\x20String($event.detail.lon.toFixed(6))\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@select=\x22onGeoMapSelect($event)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20height:100%;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a\x0a</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Changelog\x20tab\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27changelog\x27\x22>\x0a\x20\x20\x20\x20<type-changelog\x20:type=\x22type\x22\x20style=\x22flex:1;\x20min-height:0;\x22\x20/>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Manage\x20tab\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27manage\x27\x22>\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:12px;\x20flex:1;\x20overflow:auto;\x20padding-right:4px;\x22>\x0a\x0a\x20\x20\x20\x20<!--\x20Overview\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22card\x22\x20style=\x22display:flex;\x20gap:24px;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:15px;\x20font-weight:600;\x22>{{\x20type\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x20margin-top:2px;\x22>type</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:22px;\x20font-weight:600;\x20color:var(--okdb-accent);\x22>{{\x20typeCount\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.5;\x20margin-top:2px;\x22>records</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20Fields\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>Fields</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22typeFieldEntries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x22>No\x20fields\x20tracked\x20yet\x20—\x20add\x20items\x20or\x20use\x20Recompute.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22typeFieldEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-grid\x20manage-grid--2\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Field</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Observed\x20types</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22typeFieldEntries\x22\x20let:item=\x22tf\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22><code>{{\x20tf.name\x20}}</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x20manage-cell--dim\x22>{{\x20tf.types.join(\x27,\x20\x27)\x20}}</div>\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</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20Secondary\x20Indexes\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>Secondary\x20Indexes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openCreateIndex()\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27schema:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27schema:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.permTooltip(\x27schema:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22plus\x22></ok-icon>Create\x20index\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexEntries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x22>No\x20indexes\x20yet.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22indexEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-grid\x20manage-grid--idx\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Fields</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Kind</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Ownership</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Status</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22indexEntries\x22\x20let:item=\x22ix\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22\x20style=\x22gap:4px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22ix.fields\x22\x20let:item=\x22f\x22\x20let:index=\x22fi\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<code\x20style=\x22font-size:12px;\x20color:var(--okdb-json-key);\x22>{{\x20f\x20}}</code><span\x20style=\x22opacity:.3;\x20font-size:11px;\x20margin-left:0;\x22\x20:style=\x22fi\x20<\x20ix.fields.length\x20-\x201\x20?\x20\x27\x27\x20:\x20\x27display:none\x27\x22>·</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\x20\x20<div\x20class=\x22manage-cell\x22\x20style=\x22gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22ix.isGeo\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-kind-badge\x20idx-kind-badge--geo\x22>◎\x20geo</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20opacity:.45;\x20white-space:nowrap;\x22>precision\x20{{\x20ix.geoPrecision\x20??\x207\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:=\x22ix.isUnique\x20&&\x20!ix.isGeo\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-kind-badge\x20idx-kind-badge--unique\x22>◆\x20unique</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:=\x22!ix.isGeo\x20&&\x20!ix.isUnique\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-kind-badge\x20idx-kind-badge--regular\x22>regular</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=\x22manage-cell\x22\x20style=\x22gap:3px;\x20flex-direction:column;\x20align-items:flex-start;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22ix.createdBy\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-owned-badge\x22>{{\x20ix.createdBy.kind\x20}}:{{\x20ix.createdBy.name\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<each\x20:of=\x22ix.usedBy\x22\x20let:item=\x22consumer\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22idx-consumer-badge\x22>{{\x20consumer\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\x20\x20<div\x20class=\x22manage-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:class=\x22\x27manage-status\x20manage-status--\x27\x20+\x20ix.status\x22>{{\x20ix.status\x20}}</span>\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=\x22manage-cell\x22\x20style=\x22justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22rebuildIndex(ix.name)\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:2px\x2010px;\x20opacity:.7;\x22\x20title=\x22Rebuild\x20this\x20index\x20from\x20all\x20current\x20records\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27schema:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27schema:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.can(\x27schema:write\x27)\x20?\x20\x27Rebuild\x20this\x20index\x20from\x20all\x20current\x20records\x27\x20:\x20$ok.stores.auth.permTooltip(\x27schema:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22refresh-cw\x22></ok-icon>Rebuild\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</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22\x20style=\x22justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22removeIndex(ix.name)\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:2px\x2010px;\x20color:var(--okdb-danger);\x20opacity:.8;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27schema:write\x27)\x20||\x20ix.usedBy.length\x20>\x200\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27schema:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22ix.usedBy.length\x20>\x200\x20?\x20\x27Used\x20by:\x20\x27\x20+\x20ix.usedBy.join(\x27,\x20\x27)\x20:\x20($ok.stores.auth.can(\x27schema:write\x27)\x20?\x20\x27Remove\x20this\x20index\x27\x20:\x20$ok.stores.auth.permTooltip(\x27schema:write\x27))\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22trash-2\x22></ok-icon>Remove\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</div>\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</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20FTS\x20Indexes\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>FTS\x20Indexes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openCreateFtsModal()\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27schema:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27schema:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.permTooltip(\x27schema:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22plus\x22></ok-icon>Create\x20FTS\x20index\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22ftsEntries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x22>No\x20FTS\x20indexes\x20yet.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22ftsEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-grid\x20manage-grid--fts\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Name</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Fields</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Status</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Size</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22ftsEntries\x22\x20let:item=\x22fe\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22><code>{{\x20fe.name\x20}}</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x20manage-cell--dim\x22>{{\x20fe.fields\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:class=\x22\x27manage-status\x20manage-status--\x27\x20+\x20fe.status\x22>{{\x20fe.status\x20}}</span>\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=\x22manage-cell\x20manage-cell--dim\x22\x20style=\x22font-size:11px;\x20font-family:monospace;\x22>{{\x20fmtBytes(fe.sizeBytes)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22\x20style=\x22justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22rebuildFts(fe.name)\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:2px\x2010px;\x20opacity:.7;\x22\x20title=\x22Rebuild\x20this\x20FTS\x20index\x20from\x20all\x20current\x20records\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27schema:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27schema:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.can(\x27schema:write\x27)\x20?\x20\x27Rebuild\x20this\x20FTS\x20index\x20from\x20all\x20current\x20records\x27\x20:\x20$ok.stores.auth.permTooltip(\x27schema:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22refresh-cw\x22></ok-icon>Rebuild\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</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22\x20style=\x22justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22dropFtsIndex(fe.name)\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:2px\x2010px;\x20color:var(--okdb-danger);\x20opacity:.8;\x22\x20title=\x22Drop\x20this\x20FTS\x20index\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27schema:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27schema:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.can(\x27schema:write\x27)\x20?\x20\x27Drop\x20this\x20FTS\x20index\x27\x20:\x20$ok.stores.auth.permTooltip(\x27schema:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22trash-2\x22></ok-icon>Drop\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</div>\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</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20Vector\x20Search\x20Engines\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>Vector\x20Search\x20Engines</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openEnginesWorkspace()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22btn-icon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20color:var(--okdb-indigo);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-indigo)\x2027%,\x20transparent);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Open\x20the\x20type-scoped\x20engines\x20view\x20for\x20this\x20type\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20⛓\x20Type\x20Engines\x20→\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorEntries.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20No\x20vector\x20search\x20engines\x20for\x20this\x20type\x20yet.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22openEnginesCreatePipeline()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22margin-left:6px;\x20font-size:11px;\x20padding:1px\x208px;\x20border-radius:999px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-indigo)\x2027%,\x20transparent);\x20color:var(--okdb-indigo);\x20background:color-mix(in\x20srgb,\x20var(--okdb-indigo)\x205%,\x20transparent);\x20cursor:pointer;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>Create\x20Pipeline…</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22vectorEntries.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-grid\x20manage-grid--vec\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Engine</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Status</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22>Pipeline</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-col-hd\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22vectorEntries\x22\x20let:item=\x22ve\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22><code>{{\x20ve.displayName\x20}}</code></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:class=\x22\x27manage-status\x20manage-status--\x27\x20+\x20(ve.running\x20?\x20\x27ready\x27\x20:\x20\x27creating\x27)\x22>{{\x20ve.status\x20}}</span>\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=\x22manage-cell\x20manage-cell--dim\x22>{{\x20ve.pipeline\x20??\x20\x27—\x27\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-cell\x22\x20style=\x22justify-content:flex-end;\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\x20\x20\x20\x20@click=\x22openEnginesPipeline(ve.pipeline)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22btn-icon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x2010px;\x20color:var(--okdb-indigo);\x20opacity:.85;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Open\x20this\x20type-scoped\x20pipeline\x20view\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20⛓\x20View\x20local\x20→\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</div>\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</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20TTL\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>Time-to-Live\x20(TTL)</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22(loadTTLStats(),\x20loadDefaultTTL())\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20opacity:.6;\x22\x20:disabled=\x22ttlStatsLoading\x22\x20title=\x22Refresh\x20TTL\x20stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20↻\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20Default\x20TTL\x20-->\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22margin-bottom:12px;\x20padding:10px;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20font-weight:600;\x20opacity:.7;\x20margin-bottom:8px;\x22>Default\x20TTL\x20for\x20new\x20items</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22defaultTTL\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20color:var(--okdb-success);\x20margin-bottom:8px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Currently:\x20<span\x20style=\x22font-family:monospace;\x20font-weight:600;\x22>{{\x20fmtDuration(defaultTTL)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.4;\x20font-size:11px;\x22>\x20({{\x20defaultTTL\x20}}ms)</span>\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:=\x22!defaultTTL\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x20margin-bottom:8px;\x22>No\x20default\x20—\x20items\x20don\x27t\x20expire\x20unless\x20TTL\x20is\x20set\x20explicitly.</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<select\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@change=\x22onDefaultTTLPresetChange($event.target.value)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:4px;\x20color:var(--okdb-app-fg);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22\x22>Custom…</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x2260000\x22>1\x20min</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22300000\x22>5\x20min</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22900000\x22>15\x20min</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x223600000\x22>1\x20hr</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x2221600000\x22>6\x20hr</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x2286400000\x22>24\x20hr</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x22604800000\x22>7\x20days</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<option\x20value=\x222592000000\x22>30\x20days</option>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22number\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20!value=\x22defaultTTLInput\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@input=\x22(defaultTTLInput\x20=\x20$el.value,\x20defaultTTLPreset\x20=\x20\x27\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22ms\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22width:110px;\x20font-size:11px;\x20padding:2px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border:1px\x20solid\x20var(--okdb-app-border);\x20border-radius:4px;\x20color:var(--okdb-app-fg);\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22setDefaultTTLAction()\x22\x20:disabled=\x22defaultTTLBusy\x20||\x20!defaultTTLInput\x20||\x20!$ok.stores.auth.can(\x27data:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27data:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.permTooltip(\x27data:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x2010px;\x20color:var(--okdb-success);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2033%,\x20transparent);\x22>Set</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22defaultTTL\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearDefaultTTLAction()\x22\x20:disabled=\x22defaultTTLBusy\x20||\x20!$ok.stores.auth.can(\x27data:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27data:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.permTooltip(\x27data:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x2010px;\x20color:var(--okdb-danger);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);\x22>Clear</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20<!--\x20TTL\x20stats\x20-->\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22!ttlStats\x20||\x20!ttlStats.enabled\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x22>No\x20TTL\x20entries\x20for\x20this\x20type\x20—\x20TTL\x20sub-databases\x20are\x20created\x20lazily\x20on\x20first\x20use.</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22ttlStats\x20&&\x20ttlStats.enabled\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:24px;\x20align-items:center;\x20margin-bottom:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:18px;\x20font-weight:600;\x20color:var(--okdb-success);\x22>{{\x20ttlStats.totalEntries\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x22>entries</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>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20:style=\x22\x27font-size:18px;\x20font-weight:600;\x20color:\x27\x20+\x20(ttlStats.expiredEntries\x20>\x200\x20?\x20\x27var(--okdb-danger)\x27\x20:\x20\x27var(--okdb-app-fg-muted)\x27)\x20+\x20\x27;\x27\x22>{{\x20ttlStats.expiredEntries\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x22>expired</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>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:13px;\x20font-family:monospace;\x20color:var(--okdb-app-fg);\x22>{{\x20ttlStats.nextExpiry\x20?\x20fmtDuration(ttlStats.nextExpiry\x20-\x20Date.now())\x20:\x20\x27—\x27\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x22>next\x20expiry</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\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22triggerSweep()\x22\x20:disabled=\x22ttlSweepBusy\x20||\x20!$ok.stores.auth.can(\x27data:write\x27)\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27data:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.permTooltip(\x27data:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22refresh-cw\x22></ok-icon>Sweep\x20expired\x20now\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22ttlSweepBusy\x22><span\x20style=\x22font-size:11px;\x20opacity:.5;\x22>Sweeping…</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<!--\x20Danger\x20zone\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22card\x20card--danger\x22>\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22\x20style=\x22color:var(--okdb-danger);\x22>⚠\x20Danger\x20Zone</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:8px;\x20flex-wrap:wrap;\x20align-items:center;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22recomputeFields\x22\x20class=\x22btn-icon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27data:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27data:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.can(\x27data:write\x27)\x20?\x20\x27Rescan\x20all\x20records\x20to\x20rebuild\x20the\x20field\x20schema\x27\x20:\x20$ok.stores.auth.permTooltip(\x27data:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22refresh-cw\x22></ok-icon>Recompute\x20fields\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22dropType\x22\x20class=\x22btn-danger\x20btn-icon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:disabled=\x22!$ok.stores.auth.can(\x27data:write\x27)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22{\x20\x27perm-denied\x27:\x20!$ok.stores.auth.can(\x27data:write\x27)\x20}\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22$ok.stores.auth.permTooltip(\x27data:write\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22trash-2\x22></ok-icon>Drop\x20type\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20Schema\x20tab\x20-->\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27schema\x27\x22>\x0a\x20\x20\x20\x20<type-schema-tab\x0a\x20\x20\x20\x20\x20\x20:type=\x22type\x22\x0a\x20\x20\x20\x20\x20\x20:on-view-key=\x22(key)\x20=>\x20setTab(\x27data\x27)\x22\x0a\x20\x20\x20\x20\x20\x20:on-schema-changed=\x22()\x20=>\x20loadViolations()\x22\x0a\x20\x20\x20\x20\x20\x20:on-violation-count-changed=\x22(count)\x20=>\x20onViolationCountChanged(count)\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22flex:1;\x20min-height:0;\x22\x0a\x20\x20\x20\x20/>\x0a\x20\x20</if>\x0a\x0a\x20\x20<if\x20:=\x22tab\x20===\x20\x27engines\x27\x22>\x0a\x20\x20\x20\x20<type-pipelines-tab\x20:type=\x22type\x22\x20:focusedpipeline=\x22currentRoutePipeline\x22\x20:currentmode=\x22currentRouteMode\x22\x20style=\x22flex:1;\x20min-height:0;\x22\x20/>\x0a\x20\x20</if>\x0a\x0a</div>','259bTCAkM','Cannot\x20remove:\x20index\x20is\x20used\x20by\x20','Create\x20Index','__create_fts__','loadVectorEngines','573288ksIjeR','ok-table','then','_updateGeoIndexes','vectorEngines','replace','schema','ttlStats','scan','okdb','/indexes','mode','default','selectedDirection','Drop\x20type\x20\x22','defaultTTL','/index/','table','Remove\x20index\x20error','kind','source_type','Create\x20Pipeline\x20·\x20','engine:installed','deselect','string','resolve','reverse','fmtDuration','view','_current','loadIndexes','<add-item-modal\x20:modal=\x22modal\x22\x20:type=\x22type\x22\x20:on-done=\x22onDone\x22\x20/>','details','busy','openCreatePipelineModal','engine:stopped','Rebuild\x20index\x20\x22','engine:error','code','Sweep\x20failed','fields','violationCount','shared','data','message','/violations/','success','_backStack','pipelines','meta','loadTTLStats','application/json','toFixed','values','tab','$vars','label','count','paths','isRunning','filter','selectedIndexEnd','time','size','precision','pageSize','index:reset','possibleIndexes','_unsubs','keyOf','__key','allSettled','manage','selectedFtsIndex','openCreateIndex','defaultTTLInput'];_0x11f9=function(){return _0x3fa6fd;};return _0x11f9();}import _0x22c12a from'./type-changelog.ok.js';import _0x486226 from'./type-pipelines-tab.ok.js';import _0x1b2f29 from'./type-schema-tab.ok.js';function y(_0x484c2e){const _0x5119f9=_0x33ca;return!!_0x484c2e&&_0x5119f9(0x2af)==typeof _0x484c2e&&!Array['isArray'](_0x484c2e);}function x(_0x526ce1,_0xee5cdc){const _0x3a741c=_0x33ca;y(_0x526ce1)&&_0x526ce1['__key']!==_0xee5cdc&&Object[_0x3a741c(0x1bb)](_0x526ce1,_0x3a741c(0x24c),{'value':_0xee5cdc,'enumerable':!0x1,'configurable':!0x1,'writable':!0x1});}function m(_0x311f3e,_0xbbe4d1=0x0){const _0x473de2=_0x33ca;try{return JSON[_0x473de2(0x2a0)](_0x311f3e,null,_0xbbe4d1)??String(_0x311f3e);}catch{return String(_0x311f3e);}}export default{'tag':'type-viewer','dependencies':[_0x171b5f,_0x46a359,_0x25007f,_0x3198ff,_0x393513,_0x22c12a,_0x486226,_0x1b2f29,_0x3ac0ed,_0x1ea0d1,_0x5501e3,_0x3a1f30,_0x46bb9a],'attr':{'type':{}},'context'(_0x5f7778){const _0x189c00=_0x33ca;let _0x85d531=null,_0x376ae1=null,_0x4ca5fe=null;const _0x5a1722=new _0x946eea({'type':_0x5f7778['$attr'][_0x189c00(0x268)],'apiBase':()=>_0x5f7778['$ok'][_0x189c00(0x2a7)][_0x189c00(0x20f)][_0x189c00(0x299)]});return{'tab':_0x189c00(0x231),get 'envApiBase'(){const _0x315344=_0x189c00;return _0x5f7778[_0x315344(0x25d)][_0x315344(0x2a7)]['okdb'][_0x315344(0x299)];},get 'type'(){const _0xe78f67=_0x189c00;return _0x5f7778[_0xe78f67(0x2b6)][_0xe78f67(0x268)];},'violationCount':0x0,async 'loadViolations'(){const _0x34c444=_0x189c00;if(this[_0x34c444(0x268)])try{const [_0x26cfad,_0x19e9ac]=await Promise[_0x34c444(0x1ba)]([fetch(this['envApiBase']+_0x34c444(0x233)+encodeURIComponent(this[_0x34c444(0x268)])),fetch(this[_0x34c444(0x1f3)]+'/ref-violations/'+encodeURIComponent(this[_0x34c444(0x268)]))]);let _0x93264=0x0;if(_0x26cfad['ok']){const _0x57708a=await _0x26cfad[_0x34c444(0x28c)]();_0x93264+=(_0x57708a?.[_0x34c444(0x231)]?.[_0x34c444(0x1f4)]??_0x57708a?.[_0x34c444(0x2b5)]?.[_0x34c444(0x1f4)]??[])[_0x34c444(0x1d2)];}if(_0x19e9ac['ok']){const _0x42e1d=await _0x19e9ac[_0x34c444(0x28c)]();_0x93264+=(_0x42e1d?.[_0x34c444(0x231)]?.[_0x34c444(0x1f4)]??_0x42e1d?.[_0x34c444(0x2b5)]?.[_0x34c444(0x1f4)]??[])[_0x34c444(0x1d2)];}this['violationCount']=_0x93264;}catch{}},'onViolationCountChanged'(_0x366ef6){const _0x155241=_0x189c00;this[_0x155241(0x22f)]=_0x366ef6;},'query':_0x5a1722,'possibleIndexes':[],'indexStatuses':{},'createIdxPossible':[],'createIdxTypeLoaded':null,'ftsList':[],'vectorEngines':[],'typeEngineCount':0x0,'searchMode':_0x189c00(0x20e),'geoIndexes':[],'geoField':'','geoLat':'','geoLon':'','geoRadius':'','geoSortAsc':!0x0,'geoDistanceMap':{},'mapOpen':!0x1,'geoViewMode':'table','geoHighlightedKey':null,'_geoSelSource':null,get 'geoMapPoints'(){const _0x5d0d44=_0x189c00,_0x447fa7=this[_0x5d0d44(0x286)];return _0x447fa7?(this[_0x5d0d44(0x1d9)]['items']||[])[_0x5d0d44(0x26f)](_0x1c034d=>{const _0x3d4fd3=_0x5d0d44,_0xdcfcf2=_0x1c034d[_0x3d4fd3(0x291)]||{},_0x35b2a8=((_0x3e2a0b,_0x3389d6)=>{const _0x5b2ad8=_0x3d4fd3;let _0x4b0c4b=_0x3e2a0b;for(const _0xdbcd79 of _0x3389d6[_0x5b2ad8(0x1c9)]('.')){if(null==_0x4b0c4b)return null;_0x4b0c4b=_0x4b0c4b[_0xdbcd79];}return _0x4b0c4b;})(_0xdcfcf2,_0x447fa7);return{'key':_0x1c034d[_0x3d4fd3(0x1c0)],'title':_0xdcfcf2[_0x3d4fd3(0x2be)]||_0xdcfcf2[_0x3d4fd3(0x1d4)]||_0xdcfcf2[_0x3d4fd3(0x23e)]||_0x1c034d[_0x3d4fd3(0x1c0)],'lat':_0x35b2a8?.[_0x3d4fd3(0x28d)],'lon':_0x35b2a8?.[_0x3d4fd3(0x2bc)],'distance':_0x1c034d[_0x3d4fd3(0x2ac)]};})[_0x5d0d44(0x242)](_0x1a30d8=>null!=_0x1a30d8[_0x5d0d44(0x28d)]&&null!=_0x1a30d8[_0x5d0d44(0x2bc)]):[];},'setTab'(_0x5e6dda){const _0x44a226=_0x189c00;if(this[_0x44a226(0x23c)]=_0x5e6dda,'engines'===_0x5e6dda)return;const _0x76e2d=_0x5f7778[_0x44a226(0x23d)]['$router'];if(!_0x76e2d?.[_0x44a226(0x292)]?.[_0x44a226(0x23c)])return;const _0xcc1851={..._0x76e2d[_0x44a226(0x292)]};delete _0xcc1851[_0x44a226(0x23c)],delete _0xcc1851[_0x44a226(0x211)],delete _0xcc1851[_0x44a226(0x27a)],_0x76e2d[_0x44a226(0x20b)](_0x76e2d[_0x44a226(0x21f)](_0x76e2d['_path']||'',_0xcc1851,_0x76e2d['_anchor']||''));},'switchToPipelines'(){const _0x38d32c=_0x189c00;this['openTypePipelines']({'mode':_0x38d32c(0x236),'pipeline':this[_0x38d32c(0x1b8)]||null});},get 'currentRoutePipeline'(){const _0x2964de=_0x189c00;return String(_0x5f7778[_0x2964de(0x23d)]?.['$router']?.[_0x2964de(0x292)]?.[_0x2964de(0x27a)]||'');},get 'currentRouteMode'(){const _0x36156e=_0x189c00;return'pipelines'===String(_0x5f7778['$vars']?.[_0x36156e(0x1e9)]?.[_0x36156e(0x292)]?.[_0x36156e(0x211)]||'')[_0x36156e(0x262)]()?_0x36156e(0x236):'engines';},'openTypePipelines'(_0xe9f2f9={}){const _0x2e5371=_0x189c00,_0x31a9ec=_0x5f7778[_0x2e5371(0x23d)]?.[_0x2e5371(0x1e9)];if(!_0x31a9ec?.[_0x2e5371(0x21f)]||!_0x31a9ec?.[_0x2e5371(0x29a)])return;const _0x166a13=_0x5f7778[_0x2e5371(0x25d)][_0x2e5371(0x2a7)][_0x2e5371(0x20f)][_0x2e5371(0x1d7)]||'default',_0x2aa62b={..._0x31a9ec['_search']||{},'env':_0x166a13,'type':this[_0x2e5371(0x268)],'tab':_0x2e5371(0x254),'mode':_0x2e5371(0x236)===_0xe9f2f9[_0x2e5371(0x211)]?_0x2e5371(0x236):_0x2e5371(0x254)};_0xe9f2f9[_0x2e5371(0x27a)]?_0x2aa62b[_0x2e5371(0x27a)]=_0xe9f2f9[_0x2e5371(0x27a)]:delete _0x2aa62b[_0x2e5371(0x27a)],_0x31a9ec[_0x2e5371(0x29a)](_0x31a9ec[_0x2e5371(0x21f)]('/db',_0x2aa62b));},'openEnginesWorkspace'(_0x4621c5={}){const _0x4f4699=_0x189c00;if(_0x4f4699(0x1db)===_0x4621c5[_0x4f4699(0x222)]){const _0x5154f9=_0x5f7778[_0x4f4699(0x23d)]?.[_0x4f4699(0x1e9)];if(!_0x5154f9?.[_0x4f4699(0x21f)]||!_0x5154f9?.[_0x4f4699(0x29a)])return;const _0x45913f={'env':_0x5f7778[_0x4f4699(0x25d)]['stores'][_0x4f4699(0x20f)][_0x4f4699(0x1d7)]||_0x4f4699(0x212),'view':_0x4f4699(0x1db),'sourceType':this[_0x4f4699(0x268)]};return _0x4621c5['kind']&&(_0x45913f[_0x4f4699(0x219)]=_0x4621c5[_0x4f4699(0x219)]),void _0x5154f9['push'](_0x5154f9['resolve'](_0x4f4699(0x1c4),_0x45913f));}this[_0x4f4699(0x272)]({'mode':_0x4621c5[_0x4f4699(0x211)]||_0x4f4699(0x254),'pipeline':_0x4621c5['pipeline']||null});},'openTypePipelinesForSelectedVector'(){const _0x185740=_0x189c00,_0x26d9c8=this[_0x185740(0x1ce)]?.[_0x185740(0x237)]?.[_0x185740(0x27a)]||null;this[_0x185740(0x272)]({'mode':_0x185740(0x236),'pipeline':_0x26d9c8});},'openGlobalEnginesWorkspace'(_0x28efee={}){const _0x21037c=_0x189c00,_0x2d6461=_0x5f7778[_0x21037c(0x23d)]?.['$router'];if(!_0x2d6461?.['resolve']||!_0x2d6461?.[_0x21037c(0x29a)])return;const _0x48bbd0={'env':_0x5f7778['$ok'][_0x21037c(0x2a7)]['okdb'][_0x21037c(0x1d7)]||_0x21037c(0x212),'sourceType':this[_0x21037c(0x268)]};_0x28efee['view']&&'overview'!==_0x28efee[_0x21037c(0x222)]||(_0x48bbd0[_0x21037c(0x211)]=_0x21037c(0x236)),_0x28efee[_0x21037c(0x222)]&&_0x21037c(0x28b)!==_0x28efee[_0x21037c(0x222)]&&(_0x48bbd0[_0x21037c(0x222)]=_0x28efee[_0x21037c(0x222)]),_0x28efee[_0x21037c(0x219)]&&(_0x48bbd0[_0x21037c(0x219)]=_0x28efee[_0x21037c(0x219)]),_0x28efee[_0x21037c(0x27a)]&&(_0x48bbd0[_0x21037c(0x27a)]=_0x28efee['pipeline']),_0x2d6461['push'](_0x2d6461['resolve'](_0x21037c(0x1c4),_0x48bbd0));},async 'openEnginesCreatePipeline'(){const _0xf5187b=_0x189c00;this[_0xf5187b(0x268)]&&await _0x5f7778[_0xf5187b(0x25d)][_0xf5187b(0x230)][_0xf5187b(0x1dd)][_0xf5187b(0x2b8)]({'owner':_0x5f7778,'title':_0xf5187b(0x21b)+this['type'],'canDrag':!0x0,'content':_0xf5187b(0x284),'context':_0xbf99d4=>({'modal':_0xbf99d4,'type':this[_0xf5187b(0x268)],'envName':_0x5f7778[_0xf5187b(0x25d)][_0xf5187b(0x2a7)][_0xf5187b(0x20f)][_0xf5187b(0x1d7)]||_0xf5187b(0x212),'onDone':async()=>{const _0x3bbb50=_0xf5187b;await Promise['all']([this['loadVectorEngines'](!0x0),this[_0x3bbb50(0x263)]()]);}})});},'openEnginesPipeline'(_0x50c9b1=null){const _0x30cd02=_0x189c00;this[_0x30cd02(0x272)]({'mode':_0x30cd02(0x236),'pipeline':_0x50c9b1||null});},'switchToEngines'(){const _0x3490ff=_0x189c00;this[_0x3490ff(0x272)]({'mode':_0x3490ff(0x254),'pipeline':this[_0x3490ff(0x1b8)]||null});},'setSearchMode'(_0x48512f){const _0x89dc71=_0x189c00;if(this[_0x89dc71(0x259)]=_0x48512f,this[_0x89dc71(0x1d9)][_0x89dc71(0x1b3)]=null,this[_0x89dc71(0x1d9)][_0x89dc71(0x24f)]=null,this[_0x89dc71(0x1d9)]['selectedVectorEngine']=null,this[_0x89dc71(0x1d9)][_0x89dc71(0x1fc)]=void 0x0,this[_0x89dc71(0x1d9)][_0x89dc71(0x2a8)]=void 0x0,this['query'][_0x89dc71(0x243)]=void 0x0,this[_0x89dc71(0x283)]={},this[_0x89dc71(0x277)]=null,_0x89dc71(0x295)!==_0x48512f){this[_0x89dc71(0x29d)]=_0x89dc71(0x217);try{_0x5f7778[_0x89dc71(0x2bd)]?.[_0x89dc71(0x1ac)](_0x89dc71(0x207))?.['clearSelection']?.();}catch(_0x480e3d){}}},'_updateGeoIndexes'(){const _0x110423=_0x189c00;this[_0x110423(0x1c8)]=this[_0x110423(0x249)][_0x110423(0x242)](_0x237266=>this[_0x110423(0x257)][_0x237266]?.[_0x110423(0x270)]),this[_0x110423(0x1c8)][_0x110423(0x1d2)]&&!this['geoField']&&(this[_0x110423(0x286)]=this['geoIndexes'][0x0]);},async 'loadGeoQuery'(){const _0x41d50e=_0x189c00;if(!this[_0x41d50e(0x268)]||!this[_0x41d50e(0x286)])return;const _0x57d310=parseFloat(this[_0x41d50e(0x2aa)]),_0x260dd1=parseFloat(this['geoLon']);if(isNaN(_0x57d310)||isNaN(_0x260dd1))return;const _0x4396d=this[_0x41d50e(0x1f9)]?parseFloat(this[_0x41d50e(0x1f9)]):void 0x0;this[_0x41d50e(0x1d9)][_0x41d50e(0x227)]=!0x0,this[_0x41d50e(0x283)]={};try{const _0x3f56b7={...this[_0x41d50e(0x1d9)][_0x41d50e(0x1d9)]},_0x10ae5e={'lat':_0x57d310,'lon':_0x260dd1};_0x4396d&&!isNaN(_0x4396d)&&(_0x10ae5e['radius']=_0x4396d),_0x3f56b7[this[_0x41d50e(0x286)]]={'$near':_0x10ae5e};const _0x2ea37c=await fetch(this[_0x41d50e(0x1f3)]+'/type/'+this[_0x41d50e(0x268)]+'/query',{'method':_0x41d50e(0x25a),'headers':{'Content-Type':_0x41d50e(0x239)},'body':JSON['stringify']({'filter':_0x3f56b7,'options':{'limit':this['query'][_0x41d50e(0x247)]}})});if(!_0x2ea37c['ok'])throw new Error(_0x2ea37c[_0x41d50e(0x1cc)]);const {data:_0x5797f2,meta:_0x2003ff}=await _0x2ea37c['json']();let _0x2b9546=_0x5797f2??[];this[_0x41d50e(0x1e3)]||(_0x2b9546=_0x2b9546[_0x41d50e(0x1f7)]()[_0x41d50e(0x220)]()),this[_0x41d50e(0x1d9)][_0x41d50e(0x1b9)]=_0x2b9546;const _0x1cd200={};this[_0x41d50e(0x1d9)][_0x41d50e(0x23b)]=_0x2b9546[_0x41d50e(0x26f)](_0x53066f=>(x(_0x53066f[_0x41d50e(0x291)],_0x53066f[_0x41d50e(0x1c0)]),null!=_0x53066f['distance']&&(_0x1cd200[_0x53066f[_0x41d50e(0x1c0)]]=_0x53066f[_0x41d50e(0x2ac)]),_0x53066f[_0x41d50e(0x291)])),this['geoDistanceMap']=_0x1cd200,this[_0x41d50e(0x1d9)][_0x41d50e(0x267)]=!0x1,this[_0x41d50e(0x1d9)]['hasPrev']=!0x1,this['query'][_0x41d50e(0x223)]=null,this['query'][_0x41d50e(0x235)]=[],this[_0x41d50e(0x1d9)][_0x41d50e(0x244)]=_0x2003ff?.[_0x41d50e(0x244)]??null,this[_0x41d50e(0x1d9)][_0x41d50e(0x27d)]=_0x2b9546[_0x41d50e(0x1d2)];}catch(_0x3f3e49){console[_0x41d50e(0x256)](_0x41d50e(0x258),_0x3f3e49);}finally{this['query'][_0x41d50e(0x227)]=!0x1;}},get 'selectedVectorEngineMeta'(){const _0x585bb9=_0x189c00;return this['query'][_0x585bb9(0x1d8)]?this[_0x585bb9(0x20a)][_0x585bb9(0x266)](_0x5f1b9f=>this[_0x585bb9(0x1e8)](_0x5f1b9f[_0x585bb9(0x2be)])===this[_0x585bb9(0x1d9)][_0x585bb9(0x1d8)])??null:null;},'helpOpen':!0x1,get 'typeFields'(){const _0x3afbe8=_0x189c00,_0x225b02=(_0x5f7778[_0x3afbe8(0x25d)]['stores'][_0x3afbe8(0x20f)][_0x3afbe8(0x1f5)]||[])[_0x3afbe8(0x266)](_0x58239a=>_0x58239a[_0x3afbe8(0x268)]===this[_0x3afbe8(0x268)]);return _0x225b02?.['fields']||{};},get 'typeCount'(){const _0x3e6ec5=_0x189c00,_0x44c79f=(_0x5f7778[_0x3e6ec5(0x25d)][_0x3e6ec5(0x2a7)][_0x3e6ec5(0x20f)][_0x3e6ec5(0x1f5)]||[])[_0x3e6ec5(0x266)](_0x2c76fa=>_0x2c76fa[_0x3e6ec5(0x268)]===this[_0x3e6ec5(0x268)]);return _0x44c79f?.[_0x3e6ec5(0x23f)]??'?';},get 'typeFieldEntries'(){const _0xf39018=_0x189c00;return Object[_0xf39018(0x282)](this[_0xf39018(0x260)])[_0xf39018(0x26f)](([_0x20ec13,_0x19b2ae])=>({'name':_0x20ec13,'types':_0x19b2ae}));},get 'indexEntries'(){const _0x43c097=_0x189c00;return this[_0x43c097(0x249)][_0x43c097(0x26f)](_0x34a1c3=>({'name':_0x34a1c3,'fields':_0x34a1c3[_0x43c097(0x1c9)]('~'),'status':this[_0x43c097(0x257)][_0x34a1c3]?.['status']||'ready','isGeo':!!this['indexStatuses'][_0x34a1c3]?.[_0x43c097(0x270)],'geoPrecision':this['indexStatuses'][_0x34a1c3]?.[_0x43c097(0x270)]?.['precision']??null,'isUnique':!!this[_0x43c097(0x257)][_0x34a1c3]?.[_0x43c097(0x1df)],'createdBy':this[_0x43c097(0x257)][_0x34a1c3]?.['createdBy']??null,'usedBy':this['indexStatuses'][_0x34a1c3]?.['usedBy']??[]}));},get 'selectedIndexInfo'(){const _0x46c0ce=_0x189c00,_0x15e8c9=this[_0x46c0ce(0x1d9)]['selectedIndex'];if(!_0x15e8c9)return null;const _0x38b07c=this[_0x46c0ce(0x257)][_0x15e8c9];return{'fields':_0x15e8c9[_0x46c0ce(0x1c9)]('~'),'isGeo':!!_0x38b07c?.[_0x46c0ce(0x270)],'geoPrecision':_0x38b07c?.[_0x46c0ce(0x270)]?.[_0x46c0ce(0x246)]??null,'isUnique':!!_0x38b07c?.[_0x46c0ce(0x1df)]};},get 'ftsEntries'(){const _0x25029a=_0x189c00;return this[_0x25029a(0x2ab)][_0x25029a(0x26f)](_0x3d4fe2=>({'name':_0x3d4fe2['name'],'status':_0x3d4fe2[_0x25029a(0x298)]||'ready','fields':(_0x3d4fe2[_0x25029a(0x28e)]&&_0x3d4fe2[_0x25029a(0x28e)][_0x25029a(0x22e)]?_0x3d4fe2[_0x25029a(0x28e)][_0x25029a(0x22e)]:[])['join'](',\x20'),'sizeBytes':_0x3d4fe2[_0x25029a(0x1e6)]??null}));},'fmtBytes'(_0x23d552){const _0x5e41d7=_0x189c00;if(null==_0x23d552||0x0===_0x23d552)return'—';const _0x1698ca=['B','KB','MB','GB'];let _0x4fcd58=_0x23d552,_0x302f67=0x0;for(;_0x4fcd58>=0x400&&_0x302f67<_0x1698ca['length']-0x1;)_0x4fcd58/=0x400,_0x302f67++;return _0x4fcd58[_0x5e41d7(0x23a)](0x1)+'\u00a0'+_0x1698ca[_0x302f67];},'ttlStats':null,'ttlStatsLoading':!0x1,'ttlSweepBusy':!0x1,'defaultTTL':null,'defaultTTLInput':'','defaultTTLPreset':'','defaultTTLBusy':!0x1,async 'loadTTLStats'(){const _0x5e9a87=_0x189c00;if(this[_0x5e9a87(0x268)]){this['ttlStatsLoading']=!0x0;try{const _0x2da2d1=await fetch(this[_0x5e9a87(0x1f3)]+'/ttl/stats?type='+encodeURIComponent(this[_0x5e9a87(0x268)])),_0x5ec45c=await _0x2da2d1[_0x5e9a87(0x28c)]();this[_0x5e9a87(0x20d)]=_0x5ec45c[_0x5e9a87(0x231)]??_0x5ec45c['result']??null;}catch{this[_0x5e9a87(0x20d)]=null;}finally{this[_0x5e9a87(0x264)]=!0x1;}}},async 'loadDefaultTTL'(){const _0x778072=_0x189c00;if(this[_0x778072(0x268)])try{const _0x237a1d=await fetch(this[_0x778072(0x1f3)]+_0x778072(0x1c6)+encodeURIComponent(this[_0x778072(0x268)])+_0x778072(0x1d6)),_0x26967c=await _0x237a1d[_0x778072(0x28c)](),_0x613212=_0x26967c[_0x778072(0x231)]?.[_0x778072(0x215)]??_0x26967c[_0x778072(0x2b5)]?.[_0x778072(0x215)]??null;this[_0x778072(0x215)]=_0x613212,this[_0x778072(0x251)]=_0x613212?String(_0x613212):'',this[_0x778072(0x25f)]=_0x613212?String(_0x613212):'';}catch{this['defaultTTL']=null;}},async 'setDefaultTTLAction'(){const _0x4a194e=_0x189c00,_0x3f8837=parseInt(this[_0x4a194e(0x251)]);if(_0x3f8837&&!(_0x3f8837<=0x0)){this[_0x4a194e(0x1f2)]=!0x0;try{const _0x53d119=await fetch(this[_0x4a194e(0x1f3)]+'/type/'+encodeURIComponent(this[_0x4a194e(0x268)])+_0x4a194e(0x1d6),{'method':'PUT','headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'ttl':_0x3f8837})});if(!_0x53d119['ok']){const _0xe3171=await _0x53d119['json']()[_0x4a194e(0x2ad)](()=>({}));throw new Error(_0xe3171?.['error']?.['message']||_0x53d119[_0x4a194e(0x1cc)]);}this[_0x4a194e(0x215)]=_0x3f8837,_0x5f7778[_0x4a194e(0x25d)][_0x4a194e(0x230)]?.['toast']?.[_0x4a194e(0x1b6)]?.('Default\x20TTL\x20set\x20('+this[_0x4a194e(0x221)](_0x3f8837)+')');}catch(_0x4e575a){_0x5f7778['$ok'][_0x4a194e(0x230)]?.[_0x4a194e(0x275)]?.[_0x4a194e(0x256)]?.(_0x4e575a[_0x4a194e(0x232)]||_0x4a194e(0x1ae));}finally{this['defaultTTLBusy']=!0x1;}}},async 'clearDefaultTTLAction'(){const _0x2e5f92=_0x189c00;this[_0x2e5f92(0x1f2)]=!0x0;try{const _0x1ecdb2=await fetch(this[_0x2e5f92(0x1f3)]+_0x2e5f92(0x1c6)+encodeURIComponent(this[_0x2e5f92(0x268)])+_0x2e5f92(0x1d6),{'method':_0x2e5f92(0x27b)});if(!_0x1ecdb2['ok'])throw new Error(_0x1ecdb2[_0x2e5f92(0x1cc)]);this[_0x2e5f92(0x215)]=null,this[_0x2e5f92(0x251)]='',this[_0x2e5f92(0x25f)]='',_0x5f7778['$ok']['shared']?.[_0x2e5f92(0x275)]?.[_0x2e5f92(0x1b6)]?.(_0x2e5f92(0x279));}catch(_0xce73db){_0x5f7778[_0x2e5f92(0x25d)][_0x2e5f92(0x230)]?.[_0x2e5f92(0x275)]?.['error']?.(_0xce73db[_0x2e5f92(0x232)]||_0x2e5f92(0x2b2));}finally{this[_0x2e5f92(0x1f2)]=!0x1;}},'onDefaultTTLPresetChange'(_0x9aa822){const _0x43a2ad=_0x189c00;this[_0x43a2ad(0x25f)]=_0x9aa822,_0x9aa822&&(this[_0x43a2ad(0x251)]=_0x9aa822);},async 'triggerSweep'(){const _0x46baca=_0x189c00;this[_0x46baca(0x1be)]=!0x0;try{const _0x294e26=await fetch(this[_0x46baca(0x1f3)]+_0x46baca(0x1bf),{'method':_0x46baca(0x25a),'headers':{'Content-Type':_0x46baca(0x239)},'body':JSON['stringify']({'batchSize':0x3e8})}),_0x5da9ad=await _0x294e26[_0x46baca(0x28c)](),_0x3cc73c=_0x46baca(0x2bf)+((_0x5da9ad['data']??_0x5da9ad['result']??{})['removed']??0x0)+_0x46baca(0x1ec);_0x5f7778[_0x46baca(0x25d)][_0x46baca(0x230)]?.[_0x46baca(0x275)]?.[_0x46baca(0x1b6)]?.(_0x3cc73c),await this[_0x46baca(0x238)](),await this[_0x46baca(0x1d9)]['load']();}catch(_0x465a07){_0x5f7778['$ok'][_0x46baca(0x230)]?.[_0x46baca(0x275)]?.[_0x46baca(0x256)]?.(_0x465a07[_0x46baca(0x232)]||_0x46baca(0x22d));}finally{this[_0x46baca(0x1be)]=!0x1;}},'fmtDuration'(_0x613d64){const _0x36ba8e=_0x189c00;if(null==_0x613d64)return'—';const _0x679786=Math[_0x36ba8e(0x1ee)](_0x613d64/0x3e8);return _0x679786<0x3c?_0x679786+'s':_0x679786<0xe10?Math['floor'](_0x679786/0x3c)+'m\x20'+_0x679786%0x3c+'s':_0x679786<0x15180?Math['floor'](_0x679786/0xe10)+'h\x20'+Math[_0x36ba8e(0x1ee)](_0x679786%0xe10/0x3c)+'m':Math['floor'](_0x679786/0x15180)+'d\x20'+Math['floor'](_0x679786%0x15180/0xe10)+'h';},get 'vectorEntries'(){const _0x30e770=_0x189c00;return this[_0x30e770(0x20a)][_0x30e770(0x26f)](_0x549e69=>({'name':_0x549e69[_0x30e770(0x2be)],'displayName':this[_0x30e770(0x1e8)](_0x549e69[_0x30e770(0x2be)]),'status':_0x549e69['isRunning']?_0x30e770(0x1cb):_0x549e69['status']||_0x30e770(0x1c2),'running':_0x549e69[_0x30e770(0x241)],'pipeline':_0x549e69[_0x30e770(0x237)]&&_0x549e69[_0x30e770(0x237)][_0x30e770(0x27a)]?_0x549e69[_0x30e770(0x237)][_0x30e770(0x27a)]:null}));},get 'siftSchema'(){return _0xf653e(this['typeFields']);},async 'loadIndexes'(_0x14d525=!0x1){const _0x49fee7=_0x189c00;if(this[_0x49fee7(0x268)]&&(_0x14d525||_0x85d531!==this[_0x49fee7(0x268)]))try{const _0x22ce48=await fetch(this[_0x49fee7(0x1f3)]+_0x49fee7(0x1c6)+this['type']+_0x49fee7(0x210)),_0x28c965=await _0x22ce48['json'](),_0x5c709c=_0x28c965[_0x49fee7(0x231)]??_0x28c965[_0x49fee7(0x2b5)]??{};this['possibleIndexes']=Object[_0x49fee7(0x253)](_0x5c709c),this[_0x49fee7(0x257)]=_0x5c709c,this[_0x49fee7(0x209)](),_0x85d531=this[_0x49fee7(0x268)];}catch(_0x2e4fd4){console['error'](_0x49fee7(0x26b),_0x2e4fd4);}},async 'loadFtsIndexes'(_0x32234a=!0x1){const _0x34449b=_0x189c00;if(this[_0x34449b(0x268)]&&(_0x32234a||_0x376ae1!==this[_0x34449b(0x268)]))try{const _0x5b94ea=await fetch(this[_0x34449b(0x1f3)]+'/type/'+this[_0x34449b(0x268)]+_0x34449b(0x1f8)),{data:_0x21b51b}=await _0x5b94ea[_0x34449b(0x28c)]();this['ftsList']=_0x21b51b||[],_0x376ae1=this[_0x34449b(0x268)];}catch(_0x3cacae){console[_0x34449b(0x256)]('Error\x20fetching\x20FTS\x20indexes',_0x3cacae);}},async 'loadVectorEngines'(_0x3e80cf=!0x1){const _0x264da0=_0x189c00;if(this[_0x264da0(0x268)]&&(_0x3e80cf||_0x4ca5fe!==this[_0x264da0(0x268)]))try{const _0x26d32d=_0x5f7778[_0x264da0(0x25d)][_0x264da0(0x2a7)][_0x264da0(0x20f)][_0x264da0(0x1d7)]||'default',[_0x30e83f,_0x670e49]=await Promise[_0x264da0(0x24d)]([fetch(__ENV__[_0x264da0(0x25b)]+'/env/'+encodeURIComponent(_0x26d32d)+_0x264da0(0x1c4))['then'](_0x45b4e8=>_0x45b4e8[_0x264da0(0x28c)]()),fetch(__ENV__['API']+'/embeddings/embedders')[_0x264da0(0x208)](_0xee076d=>_0xee076d['json']())]),_0x36c9eb='fulfilled'===_0x30e83f[_0x264da0(0x298)]?_0x30e83f[_0x264da0(0x291)]?.[_0x264da0(0x2b5)]??_0x30e83f[_0x264da0(0x291)]?.[_0x264da0(0x231)]??[]:[],_0x513549=[...'fulfilled'===_0x670e49['status']?_0x670e49[_0x264da0(0x291)]?.[_0x264da0(0x231)]??[]:[],..._0x36c9eb],_0x2e8758={};for(const _0x48015e of _0x513549)_0x264da0(0x27e)===_0x48015e[_0x264da0(0x268)]&&_0x48015e[_0x264da0(0x28e)]&&(_0x2e8758[_0x48015e[_0x264da0(0x2be)]]={'source_type':_0x48015e['config'][_0x264da0(0x21a)],'source_env':_0x48015e[_0x264da0(0x28e)][_0x264da0(0x2a6)]??'default'});this[_0x264da0(0x20a)]=_0x513549['filter'](_0x3cc8e9=>{const _0x21a19e=_0x264da0;if(_0x21a19e(0x26a)!==_0x3cc8e9[_0x21a19e(0x268)])return!0x1;const _0x1bf655=_0x3cc8e9[_0x21a19e(0x28e)]?.[_0x21a19e(0x21a)],_0xdea5e1=_0x3cc8e9[_0x21a19e(0x28e)]?.['source_env']??_0x21a19e(0x212);if(_0x1bf655===this[_0x21a19e(0x268)]&&_0xdea5e1===_0x26d32d)return!0x0;const _0x1afa63=_0x2e8758[_0x3cc8e9[_0x21a19e(0x2be)]];return _0x1afa63?.[_0x21a19e(0x21a)]===this[_0x21a19e(0x268)]&&(_0x1afa63?.[_0x21a19e(0x2a6)]??_0x21a19e(0x212))===_0x26d32d;}),_0x4ca5fe=this[_0x264da0(0x268)];}catch(_0x2cc9c6){this[_0x264da0(0x20a)]=[];}},async 'loadTypeEnginesCount'(){const _0x6157b6=_0x189c00;if(this[_0x6157b6(0x268)])try{const _0x11a8aa=_0x5f7778[_0x6157b6(0x25d)][_0x6157b6(0x2a7)][_0x6157b6(0x20f)]['selectedEnv']||_0x6157b6(0x212),_0xbf9c9d=await fetch(__ENV__[_0x6157b6(0x25b)]+_0x6157b6(0x2ae)+encodeURIComponent(_0x11a8aa)+_0x6157b6(0x1c6)+encodeURIComponent(this[_0x6157b6(0x268)])+_0x6157b6(0x1dc)),_0x1c7222=await _0xbf9c9d[_0x6157b6(0x28c)]()['catch'](()=>({})),_0x1570a1=_0xbf9c9d['ok']?_0x1c7222?.[_0x6157b6(0x231)]??[]:[],_0x326d9e=new Set();for(const _0x2088ea of _0x1570a1[_0x6157b6(0x278)](_0x338313=>_0x338313?.[_0x6157b6(0x254)]??[])){const _0x46130a=_0x2088ea?.['key']??(_0x2088ea?.['type']&&_0x2088ea?.[_0x6157b6(0x2be)]?_0x2088ea[_0x6157b6(0x268)]+'@'+_0x2088ea[_0x6157b6(0x2be)]:_0x2088ea?.[_0x6157b6(0x2be)]??null);_0x46130a&&_0x326d9e[_0x6157b6(0x1bd)](_0x46130a);}this[_0x6157b6(0x296)]=_0x326d9e[_0x6157b6(0x245)];}catch{this['typeEngineCount']=0x0;}else this[_0x6157b6(0x296)]=0x0;},async 'recomputeFields'(){const _0x16f6f2=_0x189c00;if(this['type'])try{await fetch(this[_0x16f6f2(0x1f3)]+_0x16f6f2(0x1c6)+this[_0x16f6f2(0x268)]+_0x16f6f2(0x2c0),{'method':_0x16f6f2(0x25a)}),await _0x5f7778['$ok'][_0x16f6f2(0x2a7)]['okdb']['reloadTypes'](),_0x5f7778[_0x16f6f2(0x25d)][_0x16f6f2(0x230)]?.[_0x16f6f2(0x275)]?.['success']?.(_0x16f6f2(0x1f6));}catch(_0x23bb4f){console[_0x16f6f2(0x256)](_0x16f6f2(0x1e0),_0x23bb4f),_0x5f7778[_0x16f6f2(0x25d)][_0x16f6f2(0x230)]?.[_0x16f6f2(0x275)]?.[_0x16f6f2(0x256)]?.('Recompute\x20failed');}},'indexStatusBadge'(_0x2e54f4){const _0x4a465f=_0x189c00,_0x3a1139=this['indexStatuses']?.[_0x2e54f4]?.[_0x4a465f(0x298)];return _0x3a1139&&'ready'!==_0x3a1139?_0x3a1139:null;},'ftsStatusBadge'(_0x543d31){const _0xff7129=_0x189c00,_0x2bcc14=_0x543d31?.[_0xff7129(0x298)];return _0x2bcc14&&_0xff7129(0x276)!==_0x2bcc14?_0x2bcc14:null;},'keyOf':_0x32463d=>_0x32463d?.['__key']??_0x32463d?.['key']??null,get 'hasDirectValueRows'(){const _0x50b812=_0x189c00;return(this[_0x50b812(0x1d9)][_0x50b812(0x1b9)]||[])[_0x50b812(0x1e2)](_0x261b2f=>!y(_0x261b2f?.[_0x50b812(0x291)]));},get 'displayRows'(){const _0xa44517=_0x189c00;return this['hasDirectValueRows']?this['query'][_0xa44517(0x1b9)]:this[_0xa44517(0x1d9)]['values'];},'rowValueOf':_0x4054ec=>_0x4054ec&&'object'==typeof _0x4054ec&&_0x189c00(0x1c0)in _0x4054ec&&_0x189c00(0x291)in _0x4054ec?_0x4054ec[_0x189c00(0x291)]:_0x4054ec,'directValueKindOf'(_0x76367e){const _0x2fe65f=_0x189c00,_0x294066=this[_0x2fe65f(0x1ef)](_0x76367e);return null===_0x294066?_0x2fe65f(0x1ed):Array[_0x2fe65f(0x25e)](_0x294066)?_0x2fe65f(0x2a9):y(_0x294066)?null:_0x2fe65f(0x285);},'inlineValueOf'(_0x2a3711){const _0x24fc60=_0x189c00;return m(this[_0x24fc60(0x1ef)](_0x2a3711));},'prettyValueOf'(_0x1a11eb){const _0x29c800=_0x189c00;return m(this[_0x29c800(0x1ef)](_0x1a11eb),0x2);},'scoreOf'(_0x46bb0d){const _0x583a8b=_0x189c00,_0x1f271c=this[_0x583a8b(0x24b)](_0x46bb0d);return _0x1f271c?this[_0x583a8b(0x1d9)][_0x583a8b(0x265)]?.[_0x1f271c]?.[_0x583a8b(0x1c5)]??null:null;},'matchOf'(_0x1638c3){const _0x5cedfd=_0x189c00,_0x58a690=this[_0x5cedfd(0x24b)](_0x1638c3);if(!_0x58a690)return null;const _0x3c4dca=this[_0x5cedfd(0x1d9)]['ftsScoreMap']?.[_0x58a690];if(!_0x3c4dca||null==_0x3c4dca[_0x5cedfd(0x1c5)])return null;const _0x72cf2f=_0x3c4dca[_0x5cedfd(0x2ba)]??0x2*_0x3c4dca[_0x5cedfd(0x28a)];return _0x3c4dca[_0x5cedfd(0x1c5)]+'/'+_0x72cf2f;},'vectorScoreOf'(_0x279f63){const _0x3504f0=_0x189c00,_0x16c48a=this[_0x3504f0(0x24b)](_0x279f63);if(!_0x16c48a)return null;const _0x528b45=this['query'][_0x3504f0(0x1e4)]?.[_0x16c48a];return null==_0x528b45?null:Math[_0x3504f0(0x1b4)](0x64*_0x528b45)+'%';},'vectorChunkMetaOf'(_0x7bbaa6){const _0x5cfc0e=_0x189c00,_0x320e7b=this[_0x5cfc0e(0x24b)](_0x7bbaa6);return _0x320e7b?this[_0x5cfc0e(0x1d9)]['vectorChunkMetaMap']?.[_0x320e7b]??null:null;},'distanceOf'(_0x3b9ef5){const _0x19c29a=_0x189c00,_0x45f5be=this[_0x19c29a(0x24b)](_0x3b9ef5);if(!_0x45f5be)return null;const _0xd4f845=this['geoDistanceMap']?.[_0x45f5be];return null==_0xd4f845?null:_0xd4f845<0x3e8?Math[_0x19c29a(0x1b4)](_0xd4f845)+'\x20m':(_0xd4f845/0x3e8)['toFixed'](0x1)+_0x19c29a(0x274);},'displayVectorName'(_0x3bc9d6){const _0x16c432=_0x189c00,_0x1e3efb=(_0x5f7778[_0x16c432(0x25d)][_0x16c432(0x2a7)]['okdb'][_0x16c432(0x1d7)]||'default')+':';return _0x3bc9d6['startsWith'](_0x1e3efb)?_0x3bc9d6[_0x16c432(0x1f7)](_0x1e3efb['length']):_0x3bc9d6;},'selectVectorEngine'(_0x138237,_0x5300e2){const _0x14210c=_0x189c00;if(_0x14210c(0x255)===_0x138237)return _0x5300e2&&(_0x5300e2[_0x14210c(0x2b0)][_0x14210c(0x291)]=this['query'][_0x14210c(0x1d8)]||''),void this[_0x14210c(0x228)]();this[_0x14210c(0x1d9)][_0x14210c(0x1d8)]=_0x138237||null,this[_0x14210c(0x1d9)][_0x14210c(0x1d8)]&&(this[_0x14210c(0x1d9)][_0x14210c(0x1b3)]=null,this['query']['selectedFtsIndex']=null,this[_0x14210c(0x1d9)][_0x14210c(0x1fc)]=void 0x0,this['query'][_0x14210c(0x2a8)]=void 0x0,this[_0x14210c(0x1d9)]['selectedIndexEnd']=void 0x0);},'openCreatePipelineModal'(){const _0x1f5419=_0x189c00;this[_0x1f5419(0x1da)]();},'createMenuOpen':!0x1,'onRowChanged'(_0x5ba5e8){const _0x32c764=_0x189c00,_0x470d7f=_0x5ba5e8?.['detail']??null,_0x3bbfc5=_0x470d7f?.[_0x32c764(0x1c0)]??null;if(null!=_0x3bbfc5){const _0x46d1d4=this[_0x32c764(0x1d9)][_0x32c764(0x1b9)][_0x32c764(0x1eb)](_0x21b8f3=>_0x21b8f3?.[_0x32c764(0x1c0)]===_0x3bbfc5);if(_0x46d1d4>=0x0){const _0xbbb419=_0x470d7f?.['value'];x(_0xbbb419,_0x3bbfc5),this[_0x32c764(0x1d9)][_0x32c764(0x1b9)][_0x32c764(0x1e1)](_0x46d1d4,0x1,{...this[_0x32c764(0x1d9)][_0x32c764(0x1b9)][_0x46d1d4],'value':_0xbbb419}),_0x46d1d4<this[_0x32c764(0x1d9)][_0x32c764(0x23b)][_0x32c764(0x1d2)]&&this[_0x32c764(0x1d9)]['values'][_0x32c764(0x1e1)](_0x46d1d4,0x1,_0xbbb419);}}_0x5f7778[_0x32c764(0x25d)][_0x32c764(0x230)][_0x32c764(0x275)][_0x32c764(0x1b6)](_0x32c764(0x1e7)),this[_0x32c764(0x28f)]();},'onRemoveRow'(_0x3379db){const _0x1f62c6=_0x189c00,_0x219b41=this[_0x1f62c6(0x1d9)]['items'][_0x1f62c6(0x1eb)](_0x46a4a9=>_0x46a4a9?.[_0x1f62c6(0x1c0)]===_0x3379db);_0x219b41>=0x0&&(this['query'][_0x1f62c6(0x23b)][_0x1f62c6(0x1e1)](_0x219b41,0x1),this[_0x1f62c6(0x1d9)][_0x1f62c6(0x1b9)][_0x1f62c6(0x1e1)](_0x219b41,0x1));},async 'openAddModal'(){const _0x41d86d=_0x189c00;await _0x5f7778[_0x41d86d(0x25d)][_0x41d86d(0x230)][_0x41d86d(0x1dd)][_0x41d86d(0x2b8)]({'owner':_0x5f7778,'title':_0x41d86d(0x1fa),'content':_0x41d86d(0x225),'context':_0x31c972=>({'modal':_0x31c972,'type':this['type'],'onDone':async({key:_0x4a0b38,value:_0x2a7aba})=>{const _0x3f277d=_0x41d86d;x(_0x2a7aba,_0x4a0b38),this[_0x3f277d(0x1d9)][_0x3f277d(0x23b)][_0x3f277d(0x294)](_0x2a7aba),this[_0x3f277d(0x1d9)][_0x3f277d(0x1b9)][_0x3f277d(0x294)]({'key':_0x4a0b38,'value':_0x2a7aba});}})});},async 'openCreateIndex'(){const _0x2010af=_0x189c00;let _0x3ef964={},_0x22d105=[];try{const _0x4d4751=await fetch(this[_0x2010af(0x1f3)]+_0x2010af(0x1c6)+this[_0x2010af(0x268)]+'/deep-properties'),_0x3fdb05=await _0x4d4751[_0x2010af(0x28c)]();_0x3ef964=(_0x3fdb05[_0x2010af(0x231)]??_0x3fdb05[_0x2010af(0x2b5)])?.[_0x2010af(0x240)]??{},_0x22d105=Object[_0x2010af(0x253)](_0x3ef964)['filter'](_0x126a24=>_0x3ef964[_0x126a24][_0x2010af(0x1f1)]('geo'));}catch{const _0x3463f9=(_0x5f7778[_0x2010af(0x25d)]['stores'][_0x2010af(0x20f)]['types']||[])['find'](_0x493fd0=>_0x493fd0['type']===this[_0x2010af(0x268)]);for(const _0x4116ab of Object[_0x2010af(0x253)](_0x3463f9?.[_0x2010af(0x22e)]||{}))_0x3ef964[_0x4116ab]=_0x3463f9[_0x2010af(0x22e)][_0x4116ab];}await _0x5f7778[_0x2010af(0x25d)][_0x2010af(0x230)][_0x2010af(0x1dd)]['open']({'owner':_0x5f7778,'title':_0x2010af(0x203),'content':_0x2010af(0x1f0),'context':_0x2f6326=>({'modal':_0x2f6326,'type':this[_0x2010af(0x268)],'deepPaths':_0x3ef964,'geoFields':_0x22d105,'onDone':async()=>{const _0x1c2694=_0x2010af;await this[_0x1c2694(0x224)](!0x0);}})});},async 'dropType'(){const _0x2d8c0f=_0x189c00;if(this[_0x2d8c0f(0x268)]&&await _0x5f7778[_0x2d8c0f(0x25d)]['shared']['modal'][_0x2d8c0f(0x287)](_0x2d8c0f(0x214)+this['type']+_0x2d8c0f(0x1cf)))try{await fetch(this[_0x2d8c0f(0x1f3)]+'/type/'+this['type'],{'method':_0x2d8c0f(0x27b)}),await _0x5f7778[_0x2d8c0f(0x25d)][_0x2d8c0f(0x2a7)][_0x2d8c0f(0x20f)]['reloadTypes'](),_0x5f7778[_0x2d8c0f(0x2bd)][_0x2d8c0f(0x1c1)](new CustomEvent(_0x2d8c0f(0x269),{'detail':this[_0x2d8c0f(0x268)]}));}catch(_0x38daab){console['error'](_0x2d8c0f(0x280),_0x38daab);}},async 'removeIndex'(_0xd64907){const _0x2c38fc=_0x189c00,_0x944d00=_0xd64907||this[_0x2c38fc(0x1d9)]['selectedIndex'];if(_0x944d00&&await _0x5f7778['$ok'][_0x2c38fc(0x230)]['modal'][_0x2c38fc(0x287)](_0x2c38fc(0x1cd)+_0x944d00+'\x22?')){try{const _0x154fbe=await fetch(this[_0x2c38fc(0x1f3)]+_0x2c38fc(0x1c6)+this[_0x2c38fc(0x268)]+_0x2c38fc(0x216)+_0x944d00,{'method':_0x2c38fc(0x27b)});if(!_0x154fbe['ok']){const _0x350315=await _0x154fbe['json']()[_0x2c38fc(0x2ad)](()=>({})),_0x20b93f=_0x350315?.[_0x2c38fc(0x256)]?.[_0x2c38fc(0x22c)];if(_0x2c38fc(0x252)===_0x20b93f){const _0x2284b4=(_0x350315?.['error']?.[_0x2c38fc(0x226)]?.[_0x2c38fc(0x1ca)]??[])[_0x2c38fc(0x26f)](_0x22267e=>_0x22267e[_0x2c38fc(0x219)]+':'+_0x22267e['name'])[_0x2c38fc(0x2b4)](',\x20');return void _0x5f7778[_0x2c38fc(0x25d)][_0x2c38fc(0x230)]?.['toast']?.['error']?.(_0x2c38fc(0x202)+(_0x2284b4||_0x2c38fc(0x1c7)));}throw new Error(_0x350315?.['error']?.[_0x2c38fc(0x232)]??_0x2c38fc(0x29b));}}catch(_0x3bd696){return console[_0x2c38fc(0x256)](_0x2c38fc(0x218),_0x3bd696),void _0x5f7778[_0x2c38fc(0x25d)][_0x2c38fc(0x230)]?.[_0x2c38fc(0x275)]?.[_0x2c38fc(0x256)]?.(_0x3bd696[_0x2c38fc(0x232)]);}this[_0x2c38fc(0x1d9)][_0x2c38fc(0x1b3)]===_0x944d00&&(this[_0x2c38fc(0x1d9)]['selectedIndex']=null),this[_0x2c38fc(0x1d9)][_0x2c38fc(0x1fb)](),await this['loadIndexes'](!0x0),await this[_0x2c38fc(0x1d9)][_0x2c38fc(0x1b2)]();}},'selectIndex'(_0x14169b){const _0x456a21=_0x189c00;if('__create_index__'===_0x14169b)return this['query'][_0x456a21(0x1b3)]=null,void this[_0x456a21(0x250)]();'__remove_index__'!==_0x14169b?(this[_0x456a21(0x1d9)][_0x456a21(0x1b3)]=_0x14169b||null,this['query'][_0x456a21(0x1b3)]&&(this['query'][_0x456a21(0x24f)]=null),this[_0x456a21(0x1d9)][_0x456a21(0x1b3)]||(this[_0x456a21(0x1d9)][_0x456a21(0x1fc)]=void 0x0,this['query'][_0x456a21(0x2a8)]=void 0x0,this[_0x456a21(0x1d9)][_0x456a21(0x243)]=void 0x0)):this[_0x456a21(0x1b0)]();},'selectFtsIndex'(_0x1b2f37,_0x2bbcf2){const _0x417240=_0x189c00;if(_0x417240(0x204)===_0x1b2f37)return _0x2bbcf2&&(_0x2bbcf2[_0x417240(0x2b0)]['value']=this[_0x417240(0x1d9)][_0x417240(0x24f)]||''),void this['openCreateFtsModal']();_0x417240(0x1e5)!==_0x1b2f37?(this['query'][_0x417240(0x24f)]=_0x1b2f37||null,this['query']['selectedFtsIndex']&&(this[_0x417240(0x1d9)]['selectedIndex']=null,this['query'][_0x417240(0x1fc)]=void 0x0,this[_0x417240(0x1d9)][_0x417240(0x2a8)]=void 0x0,this[_0x417240(0x1d9)]['selectedIndexEnd']=void 0x0)):this['dropFtsIndex']();},async 'openCreateFtsModal'(){const _0x4bb28e=_0x189c00;let _0x485019={};try{const _0x2f05af=await fetch(this[_0x4bb28e(0x1f3)]+_0x4bb28e(0x1c6)+this[_0x4bb28e(0x268)]+_0x4bb28e(0x2a4)),_0x575fc5=await _0x2f05af[_0x4bb28e(0x28c)]();_0x485019=(_0x575fc5[_0x4bb28e(0x231)]??_0x575fc5['result'])?.[_0x4bb28e(0x240)]??{};}catch{const _0x3361a3=(_0x5f7778[_0x4bb28e(0x25d)][_0x4bb28e(0x2a7)][_0x4bb28e(0x20f)]['types']||[])[_0x4bb28e(0x266)](_0x7f56c5=>_0x7f56c5[_0x4bb28e(0x268)]===this[_0x4bb28e(0x268)]);for(const _0x3714f3 of Object[_0x4bb28e(0x253)](_0x3361a3?.['fields']||{}))_0x485019[_0x3714f3]=_0x3361a3[_0x4bb28e(0x22e)][_0x3714f3];}await _0x5f7778['$ok'][_0x4bb28e(0x230)][_0x4bb28e(0x1dd)][_0x4bb28e(0x2b8)]({'owner':_0x5f7778,'title':_0x4bb28e(0x1af),'content':'<create-fts-modal\x20:modal=\x22modal\x22\x20:type=\x22type\x22\x20:api-base=\x22apiBase\x22\x20:deep-paths=\x22deepPaths\x22\x20:on-done=\x22onDone\x22\x20/>','context':_0x4d06ef=>({'modal':_0x4d06ef,'type':this[_0x4bb28e(0x268)],'apiBase':this[_0x4bb28e(0x1f3)],'deepPaths':_0x485019,'onDone':async()=>{const _0x4c76f4=_0x4bb28e;await this[_0x4c76f4(0x1ad)](!0x0);}})});},async 'dropFtsIndex'(_0x50c548){const _0x5293a2=_0x189c00,_0x302e5f=_0x50c548||this[_0x5293a2(0x1d9)][_0x5293a2(0x24f)];if(_0x302e5f&&await _0x5f7778[_0x5293a2(0x25d)][_0x5293a2(0x230)][_0x5293a2(0x1dd)][_0x5293a2(0x287)]('Drop\x20FTS\x20index\x20\x22'+_0x302e5f+_0x5293a2(0x1cf))){try{await fetch(this['envApiBase']+_0x5293a2(0x1c6)+this[_0x5293a2(0x268)]+'/fts/'+encodeURIComponent(_0x302e5f),{'method':_0x5293a2(0x27b)});}catch(_0x499a10){return console[_0x5293a2(0x256)](_0x5293a2(0x29f),_0x499a10),void _0x5f7778[_0x5293a2(0x25d)][_0x5293a2(0x230)]?.['toast']?.['error']?.('Drop\x20FTS\x20failed');}this[_0x5293a2(0x1d9)][_0x5293a2(0x24f)]===_0x302e5f&&(this[_0x5293a2(0x1d9)]['selectedFtsIndex']=null),await this[_0x5293a2(0x1ad)](!0x0),await this['query'][_0x5293a2(0x1b2)]();}},async 'rebuildIndex'(_0x14f095){const _0x5042e8=_0x189c00;if(_0x14f095&&await _0x5f7778[_0x5042e8(0x25d)][_0x5042e8(0x230)][_0x5042e8(0x1dd)][_0x5042e8(0x287)](_0x5042e8(0x22a)+_0x14f095+_0x5042e8(0x2b1)))try{await fetch(this[_0x5042e8(0x1f3)]+'/type/'+this[_0x5042e8(0x268)]+_0x5042e8(0x216)+encodeURIComponent(_0x14f095)+'/reset',{'method':'POST'}),_0x5f7778[_0x5042e8(0x25d)][_0x5042e8(0x230)]?.[_0x5042e8(0x275)]?.[_0x5042e8(0x1b6)]?.(_0x5042e8(0x25c)+_0x14f095+'\x22…'),await this[_0x5042e8(0x224)](!0x0);}catch(_0x57e71e){console[_0x5042e8(0x256)](_0x5042e8(0x297),_0x57e71e),_0x5f7778[_0x5042e8(0x25d)][_0x5042e8(0x230)]?.['toast']?.[_0x5042e8(0x256)]?.(_0x5042e8(0x2a2));}},async 'rebuildFts'(_0x53ef79){const _0x19fbe1=_0x189c00,_0x5175cf=_0x53ef79||this[_0x19fbe1(0x1d9)][_0x19fbe1(0x24f)];if(_0x5175cf&&await _0x5f7778['$ok'][_0x19fbe1(0x230)][_0x19fbe1(0x1dd)][_0x19fbe1(0x287)](_0x19fbe1(0x1de)+_0x5175cf+_0x19fbe1(0x1c3)))try{await fetch(this['envApiBase']+_0x19fbe1(0x1c6)+this[_0x19fbe1(0x268)]+'/fts/'+encodeURIComponent(_0x5175cf)+_0x19fbe1(0x1d3),{'method':_0x19fbe1(0x25a)}),_0x5f7778['$ok'][_0x19fbe1(0x230)]?.[_0x19fbe1(0x275)]?.[_0x19fbe1(0x1b6)]?.('Rebuilding\x20FTS\x20index\x20\x22'+_0x5175cf+'\x22…'),await this[_0x19fbe1(0x1ad)](!0x0);}catch(_0x4af603){console[_0x19fbe1(0x256)](_0x19fbe1(0x2bb),_0x4af603),_0x5f7778[_0x19fbe1(0x25d)]['shared']?.['toast']?.['error']?.('Rebuild\x20failed');}},'onGeoTableSelect'(_0x1f36ba){const _0x5350a2=_0x189c00;if(_0x5350a2(0x295)!==this['searchMode'])return;this['_geoSelSource']=_0x5350a2(0x217);const _0xec9185=_0x1f36ba[_0x5350a2(0x2b7)]?.[_0x5350a2(0x27c)];this[_0x5350a2(0x277)]=_0x5350a2(0x21d)===_0xec9185?null:_0x1f36ba[_0x5350a2(0x2b7)]?.['row']?.['__key']??null;},'onGeoMapSelect'(_0x34a83f){const _0x407e11=_0x189c00,_0x4f6a3d=_0x34a83f[_0x407e11(0x2b7)]?.[_0x407e11(0x1c0)]??null;this[_0x407e11(0x281)]='map',this[_0x407e11(0x277)]=this[_0x407e11(0x277)]===_0x4f6a3d?null:_0x4f6a3d;}};},'_unsubs':[],async 'init'(_0x124ccc){const _0x4429d5=_0x33ca;if(_0x124ccc['$watch'](()=>this[_0x4429d5(0x268)],async()=>{const _0x1b579b=_0x4429d5;this[_0x1b579b(0x1d9)][_0x1b579b(0x268)]=this[_0x1b579b(0x268)],this[_0x1b579b(0x1d9)][_0x1b579b(0x24f)]=null,this[_0x1b579b(0x1d9)][_0x1b579b(0x1d8)]=null,this[_0x1b579b(0x259)]=_0x1b579b(0x20e),this['query'][_0x1b579b(0x1fb)](),await this[_0x1b579b(0x224)](!0x0),await this[_0x1b579b(0x1ad)](!0x0),await this[_0x1b579b(0x205)](!0x0),await this[_0x1b579b(0x263)](),await this['loadViolations'](),await this[_0x1b579b(0x1d9)][_0x1b579b(0x1b2)]();}),_0x124ccc[_0x4429d5(0x273)](()=>[this['query'][_0x4429d5(0x1d9)],this[_0x4429d5(0x1d9)]['selectedIndex'],this['query'][_0x4429d5(0x2a8)],this[_0x4429d5(0x1d9)]['selectedIndexEnd'],this[_0x4429d5(0x1d9)][_0x4429d5(0x213)],this[_0x4429d5(0x1d9)][_0x4429d5(0x2a1)],this[_0x4429d5(0x1d9)]['selectedPrefix'],this[_0x4429d5(0x1d9)][_0x4429d5(0x24f)],this[_0x4429d5(0x1d9)][_0x4429d5(0x1ff)],this[_0x4429d5(0x1d9)]['ftsMode'],this['query'][_0x4429d5(0x2b9)],this[_0x4429d5(0x1d9)][_0x4429d5(0x1d8)],this['query']['vectorText'],this[_0x4429d5(0x1d9)]['vectorLimit']],async()=>{const _0x4c2e88=_0x4429d5;this[_0x4c2e88(0x268)]&&(this['query'][_0x4c2e88(0x1fb)](),await this[_0x4c2e88(0x1d9)][_0x4c2e88(0x1b2)]());}),_0x124ccc['$watch'](()=>[this[_0x4429d5(0x259)],this[_0x4429d5(0x286)],this[_0x4429d5(0x2aa)],this['geoLon'],this[_0x4429d5(0x1f9)],this['geoSortAsc'],this['query'][_0x4429d5(0x1d9)]],async()=>{const _0x24278c=_0x4429d5;_0x24278c(0x295)===this[_0x24278c(0x259)]&&this[_0x24278c(0x268)]&&this[_0x24278c(0x286)]&&this['geoLat']&&this[_0x24278c(0x1ea)]&&await this['loadGeoQuery']();}),this[_0x4429d5(0x268)]){const _0x1a26ec=new Set([_0x4429d5(0x231),'changelog','manage',_0x4429d5(0x20c),'pipelines','engines']),_0x3749d2=_0x124ccc['$vars'][_0x4429d5(0x1e9)]?.['search']?.['tab'];_0x3749d2&&_0x1a26ec[_0x4429d5(0x1bc)](_0x3749d2)&&(this[_0x4429d5(0x23c)]=_0x4429d5(0x236)===_0x3749d2?_0x4429d5(0x254):_0x3749d2),await Promise['all']([this[_0x4429d5(0x224)](),this[_0x4429d5(0x1ad)](),this['loadVectorEngines'](),this['loadTypeEnginesCount'](),this['loadViolations'](),this['loadTTLStats'](),this[_0x4429d5(0x1fd)](),this[_0x4429d5(0x1d9)]['load']()]);}this[_0x4429d5(0x24a)]=[_0x266dde['on'](_0x4429d5(0x248),()=>{const _0x219466=_0x4429d5;this[_0x219466(0x224)](!0x0),this[_0x219466(0x1ad)](!0x0);}),_0x266dde['on'](_0x4429d5(0x27f),_0x45c2a9=>{const _0x11c967=_0x4429d5;this['loadIndexes'](!0x0),this[_0x11c967(0x1ad)](!0x0);const _0x34f00d=_0x45c2a9?.[_0x11c967(0x268)];if(!_0x34f00d||_0x34f00d===this[_0x11c967(0x268)]){const _0xa2e75a=_0x45c2a9?.[_0x11c967(0x1d0)],_0x5d5bea=Array[_0x11c967(0x25e)](_0xa2e75a)&&'fts'===_0xa2e75a[0x0],_0x36f6d0=_0x5d5bea?_0xa2e75a[0x1]:_0x11c967(0x21e)==typeof _0xa2e75a?_0xa2e75a:'',_0x4c07b1=_0x5d5bea?'FTS\x20index\x20ready:\x20'+_0x36f6d0:_0x36f6d0?'Index\x20ready:\x20'+_0x36f6d0:_0x11c967(0x1d1);_0x124ccc['$ok'][_0x11c967(0x230)]?.['toast']?.[_0x11c967(0x234)]?.(_0x4c07b1);}}),_0x266dde['on'](_0x4429d5(0x26e),()=>this[_0x4429d5(0x224)](!0x0)),_0x266dde['on'](_0x4429d5(0x26c),()=>this[_0x4429d5(0x224)](!0x0)),_0x266dde['on'](_0x4429d5(0x261),()=>this[_0x4429d5(0x1ad)](!0x0)),_0x266dde['on'](_0x4429d5(0x29e),()=>this[_0x4429d5(0x1ad)](!0x0)),_0x266dde['on'](_0x4429d5(0x1d5),()=>this[_0x4429d5(0x205)](!0x0)),_0x266dde['on'](_0x4429d5(0x229),()=>this[_0x4429d5(0x205)](!0x0)),_0x266dde['on'](_0x4429d5(0x22b),()=>this['loadVectorEngines'](!0x0)),_0x266dde['on'](_0x4429d5(0x21c),()=>this[_0x4429d5(0x205)](!0x0)),_0x266dde['on'](_0x4429d5(0x2a3),()=>this[_0x4429d5(0x205)](!0x0)),_0x266dde['on'](_0x4429d5(0x1d5),()=>this[_0x4429d5(0x263)]()),_0x266dde['on'](_0x4429d5(0x229),()=>this[_0x4429d5(0x263)]()),_0x266dde['on'](_0x4429d5(0x22b),()=>this[_0x4429d5(0x263)]()),_0x266dde['on'](_0x4429d5(0x21c),()=>this[_0x4429d5(0x263)]()),_0x266dde['on'](_0x4429d5(0x2a3),()=>this[_0x4429d5(0x263)]()),_0x266dde['on'](_0x4429d5(0x293),()=>this['loadVectorEngines'](!0x0)),_0x266dde['on'](_0x4429d5(0x293),()=>this[_0x4429d5(0x263)]())];const _0x25c6c4=new Set([_0x4429d5(0x231),_0x4429d5(0x1b1),_0x4429d5(0x24e),'schema',_0x4429d5(0x236),'engines']);_0x124ccc[_0x4429d5(0x273)](()=>_0x124ccc[_0x4429d5(0x23d)]['$router']?.['_search']?.[_0x4429d5(0x23c)],()=>{const _0x518416=_0x4429d5,_0x12e8e8=_0x124ccc[_0x518416(0x23d)][_0x518416(0x1e9)]?.[_0x518416(0x292)]?.['tab'];if(!_0x12e8e8)return;const _0x147651=_0x25c6c4[_0x518416(0x1bc)](_0x12e8e8)?_0x518416(0x236)===_0x12e8e8?_0x518416(0x254):_0x12e8e8:_0x518416(0x231);this[_0x518416(0x23c)]!==_0x147651&&(this[_0x518416(0x23c)]=_0x147651);}),_0x124ccc[_0x4429d5(0x273)](()=>this[_0x4429d5(0x277)],_0x256f95=>{const _0x472fd3=_0x4429d5,_0x225396=this['_geoSelSource'];if(this[_0x472fd3(0x281)]=null,_0x472fd3(0x295)!==this[_0x472fd3(0x259)])return;if(_0x472fd3(0x217)===_0x225396)return;const _0x44036c=_0x124ccc['$el']?.['querySelector']('ok-table');if(!_0x44036c)return;if(!_0x256f95)return _0x44036c[_0x472fd3(0x2b3)]?.(),void _0x44036c[_0x472fd3(0x1fe)]?.();const _0x1f56a7=this[_0x472fd3(0x288)]?.['find'](_0x408084=>this[_0x472fd3(0x24b)](_0x408084)===_0x256f95);_0x1f56a7?(_0x44036c[_0x472fd3(0x29c)]?.(_0x1f56a7),_0x44036c['clearExpanded']?.(),_0x44036c[_0x472fd3(0x289)]?.(_0x1f56a7)):(_0x44036c[_0x472fd3(0x2b3)]?.(),_0x44036c[_0x472fd3(0x1fe)]?.());});},'unmount'(){const _0x44178e=_0x33ca;for(const _0x46542b of this[_0x44178e(0x24a)])_0x46542b();this[_0x44178e(0x24a)]=[];},'template':_0x1b645b(0x200),'style':'[tag]{display:flex;flex-direction:column;height:100%;min-width:0;min-height:0}.ok-table__cell__inner>span.object{color:#a6da95}.ok-table__cell__inner>span.number{color:var(--okdb-accent)}.ok-table__cell__inner>span.boolean{color:#ff6c6b}.ok-table__cell__inner>span.null,.ok-table__cell__inner>span.undefined{color:#c792ea}.ok-table__cell__inner>.key__header{font-weight:700;color:var(--okdb-json-key)}.ok-table__cell__inner>.key__cell{color:var(--okdb-json-key)}.fts-score-badge,.mode-count{display:inline-block;border-radius:999px;font-size:10px;vertical-align:middle}.mode-count{margin-left:4px;padding:0\x205px;background:#ffffff18;line-height:1.6}.fts-score-badge{margin-left:5px;padding:1px\x205px;border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-accent)\x2033%,transparent);color:var(--okdb-accent);opacity:.8}.vec-score-badge{border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-indigo)\x2033%,transparent);color:var(--okdb-indigo)}.direct-value-badge,.geo-dist-badge,.vec-score-badge{display:inline-block;margin-left:5px;padding:1px\x205px;border-radius:999px;font-size:10px;vertical-align:middle;opacity:.8}.geo-dist-badge{border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-success)\x2033%,transparent);color:var(--okdb-success)}.direct-value-badge{border:1px\x20solid}.direct-value-badge--scalar{border-color:color-mix(in\x20srgb,var(--okdb-app-fg-muted)\x2033%,transparent);color:var(--okdb-app-fg-muted)}.direct-value-badge--array{border-color:#2dd4bf55;color:#2dd4bf}.direct-value-badge--null{border-color:color-mix(in\x20srgb,var(--okdb-purple)\x2033%,transparent);color:var(--okdb-purple)}.manage-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.manage-section-title{font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.06em;opacity:.5;margin-bottom:0}.manage-grid{display:grid;gap:0}.manage-grid--2{grid-template-columns:1fr\x201fr}.manage-grid--3{grid-template-columns:1fr\x20auto\x20auto}.manage-grid--4{grid-template-columns:1fr\x20auto\x20auto\x20auto}.manage-grid--idx{grid-template-columns:minmax(80px,2fr)\x20minmax(90px,1fr)\x20minmax(80px,1fr)\x20auto\x20auto\x20auto}.idx-consumer-badge,.idx-owned-badge{display:inline-block;padding:1px\x206px;border-radius:3px;font-size:10px;white-space:nowrap}.idx-owned-badge{background:color-mix(in\x20srgb,var(--okdb-accent)\x2012%,transparent);color:var(--okdb-accent);border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-accent)\x2025%,transparent)}.idx-consumer-badge{background:color-mix(in\x20srgb,var(--okdb-sky)\x2012%,transparent);color:var(--okdb-sky);border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-sky)\x2025%,transparent)}.manage-grid--fts{grid-template-columns:minmax(80px,1fr)\x202fr\x20minmax(60px,auto)\x20minmax(50px,auto)\x20auto\x20auto}.manage-grid--vec{grid-template-columns:minmax(80px,1fr)\x20minmax(60px,auto)\x20minmax(80px,1fr)\x20auto}.idx-kind-badge{display:inline-block;padding:1px\x207px;border-radius:999px;font-size:10px;border:1px\x20solid;white-space:nowrap}.idx-kind-badge--geo{color:var(--okdb-success);border-color:color-mix(in\x20srgb,var(--okdb-success)\x2033%,transparent)}.idx-kind-badge--unique{color:var(--okdb-warning);border-color:color-mix(in\x20srgb,var(--okdb-warning)\x2033%,transparent)}.idx-kind-badge--regular{color:var(--okdb-app-fg-muted);border-color:color-mix(in\x20srgb,var(--okdb-app-fg-muted)\x2020%,transparent)}.idx-info-strip{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:5px\x208px;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:4px;font-size:11px}.idx-info-label{opacity:.4;white-space:nowrap}.idx-info-field{font-size:11px;color:var(--okdb-json-key)}.idx-info-badge{padding:1px\x207px;border-radius:999px;font-size:10px;border:1px\x20solid;white-space:nowrap}.idx-info-badge--geo{color:var(--okdb-success);border-color:color-mix(in\x20srgb,var(--okdb-success)\x2033%,transparent)}.idx-info-badge--unique{color:var(--okdb-warning);border-color:color-mix(in\x20srgb,var(--okdb-warning)\x2033%,transparent)}.idx-info-badge--regular{color:var(--okdb-app-fg-muted);border-color:color-mix(in\x20srgb,var(--okdb-app-fg-muted)\x2020%,transparent)}.manage-col-hd{font-size:11px;opacity:.4;padding:0\x2012px\x206px\x200;border-bottom:1px\x20solid\x20var(--okdb-app-border);font-weight:400}.manage-cell{padding:6px\x2012px\x206px\x200;border-bottom:1px\x20solid\x20var(--okdb-app-surface);font-size:13px;display:flex;align-items:center;min-width:0}.manage-cell--dim{opacity:.5;font-size:12px}.manage-status{display:inline-block;padding:1px\x207px;border-radius:999px;font-size:10px;border:1px\x20solid}.manage-status--ready{color:var(--okdb-success);border-color:color-mix(in\x20srgb,var(--okdb-success)\x2033%,transparent)}.manage-status--creating,.manage-status--resetting{color:var(--okdb-warning);border-color:color-mix(in\x20srgb,var(--okdb-warning)\x2033%,transparent)}.card--danger{border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-danger)\x2013%,transparent)!important}'};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x1ef37c=_0x1396;(function(_0x6db674,_0x6e2cf3){const _0x3e9f68=_0x1396,_0x132426=_0x6db674();while(!![]){try{const _0x46f710=parseInt(_0x3e9f68(0x1d6))/0x1+-parseInt(_0x3e9f68(0x1d1))/0x2+-parseInt(_0x3e9f68(0x1d8))/0x3+parseInt(_0x3e9f68(0x1d7))/0x4+parseInt(_0x3e9f68(0x1ca))/0x5+parseInt(_0x3e9f68(0x1c5))/0x6+-parseInt(_0x3e9f68(0x1c8))/0x7*(-parseInt(_0x3e9f68(0x1d5))/0x8);if(_0x46f710===_0x6e2cf3)break;else _0x132426['push'](_0x132426['shift']());}catch(_0x3b9bcb){_0x132426['push'](_0x132426['shift']());}}}(_0x421f,0xdab1c));import _0x48b167 from'@toolkit/elements/ok-icon.ok.js';function _0x1396(_0x11e6d6,_0xb5aa97){_0x11e6d6=_0x11e6d6-0x1bc;const _0x421fe9=_0x421f();let _0x139697=_0x421fe9[_0x11e6d6];return _0x139697;}function _0x421f(){const _0x1c1845=['2192232TlwtCz','3570087btPUsL','s\x20ago','round','$watch','$attr','m\x20ago','type-violations-tab','stores','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:16px;\x20flex:1;\x20overflow:auto;\x20padding-right:4px;\x22>\x0a\x0a\x20\x20<div\x20class=\x22card\x22>\x0a\x20\x20\x20\x20<div\x20class=\x22manage-section-header\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22manage-section-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20Schema\x20Violations\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22violations.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22tv-count-badge\x22>{{\x20violations.length\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\x20\x20<button\x20@click=\x22loadViolations()\x22\x20:disabled=\x22violationsBusy\x22\x20class=\x22btn-icon\x22\x20style=\x22font-size:11px;\x20padding:3px\x2010px;\x20opacity:.75;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22refresh-cw\x22></ok-icon>Refresh\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22violationsBusy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:13px;\x22>Loading\x20violations…</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22violationsError\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x20padding:8px\x2010px;\x20border-radius:8px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-danger)\x204%,\x20transparent);\x22>{{\x20violationsError\x20}}</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!violationsBusy\x20&&\x20!violationsError\x20&&\x20violations.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.4;\x20font-size:13px;\x22>No\x20violations\x20—\x20all\x20documents\x20conform\x20to\x20the\x20schema.</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22violations.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-hd\x22>Key</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-hd\x22>Errors</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-hd\x22>When</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-hd\x22></div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22violations\x22\x20let:item=\x22v\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-cell\x20tv-key\x22\x20@click=\x22toggleViolation(v.key)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-family:monospace;\x20font-size:12px;\x20color:var(--okdb-json-key);\x22>{{\x20v.key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-cell\x22\x20@click=\x22toggleViolation(v.key)\x22\x20style=\x22font-size:12px;\x20opacity:.65;\x22>{{\x20errorCount(v)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-cell\x22\x20@click=\x22toggleViolation(v.key)\x22\x20style=\x22font-size:11px;\x20opacity:.45;\x22>{{\x20relTime(v.timestamp)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-cell\x22\x20style=\x22justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22$attr.onViewKey\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\x20\x20\x20\x20@click:stop=\x22viewDocument(v.key)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22btn-icon\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20padding:2px\x208px;\x20opacity:.75;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20title=\x22Switch\x20to\x20data\x20tab\x20for\x20this\x20document\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>View\x20→</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22expandedViolation\x20===\x20v.key\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-expanded\x22\x20style=\x22grid-column:1/-1;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<each\x20:of=\x22(v.errors\x20??\x20[])\x22\x20let:item=\x22err\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22tv-err-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22tv-path\x22>{{\x20err.path\x20||\x20\x27/\x27\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x20opacity:.85;\x20flex:1;\x20min-width:0;\x22>{{\x20err.message\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22err.expected\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x20white-space:nowrap;\x22>expected:\x20<code\x20style=\x22font-size:11px;\x22>{{\x20err.expected\x20}}</code></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22err.actual\x20!=\x20null\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20opacity:.5;\x20white-space:nowrap;\x22>got:\x20<code\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x22>{{\x20err.actual\x20}}</code></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\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\x20\x20<if\x20:=\x22!(v.errors\x20??\x20[]).length\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:12px;\x20opacity:.4;\x20padding:4px\x200;\x22>No\x20error\x20details\x20stored.</div>\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</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</each>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a</div>\x0a','Failed\x20to\x20load\x20violations','apiBase','message','\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-count-badge\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20margin-left:\x206px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2010px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x202px\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x20999px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);\x0a\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-danger);\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-weight:\x20600;\x0a\x20\x20\x20\x20\x20\x20\x20\x20text-transform:\x20none;\x0a\x20\x20\x20\x20\x20\x20\x20\x20letter-spacing:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-table\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20grid;\x0a\x20\x20\x20\x20\x20\x20\x20\x20grid-template-columns:\x20minmax(120px,\x202fr)\x2060px\x2090px\x20auto;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-hd\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20opacity:\x20.4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x200\x2012px\x206px\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-cell\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x207px\x2012px\x207px\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20\x20\x20\x20\x20transition:\x20background\x20.1s;\x0a\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20overflow:\x20hidden;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-cell:hover\x20{\x20background:\x20#ffffff07;\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-key\x20{\x20overflow:\x20hidden;\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-key\x20span\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20overflow:\x20hidden;\x0a\x20\x20\x20\x20\x20\x20\x20\x20text-overflow:\x20ellipsis;\x0a\x20\x20\x20\x20\x20\x20\x20\x20white-space:\x20nowrap;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-expanded\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x2010px\x2012px\x2012px\x2014px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20background:\x20var(--okdb-app-bg-deep);\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-surface);\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20flex-direction:\x20column;\x0a\x20\x20\x20\x20\x20\x20\x20\x20gap:\x204px;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-err-row\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20gap:\x2010px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20align-items:\x20baseline;\x0a\x20\x20\x20\x20\x20\x20\x20\x20flex-wrap:\x20wrap;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x204px\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-bottom:\x201px\x20solid\x20var(--okdb-app-surface-2);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-err-row:last-child\x20{\x20border-bottom:\x20none;\x20}\x0a\x20\x20\x20\x20\x20\x20type-violations-tab\x20.tv-path\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-size:\x2011px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-danger);\x0a\x20\x20\x20\x20\x20\x20\x20\x20font-family:\x20monospace;\x0a\x20\x20\x20\x20\x20\x20\x20\x20white-space:\x20nowrap;\x0a\x20\x20\x20\x20\x20\x20\x20\x20flex-shrink:\x200;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20','1553148qakiWO','expandedViolation','just\x20now','903jdnnnT','violations','889760dPZndd','$ok','loadViolations','result','json','violationsError','type','2283566EJbjxN','/violations/','statusText','violationsBusy','131824BpuObu','117054yHnBTG'];_0x421f=function(){return _0x1c1845;};return _0x421f();}export default{'tag':_0x1ef37c(0x1be),'dependencies':[_0x48b167],'attr':{'type':{},'onViewKey':{}},'context':_0x55fee6=>({'violations':[],'violationsBusy':!0x1,'violationsError':null,'expandedViolation':null,get 'type'(){const _0x4de92b=_0x1ef37c;return _0x55fee6[_0x4de92b(0x1bc)][_0x4de92b(0x1d0)];},get 'envApiBase'(){const _0x231a04=_0x1ef37c;return _0x55fee6[_0x231a04(0x1cb)][_0x231a04(0x1bf)]['okdb'][_0x231a04(0x1c2)];},async 'loadViolations'(){const _0x442492=_0x1ef37c;if(this['type']){this[_0x442492(0x1d4)]=!0x0,this[_0x442492(0x1cf)]=null;try{const _0x31f670=await fetch(this['envApiBase']+_0x442492(0x1d2)+encodeURIComponent(this[_0x442492(0x1d0)]));if(0x194===_0x31f670['status'])return void(this['violations']=[]);if(!_0x31f670['ok']){const _0x532ab=await _0x31f670[_0x442492(0x1ce)]()['catch'](()=>({}));throw new Error(_0x532ab?.['error']?.[_0x442492(0x1c3)]||_0x31f670[_0x442492(0x1d3)]);}const _0x4cc89b=await _0x31f670[_0x442492(0x1ce)]();this[_0x442492(0x1c9)]=_0x4cc89b?.['data']?.['violations']??_0x4cc89b?.[_0x442492(0x1cd)]?.[_0x442492(0x1c9)]??[];}catch(_0x37dd65){this['violationsError']=_0x37dd65['message']||_0x442492(0x1c1),this[_0x442492(0x1c9)]=[];}finally{this['violationsBusy']=!0x1;}}},'toggleViolation'(_0x1ed7fc){this['expandedViolation']=this['expandedViolation']===_0x1ed7fc?null:_0x1ed7fc;},'viewDocument'(_0x1002f7){const _0x5f044f=_0x1ef37c,_0x896f48=_0x55fee6[_0x5f044f(0x1bc)]['onViewKey'];'function'==typeof _0x896f48&&_0x896f48(_0x1002f7);},'relTime'(_0x1474ef){const _0x1cb2f5=_0x1ef37c;if(!_0x1474ef)return'—';const _0x125a38=Date['now']()-_0x1474ef;return _0x125a38<0x1388?_0x1cb2f5(0x1c7):_0x125a38<0xea60?Math[_0x1cb2f5(0x1da)](_0x125a38/0x3e8)+_0x1cb2f5(0x1d9):_0x125a38<0x36ee80?Math['round'](_0x125a38/0xea60)+_0x1cb2f5(0x1bd):_0x125a38<0x5265c00?Math[_0x1cb2f5(0x1da)](_0x125a38/0x36ee80)+'h\x20ago':new Date(_0x1474ef)['toLocaleDateString']();},'errorCount':_0x520feb=>(_0x520feb['errors']??[])['length']||(_0x520feb['errorCount']??0x0)}),async 'init'(_0x20f53f){const _0x3ae12f=_0x1ef37c;_0x20f53f[_0x3ae12f(0x1db)](()=>this[_0x3ae12f(0x1d0)],async()=>{const _0x591c05=_0x3ae12f;this[_0x591c05(0x1c9)]=[],this[_0x591c05(0x1c6)]=null,this[_0x591c05(0x1d0)]&&await this[_0x591c05(0x1cc)]();}),this[_0x3ae12f(0x1d0)]&&await this[_0x3ae12f(0x1cc)]();},'template':_0x1ef37c(0x1c0),'style':_0x1ef37c(0x1c4)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script type="module">import docViewer from"@toolkit/components/ok-doc-viewer.ok.js";export default{tag:"docs-index",unwrap:!0,dependencies:[docViewer],context:e=>({manifest:[],get currentFile(){const t=e.$vars.$route?.params?.["*"];return t?t.replace(/\.md$/,"")+".md":"index.md"},isActive(e){return this.currentFile===e},navigateTo(t){const o=t.replace(/\.md$/,"");this.anchor="",e.$vars.$router?.push("/docs/"+o)},onAnchorChange(e){this.anchor=e},anchor:""}),async init(e){try{const e=await fetch("/docs/manifest.json");this.manifest=await e.json()}catch(e){console.error("[docs] failed to load manifest:",e)}e.$watch(()=>e.$vars.$route?.params?.["*"],()=>{this.anchor=""})}}</script><template><component import="../../layouts/_default.ok.html"><template name="sidebar"><nav class="docs-nav" aria-label="Documentation navigation"><each :of="manifest" let:item="item"><if :="item.file"><button class="docs-nav__item docs-nav__item--standalone" :class="{ 'docs-nav__item--active': isActive(item.file) }" @click="navigateTo(item.file)" :title="item.label">{{ item.label }}</button></if><if :="item.children"><div class="docs-nav__group"><span class="docs-nav__group-label">{{ item.label }}</span><each :of="item.children" let:child="child"><button class="docs-nav__item" :class="{ 'docs-nav__item--active': isActive(child.file) }" @click="navigateTo(child.file)" :title="child.label">{{ child.label }}</button></each></div></if></each></nav></template><template name="default"><div class="docs-wrap"><ok-doc-viewer :blocks="[]" root="/docs/" prefix="#/docs/" :file="currentFile" :anchor="anchor" :manifest="manifest" sidebar-title="On this page" @anchor-change="onAnchorChange($event.detail)"/></div></template></component></template><style>.docs-wrap{margin:-20px -24px -6px;min-height:calc(100% + 26px)}.docs-wrap ok-doc-viewer{--ok_color-accent:var(--okdb-accent);--ok_color-fg:var(--okdb-app-fg);--ok_color-muted-fg:var(--okdb-app-fg-subtle);--ok_color-muted-border:var(--okdb-app-surface-2);--font-mono:'Cascadia Code','Fira Code','Consolas',monospace;display:block;min-height:100%}.docs-wrap ok-doc-viewer .md table{border-collapse:collapse;width:100%;margin:1.2rem 0;font-size:13px}.docs-wrap ok-doc-viewer .md td,.docs-wrap ok-doc-viewer .md th{border:1px solid var(--okdb-app-surface-2);padding:7px 12px;text-align:left}.docs-wrap ok-doc-viewer .md th{background:var(--okdb-app-surface-2);color:#8fc8e8;font-weight:600;font-size:12px;letter-spacing:.03em}.docs-wrap ok-doc-viewer .md tr:hover td{background:var(--okdb-app-surface)}.docs-wrap ok-doc-viewer .md a{color:var(--okdb-accent);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--okdb-accent) 27%,transparent);transition:border-color .15s,color .15s}.docs-wrap ok-doc-viewer .md a:hover{color:#7fd8ff;border-bottom-color:#7fd8ff88}.docs-wrap ok-doc-viewer .md code:not(pre code){background:var(--okdb-app-bg-deep);border:1px solid var(--okdb-app-border-subtle);color:var(--okdb-accent);padding:1px 6px;border-radius:4px;font-size:.9em}.docs-wrap ok-doc-viewer .md blockquote{border-left:3px solid color-mix(in srgb,var(--okdb-accent) 27%,transparent);margin:1rem 0;padding:6px 14px;background:var(--okdb-app-surface);border-radius:0 6px 6px 0;color:var(--okdb-app-fg-muted);font-style:italic}.docs-wrap ok-doc-viewer .ok-code-block{background:var(--okdb-app-bg-deep);border-color:var(--okdb-app-border)}.docs-wrap ok-doc-viewer .ok-code-block__header{background:var(--okdb-app-surface-2);color:var(--okdb-app-fg-muted);border-bottom-color:var(--okdb-app-border)}.docs-wrap ok-doc-viewer .ok-code-block .copy{color:var(--okdb-app-fg-muted)}.docs-wrap ok-doc-viewer .ok-code-block .copy:hover{color:var(--okdb-app-fg);background:color-mix(in srgb,var(--okdb-app-fg) 8%,transparent)}.docs-nav{display:flex;flex-direction:column;gap:1px;margin:-2px -10px;padding:2px 0}.docs-nav__item{display:block;width:100%;text-align:left;padding:5px 14px;border-radius:0;border:none;border-left:2px solid transparent;background:0 0;color:var(--okdb-app-fg-muted);font-size:12.5px;cursor:pointer;transition:color .13s,background .13s,border-color .13s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.55;letter-spacing:.01em}.docs-nav__item--standalone{font-weight:500;color:var(--okdb-app-fg-muted);margin-top:2px}.docs-nav__item:hover{background:var(--okdb-app-surface-2);color:var(--okdb-app-fg);border-left-color:var(--okdb-app-border-strong)}.docs-nav__item--active{background:var(--okdb-accent-soft-bg)!important;color:var(--okdb-accent)!important;border-left-color:var(--okdb-accent)!important;font-weight:500}.docs-nav__group{margin-top:6px;padding-top:4px;border-top:1px solid var(--okdb-app-surface)}.docs-nav__group-label{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--okdb-app-fg-faint);padding:4px 14px 5px;pointer-events:none;user-select:none}</style>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script type="module">export default{tag:"embeddings-section-alias",unwrap:!0}</script><template><component import="../engines/index.ok.html"></component></template>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x15114b=_0xb515;function _0xb515(_0x57b910,_0x427263){_0x57b910=_0x57b910-0x1c5;const _0x120d9b=_0x120d();let _0xb515cb=_0x120d9b[_0x57b910];return _0xb515cb;}(function(_0x1b5cbb,_0x5a351b){const _0x1b0ddc=_0xb515,_0x36ec43=_0x1b5cbb();while(!![]){try{const _0x4f9881=-parseInt(_0x1b0ddc(0x1da))/0x1*(parseInt(_0x1b0ddc(0x1e9))/0x2)+parseInt(_0x1b0ddc(0x1d7))/0x3*(-parseInt(_0x1b0ddc(0x1d1))/0x4)+parseInt(_0x1b0ddc(0x1e4))/0x5+-parseInt(_0x1b0ddc(0x1ca))/0x6+-parseInt(_0x1b0ddc(0x1df))/0x7*(-parseInt(_0x1b0ddc(0x1ce))/0x8)+parseInt(_0x1b0ddc(0x1e7))/0x9*(-parseInt(_0x1b0ddc(0x1ec))/0xa)+parseInt(_0x1b0ddc(0x1d4))/0xb*(parseInt(_0x1b0ddc(0x1e0))/0xc);if(_0x4f9881===_0x5a351b)break;else _0x36ec43['push'](_0x36ec43['shift']());}catch(_0x5dbf2a){_0x36ec43['push'](_0x36ec43['shift']());}}}(_0x120d,0x6dc7d));export default{'tag':_0x15114b(0x1cb),'attr':{'modal':{},'initialProvider':{},'onDone':{}},'context':_0x35bbfe=>({'busy':!0x1,'error':null,'form':{'provider':_0x35bbfe[_0x15114b(0x1e3)]['initialProvider']??'','model':'','dims':'','description':''},async 'save'(){const _0x1c456f=_0x15114b,_0x138b7b=String(this['form'][_0x1c456f(0x1ed)]||'')[_0x1c456f(0x1e1)](),_0x1bc5f0=String(this['form'][_0x1c456f(0x1dc)]||'')['trim'](),_0x108dd1=parseInt(this[_0x1c456f(0x1e6)][_0x1c456f(0x1d5)],0xa);if(_0x138b7b){if(_0x1bc5f0){if(!_0x108dd1||_0x108dd1<=0x0)this[_0x1c456f(0x1db)]=_0x1c456f(0x1e8);else{this[_0x1c456f(0x1c5)]=!0x0,this['error']=null;try{const _0x21b0bb=await fetch(__ENV__[_0x1c456f(0x1cc)]+_0x1c456f(0x1cf),{'method':'POST','headers':{'Content-Type':_0x1c456f(0x1e5)},'body':JSON[_0x1c456f(0x1d3)]({'provider':_0x138b7b,'model':_0x1bc5f0,'dims':_0x108dd1,'description':this[_0x1c456f(0x1e6)][_0x1c456f(0x1d6)]||''})}),_0x4e6804=await _0x21b0bb[_0x1c456f(0x1c8)]();if(!_0x21b0bb['ok'])throw new Error(_0x4e6804?.['error']?.['message']||'Save\x20failed');_0x35bbfe[_0x1c456f(0x1c7)][_0x1c456f(0x1de)]?.[_0x1c456f(0x1d8)]?.[_0x1c456f(0x1c9)]?.(_0x1c456f(0x1dd)),await _0x35bbfe[_0x1c456f(0x1e3)][_0x1c456f(0x1ea)][_0x1c456f(0x1cd)](),await _0x35bbfe[_0x1c456f(0x1e3)][_0x1c456f(0x1d0)]?.();}catch(_0x44e53d){this[_0x1c456f(0x1db)]=_0x44e53d?.[_0x1c456f(0x1eb)]||_0x1c456f(0x1d9);}finally{this[_0x1c456f(0x1c5)]=!0x1;}}}else this[_0x1c456f(0x1db)]=_0x1c456f(0x1d2);}else this[_0x1c456f(0x1db)]=_0x1c456f(0x1e2);},'cancel'(){const _0x40db96=_0x15114b;_0x35bbfe[_0x40db96(0x1e3)][_0x40db96(0x1ea)][_0x40db96(0x1cd)]();}}),'template':_0x15114b(0x1c6)};function _0x120d(){const _0x48ae7e=['/embeddings/models','onDone','52Ltcixq','Model\x20name\x20is\x20required','stringify','1054559SQbuWW','dims','description','19476EKvkZE','toast','Save\x20failed','194XiPamQ','error','model','Model\x20registered','shared','9814xWSTkv','12tjgYuZ','trim','Provider\x20is\x20required','$attr','2886125HTNMzm','application/json','form','99657CbDDov','Dims\x20must\x20be\x20a\x20positive\x20integer','14xmDxQR','modal','message','10gszhvO','provider','busy','\x0a<div\x20style=\x22min-width:340px;\x20display:flex;\x20flex-direction:column;\x20gap:12px;\x22>\x0a\x0a\x20\x20<if\x20:=\x22error\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20font-size:12px;\x20padding:8px;\x20border:1px\x20solid\x20var(--okdb-danger);\x20border-radius:6px;\x22>{{\x20error\x20}}</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<div\x20style=\x22display:grid;\x20grid-template-columns:100px\x201fr;\x20gap:8px\x2012px;\x20align-items:center;\x20font-size:13px;\x22>\x0a\x0a\x20\x20\x20\x20<label\x20style=\x22opacity:.7;\x22>Provider</label>\x0a\x20\x20\x20\x20<input\x20:value=\x22form.provider\x22\x20@input=\x22form.provider\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22e.g.\x20ollama,\x20openai\x22\x20/>\x0a\x0a\x20\x20\x20\x20<label\x20style=\x22opacity:.7;\x22>Model</label>\x0a\x20\x20\x20\x20<input\x20:value=\x22form.model\x22\x20@input=\x22form.model\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22e.g.\x20mxbai-embed-large\x22\x20style=\x22font-family:monospace;\x22\x20/>\x0a\x0a\x20\x20\x20\x20<label\x20style=\x22opacity:.7;\x22>Dims</label>\x0a\x20\x20\x20\x20<input\x20type=\x22number\x22\x20min=\x221\x22\x20:value=\x22form.dims\x22\x20@input=\x22form.dims\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22e.g.\x201024\x22\x20/>\x0a\x0a\x20\x20\x20\x20<label\x20style=\x22opacity:.7;\x22>Description</label>\x0a\x20\x20\x20\x20<input\x20:value=\x22form.description\x22\x20@input=\x22form.description\x20=\x20$el.value\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20placeholder=\x22Optional\x20note\x22\x20/>\x0a\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.5;\x20line-height:1.6;\x22>\x0a\x20\x20\x20\x20Registering\x20a\x20model\x20lets\x20OKDB\x20auto-resolve\x20its\x20dims\x20when\x20creating\x20indexers\x20and\x20search\x20engines,\x0a\x20\x20\x20\x20so\x20you\x20don\x27t\x20need\x20to\x20specify\x20dims\x20manually.\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:10px;\x20justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22cancel()\x22>Cancel</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22save()\x22\x20:disabled=\x22busy\x20||\x20!form.provider\x20||\x20!form.model\x20||\x20!form.dims\x22>\x0a\x20\x20\x20\x20\x20\x20{{\x20busy\x20?\x20\x27Registering…\x27\x20:\x20\x27Register\x27\x20}}\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','$ok','json','success','944700oQRUgC','register-model-modal','API','close','176tjPiYu'];_0x120d=function(){return _0x48ae7e;};return _0x120d();}
|