@kedem/okdb 1.0.1 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/bin/okdb.js +1 -1
  2. package/keys/public.pem +3 -0
  3. package/okdb.js +1 -1
  4. package/package.json +2 -2
  5. package/public/admin-app.js +1 -1
  6. package/public/components/admin-route-host.ok.js +1 -1
  7. package/public/components/env-picker.ok.js +1 -1
  8. package/public/components/field-path-input.ok.js +1 -1
  9. package/public/components/field.html +154 -2
  10. package/public/components/geo-map.ok.js +1 -1
  11. package/public/components/ok-cron-input.ok.js +1 -1
  12. package/public/components/ok-dropzone.ok.js +1 -1
  13. package/public/components/ok-js-input.ok.js +1 -1
  14. package/public/components/ok-json-input.ok.js +1 -1
  15. package/public/components/ok-text-monaco-input.ok.js +1 -1
  16. package/public/components/theme-toggle.ok.js +1 -1
  17. package/public/index.html +29 -2
  18. package/public/layouts/_default.ok.html +1 -1
  19. package/public/layouts/okdb-cube.ok.html +1 -1
  20. package/public/login-app.js +1 -1
  21. package/public/login.html +205 -1
  22. package/public/modules/ok.js +1 -1
  23. package/public/sections/api/index.ok.html +1 -1
  24. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  25. package/public/sections/auth/index.ok.html +1 -1
  26. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  27. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  28. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  29. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  30. package/public/sections/auth/parts/token-list.ok.js +1 -1
  31. package/public/sections/db/index.ok.html +1 -1
  32. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  33. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  34. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  35. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  36. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  37. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  38. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  39. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  40. package/public/sections/db/parts/db-overview.ok.js +1 -1
  41. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  42. package/public/sections/db/parts/edit-row.ok.js +1 -1
  43. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  44. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  45. package/public/sections/db/parts/type-list.ok.js +1 -1
  46. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  47. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  48. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  49. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  50. package/public/sections/docs/index.ok.html +1 -1
  51. package/public/sections/embeddings/index.ok.html +1 -1
  52. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  55. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  56. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  57. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  58. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  59. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  60. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  61. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  62. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  63. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  64. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  65. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  66. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  67. package/public/sections/engines/engine-ui-utils.js +1 -1
  68. package/public/sections/engines/index.ok.html +1 -1
  69. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  70. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  71. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  72. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  73. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  74. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  75. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  76. package/public/sections/files/index.ok.html +1 -1
  77. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  78. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  79. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  80. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  81. package/public/sections/files/parts/files-overview.ok.js +1 -1
  82. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  83. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  84. package/public/sections/functions/index.ok.html +1 -1
  85. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  86. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  87. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  88. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  89. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  90. package/public/sections/license/index.ok.html +1 -1
  91. package/public/sections/license/parts/license-panel.ok.js +1 -1
  92. package/public/sections/processors/index.ok.html +1 -1
  93. package/public/sections/queue/index.ok.html +1 -1
  94. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  95. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  96. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  97. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  98. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  99. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  100. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  101. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  102. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  103. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  104. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  105. package/public/sections/sync/index.ok.html +1 -1
  106. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  107. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  108. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  109. package/public/sections/system/index.ok.html +1 -1
  110. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  111. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  112. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  113. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  114. package/public/sections/system/parts/system-log.ok.js +1 -1
  115. package/public/sections/system/parts/system-status.ok.js +1 -1
  116. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  117. package/public/sections/views/index.ok.html +1 -1
  118. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  119. package/public/sections/views/parts/view-detail.ok.js +1 -1
  120. package/public/sections/views/parts/views-list.ok.js +1 -1
  121. package/public/sections/views/parts/views-overview.ok.js +1 -1
  122. package/public/setup-app.js +1 -1
  123. package/public/setup.html +189 -1
  124. package/public/stores/auth-store.js +1 -1
  125. package/public/stores/events-store.js +1 -1
  126. package/public/stores/functions-store.js +1 -1
  127. package/public/stores/okdb-store.js +1 -1
  128. package/public/stores/theme-store.js +1 -1
  129. package/public/test-cron-input.html +53 -3
  130. package/public/test-json-input.html +182 -3
  131. package/public/util/permissions.js +1 -1
  132. package/public/util/sift-schema.js +1 -1
  133. package/public/vendor/okjs/ok.esm.min.js +1 -2
  134. package/public/view-models/type-query-vm.js +1 -1
  135. package/okdb-data/default/data.mdb +0 -0
  136. package/okdb-data/default/lock.mdb +0 -0
  137. package/okdb-data/~log/data.mdb +0 -0
  138. package/okdb-data/~log/lock.mdb +0 -0
  139. package/okdb-data/~system/data.mdb +0 -0
  140. package/okdb-data/~system/lock.mdb +0 -0
  141. package/public/images/logo.png +0 -0
  142. package/public/images/logo.svg +0 -333
@@ -1 +1 @@
1
- function _0x152a(_0x173a76,_0x465f14){_0x173a76=_0x173a76-0x80;const _0x25cefd=_0x25ce();let _0x152a42=_0x25cefd[_0x173a76];return _0x152a42;}const _0x3a097e=_0x152a;(function(_0x14ea29,_0x4e45d1){const _0x5be16a=_0x152a,_0x1de331=_0x14ea29();while(!![]){try{const _0x5b1c09=-parseInt(_0x5be16a(0xcc))/0x1+parseInt(_0x5be16a(0xb2))/0x2*(parseInt(_0x5be16a(0x90))/0x3)+parseInt(_0x5be16a(0xa2))/0x4+parseInt(_0x5be16a(0x9f))/0x5+parseInt(_0x5be16a(0xc4))/0x6*(parseInt(_0x5be16a(0xb0))/0x7)+parseInt(_0x5be16a(0xa7))/0x8+-parseInt(_0x5be16a(0x83))/0x9*(parseInt(_0x5be16a(0x99))/0xa);if(_0x5b1c09===_0x4e45d1)break;else _0x1de331['push'](_0x1de331['shift']());}catch(_0x1f949d){_0x1de331['push'](_0x1de331['shift']());}}}(_0x25ce,0xa279e));function _0x25ce(){const _0x298c37=['$dispatch','put','Execution\x20context\x20passed\x20to\x20the\x20stored\x20function.\x20Shape\x20depends\x20on\x20scope.','reset','listBuckets','InsertAsSnippet','vs-dark','create','column','12300KbHwIX','Execution\x20metadata:\x20runId,\x20scope,\x20env,\x20functionName,\x20trigger,\x20requestedAt.','stream','Log\x20a\x20','Env\x20files\x20facade\x20method:\x20','lastText','enqueue','payload','897674vgNKMQ','warn','CompletionItemKind','light','9yWBceX','getBucket','Method','slice','ctx.','ctx','languages','ctx.env.','edit','$watch','Files\x20facade\x20scoped\x20to\x20the\x20current\x20environment.','registerCompletionItemProvider','log','6NyeSIv','Variable','Structured\x20logger\x20for\x20this\x20run.\x20Emits\x20persisted\x20function\x20logs\x20and\x20live\x20log\x20events.','CompletionItemInsertTextRule','list','lineNumber','monaco','($1)','queue','20638910tTggNw','javascript','debug','remove','$attr','removeJob','5953960KwYfkb','test','Env\x20facade\x20member:\x20','888984IUkDfm','push','unsafe','Property','\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-monaco\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22height:100%;\x20width:100%;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20language=\x22javascript\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@mount=\x22editorEl\x20=\x20$el\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@editor-change=\x22onText($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22lastText\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:theme=\x22monacoTheme\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:options\x0a\x20\x20\x20\x20\x20\x20\x20\x20></ok-monaco>\x0a\x20\x20\x20\x20','8870296EjLpgf','update','options','query','ensureType','updateJob','AbortSignal\x20tied\x20to\x20the\x20runtime\x20timeout\x20for\x20this\x20execution.','registerType','selection','1526OXOsGp','files','658342TCkzUs','env','name','⚠\x20UNSAFE:\x20Full\x20cross-environment\x20database\x20access.\x20Only\x20available\x20when\x20the\x20function\x20is\x20marked\x20unsafe:\x20true.','getByPath','value','Queue\x20facade\x20scoped\x20to\x20the\x20current\x20environment.','get','info'];_0x25ce=function(){return _0x298c37;};return _0x25ce();}import _0x3e7b35 from'@toolkit/components/ok-monaco.ok.js';import _0x56c5f8 from'../stores/theme-store.js';let n=!0x1,o=!0x1;export default{'tag':'ok-js-input','dependencies':[_0x3e7b35],'attr':{'value':{},'theme':{'default':_0x3a097e(0xc1)},'options':{},'language':{'default':'javascript'},'unsafe':{'default':!0x1}},'context':_0x21fae8=>({'editorEl':null,'lastText':'',get 'monacoTheme'(){const _0x41de84=_0x3a097e;return _0x41de84(0x82)===_0x56c5f8['current']?'vs':'vs-dark';},get 'options'(){const _0x4447dc=_0x3a097e;return{'minimap':{'enabled':!0x1},'automaticLayout':!0x0,'wordWrap':'on','fontSize':0xd,'lineNumbersMinChars':0x3,'scrollBeyondLastLine':!0x1,'renderWhitespace':_0x4447dc(0xaf),'tabSize':0x2,'insertSpaces':!0x0,'fixedOverflowWidgets':!0x0,..._0x21fae8[_0x4447dc(0x9d)][_0x4447dc(0xa9)]};},'onText'(_0x532c61){const _0x6f458a=_0x3a097e;this[_0x6f458a(0xc9)]=_0x532c61??'',_0x21fae8[_0x6f458a(0xbb)](_0x6f458a(0x8b),this[_0x6f458a(0xc9)]);},'reset'(){const _0x2f41b0=_0x3a097e;this[_0x2f41b0(0xc9)]='string'==typeof _0x21fae8[_0x2f41b0(0x9d)]['value']?_0x21fae8[_0x2f41b0(0x9d)][_0x2f41b0(0xb7)]:'';}}),'init'(_0x427066){const _0x3ab73a=_0x3a097e;!(function(){const _0x4f6a83=_0x152a,_0x392c68=globalThis[_0x4f6a83(0x96)];if(!_0x392c68||n)return;n=!0x0;const _0x17dc57={'ctx':_0x4f6a83(0xbd),'ctx.payload':'User-provided\x20payload\x20for\x20the\x20current\x20run.','ctx.info':_0x4f6a83(0xc5),'ctx.log':_0x4f6a83(0x92),'ctx.env':'Live\x20facade\x20for\x20the\x20function\x27s\x20environment.\x20Includes\x20data\x20operations\x20plus\x20env.queue\x20and\x20env.files.','ctx.env.queue':_0x4f6a83(0xb8),'ctx.env.files':_0x4f6a83(0x8d),'ctx.okdb':_0x4f6a83(0xb5),'ctx.signal':_0x4f6a83(0xad)};_0x392c68[_0x4f6a83(0x89)][_0x4f6a83(0x8e)](_0x4f6a83(0x9a),{'triggerCharacters':['.','c'],'provideCompletionItems'(_0x8ec243,_0x3ec75c){const _0x5a7cfe=_0x4f6a83,_0x2aa9d0=_0x8ec243['getLineContent'](_0x3ec75c['lineNumber'])[_0x5a7cfe(0x86)](0x0,_0x3ec75c[_0x5a7cfe(0xc3)]-0x1),_0x49ddbe=[],_0x3f499d=new _0x392c68['Range'](_0x3ec75c[_0x5a7cfe(0x95)],_0x3ec75c[_0x5a7cfe(0xc3)],_0x3ec75c[_0x5a7cfe(0x95)],_0x3ec75c[_0x5a7cfe(0xc3)]);if((/\bctx?$/[_0x5a7cfe(0xa0)](_0x2aa9d0)||/(^|[^\w$])$/[_0x5a7cfe(0xa0)](_0x2aa9d0))&&_0x49ddbe[_0x5a7cfe(0xa3)]({'label':'ctx','kind':_0x392c68[_0x5a7cfe(0x89)][_0x5a7cfe(0x81)][_0x5a7cfe(0x91)],'insertText':_0x5a7cfe(0x88),'documentation':_0x17dc57[_0x5a7cfe(0x88)],'range':_0x3f499d}),/\bctx\.$/[_0x5a7cfe(0xa0)](_0x2aa9d0)){const _0x4c0f83=[_0x5a7cfe(0xcb),_0x5a7cfe(0xba),_0x5a7cfe(0x8f),'signal',_0x5a7cfe(0xb3)];o&&_0x4c0f83[_0x5a7cfe(0xa3)]('okdb');for(const _0x3b5a36 of _0x4c0f83)_0x49ddbe['push']({'label':_0x3b5a36,'kind':_0x392c68[_0x5a7cfe(0x89)][_0x5a7cfe(0x81)][_0x5a7cfe(0xa5)],'insertText':_0x3b5a36,'documentation':_0x17dc57[_0x5a7cfe(0x87)+_0x3b5a36]||'','range':_0x3f499d});}if(/\bctx\.log\.?$/[_0x5a7cfe(0xa0)](_0x2aa9d0)){for(const _0x4e518e of[_0x5a7cfe(0xba),_0x5a7cfe(0x80),'error',_0x5a7cfe(0x9b)])_0x49ddbe[_0x5a7cfe(0xa3)]({'label':_0x4e518e,'kind':_0x392c68[_0x5a7cfe(0x89)][_0x5a7cfe(0x81)]['Method'],'insertText':_0x4e518e+'($1)','insertTextRules':_0x392c68[_0x5a7cfe(0x89)][_0x5a7cfe(0x93)][_0x5a7cfe(0xc0)],'documentation':_0x5a7cfe(0xc7)+_0x4e518e+'\x20message\x20for\x20this\x20function\x20run.','range':_0x3f499d});}if(/\bctx\.env\.$/['test'](_0x2aa9d0)){for(const _0xa29f68 of[_0x5a7cfe(0xb4),'get',_0x5a7cfe(0xbc),_0x5a7cfe(0xa8),'create',_0x5a7cfe(0x9c),_0x5a7cfe(0xaa),'getCount','registerType',_0x5a7cfe(0x98),_0x5a7cfe(0xb1)])_0x49ddbe[_0x5a7cfe(0xa3)]({'label':_0xa29f68,'kind':_0x392c68[_0x5a7cfe(0x89)]['CompletionItemKind'][_0x5a7cfe(0xa5)],'insertText':_0xa29f68,'documentation':_0x17dc57[_0x5a7cfe(0x8a)+_0xa29f68]||_0x5a7cfe(0xa1)+_0xa29f68,'range':_0x3f499d});}if(/\bctx\.env\.queue\.$/[_0x5a7cfe(0xa0)](_0x2aa9d0)){for(const _0x41c884 of[_0x5a7cfe(0xca),'getJob',_0x5a7cfe(0x94),_0x5a7cfe(0xac),_0x5a7cfe(0x9e),'addBucket',_0x5a7cfe(0x84),_0x5a7cfe(0xbf)])_0x49ddbe[_0x5a7cfe(0xa3)]({'label':_0x41c884,'kind':_0x392c68[_0x5a7cfe(0x89)]['CompletionItemKind'][_0x5a7cfe(0x85)],'insertText':_0x41c884+_0x5a7cfe(0x97),'insertTextRules':_0x392c68[_0x5a7cfe(0x89)][_0x5a7cfe(0x93)][_0x5a7cfe(0xc0)],'documentation':'Env\x20queue\x20facade\x20method:\x20'+_0x41c884,'range':_0x3f499d});}if(/\bctx\.env\.files\.$/['test'](_0x2aa9d0)){for(const _0x41e4db of['upload',_0x5a7cfe(0xc6),_0x5a7cfe(0x9c),'get','list',_0x5a7cfe(0xb6)])_0x49ddbe[_0x5a7cfe(0xa3)]({'label':_0x41e4db,'kind':_0x392c68[_0x5a7cfe(0x89)][_0x5a7cfe(0x81)][_0x5a7cfe(0x85)],'insertText':_0x41e4db+'($1)','insertTextRules':_0x392c68['languages'][_0x5a7cfe(0x93)][_0x5a7cfe(0xc0)],'documentation':_0x5a7cfe(0xc8)+_0x41e4db,'range':_0x3f499d});}if(o&&/\bctx\.okdb\.$/[_0x5a7cfe(0xa0)](_0x2aa9d0)){for(const _0x293b36 of[_0x5a7cfe(0xb3),'createEnvironment','removeEnvironment',_0x5a7cfe(0xb9),_0x5a7cfe(0xbc),'update',_0x5a7cfe(0xc2),_0x5a7cfe(0x9c),'query',_0x5a7cfe(0xab),_0x5a7cfe(0xae),_0x5a7cfe(0x98),_0x5a7cfe(0xb1)])_0x49ddbe[_0x5a7cfe(0xa3)]({'label':_0x293b36,'kind':_0x392c68[_0x5a7cfe(0x89)][_0x5a7cfe(0x81)][_0x5a7cfe(0xa5)],'insertText':_0x293b36,'documentation':_0x17dc57['ctx.okdb.'+_0x293b36]||'Global\x20OKDB\x20facade\x20member:\x20'+_0x293b36,'range':_0x3f499d});}return{'suggestions':_0x49ddbe};}});}()),o=!!_0x427066['$attr'][_0x3ab73a(0xa4)],_0x427066[_0x3ab73a(0x8c)](()=>_0x427066[_0x3ab73a(0x9d)][_0x3ab73a(0xa4)],_0x33d546=>{o=!!_0x33d546;}),_0x427066[_0x3ab73a(0x8c)](()=>_0x427066[_0x3ab73a(0x9d)][_0x3ab73a(0xb7)],()=>{const _0xcd00f4=_0x3ab73a;(_0x427066[_0xcd00f4(0x9d)][_0xcd00f4(0xb7)]??'')!==this[_0xcd00f4(0xc9)]&&this[_0xcd00f4(0xbe)]();}),this[_0x3ab73a(0xbe)]();},'template':_0x3a097e(0xa6),'style':'\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-height:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20ok-monaco\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-height:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20ok-monaco\x20>\x20div\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20width:\x20100%\x20!important;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20height:\x20100%\x20!important;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20box-sizing:\x20border-box;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20'};
1
+ import e from"@toolkit/components/ok-monaco.ok.js";import t from"../stores/theme-store.js";let n=!1,o=!1;export default{tag:"ok-js-input",dependencies:[e],attr:{value:{},theme:{default:"vs-dark"},options:{},language:{default:"javascript"},unsafe:{default:!1}},context:e=>({editorEl:null,lastText:"",get monacoTheme(){return"light"===t.current?"vs":"vs-dark"},get options(){return{minimap:{enabled:!1},automaticLayout:!0,wordWrap:"on",fontSize:13,lineNumbersMinChars:3,scrollBeyondLastLine:!1,renderWhitespace:"selection",tabSize:2,insertSpaces:!0,fixedOverflowWidgets:!0,...e.$attr.options}},onText(t){this.lastText=t??"",e.$dispatch("edit",this.lastText)},reset(){this.lastText="string"==typeof e.$attr.value?e.$attr.value:""}}),init(e){!function(){const e=globalThis.monaco;if(!e||n)return;n=!0;const t={ctx:"Execution context passed to the stored function. Shape depends on scope.","ctx.payload":"User-provided payload for the current run.","ctx.info":"Execution metadata: runId, scope, env, functionName, trigger, requestedAt.","ctx.log":"Structured logger for this run. Emits persisted function logs and live log events.","ctx.env":"Live facade for the function's environment. Includes data operations plus env.queue and env.files.","ctx.env.queue":"Queue facade scoped to the current environment.","ctx.env.files":"Files facade scoped to the current environment.","ctx.okdb":"⚠ UNSAFE: Full cross-environment database access. Only available when the function is marked unsafe: true.","ctx.signal":"AbortSignal tied to the runtime timeout for this execution."};e.languages.registerCompletionItemProvider("javascript",{triggerCharacters:[".","c"],provideCompletionItems(n,a){const i=n.getLineContent(a.lineNumber).slice(0,a.column-1),s=[],r=new e.Range(a.lineNumber,a.column,a.lineNumber,a.column);if((/\bctx?$/.test(i)||/(^|[^\w$])$/.test(i))&&s.push({label:"ctx",kind:e.languages.CompletionItemKind.Variable,insertText:"ctx",documentation:t.ctx,range:r}),/\bctx\.$/.test(i)){const n=["payload","info","log","signal","env"];o&&n.push("okdb");for(const o of n)s.push({label:o,kind:e.languages.CompletionItemKind.Property,insertText:o,documentation:t[`ctx.${o}`]||"",range:r})}if(/\bctx\.log\.?$/.test(i))for(const t of["info","warn","error","debug"])s.push({label:t,kind:e.languages.CompletionItemKind.Method,insertText:`${t}($1)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,documentation:`Log a ${t} message for this function run.`,range:r});if(/\bctx\.env\.$/.test(i))for(const n of["name","get","put","update","create","remove","query","getCount","registerType","queue","files"])s.push({label:n,kind:e.languages.CompletionItemKind.Property,insertText:n,documentation:t[`ctx.env.${n}`]||`Env facade member: ${n}`,range:r});if(/\bctx\.env\.queue\.$/.test(i))for(const t of["enqueue","getJob","list","updateJob","removeJob","addBucket","getBucket","listBuckets"])s.push({label:t,kind:e.languages.CompletionItemKind.Method,insertText:`${t}($1)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,documentation:`Env queue facade method: ${t}`,range:r});if(/\bctx\.env\.files\.$/.test(i))for(const t of["upload","stream","remove","get","list","getByPath"])s.push({label:t,kind:e.languages.CompletionItemKind.Method,insertText:`${t}($1)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,documentation:`Env files facade method: ${t}`,range:r});if(o&&/\bctx\.okdb\.$/.test(i))for(const n of["env","createEnvironment","removeEnvironment","get","put","update","create","remove","query","ensureType","registerType","queue","files"])s.push({label:n,kind:e.languages.CompletionItemKind.Property,insertText:n,documentation:t[`ctx.okdb.${n}`]||`Global OKDB facade member: ${n}`,range:r});return{suggestions:s}}})}(),o=!!e.$attr.unsafe,e.$watch(()=>e.$attr.unsafe,e=>{o=!!e}),e.$watch(()=>e.$attr.value,()=>{(e.$attr.value??"")!==this.lastText&&this.reset()}),this.reset()},template:'\n <ok-monaco\n style="height:100%; width:100%;"\n language="javascript"\n @mount="editorEl = $el"\n @editor-change="onText($event.detail)"\n :value="lastText"\n :theme="monacoTheme"\n :options\n ></ok-monaco>\n ',style:"\n [tag] {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n }\n\n [tag] ok-monaco {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n }\n\n [tag] ok-monaco > div {\n flex: 1;\n width: 100% !important;\n height: 100% !important;\n box-sizing: border-box;\n }\n "};
@@ -1 +1 @@
1
- const _0x3b476e=_0x27ac;(function(_0x183ba9,_0x35ea45){const _0x58d879=_0x27ac,_0x4aa83d=_0x183ba9();while(!![]){try{const _0xdbd933=-parseInt(_0x58d879(0xef))/0x1*(parseInt(_0x58d879(0x10b))/0x2)+-parseInt(_0x58d879(0xd9))/0x3+-parseInt(_0x58d879(0x11d))/0x4*(-parseInt(_0x58d879(0xfa))/0x5)+-parseInt(_0x58d879(0xf4))/0x6*(parseInt(_0x58d879(0x118))/0x7)+-parseInt(_0x58d879(0x103))/0x8*(parseInt(_0x58d879(0xe0))/0x9)+parseInt(_0x58d879(0x109))/0xa+parseInt(_0x58d879(0x10d))/0xb;if(_0xdbd933===_0x35ea45)break;else _0x4aa83d['push'](_0x4aa83d['shift']());}catch(_0x3e7e96){_0x4aa83d['push'](_0x4aa83d['shift']());}}}(_0x174b,0xb4a45));import _0x58259a from'@toolkit/components/ok-monaco.ok.js';import _0x22e818 from'../stores/theme-store.js';function _0x174b(){const _0x1c4c94=['shiftKey','editorEl','parse','7zUUUjp','push','getEditor','KeyCode','monaco','224836DqjhFP','none','change','input','175482sUSmwt','languages','message','mode','$ok','options','schema','9cFhdiN','lineNumber','parse-error','mergeClass','lastValid','$attr','stopPropagation','auto','\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag].textbox\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:1;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex-direction:column;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-height:0;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20width:100%;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag].input\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:inline-flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:0;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20width:auto;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-width:12rem;\x20/*\x20or\x20whatever\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20height:2rem;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x20the\x20editor\x20container\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20ok-monaco\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-height:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x20force\x20monaco\x20inner\x20container\x20to\x20fill\x20space\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20ok-monaco\x20>\x20div\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20width:\x20100%\x20!important;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20height:\x20100%\x20!important;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20box-sizing:\x20border-box;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20','metaKey','hidden','$dispatch','toString','_schemaUri','jsonDefaults','10tsRTsk','getPositionAt','resetEditor','commitOnEnter','setDiagnosticsOptions','482772oFVnVQ','solid','$watch','stringify','MarkerSeverity','off','35LnGUsE','onKeyDown','column','updateOptions','match','current','delete','set','onText','5100808tBTCSP','$cache','value','json','getModel','util','7434070DMAKFu','editor','114074tJrIcu','setModelMarkers','10449626MnIASI','textbox','applyValidationMarkers','vs-dark','edit','lastText','Enter','ok-json-input'];_0x174b=function(){return _0x1c4c94;};return _0x174b();}const n=new Map();function i(){const _0x492175=_0x27ac,_0x3adc9c=window['monaco'];if(!_0x3adc9c?.[_0x492175(0xda)]?.['json']?.[_0x492175(0xee)])return;const _0x34ae41=[];for(const [_0xdc5241,_0x455218]of n)_0x34ae41[_0x492175(0x119)]({'uri':_0xdc5241,'fileMatch':[_0xdc5241],'schema':_0x455218});_0x3adc9c[_0x492175(0xda)][_0x492175(0x106)][_0x492175(0xee)][_0x492175(0xf3)]({'validate':!0x0,'allowComments':!0x1,'enableSchemaRequest':!0x1,'schemas':_0x34ae41});}function _0x27ac(_0x5f3f4f,_0x289300){_0x5f3f4f=_0x5f3f4f-0xd9;const _0x174b2a=_0x174b();let _0x27acfa=_0x174b2a[_0x5f3f4f];return _0x27acfa;}export default{'tag':_0x3b476e(0x114),'dependencies':[_0x58259a],'attr':{'value':{},'mode':{'default':_0x3b476e(0x10e)},'theme':{'default':_0x3b476e(0x110)},'class':{'transform':(_0x5422b2,_0x255e87)=>_0x5422b2[_0x3b476e(0xdd)][_0x3b476e(0x108)][_0x3b476e(0xe3)](_0x255e87,_0x5422b2[_0x3b476e(0xe5)]['mode'])},'options':{},'commitOnEnter':{'default':!0x0},'schema':{}},'context':_0x3e6440=>({'editorEl':null,'lastValid':null,'lastText':'','_schemaUri':null,get 'monacoTheme'(){const _0x4062a1=_0x3b476e;return'light'===_0x22e818[_0x4062a1(0xff)]?'vs':'vs-dark';},get 'mode'(){const _0x586519=_0x3b476e;return _0x3e6440[_0x586519(0xe5)][_0x586519(0xdc)];},get 'options'(){const _0x56e355=_0x3b476e,_0xa6a1e1=!!_0x3e6440[_0x56e355(0xe5)][_0x56e355(0xdf)];return{'lineNumbers':'off','glyphMargin':!0x1,'folding':!0x1,'renderLineHighlight':_0x56e355(0x11e),'lineDecorationsWidth':0x0,'lineNumbersMinChars':0x0,'minimap':{'enabled':!0x1},'overviewRulerBorder':!0x1,'overviewRulerLanes':0x0,'renderWhitespace':_0x56e355(0x11e),'renderIndentGuides':!0x1,'guides':{'indentation':!0x1,'highlightActiveIndentation':!0x1},'padding':{'top':0x0,'bottom':0x0},'cursorSmoothCaretAnimation':!0x1,'cursorBlinking':_0x56e355(0xf5),'quickSuggestions':_0xa6a1e1,'suggestOnTriggerCharacters':_0xa6a1e1,'parameterHints':{'enabled':!0x1},'contextmenu':!0x1,'rulers':[],'fixedOverflowWidgets':!0x0,..._0x56e355(0x120)===this[_0x56e355(0xdc)]?{'wordWrap':_0x56e355(0xf9),'scrollbar':{'vertical':_0x56e355(0xea),'horizontal':'hidden','useShadows':!0x1}}:{'wordWrap':'on','scrollbar':{'vertical':_0x56e355(0xe7),'horizontal':_0x56e355(0xea),'useShadows':!0x1}},..._0x3e6440['$attr'][_0x56e355(0xde)]};},'stringify'(_0x366680){const _0x35ae85=_0x3b476e;if(void 0x0===_0x366680)return'';try{return _0x35ae85(0x120)===this[_0x35ae85(0xdc)]?JSON[_0x35ae85(0xf7)](_0x366680):JSON[_0x35ae85(0xf7)](_0x366680,null,'\x09');}catch{return String(_0x366680??'');}},'applyValidationMarkers'(_0x55a466){const _0x53bb64=_0x3b476e,_0x3e9d34=window[_0x53bb64(0x11c)],_0x5a5595=this[_0x53bb64(0x11a)]();if(!_0x3e9d34||!_0x5a5595)return null;const _0x243f6b=_0x5a5595[_0x53bb64(0x107)]();try{const _0x5013ff=JSON[_0x53bb64(0x117)](_0x55a466);return _0x3e9d34[_0x53bb64(0x10a)][_0x53bb64(0x10c)](_0x243f6b,_0x53bb64(0x106),[]),_0x5013ff;}catch(_0x2643e9){const _0x4c84b3=_0x2643e9[_0x53bb64(0xdb)],_0x52ebe3=_0x4c84b3[_0x53bb64(0xfe)](/at position (\d+)/),_0x1cebdf=_0x52ebe3?parseInt(_0x52ebe3[0x1],0xa):0x0,_0x1259e9=_0x243f6b[_0x53bb64(0xf0)](_0x1cebdf);return _0x3e9d34[_0x53bb64(0x10a)][_0x53bb64(0x10c)](_0x243f6b,_0x53bb64(0x106),[{'startLineNumber':_0x1259e9[_0x53bb64(0xe1)],'startColumn':_0x1259e9[_0x53bb64(0xfc)],'endLineNumber':_0x1259e9[_0x53bb64(0xe1)],'endColumn':_0x1259e9[_0x53bb64(0xfc)]+0x1,'message':_0x4c84b3,'severity':_0x3e9d34[_0x53bb64(0xf8)]['Error']}]),_0x2643e9;}},'getEditor'(){const _0x37892f=_0x3b476e;return this[_0x37892f(0x116)]?.['$scope']?.[_0x37892f(0x104)]?.[_0x37892f(0x10a)]||null;},'onText'(_0xb97c98,_0x17fb67=!0x0){const _0x1e3236=_0x3b476e;if(_0xb97c98===this['lastText'])return;this[_0x1e3236(0x112)]=_0xb97c98;const _0x5bafa0=this[_0x1e3236(0x10f)](_0xb97c98);_0x5bafa0 instanceof Error?_0x17fb67&&_0x3e6440[_0x1e3236(0xeb)](_0x1e3236(0xe2),!0x0):(this['lastValid']=_0x5bafa0,_0x17fb67&&(_0x3e6440[_0x1e3236(0xeb)](_0x1e3236(0x111),_0x5bafa0),_0x3e6440[_0x1e3236(0xeb)](_0x1e3236(0xe2),!0x1)));},'resetEditor'(_0x57dec6=!0x0){const _0x59f20e=_0x3b476e,_0x4af27f=this[_0x59f20e(0xf7)](_0x3e6440[_0x59f20e(0xe5)][_0x59f20e(0x105)]);this[_0x59f20e(0x102)](_0x4af27f,_0x57dec6);}}),'init'(_0x4975ca){const _0x149337=_0x3b476e;_0x4975ca['$watch'](()=>_0x4975ca[_0x149337(0xe5)]['value'],()=>{const _0x44b184=_0x149337;_0x4975ca[_0x44b184(0xe5)][_0x44b184(0x105)]!==this[_0x44b184(0xe4)]&&this[_0x44b184(0xf1)]();}),this['getEditor']()[_0x149337(0xfb)](_0x3c6d22=>{const _0x19549c=_0x149337;_0x3c6d22['keyCode']===monaco[_0x19549c(0x11b)][_0x19549c(0x113)]&&(_0x4975ca[_0x19549c(0xe5)][_0x19549c(0xf2)]&&!_0x3c6d22[_0x19549c(0x115)]||!_0x4975ca[_0x19549c(0xe5)][_0x19549c(0xf2)]&&(_0x3c6d22['ctrlKey']||_0x3c6d22[_0x19549c(0xe9)]))&&(_0x3c6d22['preventDefault'](),_0x3c6d22[_0x19549c(0xe6)](),''===this[_0x19549c(0x112)]?_0x4975ca[_0x19549c(0xeb)](_0x19549c(0x11f),void 0x0):null!==this[_0x19549c(0xe4)]&&_0x4975ca[_0x19549c(0xeb)]('change',this[_0x19549c(0xe4)]));}),this[_0x149337(0xf1)](!0x1);const _0x4ff671=()=>{const _0xb1f424=_0x149337;if(this['_schemaUri'])return this[_0xb1f424(0xed)];const _0x5dd08f=this['getEditor']();return _0x5dd08f?(this[_0xb1f424(0xed)]=_0x5dd08f['getModel']()?.['uri']?.[_0xb1f424(0xec)]()??null,this['_schemaUri']):null;},_0x4cceee=_0x16cfb7=>{const _0x573476=_0x149337,_0x7818f3=_0x4ff671();if(!_0x7818f3)return;if(_0x16cfb7){let _0xfa3773;try{_0xfa3773=JSON[_0x573476(0x117)](JSON['stringify'](_0x16cfb7));}catch{_0xfa3773=_0x16cfb7;}n[_0x573476(0x101)](_0x7818f3,_0xfa3773);}else n[_0x573476(0x100)](_0x7818f3);i();const _0x264d95=this[_0x573476(0x11a)]();_0x264d95&&_0x264d95[_0x573476(0xfd)]({'quickSuggestions':!!_0x16cfb7,'suggestOnTriggerCharacters':!!_0x16cfb7,'fixedOverflowWidgets':!0x0});};_0x4975ca[_0x149337(0xe5)][_0x149337(0xdf)]&&_0x4cceee(_0x4975ca[_0x149337(0xe5)]['schema']),_0x4975ca[_0x149337(0xf6)](()=>_0x4975ca[_0x149337(0xe5)][_0x149337(0xdf)],_0x1aba90=>{_0x4cceee(_0x1aba90);});},'unmount'(){const _0xf00b7c=_0x3b476e;this[_0xf00b7c(0xed)]&&(n[_0xf00b7c(0x100)](this[_0xf00b7c(0xed)]),i(),this[_0xf00b7c(0xed)]=null);},'template':'\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-monaco\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22height:\x20100%\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20language=\x22json\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@mount=\x22editorEl\x20=\x20$el\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@editor-change=\x22onText($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22lastText\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:theme=\x22monacoTheme\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:options\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20></ok-monaco>\x0a\x20\x20\x20\x20','style':_0x3b476e(0xe8)};
1
+ import t from"@toolkit/components/ok-monaco.ok.js";import e from"../stores/theme-store.js";const n=new Map;function i(){const t=window.monaco;if(!t?.languages?.json?.jsonDefaults)return;const e=[];for(const[t,i]of n)e.push({uri:t,fileMatch:[t],schema:i});t.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,enableSchemaRequest:!1,schemas:e})}export default{tag:"ok-json-input",dependencies:[t],attr:{value:{},mode:{default:"textbox"},theme:{default:"vs-dark"},class:{transform:(t,e)=>t.$ok.util.mergeClass(e,t.$attr.mode)},options:{},commitOnEnter:{default:!0},schema:{}},context:t=>({editorEl:null,lastValid:null,lastText:"",_schemaUri:null,get monacoTheme(){return"light"===e.current?"vs":"vs-dark"},get mode(){return t.$attr.mode},get options(){const e=!!t.$attr.schema;return{lineNumbers:"off",glyphMargin:!1,folding:!1,renderLineHighlight:"none",lineDecorationsWidth:0,lineNumbersMinChars:0,minimap:{enabled:!1},overviewRulerBorder:!1,overviewRulerLanes:0,renderWhitespace:"none",renderIndentGuides:!1,guides:{indentation:!1,highlightActiveIndentation:!1},padding:{top:0,bottom:0},cursorSmoothCaretAnimation:!1,cursorBlinking:"solid",quickSuggestions:e,suggestOnTriggerCharacters:e,parameterHints:{enabled:!1},contextmenu:!1,rulers:[],fixedOverflowWidgets:!0,..."input"===this.mode?{wordWrap:"off",scrollbar:{vertical:"hidden",horizontal:"hidden",useShadows:!1}}:{wordWrap:"on",scrollbar:{vertical:"auto",horizontal:"hidden",useShadows:!1}},...t.$attr.options}},stringify(t){if(void 0===t)return"";try{return"input"===this.mode?JSON.stringify(t):JSON.stringify(t,null,"\t")}catch{return String(t??"")}},applyValidationMarkers(t){const e=window.monaco,n=this.getEditor();if(!e||!n)return null;const i=n.getModel();try{const n=JSON.parse(t);return e.editor.setModelMarkers(i,"json",[]),n}catch(t){const n=t.message,r=n.match(/at position (\d+)/),o=r?parseInt(r[1],10):0,s=i.getPositionAt(o);return e.editor.setModelMarkers(i,"json",[{startLineNumber:s.lineNumber,startColumn:s.column,endLineNumber:s.lineNumber,endColumn:s.column+1,message:n,severity:e.MarkerSeverity.Error}]),t}},getEditor(){return this.editorEl?.$scope?.$cache?.editor||null},onText(e,n=!0){if(e===this.lastText)return;this.lastText=e;const i=this.applyValidationMarkers(e);i instanceof Error?n&&t.$dispatch("parse-error",!0):(this.lastValid=i,n&&(t.$dispatch("edit",i),t.$dispatch("parse-error",!1)))},resetEditor(e=!0){const n=this.stringify(t.$attr.value);this.onText(n,e)}}),init(t){t.$watch(()=>t.$attr.value,()=>{t.$attr.value!==this.lastValid&&this.resetEditor()}),this.getEditor().onKeyDown(e=>{e.keyCode===monaco.KeyCode.Enter&&(t.$attr.commitOnEnter&&!e.shiftKey||!t.$attr.commitOnEnter&&(e.ctrlKey||e.metaKey))&&(e.preventDefault(),e.stopPropagation(),""===this.lastText?t.$dispatch("change",void 0):null!==this.lastValid&&t.$dispatch("change",this.lastValid))}),this.resetEditor(!1);const e=()=>{if(this._schemaUri)return this._schemaUri;const t=this.getEditor();return t?(this._schemaUri=t.getModel()?.uri?.toString()??null,this._schemaUri):null},r=t=>{const r=e();if(!r)return;if(t){let e;try{e=JSON.parse(JSON.stringify(t))}catch{e=t}n.set(r,e)}else n.delete(r);i();const o=this.getEditor();o&&o.updateOptions({quickSuggestions:!!t,suggestOnTriggerCharacters:!!t,fixedOverflowWidgets:!0})};t.$attr.schema&&r(t.$attr.schema),t.$watch(()=>t.$attr.schema,t=>{r(t)})},unmount(){this._schemaUri&&(n.delete(this._schemaUri),i(),this._schemaUri=null)},template:'\n <ok-monaco\n style="height: 100%"\n language="json"\n @mount="editorEl = $el"\n @editor-change="onText($event.detail)"\n :value="lastText"\n :theme="monacoTheme"\n :options\n ></ok-monaco>\n ',style:"\n [tag].textbox {\n display:flex;\n flex:1;\n flex-direction:column;\n min-height:0;\n width:100%;\n }\n \n [tag].input {\n display:inline-flex;\n flex:0;\n width:auto;\n min-width:12rem; /* or whatever */\n height:2rem;\n }\n \n /* the editor container */\n [tag] ok-monaco {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n }\n\n /* force monaco inner container to fill space */\n [tag] ok-monaco > div {\n flex: 1;\n width: 100% !important;\n height: 100% !important;\n box-sizing: border-box;\n }\n "};
@@ -1 +1 @@
1
- function _0x2df6(_0x17ec22,_0x592a24){_0x17ec22=_0x17ec22-0x1f2;var _0x18f805=_0x18f8();var _0x2df69a=_0x18f805[_0x17ec22];return _0x2df69a;}var _0x3a4cde=_0x2df6;(function(_0x954f71,_0x1c3c33){var _0x419323=_0x2df6,_0x2f0883=_0x954f71();while(!![]){try{var _0x40d821=parseInt(_0x419323(0x1f5))/0x1*(-parseInt(_0x419323(0x203))/0x2)+-parseInt(_0x419323(0x1f3))/0x3+-parseInt(_0x419323(0x1fc))/0x4+-parseInt(_0x419323(0x200))/0x5*(-parseInt(_0x419323(0x1fd))/0x6)+-parseInt(_0x419323(0x1f2))/0x7+parseInt(_0x419323(0x201))/0x8*(-parseInt(_0x419323(0x1f7))/0x9)+parseInt(_0x419323(0x1fa))/0xa*(parseInt(_0x419323(0x202))/0xb);if(_0x40d821===_0x1c3c33)break;else _0x2f0883['push'](_0x2f0883['shift']());}catch(_0x17e1b2){_0x2f0883['push'](_0x2f0883['shift']());}}}(_0x18f8,0x63f35));function _0x18f8(){var _0x2c3db7=['830118KDCSqe','value','727ZuSQmT','lastText','18MqEtQi','$watch','reset','90IBNWti','\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-height:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20ok-monaco\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:\x20flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20min-height:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20ok-monaco\x20>\x20div\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20flex:\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20width:\x20100%\x20!important;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20height:\x20100%\x20!important;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20box-sizing:\x20border-box;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20','1471632bvbrib','29238dBSFVf','options','json','710CqMugg','3167352dqtxjs','1761089HRjUVl','594rIaXkt','ok-text-monaco-input','$attr','vs-dark','497623DvslnY'];_0x18f8=function(){return _0x2c3db7;};return _0x18f8();}import _0x2bfb04 from'@toolkit/components/ok-monaco.ok.js';import _0x466505 from'../stores/theme-store.js';export default{'tag':_0x3a4cde(0x204),'dependencies':[_0x2bfb04],'attr':{'value':{},'theme':{'default':_0x3a4cde(0x206)},'options':{},'language':{'default':_0x3a4cde(0x1ff)}},'context':_0x8c4d3f=>({'lastText':'',get 'monacoTheme'(){var _0x47b4a3=_0x3a4cde;return'light'===_0x466505['current']?'vs':_0x47b4a3(0x206);},get 'options'(){var _0x24689c=_0x3a4cde;return{'minimap':{'enabled':!0x1},'automaticLayout':!0x0,'wordWrap':'on','fontSize':0xd,'scrollBeyondLastLine':!0x1,'fixedOverflowWidgets':!0x0,..._0x8c4d3f[_0x24689c(0x205)][_0x24689c(0x1fe)]};},'onText'(_0x446a57){var _0x35ae0a=_0x3a4cde;this[_0x35ae0a(0x1f6)]=_0x446a57??'',_0x8c4d3f['$dispatch']('edit',this[_0x35ae0a(0x1f6)]);},'reset'(){var _0x4f73c6=_0x3a4cde;this['lastText']='string'==typeof _0x8c4d3f[_0x4f73c6(0x205)][_0x4f73c6(0x1f4)]?_0x8c4d3f['$attr'][_0x4f73c6(0x1f4)]:'';}}),'init'(_0x394d3a){var _0x17fa94=_0x3a4cde;_0x394d3a[_0x17fa94(0x1f8)](()=>_0x394d3a[_0x17fa94(0x205)]['value'],()=>{var _0x282c65=_0x17fa94;(_0x394d3a[_0x282c65(0x205)][_0x282c65(0x1f4)]??'')!==this['lastText']&&this[_0x282c65(0x1f9)]();}),this[_0x17fa94(0x1f9)]();},'template':'\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-monaco\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20style=\x22height:100%;\x20width:100%;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:language=\x22$attr.language\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@editor-change=\x22onText($event.detail)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:value=\x22lastText\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:theme=\x22monacoTheme\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:options\x0a\x20\x20\x20\x20\x20\x20\x20\x20></ok-monaco>\x0a\x20\x20\x20\x20','style':_0x3a4cde(0x1fb)};
1
+ import t from"@toolkit/components/ok-monaco.ok.js";import e from"../stores/theme-store.js";export default{tag:"ok-text-monaco-input",dependencies:[t],attr:{value:{},theme:{default:"vs-dark"},options:{},language:{default:"json"}},context:t=>({lastText:"",get monacoTheme(){return"light"===e.current?"vs":"vs-dark"},get options(){return{minimap:{enabled:!1},automaticLayout:!0,wordWrap:"on",fontSize:13,scrollBeyondLastLine:!1,fixedOverflowWidgets:!0,...t.$attr.options}},onText(e){this.lastText=e??"",t.$dispatch("edit",this.lastText)},reset(){this.lastText="string"==typeof t.$attr.value?t.$attr.value:""}}),init(t){t.$watch(()=>t.$attr.value,()=>{(t.$attr.value??"")!==this.lastText&&this.reset()}),this.reset()},template:'\n <ok-monaco\n style="height:100%; width:100%;"\n :language="$attr.language"\n @editor-change="onText($event.detail)"\n :value="lastText"\n :theme="monacoTheme"\n :options\n ></ok-monaco>\n ',style:"\n [tag] {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n }\n\n [tag] ok-monaco {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n }\n\n [tag] ok-monaco > div {\n flex: 1;\n width: 100% !important;\n height: 100% !important;\n box-sizing: border-box;\n }\n "};
@@ -1 +1 @@
1
- const _0x317443=_0x5b04;function _0x5b04(_0xb493c,_0xa8c75e){_0xb493c=_0xb493c-0x177;const _0x2c97e4=_0x2c97();let _0x5b04c5=_0x2c97e4[_0xb493c];return _0x5b04c5;}(function(_0x28e63f,_0x57dab8){const _0x443f7e=_0x5b04,_0x4c94ee=_0x28e63f();while(!![]){try{const _0x31a6de=-parseInt(_0x443f7e(0x186))/0x1*(-parseInt(_0x443f7e(0x17f))/0x2)+parseInt(_0x443f7e(0x187))/0x3+-parseInt(_0x443f7e(0x182))/0x4*(-parseInt(_0x443f7e(0x183))/0x5)+parseInt(_0x443f7e(0x177))/0x6+parseInt(_0x443f7e(0x181))/0x7+-parseInt(_0x443f7e(0x17c))/0x8*(-parseInt(_0x443f7e(0x17b))/0x9)+-parseInt(_0x443f7e(0x179))/0xa;if(_0x31a6de===_0x57dab8)break;else _0x4c94ee['push'](_0x4c94ee['shift']());}catch(_0x247724){_0x4c94ee['push'](_0x4c94ee['shift']());}}}(_0x2c97,0x5836a));import _0x421fa2 from'../stores/theme-store.js';function _0x2c97(){const _0x3e6af0=['\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20position:\x20fixed;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20top:\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20right:\x208px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20z-index:\x209999;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20line-height:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20.theme-toggle__btn\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20width:\x2028px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20height:\x2028px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20padding:\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20display:\x20inline-flex;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20align-items:\x20center;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20justify-content:\x20center;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x2050%;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20var(--okdb-app-border);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20background:\x20var(--okdb-app-surface-2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-app-fg-muted);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cursor:\x20pointer;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20transition:\x20background\x20.15s,\x20color\x20.15s,\x20border-color\x20.15s,\x20transform\x20.1s;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20.theme-toggle__btn:hover\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20background:\x20var(--okdb-app-surface-3);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20border-color:\x20var(--okdb-app-border-strong);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20color:\x20var(--okdb-app-fg);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20transform:\x20none;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20box-shadow:\x20none;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20[tag]\x20.theme-toggle__btn:active\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20transform:\x20scale(0.94);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20','5571YJkvvn','7672VfRADM','toggle','$ext','30638aaauyb','current','3639160qvIYck','32dEFFRf','121370qvjKDg','\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22theme-toggle__btn\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:title=\x22current\x20===\x20\x27dark\x27\x20?\x20\x27Switch\x20to\x20light\x20mode\x27\x20:\x20\x27Switch\x20to\x20dark\x20mode\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:aria-label=\x22current\x20===\x20\x27dark\x27\x20?\x20\x27Switch\x20to\x20light\x20mode\x27\x20:\x20\x27Switch\x20to\x20dark\x20mode\x27\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22toggle()\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22current\x20===\x20\x27dark\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20sun\x20icon\x20(currently\x20dark,\x20click\x20→\x20light)\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20width=\x2216\x22\x20height=\x2216\x22\x20fill=\x22none\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x224\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M12\x202v2M12\x2020v2M4.93\x204.93l1.41\x201.41M17.66\x2017.66l1.41\x201.41M2\x2012h2M20\x2012h2M4.93\x2019.07l1.41-1.41M17.66\x206.34l1.41-1.41\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\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\x20\x20<if\x20:=\x22current\x20===\x20\x27light\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20moon\x20icon\x20(currently\x20light,\x20click\x20→\x20dark)\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20width=\x2216\x22\x20height=\x2216\x22\x20fill=\x22none\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M21\x2012.79A9\x209\x200\x201\x201\x2011.21\x203\x207\x207\x200\x200\x200\x2021\x2012.79z\x22/>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20','subscribe','13ZONMLj','1497609bjLExT','5250ZVcldE','unmount','16455960EwGJWr'];_0x2c97=function(){return _0x3e6af0;};return _0x2c97();}export default{'tag':'theme-toggle','context'(_0x272226){const _0x480c81=_0x5b04,_0x40548e={'current':_0x421fa2['current'],'toggle'(){const _0x4507d3=_0x5b04;_0x421fa2[_0x4507d3(0x17d)]();}},_0x5d98d1=_0x421fa2[_0x480c81(0x185)](_0x3db1ea=>{const _0x4756a3=_0x480c81;_0x40548e[_0x4756a3(0x180)]=_0x3db1ea;});return _0x272226[_0x480c81(0x17e)](_0x480c81(0x178),_0x5d98d1),_0x40548e;},'template':_0x317443(0x184),'style':_0x317443(0x17a)};
1
+ import n from"../stores/theme-store.js";export default{tag:"theme-toggle",context(t){const r={current:n.current,toggle(){n.toggle()}},e=n.subscribe(n=>{r.current=n});return t.$ext("unmount",e),r},template:'\n <button\n class="theme-toggle__btn"\n :title="current === \'dark\' ? \'Switch to light mode\' : \'Switch to dark mode\'"\n :aria-label="current === \'dark\' ? \'Switch to light mode\' : \'Switch to dark mode\'"\n @click="toggle()"\n >\n <if :="current === \'dark\'">\n \x3c!-- sun icon (currently dark, click → light) --\x3e\n <svg viewBox="0 0 24 24" width="16" height="16" fill="none"\n stroke="currentColor" stroke-width="2"\n stroke-linecap="round" stroke-linejoin="round">\n <circle cx="12" cy="12" r="4"/>\n <path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"/>\n </svg>\n </if>\n <if :="current === \'light\'">\n \x3c!-- moon icon (currently light, click → dark) --\x3e\n <svg viewBox="0 0 24 24" width="16" height="16" fill="none"\n stroke="currentColor" stroke-width="2"\n stroke-linecap="round" stroke-linejoin="round">\n <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>\n </svg>\n </if>\n </button>\n ',style:"\n [tag] {\n position: fixed;\n top: 8px;\n right: 8px;\n z-index: 9999;\n line-height: 0;\n }\n [tag] .theme-toggle__btn {\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n border: 1px solid var(--okdb-app-border);\n background: var(--okdb-app-surface-2);\n color: var(--okdb-app-fg-muted);\n cursor: pointer;\n transition: background .15s, color .15s, border-color .15s, transform .1s;\n }\n [tag] .theme-toggle__btn:hover {\n background: var(--okdb-app-surface-3);\n border-color: var(--okdb-app-border-strong);\n color: var(--okdb-app-fg);\n transform: none;\n box-shadow: none;\n }\n [tag] .theme-toggle__btn:active {\n transform: scale(0.94);\n }\n "};
package/public/index.html CHANGED
@@ -1,6 +1,33 @@
1
- <!DOCTYPE html><html lang="en"><head><base href="./"><meta charset="UTF-8"><title>OKDB</title><link rel="stylesheet" href="styles.css"><link rel="icon" type="image/png" href="favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"><link rel="manifest" href="site.webmanifest"><script type="importmap">{
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <base href="./">
5
+ <meta charset="UTF-8">
6
+ <title>OKDB</title>
7
+ <link rel="stylesheet" href="styles.css">
8
+ <link rel="icon" type="image/png" href="favicon.ico">
9
+ <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
10
+ <link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
11
+ <link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
12
+ <link rel="manifest" href="site.webmanifest">
13
+ <script type="importmap">
14
+ {
2
15
  "imports": {
3
16
  "@toolkit/": "./vendor/okjs/toolkit/",
4
17
  "@okjs": "./vendor/okjs/ok.esm.min.js"
5
18
  }
6
- }</script></head><body><hash-router let:router="$router"><var :$route="$router.match('./:section/*') || {params: { section: 'db' }}"><admin-route-host :section="$route?.params?.section || 'db'"></admin-route-host></var></hash-router><theme-toggle></theme-toggle><script type="module" src="admin-app.js"></script></body></html>
19
+ }
20
+ </script>
21
+ </head>
22
+ <body>
23
+ <hash-router let:router="$router">
24
+ <var :$route="$router.match('./:section/*') || {params: { section: 'db' }}">
25
+ <admin-route-host :section="$route?.params?.section || 'db'"></admin-route-host>
26
+ </var>
27
+ </hash-router>
28
+
29
+ <theme-toggle></theme-toggle>
30
+
31
+ <script type="module" src="admin-app.js"></script>
32
+ </body>
33
+ </html>
@@ -1 +1 @@
1
- <script type="module">import envPicker from"../components/env-picker.ok.js";import createEnvModal from"../sections/db/modals/create-env-modal.ok.js";import demoEnvModal from"../sections/db/modals/demo-env-modal.ok.js";import eventsStore from"../stores/events-store.js";export default{tag:"default-layout",unwrap:!0,dependencies:[envPicker,createEnvModal,demoEnvModal],context:e=>({noticesExpanded:!1,dismissNotices(n){n&&(n.stopPropagation(),n.preventDefault()),e.$ok.stores.auth.dismissNotices()},hasEnvOption:n=>!!n&&(e.$ok.stores.okdb.envs||[]).some(e=>e?.name===n),syncEnvSearch(n){const o=e.$vars.$router;if(!o)return;const t=n??null;if((o._search?.env??null)===t)return;const s={...o._search||{}};t?s.env=t:delete s.env,o.replace(o.resolve(o._path||"",s,o._anchor||""))},applyEnvFromSearch(){const n=e.$vars.$router,o=n?._search?.env??null;return!(!o||!this.hasEnvOption(o))&&(e.$ok.stores.okdb.selectedEnv!==o&&e.$ok.stores.okdb.selectEnv(o),!0)},goToSection(n){const o=e.$vars.$router;if(!o)return;const t={},s=e.$ok.stores.okdb.selectedEnv;s&&(t.env=s);const r="system"===n?"/system/overview":`/${n}`;o.push(o.resolve(r,t))},async switchEnv(n){e.$ok.stores.okdb.selectEnv(n),e.$ok.shared?.toast?.info?.(`Environment: ${n}`)},async openCreateEnvModal(){await e.$ok.shared.modal.open({owner:e,title:"Create Environment",content:'<create-env-modal :modal="modal" :on-done="onDone" />',context:n=>({modal:n,onDone:async n=>{await e.$ok.stores.okdb.reloadEnvs(),e.$ok.stores.okdb.selectEnv(n),e.$ok.shared?.toast?.success?.(`Environment created: ${n}`)}})})},async openDemoModal(){await e.$ok.shared.modal.open({owner:e,title:'<span style="background:linear-gradient(135deg,#4FC1FF,#c084fc 50%,#4ade80);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;font-size:15px;">✦ Demo Environment</span>',canDrag:!0,content:'<demo-env-modal :modal="modal" :on-done="onDone" />',context:n=>({modal:n,onDone:async n=>{await e.$ok.stores.okdb.reloadEnvs(),e.$ok.stores.okdb.selectEnv(n),e.$ok.shared?.toast?.success?.(`Demo environment "${n}" ready`)}})})}}),init(e){const n=()=>e.$ok.shared?.toast;e.$cache._unsubs=[eventsStore.on("type:registered",e=>n()?.info?.(`Type registered: ${e?.type??""}`)),eventsStore.on("type:drop",e=>n()?.info?.(`Type dropped: ${e?.type??""}`)),eventsStore.on("index:registered",e=>n()?.info?.(`Index registered on ${e?.type??""}: ${e?.key??""}`)),eventsStore.on("index:drop",e=>n()?.info?.(`Index dropped on ${e?.type??""}: ${e?.key??""}`)),eventsStore.on("fts:registered",e=>n()?.info?.(`FTS index created on ${e?.type??""}: ${e?.key??""}`)),eventsStore.on("fts:drop",e=>n()?.info?.(`FTS index dropped on ${e?.type??""}: ${e?.key??""}`)),eventsStore.on("env:opened",e=>n()?.info?.(`Environment ready: ${e?.name??""}`)),eventsStore.on("env:removed",e=>n()?.info?.(`Environment removed: ${e?.name??""}`)),eventsStore.on("engine:started",e=>n()?.success?.(`Engine started: ${e?.name??""}`)),eventsStore.on("engine:stopped",e=>n()?.info?.(`Engine stopped: ${e?.name??""}`)),eventsStore.on("engine:error",e=>n()?.error?.(`Engine error: ${e?.name??""}: ${e?.error??""}`)),eventsStore.on("engine:installed",e=>n()?.success?.(`Engine installed: ${e?.name??""}`)),eventsStore.on("engine:uninstalled",e=>n()?.info?.(`Engine uninstalled: ${e?.name??""}`)),eventsStore.on("embeddings:pipeline:ready",e=>n()?.success?.(`Pipeline ready: ${e?.name??""}`)),eventsStore.on("embeddings:indexer:flushed",e=>n()?.success?.(`Embeddings flushed: ${e?.name??""}`))],e.$ext("unmount",()=>{for(const n of e.$cache._unsubs||[])n();e.$cache._unsubs=[]}),this.applyEnvFromSearch()||this.syncEnvSearch(e.$ok.stores.okdb.selectedEnv??null),e.$watch(()=>e.$vars.$router?._search?.env,()=>{const n=e.$vars.$router?._search?.env??null;n&&this.hasEnvOption(n)?e.$ok.stores.okdb.selectedEnv!==n&&e.$ok.stores.okdb.selectEnv(n):this.syncEnvSearch(e.$ok.stores.okdb.selectedEnv??null)}),e.$watch(()=>e.$ok.stores.okdb.selectedEnv,()=>this.syncEnvSearch(e.$ok.stores.okdb.selectedEnv??null))}}</script><template><div class="layout"><aside class="layout__sidebar"><div class="layout__sidebar-cube"><component import="./okdb-cube.ok.html"></component><span class="layout__version">v{{ $ok.stores.okdb.info?.version ?? '…' }}</span></div><div class="layout__env-picker"><env-picker :selected="$ok.stores.okdb.selectedEnv" :envs="$ok.stores.okdb.envs || []" @change="switchEnv($event.detail)" @create="openCreateEnvModal()"/></div><div class="layout__sidebar-body"><if :="$ok.stores.okdb.selectedEnv"><slot name="sidebar"></slot></if></div><div class="layout__sidebar-footer"><div class="layout__auth-chip layout__auth-chip--sidebar" :title="$ok.stores.auth?.modeLabel || 'Authentication'"><div class="layout__auth-meta"><div class="layout__auth-userblock"><div class="layout__auth-user">{{ $ok.stores.auth?.username || 'anonymous' }}</div><if :="$ok.stores.auth?.rolesLabel"><div class="layout__auth-roles">{{ $ok.stores.auth.rolesLabel }}</div></if></div></div><if :="!$ok.stores.auth?.openAccess"><button class="layout__auth-logout" @click="$ok.stores.auth.logout()">Logout</button></if></div></div></aside><div class="layout__right-col"><nav class="layout__section-nav"><button :class="{ active: $route.params.section === 'db' }" :disabled="!$ok.stores.auth.canSection('db')" :title="$ok.stores.auth.canSection('db') ? '' : 'Requires data:read or env:read permission'" @click="$ok.stores.auth.canSection('db') && goToSection('db')"><span class="layout__nav-icon">⬡</span> DB<if :="!$ok.stores.auth.canSection('db')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'engines' || $route.params.section === 'embeddings' }" :disabled="!$ok.stores.auth.canSection('engines')" :title="$ok.stores.auth.canSection('engines') ? '' : 'Requires env:read permission'" @click="$ok.stores.auth.canSection('engines') && goToSection('engines')"><span class="layout__nav-icon">⛓</span> Engines<if :="!$ok.stores.auth.canSection('engines')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'files' }" :disabled="!$ok.stores.auth.canSection('files')" :title="$ok.stores.auth.canSection('files') ? '' : 'Requires files:read permission'" @click="$ok.stores.auth.canSection('files') && goToSection('files')"><span class="layout__nav-icon">⬚</span> Files<if :="!$ok.stores.auth.canSection('files')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'queue' }" :disabled="!$ok.stores.auth.canSection('queue')" :title="$ok.stores.auth.canSection('queue') ? '' : 'Requires queue:read permission'" @click="$ok.stores.auth.canSection('queue') && goToSection('queue')"><span class="layout__nav-icon">⇶</span> Queue<if :="!$ok.stores.auth.canSection('queue')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'functions' }" :disabled="!$ok.stores.auth.canSection('functions')" :title="$ok.stores.auth.canSection('functions') ? '' : 'Requires functions:read permission'" @click="$ok.stores.auth.canSection('functions') && goToSection('functions')"><span class="layout__nav-icon">ƒ</span> Functions<if :="!$ok.stores.auth.canSection('functions')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'views' }" @click="goToSection('views')"><span class="layout__nav-icon">⊞</span> Views</button> <button :class="{ active: $route.params.section === 'system' }" :disabled="!$ok.stores.auth.canSection('system')" :title="$ok.stores.auth.canSection('system') ? '' : 'Requires system:read permission'" @click="$ok.stores.auth.canSection('system') && goToSection('system')"><span class="layout__nav-icon">⚙</span> System<if :="!$ok.stores.auth.canSection('system')"><span class="layout__nav-lock">🔒</span></if></button><div class="layout__live-indicator" :title="$ok.stores.events?.connected ? 'Event stream live' : 'Event stream disconnected'"><span :class="$ok.stores.events?.connected ? 'layout__live-dot layout__live-dot--on' : 'layout__live-dot layout__live-dot--off'"></span> <span class="layout__live-label">{{ $ok.stores.events?.connected ? 'Live' : 'Off' }}</span></div><div class="layout__security-pill" :title="($ok.stores.auth?.modeLabel || 'Authentication') + ' · ' + ($ok.stores.auth?.username || 'anonymous')"><span class="layout__security-dot" :class="$ok.stores.auth?.openAccess ? 'layout__security-dot layout__security-dot--open' : 'layout__security-dot layout__security-dot--secure'"></span> <span class="layout__security-label">{{ $ok.stores.auth?.openAccess ? 'Open access' : 'Secure' }}</span></div></nav><div class="layout__main"><if :="$ok.stores.auth?.visibleNotices?.length > 0"><div class="layout__notices"><div class="layout__notices-bar" @click="noticesExpanded = !noticesExpanded"><span class="layout__notices-icon">⚠</span> <span class="layout__notices-summary">{{ $ok.stores.auth.visibleNotices.length }} security notice{{ $ok.stores.auth.visibleNotices.length > 1 ? 's' : '' }}<if :="$ok.stores.auth.visibleNotices[0]">· {{ $ok.stores.auth.visibleNotices[0].title }}<if :="$ok.stores.auth.visibleNotices.length > 1">and {{ $ok.stores.auth.visibleNotices.length - 1 }} more</if></if></span><span class="layout__notices-chevron">{{ noticesExpanded ? '▴' : '▾' }}</span> <button class="layout__notices-dismiss" @click="dismissNotices($event)" title="Dismiss for this session">✕</button></div><if :="noticesExpanded"><div class="layout__notices-detail"><each :of="$ok.stores.auth.visibleNotices" let:item="n"><div class="layout__notice-item"><div class="layout__notice-title">{{ n.title }}</div><div class="layout__notice-msg">{{ n.message }}</div><if :="n.hint"><div class="layout__notice-hint">{{ n.hint }}</div></if><if :="n.action"><a class="layout__notice-action" :href="n.action.href">{{ n.action.label }} →</a></if></div></each></div></if></div></if><header class="layout__header"><slot name="header"></slot></header><main class="layout__content"><if :="$ok.stores.okdb.selectedEnv"><slot></slot></if><if :="!$ok.stores.okdb.selectedEnv"><div class="layout__no-env"><div class="layout__no-env-icon">⬡</div><div class="layout__no-env-title">No environment selected</div><div class="layout__no-env-sub">Create a new environment or load the demo to get started.</div><div class="layout__no-env-actions"><button @click="openCreateEnvModal()" class="layout__no-env-btn">+ Create environment</button> <button @click="openDemoModal()" class="layout__no-env-btn layout__no-env-btn--demo">✦ Load demo</button></div></div></if></main></div></div></div></template><style>.layout{display:flex;flex-direction:row;height:100%;width:100%;min-height:0}.layout__sidebar{display:flex;flex-direction:column;width:210px;flex-shrink:0;border-right:1px solid var(--okdb-app-surface-2);background:var(--okdb-app-bg-deep);overflow:visible}.layout__sidebar-cube{height:150px;flex-shrink:0;display:flex;align-items:center;justify-content:center;position:relative}.layout__version{position:absolute;bottom:8px;right:10px;font-size:10px;font-family:monospace;color:var(--okdb-app-fg-faint);letter-spacing:.04em;pointer-events:none;user-select:none;transition:color .2s}.layout__sidebar-cube:hover .layout__version{color:var(--okdb-app-fg-subtle)}.layout__env-picker{flex-shrink:0;padding:8px 10px 6px;border-top:1px solid var(--okdb-app-surface-2);border-bottom:1px solid var(--okdb-app-surface-2)}.layout__sidebar-body{flex:1;min-height:0;display:flex;flex-direction:column;gap:3px;padding:10px;border-top:1px solid var(--okdb-app-surface-2);overflow-y:auto;overflow-x:visible}.layout__sidebar-footer{flex-shrink:0;padding:8px 10px 10px;border-top:1px solid var(--okdb-app-surface-2);background:var(--okdb-app-bg-deep)}.layout__right-col{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.layout__section-nav{display:flex;flex-direction:row;align-items:flex-end;height:150px;padding:0 8px;flex-shrink:0;background:var(--okdb-app-bg-deep);border-bottom:1px solid var(--okdb-app-surface-2)}.layout__section-nav button{display:flex;align-items:center;gap:7px;padding:0 16px;height:44px;border-radius:0;font-size:13px;font-weight:500;background:0 0;border:none;border-bottom:2px solid transparent;color:var(--okdb-app-fg-subtle);cursor:pointer;white-space:nowrap;letter-spacing:.01em;transition:color .15s,border-color .15s,background .15s;margin-bottom:-1px}.layout__section-nav button:hover{background:rgba(255,255,255,.03);border-color:transparent;color:var(--okdb-app-fg-muted);border-bottom-color:var(--okdb-app-border-subtle);transform:none;box-shadow:none}.layout__section-nav button:disabled{opacity:.35;cursor:not-allowed;background:0 0!important;border-color:transparent!important;border-bottom-color:transparent!important;color:var(--okdb-app-fg-faint)!important}.layout__section-nav button:disabled:hover{background:0 0;transform:none;box-shadow:none}.layout__section-nav button.active{background:0 0;border-color:transparent;color:var(--okdb-accent);border-bottom-color:var(--okdb-accent)}.layout__nav-icon{font-size:14px;opacity:.7;flex-shrink:0}.layout__nav-lock{font-size:10px;margin-left:4px;opacity:.7;flex-shrink:0;vertical-align:middle}.layout__section-nav button:hover .layout__nav-icon{opacity:.9}.layout__section-nav button.active .layout__nav-icon{opacity:1}.layout__live-indicator{margin-left:auto;margin-right:8px;margin-bottom:11px;display:flex;align-items:center;gap:5px;cursor:default}.layout__live-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}.layout__live-dot--on{background:var(--okdb-success);box-shadow:0 0 5px color-mix(in srgb,var(--okdb-success) 40%,transparent);animation:nav-pulse 2.5s ease-in-out infinite}.layout__live-dot--off{background:var(--okdb-danger);opacity:.6}.layout__live-label{font-size:10px;color:var(--okdb-app-fg-faint);letter-spacing:.04em;text-transform:uppercase}@keyframes nav-pulse{0%,100%{opacity:1}50%{opacity:.35}}.layout__security-pill{margin-bottom:9px;display:inline-flex;align-items:center;gap:7px;padding:6px 10px;border-radius:999px;border:1px solid var(--okdb-app-border);background:var(--okdb-app-bg);color:var(--okdb-app-fg-muted)}.layout__security-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}.layout__security-dot--secure{background:var(--okdb-accent);box-shadow:0 0 6px var(--okdb-accent-soft-border)}.layout__security-dot--open{background:var(--okdb-warning);box-shadow:0 0 6px color-mix(in srgb,var(--okdb-warning) 33%,transparent)}.layout__security-label{font-size:10px;line-height:1;text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}.layout__auth-chip{margin-bottom:9px;display:inline-flex;align-items:center;gap:10px;padding:6px 10px;border-radius:10px;border:1px solid var(--okdb-app-border);background:var(--okdb-app-bg)}.layout__auth-chip--sidebar{width:100%;margin-bottom:0;align-items:center;justify-content:space-between;gap:12px;padding:0;border-radius:0;background:0 0;border:none;box-shadow:none}.layout__auth-meta{display:flex;align-items:center;gap:0;min-width:0;flex:1}.layout__auth-userblock{display:flex;flex-direction:column;min-width:0}.layout__auth-badge{font-size:10px;line-height:1;text-transform:uppercase;letter-spacing:.05em;padding:4px 7px;border-radius:999px;border:1px solid transparent;white-space:nowrap}.layout__auth-badge--open{color:var(--okdb-success);background:#4ade8011;border-color:#4ade8033}.layout__auth-badge--users{color:var(--okdb-accent);background:#4fc1FF11;border-color:#4fc1FF33}.layout__auth-user{font-size:11px;font-weight:600;color:var(--okdb-app-fg);line-height:1.1;text-transform:uppercase;letter-spacing:.05em}.layout__auth-roles{font-size:10px;color:var(--okdb-app-fg-muted);line-height:1.1;margin-top:2px;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layout__auth-logout{font-size:11px;padding:0;border-radius:0;border:none;background:0 0;color:var(--okdb-danger);cursor:pointer;white-space:nowrap;align-self:center;letter-spacing:.04em;text-transform:uppercase;opacity:.88}.layout__auth-logout:hover{background:0 0;color:var(--okdb-danger-hover);opacity:1;transform:none;box-shadow:none}.layout__main{flex:1;display:flex;flex-direction:column;min-height:0;overflow:auto;padding:20px 24px 6px}.layout__header{flex-shrink:0}.layout__content{flex:1;min-height:0;min-width:0}.layout__content>*{animation:layout-fade-in .2s ease backwards}.layout__sidebar-body>*{animation:layout-fade-in .18s ease backwards}@keyframes layout-fade-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.layout__no-env{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:12px;animation:layout-fade-in .25s ease backwards}.layout__no-env-icon{font-size:48px;opacity:.12;line-height:1;margin-bottom:4px}.layout__no-env-title{font-size:18px;font-weight:600;color:var(--okdb-app-fg-muted)}.layout__no-env-sub{font-size:13px;color:var(--okdb-app-fg-subtle);text-align:center;max-width:320px;line-height:1.6}.layout__no-env-actions{display:flex;gap:10px;margin-top:8px}.layout__no-env-btn{padding:8px 18px;font-size:13px;border-radius:7px;border:1px solid var(--okdb-app-border);background:var(--okdb-app-surface);color:var(--okdb-app-fg-subtle);cursor:pointer;transition:background .12s,border-color .12s,color .12s}.layout__no-env-btn:hover{background:var(--okdb-app-surface-2);border-color:var(--okdb-app-border-strong);color:var(--okdb-app-fg-muted);transform:none;box-shadow:none}.layout__no-env-btn--demo{border-color:var(--okdb-accent-2-soft-border);background:var(--okdb-accent-2-soft-bg);color:var(--okdb-accent-2)}.layout__no-env-btn--demo:hover{background:var(--okdb-accent-2-soft-bg);border-color:var(--okdb-accent-2-soft-border);color:var(--okdb-accent-2);transform:none;box-shadow:none}.layout__notices{flex-shrink:0;margin:-20px -24px 16px;border-bottom:1px solid color-mix(in srgb,var(--okdb-warning) 22%,transparent);background:color-mix(in srgb,var(--okdb-warning) 5%,transparent)}.layout__notices-bar{display:flex;align-items:center;gap:10px;padding:9px 16px;cursor:pointer;user-select:none;transition:background .12s}.layout__notices-bar:hover{background:color-mix(in srgb,var(--okdb-warning) 9%,transparent)}.layout__notices-icon{font-size:15px;color:var(--okdb-warning);flex-shrink:0}.layout__notices-summary{font-size:12px;color:var(--okdb-warning-text);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layout__notices-chevron{font-size:14px;color:var(--okdb-warning-text);flex-shrink:0;line-height:1}.layout__notices-dismiss{font-size:14px;color:var(--okdb-warning-text);background:0 0;border:none;cursor:pointer;padding:3px 7px;border-radius:4px;flex-shrink:0;line-height:1;transition:color .1s,background .1s}.layout__notices-dismiss:hover{color:var(--okdb-warning);background:color-mix(in srgb,var(--okdb-warning) 15%,transparent)}.layout__notices-detail{padding:0 16px 14px;display:flex;flex-direction:column;gap:10px}.layout__notice-item{padding:12px 14px;border:1px solid color-mix(in srgb,var(--okdb-warning) 20%,transparent);border-radius:6px;background:color-mix(in srgb,var(--okdb-warning) 5%,transparent);display:flex;flex-direction:column;gap:6px}.layout__notice-title{font-size:13px;font-weight:600;color:var(--okdb-warning)}.layout__notice-msg{font-size:12px;color:var(--okdb-warning-text);line-height:1.55}.layout__notice-hint{font-size:12px;color:var(--okdb-warning-text);line-height:1.55;font-style:italic}.layout__notice-action{font-size:12px;color:var(--okdb-accent);text-decoration:none;margin-top:2px;display:inline-block}.layout__notice-action:hover{text-decoration:underline}</style>
1
+ <script type="module">import e from"../components/env-picker.ok.js";import n from"../sections/db/modals/create-env-modal.ok.js";import o from"../sections/db/modals/demo-env-modal.ok.js";import s from"../stores/events-store.js";export default{tag:"default-layout",unwrap:!0,dependencies:[e,n,o],context:e=>({noticesExpanded:!1,dismissNotices(n){n&&(n.stopPropagation(),n.preventDefault()),e.$ok.stores.auth.dismissNotices()},hasEnvOption:n=>!!n&&(e.$ok.stores.okdb.envs||[]).some(e=>e?.name===n),syncEnvSearch(n){const o=e.$vars.$router;if(!o)return;const s=n??null;if((o._search?.env??null)===s)return;const t={...o._search||{}};s?t.env=s:delete t.env,o.replace(o.resolve(o._path||"",t,o._anchor||""))},applyEnvFromSearch(){const n=e.$vars.$router,o=n?._search?.env??null;return!(!o||!this.hasEnvOption(o)||(e.$ok.stores.okdb.selectedEnv!==o&&e.$ok.stores.okdb.selectEnv(o),0))},goToSection(n){const o=e.$vars.$router;if(!o)return;const s={},t=e.$ok.stores.okdb.selectedEnv;t&&(s.env=t);const r="system"===n?"/system/overview":`/${n}`;o.push(o.resolve(r,s))},async switchEnv(n){e.$ok.stores.okdb.selectEnv(n),e.$ok.shared?.toast?.info?.(`Environment: ${n}`)},async openCreateEnvModal(){await e.$ok.shared.modal.open({owner:e,title:"Create Environment",content:'<create-env-modal :modal="modal" :on-done="onDone" />',context:n=>({modal:n,onDone:async n=>{await e.$ok.stores.okdb.reloadEnvs(),e.$ok.stores.okdb.selectEnv(n),e.$ok.shared?.toast?.success?.(`Environment created: ${n}`)}})})},async openDemoModal(){await e.$ok.shared.modal.open({owner:e,title:'<span style="background:linear-gradient(135deg,#4FC1FF,#c084fc 50%,#4ade80);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;font-size:15px;">✦ Demo Environment</span>',canDrag:!0,content:'<demo-env-modal :modal="modal" :on-done="onDone" />',context:n=>({modal:n,onDone:async n=>{await e.$ok.stores.okdb.reloadEnvs(),e.$ok.stores.okdb.selectEnv(n),e.$ok.shared?.toast?.success?.(`Demo environment "${n}" ready`)}})})}}),init(e){const n=()=>e.$ok.shared?.toast;e.$cache._unsubs=[s.on("type:registered",e=>n()?.info?.(`Type registered: ${e?.type??""}`)),s.on("type:drop",e=>n()?.info?.(`Type dropped: ${e?.type??""}`)),s.on("index:registered",e=>n()?.info?.(`Index registered on ${e?.type??""}: ${e?.key??""}`)),s.on("index:drop",e=>n()?.info?.(`Index dropped on ${e?.type??""}: ${e?.key??""}`)),s.on("fts:registered",e=>n()?.info?.(`FTS index created on ${e?.type??""}: ${e?.key??""}`)),s.on("fts:drop",e=>n()?.info?.(`FTS index dropped on ${e?.type??""}: ${e?.key??""}`)),s.on("env:opened",e=>n()?.info?.(`Environment ready: ${e?.name??""}`)),s.on("env:removed",e=>n()?.info?.(`Environment removed: ${e?.name??""}`)),s.on("engine:started",e=>n()?.success?.(`Engine started: ${e?.name??""}`)),s.on("engine:stopped",e=>n()?.info?.(`Engine stopped: ${e?.name??""}`)),s.on("engine:error",e=>n()?.error?.(`Engine error: ${e?.name??""}: ${e?.error??""}`)),s.on("engine:installed",e=>n()?.success?.(`Engine installed: ${e?.name??""}`)),s.on("engine:uninstalled",e=>n()?.info?.(`Engine uninstalled: ${e?.name??""}`)),s.on("embeddings:pipeline:ready",e=>n()?.success?.(`Pipeline ready: ${e?.name??""}`)),s.on("embeddings:indexer:flushed",e=>n()?.success?.(`Embeddings flushed: ${e?.name??""}`))],e.$ext("unmount",()=>{for(const n of e.$cache._unsubs||[])n();e.$cache._unsubs=[]}),this.applyEnvFromSearch()||this.syncEnvSearch(e.$ok.stores.okdb.selectedEnv??null),e.$watch(()=>e.$vars.$router?._search?.env,()=>{const n=e.$vars.$router?._search?.env??null;n&&this.hasEnvOption(n)?e.$ok.stores.okdb.selectedEnv!==n&&e.$ok.stores.okdb.selectEnv(n):this.syncEnvSearch(e.$ok.stores.okdb.selectedEnv??null)}),e.$watch(()=>e.$ok.stores.okdb.selectedEnv,()=>this.syncEnvSearch(e.$ok.stores.okdb.selectedEnv??null))}};</script><template><div class="layout"><aside class="layout__sidebar"><div class="layout__sidebar-cube"><component import="./okdb-cube.ok.html"></component><span class="layout__version">v{{ $ok.stores.okdb.info?.version ?? '…' }}</span></div><div class="layout__env-picker"><env-picker :selected="$ok.stores.okdb.selectedEnv" :envs="$ok.stores.okdb.envs || []" @change="switchEnv($event.detail)" @create="openCreateEnvModal()"/></div><div class="layout__sidebar-body"><if :="$ok.stores.okdb.selectedEnv"><slot name="sidebar"></slot></if></div><div class="layout__sidebar-footer"><div class="layout__auth-chip layout__auth-chip--sidebar" :title="$ok.stores.auth?.modeLabel || 'Authentication'"><div class="layout__auth-meta"><div class="layout__auth-userblock"><div class="layout__auth-user">{{ $ok.stores.auth?.username || 'anonymous' }}</div><if :="$ok.stores.auth?.rolesLabel"><div class="layout__auth-roles">{{ $ok.stores.auth.rolesLabel }}</div></if></div></div><if :="!$ok.stores.auth?.openAccess"><button class="layout__auth-logout" @click="$ok.stores.auth.logout()">Logout</button></if></div></div></aside><div class="layout__right-col"><nav class="layout__section-nav"><button :class="{ active: $route.params.section === 'db' }" :disabled="!$ok.stores.auth.canSection('db')" :title="$ok.stores.auth.canSection('db') ? '' : 'Requires data:read or env:read permission'" @click="$ok.stores.auth.canSection('db') && goToSection('db')"><span class="layout__nav-icon">⬡</span> DB<if :="!$ok.stores.auth.canSection('db')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'engines' || $route.params.section === 'embeddings' }" :disabled="!$ok.stores.auth.canSection('engines')" :title="$ok.stores.auth.canSection('engines') ? '' : 'Requires env:read permission'" @click="$ok.stores.auth.canSection('engines') && goToSection('engines')"><span class="layout__nav-icon">⛓</span> Engines<if :="!$ok.stores.auth.canSection('engines')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'files' }" :disabled="!$ok.stores.auth.canSection('files')" :title="$ok.stores.auth.canSection('files') ? '' : 'Requires files:read permission'" @click="$ok.stores.auth.canSection('files') && goToSection('files')"><span class="layout__nav-icon">⬚</span> Files<if :="!$ok.stores.auth.canSection('files')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'queue' }" :disabled="!$ok.stores.auth.canSection('queue')" :title="$ok.stores.auth.canSection('queue') ? '' : 'Requires queue:read permission'" @click="$ok.stores.auth.canSection('queue') && goToSection('queue')"><span class="layout__nav-icon">⇶</span> Queue<if :="!$ok.stores.auth.canSection('queue')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'functions' }" :disabled="!$ok.stores.auth.canSection('functions')" :title="$ok.stores.auth.canSection('functions') ? '' : 'Requires functions:read permission'" @click="$ok.stores.auth.canSection('functions') && goToSection('functions')"><span class="layout__nav-icon">ƒ</span> Functions<if :="!$ok.stores.auth.canSection('functions')"><span class="layout__nav-lock">🔒</span></if></button> <button :class="{ active: $route.params.section === 'views' }" @click="goToSection('views')"><span class="layout__nav-icon">⊞</span> Views</button> <button :class="{ active: $route.params.section === 'system' }" :disabled="!$ok.stores.auth.canSection('system')" :title="$ok.stores.auth.canSection('system') ? '' : 'Requires system:read permission'" @click="$ok.stores.auth.canSection('system') && goToSection('system')"><span class="layout__nav-icon">⚙</span> System<if :="!$ok.stores.auth.canSection('system')"><span class="layout__nav-lock">🔒</span></if></button><div class="layout__live-indicator" :title="$ok.stores.events?.connected ? 'Event stream live' : 'Event stream disconnected'"><span :class="$ok.stores.events?.connected ? 'layout__live-dot layout__live-dot--on' : 'layout__live-dot layout__live-dot--off'"></span> <span class="layout__live-label">{{ $ok.stores.events?.connected ? 'Live' : 'Off' }}</span></div><div class="layout__security-pill" :title="($ok.stores.auth?.modeLabel || 'Authentication') + ' · ' + ($ok.stores.auth?.username || 'anonymous')"><span class="layout__security-dot" :class="$ok.stores.auth?.openAccess ? 'layout__security-dot layout__security-dot--open' : 'layout__security-dot layout__security-dot--secure'"></span> <span class="layout__security-label">{{ $ok.stores.auth?.openAccess ? 'Open access' : 'Secure' }}</span></div></nav><div class="layout__main"><if :="$ok.stores.auth?.visibleNotices?.length > 0"><div class="layout__notices"><div class="layout__notices-bar" @click="noticesExpanded = !noticesExpanded"><span class="layout__notices-icon">⚠</span> <span class="layout__notices-summary">{{ $ok.stores.auth.visibleNotices.length }} security notice{{ $ok.stores.auth.visibleNotices.length > 1 ? 's' : '' }}<if :="$ok.stores.auth.visibleNotices[0]">· {{ $ok.stores.auth.visibleNotices[0].title }}<if :="$ok.stores.auth.visibleNotices.length > 1">and {{ $ok.stores.auth.visibleNotices.length - 1 }} more</if></if></span><span class="layout__notices-chevron">{{ noticesExpanded ? '▴' : '▾' }}</span> <button class="layout__notices-dismiss" @click="dismissNotices($event)" title="Dismiss for this session">✕</button></div><if :="noticesExpanded"><div class="layout__notices-detail"><each :of="$ok.stores.auth.visibleNotices" let:item="n"><div class="layout__notice-item"><div class="layout__notice-title">{{ n.title }}</div><div class="layout__notice-msg">{{ n.message }}</div><if :="n.hint"><div class="layout__notice-hint">{{ n.hint }}</div></if><if :="n.action"><a class="layout__notice-action" :href="n.action.href">{{ n.action.label }} →</a></if></div></each></div></if></div></if><header class="layout__header"><slot name="header"></slot></header><main class="layout__content"><if :="$ok.stores.okdb.selectedEnv"><slot></slot></if><if :="!$ok.stores.okdb.selectedEnv"><div class="layout__no-env"><div class="layout__no-env-icon">⬡</div><div class="layout__no-env-title">No environment selected</div><div class="layout__no-env-sub">Create a new environment or load the demo to get started.</div><div class="layout__no-env-actions"><button @click="openCreateEnvModal()" class="layout__no-env-btn">+ Create environment</button> <button @click="openDemoModal()" class="layout__no-env-btn layout__no-env-btn--demo">✦ Load demo</button></div></div></if></main></div></div></div></template><style>.layout{display:flex;flex-direction:row;height:100%;width:100%;min-height:0}.layout__sidebar{display:flex;flex-direction:column;width:210px;flex-shrink:0;border-right:1px solid var(--okdb-app-surface-2);background:var(--okdb-app-bg-deep);overflow:visible}.layout__sidebar-cube{height:150px;flex-shrink:0;display:flex;align-items:center;justify-content:center;position:relative}.layout__version{position:absolute;bottom:8px;right:10px;font-size:10px;font-family:monospace;color:var(--okdb-app-fg-faint);letter-spacing:.04em;pointer-events:none;user-select:none;transition:color .2s}.layout__sidebar-cube:hover .layout__version{color:var(--okdb-app-fg-subtle)}.layout__env-picker{flex-shrink:0;padding:8px 10px 6px;border-top:1px solid var(--okdb-app-surface-2);border-bottom:1px solid var(--okdb-app-surface-2)}.layout__sidebar-body{flex:1;min-height:0;display:flex;flex-direction:column;gap:3px;padding:10px;border-top:1px solid var(--okdb-app-surface-2);overflow-y:auto;overflow-x:visible}.layout__sidebar-footer{flex-shrink:0;padding:8px 10px 10px;border-top:1px solid var(--okdb-app-surface-2);background:var(--okdb-app-bg-deep)}.layout__right-col{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.layout__section-nav{display:flex;flex-direction:row;align-items:flex-end;height:150px;padding:0 8px;flex-shrink:0;background:var(--okdb-app-bg-deep);border-bottom:1px solid var(--okdb-app-surface-2)}.layout__section-nav button{display:flex;align-items:center;gap:7px;padding:0 16px;height:44px;border-radius:0;font-size:13px;font-weight:500;background:0 0;border:none;border-bottom:2px solid transparent;color:var(--okdb-app-fg-subtle);cursor:pointer;white-space:nowrap;letter-spacing:.01em;transition:color .15s,border-color .15s,background .15s;margin-bottom:-1px}.layout__section-nav button:hover{background:rgba(255,255,255,.03);border-color:transparent;color:var(--okdb-app-fg-muted);border-bottom-color:var(--okdb-app-border-subtle);transform:none;box-shadow:none}.layout__section-nav button:disabled{opacity:.35;cursor:not-allowed;background:0 0!important;border-color:transparent!important;border-bottom-color:transparent!important;color:var(--okdb-app-fg-faint)!important}.layout__section-nav button:disabled:hover{background:0 0;transform:none;box-shadow:none}.layout__section-nav button.active{background:0 0;border-color:transparent;color:var(--okdb-accent);border-bottom-color:var(--okdb-accent)}.layout__nav-icon{font-size:14px;opacity:.7;flex-shrink:0}.layout__nav-lock{font-size:10px;margin-left:4px;opacity:.7;flex-shrink:0;vertical-align:middle}.layout__section-nav button:hover .layout__nav-icon{opacity:.9}.layout__section-nav button.active .layout__nav-icon{opacity:1}.layout__live-indicator{margin-left:auto;margin-right:8px;margin-bottom:11px;display:flex;align-items:center;gap:5px;cursor:default}.layout__live-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}.layout__live-dot--on{background:var(--okdb-success);box-shadow:0 0 5px color-mix(in srgb,var(--okdb-success) 40%,transparent);animation:nav-pulse 2.5s ease-in-out infinite}.layout__live-dot--off{background:var(--okdb-danger);opacity:.6}.layout__live-label{font-size:10px;color:var(--okdb-app-fg-faint);letter-spacing:.04em;text-transform:uppercase}@keyframes nav-pulse{0%,100%{opacity:1}50%{opacity:.35}}.layout__security-pill{margin-bottom:9px;display:inline-flex;align-items:center;gap:7px;padding:6px 10px;border-radius:999px;border:1px solid var(--okdb-app-border);background:var(--okdb-app-bg);color:var(--okdb-app-fg-muted)}.layout__security-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}.layout__security-dot--secure{background:var(--okdb-accent);box-shadow:0 0 6px var(--okdb-accent-soft-border)}.layout__security-dot--open{background:var(--okdb-warning);box-shadow:0 0 6px color-mix(in srgb,var(--okdb-warning) 33%,transparent)}.layout__security-label{font-size:10px;line-height:1;text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}.layout__auth-chip{margin-bottom:9px;display:inline-flex;align-items:center;gap:10px;padding:6px 10px;border-radius:10px;border:1px solid var(--okdb-app-border);background:var(--okdb-app-bg)}.layout__auth-chip--sidebar{width:100%;margin-bottom:0;align-items:center;justify-content:space-between;gap:12px;padding:0;border-radius:0;background:0 0;border:none;box-shadow:none}.layout__auth-meta{display:flex;align-items:center;gap:0;min-width:0;flex:1}.layout__auth-userblock{display:flex;flex-direction:column;min-width:0}.layout__auth-badge{font-size:10px;line-height:1;text-transform:uppercase;letter-spacing:.05em;padding:4px 7px;border-radius:999px;border:1px solid transparent;white-space:nowrap}.layout__auth-badge--open{color:var(--okdb-success);background:#4ade8011;border-color:#4ade8033}.layout__auth-badge--users{color:var(--okdb-accent);background:#4fc1FF11;border-color:#4fc1FF33}.layout__auth-user{font-size:11px;font-weight:600;color:var(--okdb-app-fg);line-height:1.1;text-transform:uppercase;letter-spacing:.05em}.layout__auth-roles{font-size:10px;color:var(--okdb-app-fg-muted);line-height:1.1;margin-top:2px;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layout__auth-logout{font-size:11px;padding:0;border-radius:0;border:none;background:0 0;color:var(--okdb-danger);cursor:pointer;white-space:nowrap;align-self:center;letter-spacing:.04em;text-transform:uppercase;opacity:.88}.layout__auth-logout:hover{background:0 0;color:var(--okdb-danger-hover);opacity:1;transform:none;box-shadow:none}.layout__main{flex:1;display:flex;flex-direction:column;min-height:0;overflow:auto;padding:20px 24px 6px}.layout__header{flex-shrink:0}.layout__content{flex:1;min-height:0;min-width:0}.layout__content>*{animation:layout-fade-in .2s ease backwards}.layout__sidebar-body>*{animation:layout-fade-in .18s ease backwards}@keyframes layout-fade-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.layout__no-env{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:12px;animation:layout-fade-in .25s ease backwards}.layout__no-env-icon{font-size:48px;opacity:.12;line-height:1;margin-bottom:4px}.layout__no-env-title{font-size:18px;font-weight:600;color:var(--okdb-app-fg-muted)}.layout__no-env-sub{font-size:13px;color:var(--okdb-app-fg-subtle);text-align:center;max-width:320px;line-height:1.6}.layout__no-env-actions{display:flex;gap:10px;margin-top:8px}.layout__no-env-btn{padding:8px 18px;font-size:13px;border-radius:7px;border:1px solid var(--okdb-app-border);background:var(--okdb-app-surface);color:var(--okdb-app-fg-subtle);cursor:pointer;transition:background .12s,border-color .12s,color .12s}.layout__no-env-btn:hover{background:var(--okdb-app-surface-2);border-color:var(--okdb-app-border-strong);color:var(--okdb-app-fg-muted);transform:none;box-shadow:none}.layout__no-env-btn--demo{border-color:var(--okdb-accent-2-soft-border);background:var(--okdb-accent-2-soft-bg);color:var(--okdb-accent-2)}.layout__no-env-btn--demo:hover{background:var(--okdb-accent-2-soft-bg);border-color:var(--okdb-accent-2-soft-border);color:var(--okdb-accent-2);transform:none;box-shadow:none}.layout__notices{flex-shrink:0;margin:-20px -24px 16px;border-bottom:1px solid color-mix(in srgb,var(--okdb-warning) 22%,transparent);background:color-mix(in srgb,var(--okdb-warning) 5%,transparent)}.layout__notices-bar{display:flex;align-items:center;gap:10px;padding:9px 16px;cursor:pointer;user-select:none;transition:background .12s}.layout__notices-bar:hover{background:color-mix(in srgb,var(--okdb-warning) 9%,transparent)}.layout__notices-icon{font-size:15px;color:var(--okdb-warning);flex-shrink:0}.layout__notices-summary{font-size:12px;color:var(--okdb-warning-text);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layout__notices-chevron{font-size:14px;color:var(--okdb-warning-text);flex-shrink:0;line-height:1}.layout__notices-dismiss{font-size:14px;color:var(--okdb-warning-text);background:0 0;border:none;cursor:pointer;padding:3px 7px;border-radius:4px;flex-shrink:0;line-height:1;transition:color .1s,background .1s}.layout__notices-dismiss:hover{color:var(--okdb-warning);background:color-mix(in srgb,var(--okdb-warning) 15%,transparent)}.layout__notices-detail{padding:0 16px 14px;display:flex;flex-direction:column;gap:10px}.layout__notice-item{padding:12px 14px;border:1px solid color-mix(in srgb,var(--okdb-warning) 20%,transparent);border-radius:6px;background:color-mix(in srgb,var(--okdb-warning) 5%,transparent);display:flex;flex-direction:column;gap:6px}.layout__notice-title{font-size:13px;font-weight:600;color:var(--okdb-warning)}.layout__notice-msg{font-size:12px;color:var(--okdb-warning-text);line-height:1.55}.layout__notice-hint{font-size:12px;color:var(--okdb-warning-text);line-height:1.55;font-style:italic}.layout__notice-action{font-size:12px;color:var(--okdb-accent);text-decoration:none;margin-top:2px;display:inline-block}.layout__notice-action:hover{text-decoration:underline}</style>
@@ -1 +1 @@
1
- <script>export default{tag:"okdb-cube",mounted(e){const t=e.$el,n=t.querySelector(".cube"),o=t.querySelector(".okdb-wrapper"),i=n.querySelector(".core-glow"),r=n.querySelector(".core-light");n.classList.add("idle");let a=!1,s=null,l=0,c=0,u=-15,d=45,m=0,y=0,p=null;const v=e=>Math.max(-75,Math.min(75,e));function f(){p&&(cancelAnimationFrame(p),p=null)}function L(){n.style.transform=`rotateX(${u}deg) rotateY(${d}deg)`;const e=`rotateY(${-d}deg) rotateX(${-u}deg)`;i.style.transform=`${e} translateZ(0px)`,r.style.transform=`${e} translateZ(10px)`}function b(){const e=Math.abs(m)+Math.abs(y),t=Math.min(2.5,1+.08*e);o.style.setProperty("--energy",t.toFixed(2))}function g(e){a=!0,s=e.pointerId,o.setPointerCapture(s),f(),l=e.clientX,c=e.clientY,m=y=0,n.classList.remove("idle"),n.style.animation="none",i.style.animation="none",r.style.animation="none",o.style.animation="none"}function h(e){if(!a||e.pointerId!==s)return;const t=e.clientX-l,n=e.clientY-c;l=e.clientX,c=e.clientY,m=.4*t,y=.4*n,d+=m,u=v(u-y),L(),b()}function E(e){if(!a||e.pointerId!==s)return;a=!1,o.releasePointerCapture(s),s=null;!function e(){m*=.92,y*=.92,d+=m,u=v(u-y),u+=.06*(-15-u),d+=.06*(45-d),L(),b(),Math.abs(m)+Math.abs(y)>.12?p=requestAnimationFrame(e):(o.style.setProperty("--energy","1"),n.style.transition="transform 1s cubic-bezier(0.175, 0.885, 0.32, 1.15)",u=-15,d=45,L(),setTimeout(()=>{n.style.transition="none",n.classList.add("idle"),n.style.animation="",i.style.animation="",r.style.animation="",o.style.animation=""},1e3),p=null)}()}o.addEventListener("pointerdown",g),o.addEventListener("pointermove",h),o.addEventListener("pointerup",E),o.addEventListener("pointercancel",E),e.$ext("unmount",()=>{f(),o.removeEventListener("pointerdown",g),o.removeEventListener("pointermove",h),o.removeEventListener("pointerup",E),o.removeEventListener("pointercancel",E)})}}</script><template><div class="okdb-wrapper" style="--energy:1"><div class="cube-container"><div class="cube"><div class="core-light"></div><div class="core-glow"></div><div class="face front"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face back"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face right"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face left"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face top"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face bottom"><svg class="logo"><use href="#okdb-logo"/></svg></div></div></div><div class="underglow-system"><div class="light-spill"></div></div><svg style="display:none"><symbol id="okdb-logo" viewBox="330 120 330 425"><path d="M428.062 313.837c5.695 6.112 4.378 13.108 3.833 21.705-6.767-6.329-16.863-6.237-19.448-16.383-1.193-4.685-7.473-7.788-12.087-6.534-5.25 1.426-8.191 6.404-7.13 12.068.928 4.95 5.508 8.698 10.558 7.727 3.365-.647 5.68.395 8.297 2.03 15.819 9.883 31.655 19.74 47.607 29.406 3.852 2.334 5.699 5.288 5.652 9.725-.086 8.122-.025 16.245-.025 25.06-5.645-1.53-9.614-4.637-13.833-7.054-23.99-13.74-47.853-27.698-71.814-41.487-2.739-1.577-4.044-3.377-4.037-6.69.098-45.151.066-90.302.09-135.453.001-1.453-.347-3.006 1.194-4.98 6.198 3.44 12.573 6.857 18.835 10.471 35.772 20.646 71.493 41.381 107.318 61.935 3.023 1.734 4.2 3.605 4.194 7.045-.08 44.65-.03 89.302-.043 133.953 0 1.77.437 3.673-.896 5.282-2.078.733-3.483-.752-4.996-1.612-6.517-3.701-12.813-7.837-19.52-11.142-4.643-2.287-6.091-5.725-6.099-10.364-.015-8.997-.106-17.995 0-26.99.075-6.23-2.355-10.869-7.738-14.092-7-4.193-13.803-8.727-20.897-12.75-3.35-1.9-4.718-4.16-4.47-7.986.301-4.645.117-9.326.049-13.99-.03-2.087.537-3.761 1.86-5.475 3.604-4.666 3.751-9.465.408-13.2-3.01-3.36-6.715-4.872-11.199-2.843-4.967 2.248-6.903 6.336-5.663 12.618m60.624 44.857 4.67 5.634 1.42-.89c.405-10.385.762-20.781-.217-31.167-.286-3.025-2.704-4.863-5.16-6.4-5.217-3.267-10.348-6.69-15.711-9.7-3.309-1.855-4.822-4.35-4.824-8.023-.003-5.329-.127-10.657-.12-15.985.006-5.421-1.98-9.404-6.927-12.263-16.288-9.41-32.414-19.1-48.59-28.705-7.39-4.388-14.749-8.826-22.187-13.281-1.31 2.325-.554 4.167.195 6.009 2.549 6.266 6.907 10.793 12.8 14.125 13.333 7.537 26.1 16.248 39.944 22.651 12.487 5.776 16.897 14.214 15.032 27.17-1.069 7.428 1.713 12.93 8.847 16.124 2.703 1.21 4.892 3.585 7.606 4.751 8.26 3.547 11.128 9.599 9.85 18.314-.57 3.896-.679 8.08 3.372 11.636m70.236-103.827c30.283-17.375 60.242-34.579 90.16-51.759 1.691 2.442 1.21 4.329 1.217 6.105.047 11.33-.206 22.667.097 33.989.243 9.108-3.744 15.932-10.952 20.604-16.63 10.78-33.572 21.074-50.34 31.642-2.094 1.32-4.126.875-6.26.628-5.825-.674-10.193 2.427-11.354 8.04-1.025 4.96 1.91 9.754 6.881 11.234 5.146 1.532 10.614-1.161 12.237-6.56.876-2.912 2.78-4.393 5.066-5.798 14.617-8.986 29.204-18.02 43.871-26.924 3.431-2.083 6.485-4.587 9.21-7.339 2.268.933 1.567 2.68 1.57 4.004.046 23.66-.02 47.32.078 70.98.013 3.084-1.146 4.845-3.748 6.342-38.258 22.003-76.462 44.099-114.717 66.107-3.118 1.794-5.88 4.325-9.365 5.265-2.076-1.786-1.462-3.92-1.45-5.827.123-18.822.452-37.644.445-56.465-.008-23.132-.132-46.267-.52-69.395-.142-8.501 1.144-14.994 10.307-18.99 9.549-4.166 18.2-10.388 27.567-15.883m8.19 19.798c-6.077 3.778-12.083 7.68-18.256 11.294-4.5 2.634-6.528 6.46-6.577 11.5-.066 6.825-.288 13.659-.037 20.474.16 4.35-.974 8.05-4.327 10.626-6.861 5.27-4.45 12.202-4.508 20.175 4.205-6.167 8.242-10.62 12.94-14.314 4.51-3.545 6.139-8.14 6.23-13.508.116-6.824.19-13.654.01-20.474-.099-3.793 1.432-6.14 4.632-8.067 10.694-6.437 21.277-13.06 31.866-19.67 4.215-2.632 8.037-5.296 13.75-4.092 4.8 1.012 8.998-3.134 9.79-7.966.803-4.897-1.91-9.421-6.586-10.986-4.793-1.603-10.264.043-11.763 4.72-1.524 4.757-4.959 6.762-8.643 8.987-5.984 3.613-11.93 7.287-18.52 11.301m63.18 40.521c-5.96-5.573-14.618-2.323-16.383 3.75-1.184 4.075-3.791 5.863-6.959 7.78a14037 14037 0 0 0-63.915 38.908c-6.241 3.823-9.668 12.069-7.822 17.745 26.016-17.85 53.419-33.607 80.177-50.384 1.663-1.042 3.329-1.438 5.21-.925 4.833 1.319 8.582-.54 11.24-4.388 2.836-4.102 1.911-8.19-1.548-12.486m-84.65-68.459c-9.697 5.59-19.14 10.888-28.433 16.439-2.768 1.654-4.873 1.744-7.742.075-27.788-16.166-55.675-32.163-83.51-48.246-2.41-1.392-5.036-2.562-6.69-4.818-.106-1.47.927-1.834 1.768-2.304 15.126-8.433 30.282-16.812 45.362-25.325 2.195-1.24 4.102-1.576 6.576-.9 4.81 1.314 9.654-1.367 11.26-5.825 1.639-4.542-.47-9.77-4.791-11.875-4.475-2.18-10.956-.912-12.577 3.62-1.913 5.349-6.147 7.12-10.304 9.417-14.87 8.214-29.807 16.306-44.611 24.636-3.314 1.864-6.08 2.08-9.203-.146-3.847-2.741-8.59-4.2-12.471-8.33 7.187-4.28 13.822-8.31 20.532-12.211 32.966-19.172 65.972-38.275 98.891-57.527 2.567-1.501 4.401-1.324 6.817.079 38.59 22.409 77.222 44.743 115.838 67.107 1.274.738 2.724 1.337 3.567 3.976-29.858 17.245-59.913 34.603-90.279 52.158m-59.159-52.652c-4.558 2.422-9.107 4.862-13.679 7.26-1.607.842-3.232 2.05-5.15 1.449-7.949-2.489-14.074 1.724-21.67 5.79 8.817 2.455 12.479 13.069 22.94 10.253 1.244-.335 3.053 1.063 4.486 1.86 9.747 5.429 19.5 10.85 29.173 16.406 4.028 2.313 7.718 2.267 11.718-.143 8.985-5.413 18.149-10.526 27.132-15.941 3.13-1.887 6.178-2.693 9.89-2.342 6.016.57 10.07-2.89 10.88-8.558.651-4.563-2.539-9.036-7.441-10.433-5.072-1.445-9.917.998-11.82 6.4-.91 2.585-2.444 4.146-4.73 5.425-8.718 4.878-17.425 9.782-26.025 14.865-2.937 1.736-5.398 1.723-8.338.003-7.33-4.287-14.827-8.286-22.214-12.475-1.495-.848-3.64-.981-4.203-3.636 8.9-4.653 17.899-9.273 26.806-14.061 2.782-1.495 5.42-2.016 8.573-1.292 5 1.146 9.221-1.36 10.66-5.858 1.594-4.978-.434-9.638-5.055-11.619-4.61-1.976-10.054-.603-12.076 3.782-1.484 3.22-3.85 4.795-6.72 6.204-4.185 2.056-8.325 4.203-13.137 6.66m74.309-7.428c8.665 5.276 17.38 10.471 25.976 15.857 4.836 3.03 8.046 2.708 12.508-1.897-2.106-3.289-5.186-5.486-8.492-7.45-20.018-11.894-40.013-23.824-60.06-35.668-2.644-1.562-4.616-3.204-5.748-6.368-1.8-5.03-7.57-7.228-12.389-5.453-4.44 1.637-7.056 6.818-5.748 11.384 1.621 5.66 6.193 8.658 11.74 7.21 2.494-.65 4.403-.417 6.558.898 11.64 7.1 23.347 14.086 35.655 21.487" fill="currentColor"/><text fill="currentColor" x="365" y="540" font-family="monospace" letter-spacing="-4" font-size="130" font-weight="bolder">OKDB</text></symbol></svg></div></template><style>.okdb-wrapper{--cube-size:90px;--brand-blue:#00a2ff;--glow-color:rgba(0, 162, 255, calc(0.35 * var(--energy)));width:150px;height:150px;perspective:1000px;display:flex;justify-content:center;align-items:center;user-select:none;touch-action:none;overflow:hidden}.cube-container{width:var(--cube-size);height:var(--cube-size);transform-style:preserve-3d;cursor:grab;position:relative;z-index:2}.cube{width:100%;height:100%;position:relative;transform-style:preserve-3d}@keyframes idle-spin{from{transform:rotateX(-15deg) rotateY(45deg)}to{transform:rotateX(-15deg) rotateY(405deg)}}@keyframes idle-counter-spin{from{transform:rotateY(-45deg) rotateX(15deg) translateZ(-18px)}to{transform:rotateY(-405deg) rotateX(15deg) translateZ(-18px)}}.cube{animation:none}.cube.idle{animation:idle-spin 20s linear infinite}.cube.idle .core-glow,.cube.idle .core-light{animation:idle-counter-spin 20s linear infinite}.face{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgb(133 152 166 / calc(.18 + var(--energy) * .06));border:2px solid rgba(0,162,255,.45);box-shadow:inset 0 0 18px rgba(0,162,255,.25),0 0 22px var(--glow-color);backface-visibility:visible}.logo{width:70%;height:70%;color:#fff;filter:drop-shadow(0 0 6px var(--brand-blue))}.front{transform:rotateY(0) translateZ(calc(var(--cube-size)/ 2))}.back{transform:rotateY(180deg) translateZ(calc(var(--cube-size)/ 2))}.right{transform:rotateY(90deg) translateZ(calc(var(--cube-size)/ 2))}.left{transform:rotateY(-90deg) translateZ(calc(var(--cube-size)/ 2))}.top{transform:rotateX(90deg) translateZ(calc(var(--cube-size)/ 2))}.bottom{transform:rotateX(-90deg) translateZ(calc(var(--cube-size)/ 2))}.core-glow{position:absolute;inset:18%;background:var(--brand-blue);border-radius:50%;filter:blur(26px);opacity:calc(.8 * var(--energy));transform:translateZ(-26px) scale(1);pointer-events:none}.core-light{position:absolute;inset:32%;background:#fff;border-radius:50%;filter:blur(12px);width:60px;height:60px;opacity:calc(1 * var(--energy));transform:translateZ(-14px);pointer-events:none}.underglow-system{position:absolute;bottom:-10px;width:160px;height:160px;transform-style:preserve-3d;transform:translateZ(-80px) rotateX(75deg);pointer-events:none;z-index:1}.core-glow{transform:translateZ(-18px);opacity:calc(.5 + 1 * var(--energy))}.core-light{transform:translateZ(-8px)}.core-glow,.core-light{transform-style:preserve-3d}.light-spill{position:absolute;inset:0;background:radial-gradient(circle,var(--brand-blue),transparent 70%);filter:blur(18px);opacity:calc(.8 * var(--energy))}.cube-container:active{cursor:grabbing}@property --energy{syntax:'<number>';inherits:true;initial-value:1}@keyframes pulse-energy{0%,100%{--energy:0.3}50%{--energy:1}}.okdb-wrapper{overflow:visible;animation:pulse-energy 4s ease-in-out infinite}.underglow-system{bottom:-80px;transform:translateZ(-120px) rotateX(90deg)}</style>
1
+ <script>export default{tag:"okdb-cube",mounted(e){const t=e.$el,n=t.querySelector(".cube"),o=t.querySelector(".okdb-wrapper"),i=n.querySelector(".core-glow"),r=n.querySelector(".core-light");n.classList.add("idle");let a=!1,s=null,l=0,c=0,u=-15,d=45,m=0,y=0,p=null;const v=e=>Math.max(-75,Math.min(75,e));function f(){p&&(cancelAnimationFrame(p),p=null)}function L(){n.style.transform=`rotateX(${u}deg) rotateY(${d}deg)`;const e=`rotateY(${-d}deg) rotateX(${-u}deg)`;i.style.transform=`${e} translateZ(0px)`,r.style.transform=`${e} translateZ(10px)`}function b(){const e=Math.abs(m)+Math.abs(y),t=Math.min(2.5,1+.08*e);o.style.setProperty("--energy",t.toFixed(2))}function g(e){a=!0,s=e.pointerId,o.setPointerCapture(s),f(),l=e.clientX,c=e.clientY,m=y=0,n.classList.remove("idle"),n.style.animation="none",i.style.animation="none",r.style.animation="none",o.style.animation="none"}function h(e){if(!a||e.pointerId!==s)return;const t=e.clientX-l,n=e.clientY-c;l=e.clientX,c=e.clientY,m=.4*t,y=.4*n,d+=m,u=v(u-y),L(),b()}function E(e){a&&e.pointerId===s&&(a=!1,o.releasePointerCapture(s),s=null,function e(){m*=.92,y*=.92,d+=m,u=v(u-y),u+=.06*(-15-u),d+=.06*(45-d),L(),b(),Math.abs(m)+Math.abs(y)>.12?p=requestAnimationFrame(e):(o.style.setProperty("--energy","1"),n.style.transition="transform 1s cubic-bezier(0.175, 0.885, 0.32, 1.15)",u=-15,d=45,L(),setTimeout(()=>{n.style.transition="none",n.classList.add("idle"),n.style.animation="",i.style.animation="",r.style.animation="",o.style.animation=""},1e3),p=null)}())}o.addEventListener("pointerdown",g),o.addEventListener("pointermove",h),o.addEventListener("pointerup",E),o.addEventListener("pointercancel",E),e.$ext("unmount",()=>{f(),o.removeEventListener("pointerdown",g),o.removeEventListener("pointermove",h),o.removeEventListener("pointerup",E),o.removeEventListener("pointercancel",E)})}};</script><template><div class="okdb-wrapper" style="--energy:1"><div class="cube-container"><div class="cube"><div class="core-light"></div><div class="core-glow"></div><div class="face front"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face back"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face right"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face left"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face top"><svg class="logo"><use href="#okdb-logo"/></svg></div><div class="face bottom"><svg class="logo"><use href="#okdb-logo"/></svg></div></div></div><div class="underglow-system"><div class="light-spill"></div></div><svg style="display:none"><symbol id="okdb-logo" viewBox="330 120 330 425"><path d="M428.062 313.837c5.695 6.112 4.378 13.108 3.833 21.705-6.767-6.329-16.863-6.237-19.448-16.383-1.193-4.685-7.473-7.788-12.087-6.534-5.25 1.426-8.191 6.404-7.13 12.068.928 4.95 5.508 8.698 10.558 7.727 3.365-.647 5.68.395 8.297 2.03 15.819 9.883 31.655 19.74 47.607 29.406 3.852 2.334 5.699 5.288 5.652 9.725-.086 8.122-.025 16.245-.025 25.06-5.645-1.53-9.614-4.637-13.833-7.054-23.99-13.74-47.853-27.698-71.814-41.487-2.739-1.577-4.044-3.377-4.037-6.69.098-45.151.066-90.302.09-135.453.001-1.453-.347-3.006 1.194-4.98 6.198 3.44 12.573 6.857 18.835 10.471 35.772 20.646 71.493 41.381 107.318 61.935 3.023 1.734 4.2 3.605 4.194 7.045-.08 44.65-.03 89.302-.043 133.953 0 1.77.437 3.673-.896 5.282-2.078.733-3.483-.752-4.996-1.612-6.517-3.701-12.813-7.837-19.52-11.142-4.643-2.287-6.091-5.725-6.099-10.364-.015-8.997-.106-17.995 0-26.99.075-6.23-2.355-10.869-7.738-14.092-7-4.193-13.803-8.727-20.897-12.75-3.35-1.9-4.718-4.16-4.47-7.986.301-4.645.117-9.326.049-13.99-.03-2.087.537-3.761 1.86-5.475 3.604-4.666 3.751-9.465.408-13.2-3.01-3.36-6.715-4.872-11.199-2.843-4.967 2.248-6.903 6.336-5.663 12.618m60.624 44.857 4.67 5.634 1.42-.89c.405-10.385.762-20.781-.217-31.167-.286-3.025-2.704-4.863-5.16-6.4-5.217-3.267-10.348-6.69-15.711-9.7-3.309-1.855-4.822-4.35-4.824-8.023-.003-5.329-.127-10.657-.12-15.985.006-5.421-1.98-9.404-6.927-12.263-16.288-9.41-32.414-19.1-48.59-28.705-7.39-4.388-14.749-8.826-22.187-13.281-1.31 2.325-.554 4.167.195 6.009 2.549 6.266 6.907 10.793 12.8 14.125 13.333 7.537 26.1 16.248 39.944 22.651 12.487 5.776 16.897 14.214 15.032 27.17-1.069 7.428 1.713 12.93 8.847 16.124 2.703 1.21 4.892 3.585 7.606 4.751 8.26 3.547 11.128 9.599 9.85 18.314-.57 3.896-.679 8.08 3.372 11.636m70.236-103.827c30.283-17.375 60.242-34.579 90.16-51.759 1.691 2.442 1.21 4.329 1.217 6.105.047 11.33-.206 22.667.097 33.989.243 9.108-3.744 15.932-10.952 20.604-16.63 10.78-33.572 21.074-50.34 31.642-2.094 1.32-4.126.875-6.26.628-5.825-.674-10.193 2.427-11.354 8.04-1.025 4.96 1.91 9.754 6.881 11.234 5.146 1.532 10.614-1.161 12.237-6.56.876-2.912 2.78-4.393 5.066-5.798 14.617-8.986 29.204-18.02 43.871-26.924 3.431-2.083 6.485-4.587 9.21-7.339 2.268.933 1.567 2.68 1.57 4.004.046 23.66-.02 47.32.078 70.98.013 3.084-1.146 4.845-3.748 6.342-38.258 22.003-76.462 44.099-114.717 66.107-3.118 1.794-5.88 4.325-9.365 5.265-2.076-1.786-1.462-3.92-1.45-5.827.123-18.822.452-37.644.445-56.465-.008-23.132-.132-46.267-.52-69.395-.142-8.501 1.144-14.994 10.307-18.99 9.549-4.166 18.2-10.388 27.567-15.883m8.19 19.798c-6.077 3.778-12.083 7.68-18.256 11.294-4.5 2.634-6.528 6.46-6.577 11.5-.066 6.825-.288 13.659-.037 20.474.16 4.35-.974 8.05-4.327 10.626-6.861 5.27-4.45 12.202-4.508 20.175 4.205-6.167 8.242-10.62 12.94-14.314 4.51-3.545 6.139-8.14 6.23-13.508.116-6.824.19-13.654.01-20.474-.099-3.793 1.432-6.14 4.632-8.067 10.694-6.437 21.277-13.06 31.866-19.67 4.215-2.632 8.037-5.296 13.75-4.092 4.8 1.012 8.998-3.134 9.79-7.966.803-4.897-1.91-9.421-6.586-10.986-4.793-1.603-10.264.043-11.763 4.72-1.524 4.757-4.959 6.762-8.643 8.987-5.984 3.613-11.93 7.287-18.52 11.301m63.18 40.521c-5.96-5.573-14.618-2.323-16.383 3.75-1.184 4.075-3.791 5.863-6.959 7.78a14037 14037 0 0 0-63.915 38.908c-6.241 3.823-9.668 12.069-7.822 17.745 26.016-17.85 53.419-33.607 80.177-50.384 1.663-1.042 3.329-1.438 5.21-.925 4.833 1.319 8.582-.54 11.24-4.388 2.836-4.102 1.911-8.19-1.548-12.486m-84.65-68.459c-9.697 5.59-19.14 10.888-28.433 16.439-2.768 1.654-4.873 1.744-7.742.075-27.788-16.166-55.675-32.163-83.51-48.246-2.41-1.392-5.036-2.562-6.69-4.818-.106-1.47.927-1.834 1.768-2.304 15.126-8.433 30.282-16.812 45.362-25.325 2.195-1.24 4.102-1.576 6.576-.9 4.81 1.314 9.654-1.367 11.26-5.825 1.639-4.542-.47-9.77-4.791-11.875-4.475-2.18-10.956-.912-12.577 3.62-1.913 5.349-6.147 7.12-10.304 9.417-14.87 8.214-29.807 16.306-44.611 24.636-3.314 1.864-6.08 2.08-9.203-.146-3.847-2.741-8.59-4.2-12.471-8.33 7.187-4.28 13.822-8.31 20.532-12.211 32.966-19.172 65.972-38.275 98.891-57.527 2.567-1.501 4.401-1.324 6.817.079 38.59 22.409 77.222 44.743 115.838 67.107 1.274.738 2.724 1.337 3.567 3.976-29.858 17.245-59.913 34.603-90.279 52.158m-59.159-52.652c-4.558 2.422-9.107 4.862-13.679 7.26-1.607.842-3.232 2.05-5.15 1.449-7.949-2.489-14.074 1.724-21.67 5.79 8.817 2.455 12.479 13.069 22.94 10.253 1.244-.335 3.053 1.063 4.486 1.86 9.747 5.429 19.5 10.85 29.173 16.406 4.028 2.313 7.718 2.267 11.718-.143 8.985-5.413 18.149-10.526 27.132-15.941 3.13-1.887 6.178-2.693 9.89-2.342 6.016.57 10.07-2.89 10.88-8.558.651-4.563-2.539-9.036-7.441-10.433-5.072-1.445-9.917.998-11.82 6.4-.91 2.585-2.444 4.146-4.73 5.425-8.718 4.878-17.425 9.782-26.025 14.865-2.937 1.736-5.398 1.723-8.338.003-7.33-4.287-14.827-8.286-22.214-12.475-1.495-.848-3.64-.981-4.203-3.636 8.9-4.653 17.899-9.273 26.806-14.061 2.782-1.495 5.42-2.016 8.573-1.292 5 1.146 9.221-1.36 10.66-5.858 1.594-4.978-.434-9.638-5.055-11.619-4.61-1.976-10.054-.603-12.076 3.782-1.484 3.22-3.85 4.795-6.72 6.204-4.185 2.056-8.325 4.203-13.137 6.66m74.309-7.428c8.665 5.276 17.38 10.471 25.976 15.857 4.836 3.03 8.046 2.708 12.508-1.897-2.106-3.289-5.186-5.486-8.492-7.45-20.018-11.894-40.013-23.824-60.06-35.668-2.644-1.562-4.616-3.204-5.748-6.368-1.8-5.03-7.57-7.228-12.389-5.453-4.44 1.637-7.056 6.818-5.748 11.384 1.621 5.66 6.193 8.658 11.74 7.21 2.494-.65 4.403-.417 6.558.898 11.64 7.1 23.347 14.086 35.655 21.487" fill="currentColor"/><text fill="currentColor" x="365" y="540" font-family="monospace" letter-spacing="-4" font-size="130" font-weight="bolder">OKDB</text></symbol></svg></div></template><style>.okdb-wrapper{--cube-size:90px;--brand-blue:#00a2ff;--glow-color:rgba(0, 162, 255, calc(0.35 * var(--energy)));width:150px;height:150px;perspective:1000px;display:flex;justify-content:center;align-items:center;user-select:none;touch-action:none;overflow:hidden}.cube-container{width:var(--cube-size);height:var(--cube-size);transform-style:preserve-3d;cursor:grab;position:relative;z-index:2}.cube{width:100%;height:100%;position:relative;transform-style:preserve-3d}@keyframes idle-spin{from{transform:rotateX(-15deg) rotateY(45deg)}to{transform:rotateX(-15deg) rotateY(405deg)}}@keyframes idle-counter-spin{from{transform:rotateY(-45deg) rotateX(15deg) translateZ(-18px)}to{transform:rotateY(-405deg) rotateX(15deg) translateZ(-18px)}}.cube{animation:none}.cube.idle{animation:idle-spin 20s linear infinite}.cube.idle .core-glow,.cube.idle .core-light{animation:idle-counter-spin 20s linear infinite}.face{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgb(133 152 166 / calc(.18 + var(--energy) * .06));border:2px solid rgba(0,162,255,.45);box-shadow:inset 0 0 18px rgba(0,162,255,.25),0 0 22px var(--glow-color);backface-visibility:visible}.logo{width:70%;height:70%;color:#fff;filter:drop-shadow(0 0 6px var(--brand-blue))}.front{transform:rotateY(0) translateZ(calc(var(--cube-size)/ 2))}.back{transform:rotateY(180deg) translateZ(calc(var(--cube-size)/ 2))}.right{transform:rotateY(90deg) translateZ(calc(var(--cube-size)/ 2))}.left{transform:rotateY(-90deg) translateZ(calc(var(--cube-size)/ 2))}.top{transform:rotateX(90deg) translateZ(calc(var(--cube-size)/ 2))}.bottom{transform:rotateX(-90deg) translateZ(calc(var(--cube-size)/ 2))}.core-glow{position:absolute;inset:18%;background:var(--brand-blue);border-radius:50%;filter:blur(26px);opacity:calc(.8 * var(--energy));transform:translateZ(-26px) scale(1);pointer-events:none}.core-light{position:absolute;inset:32%;background:#fff;border-radius:50%;filter:blur(12px);width:60px;height:60px;opacity:calc(1 * var(--energy));transform:translateZ(-14px);pointer-events:none}.underglow-system{position:absolute;bottom:-10px;width:160px;height:160px;transform-style:preserve-3d;transform:translateZ(-80px) rotateX(75deg);pointer-events:none;z-index:1}.core-glow{transform:translateZ(-18px);opacity:calc(.5 + 1 * var(--energy))}.core-light{transform:translateZ(-8px)}.core-glow,.core-light{transform-style:preserve-3d}.light-spill{position:absolute;inset:0;background:radial-gradient(circle,var(--brand-blue),transparent 70%);filter:blur(18px);opacity:calc(.8 * var(--energy))}.cube-container:active{cursor:grabbing}@property --energy{syntax:'<number>';inherits:true;initial-value:1}@keyframes pulse-energy{0%,100%{--energy:0.3}50%{--energy:1}}.okdb-wrapper{overflow:visible;animation:pulse-energy 4s ease-in-out infinite}.underglow-system{bottom:-80px;transform:translateZ(-120px) rotateX(90deg)}</style>
@@ -1 +1 @@
1
- const _0x52c771=_0x216c;(function(_0xc3d3aa,_0x5f466c){const _0xb23d55=_0x216c,_0x49473d=_0xc3d3aa();while(!![]){try{const _0x4fdf28=parseInt(_0xb23d55(0x18b))/0x1+-parseInt(_0xb23d55(0x1a6))/0x2*(-parseInt(_0xb23d55(0x19f))/0x3)+parseInt(_0xb23d55(0x198))/0x4+parseInt(_0xb23d55(0x1a8))/0x5*(-parseInt(_0xb23d55(0x1be))/0x6)+parseInt(_0xb23d55(0x18e))/0x7+parseInt(_0xb23d55(0x18f))/0x8*(parseInt(_0xb23d55(0x1bc))/0x9)+-parseInt(_0xb23d55(0x189))/0xa*(parseInt(_0xb23d55(0x1a9))/0xb);if(_0x4fdf28===_0x5f466c)break;else _0x49473d['push'](_0x49473d['shift']());}catch(_0xd9e0a8){_0x49473d['push'](_0x49473d['shift']());}}}(_0x370a,0xa8312));const params=new URLSearchParams(window[_0x52c771(0x1c3)]['search']),error=params[_0x52c771(0x1b1)](_0x52c771(0x19d)),redirect=params[_0x52c771(0x1b1)](_0x52c771(0x193))||'/admin/index.html';if(error){const e=document['getElementById'](_0x52c771(0x1b9));e[_0x52c771(0x1ce)]=!0x1,e['textContent']=error;}async function loadConfig(){const _0x11a3d0=_0x52c771,_0x211d82=await fetch('/admin/login/config',{'credentials':'same-origin'}),_0x5812e7=(await _0x211d82[_0x11a3d0(0x1b7)]()[_0x11a3d0(0x18c)](()=>({})))[_0x11a3d0(0x1b4)]||{};if(_0x5812e7['openAccess'])return void window[_0x11a3d0(0x1c3)][_0x11a3d0(0x199)](_0x11a3d0(0x1c8));if(_0x5812e7[_0x11a3d0(0x1c2)])return void window[_0x11a3d0(0x1c3)][_0x11a3d0(0x199)]('/admin/setup.html');const _0xda85fc=document['getElementById'](_0x11a3d0(0x188)),_0x45981a=document['getElementById'](_0x11a3d0(0x19a)),_0x5e2a6a=document[_0x11a3d0(0x18a)](_0x11a3d0(0x1ca)),_0x18967b=document[_0x11a3d0(0x18a)](_0x11a3d0(0x1c6)),_0x44b097=document[_0x11a3d0(0x18a)](_0x11a3d0(0x195)),_0x2d81ab=document[_0x11a3d0(0x18a)](_0x11a3d0(0x1cd)),_0x48178d=document[_0x11a3d0(0x18a)](_0x11a3d0(0x18d)),_0x117614=!!_0x5812e7['login']?.[_0x11a3d0(0x1a7)],_0x275d1e=!!_0x5812e7['oauth']?.[_0x11a3d0(0x1a7)];if(_0x45981a[_0x11a3d0(0x1ce)]=!_0x117614,_0x5e2a6a[_0x11a3d0(0x1ce)]=!_0x275d1e,_0x18967b[_0x11a3d0(0x1ce)]=!(_0x117614&&_0x275d1e),_0xda85fc[_0x11a3d0(0x1ce)]=!(_0x117614||_0x275d1e),_0x275d1e){const _0x4e1157=_0x5812e7['oauth']?.[_0x11a3d0(0x1a1)]||_0x11a3d0(0x1ac);_0x44b097[_0x11a3d0(0x1ba)]=_0x4e1157,_0x2d81ab[_0x11a3d0(0x1ba)]=_0x4e1157,document[_0x11a3d0(0x18a)]('loginButton')[_0x11a3d0(0x1a0)]=_0x11a3d0(0x194)+encodeURIComponent(redirect);}_0x48178d['textContent']=_0x117614&&!_0x275d1e?'Use\x20your\x20local\x20admin\x20credentials\x20to\x20create\x20a\x20secure\x20browser\x20session.':!_0x117614&&_0x275d1e?_0x11a3d0(0x1ae):_0x117614&&_0x275d1e?_0x11a3d0(0x1d2):_0x11a3d0(0x190);}function _0x370a(){const _0x283734=['basicForm','\x20·\x20','button','error','(unset)','69SDtpOi','href','label','tokens','application/json','join','value','103866CqIcSJ','enabled','5175kkAadM','11DopFRv','createElement','stringify','Use\x20a\x20provider','result','Use\x20your\x20organization\x20account.\x20API\x20and\x20MCP\x20clients\x20should\x20use\x20OAuth\x20access\x20tokens\x20directly.','toLocaleDateString','password','get','numeric','permissions','data','preventDefault','length','json','type','errorBox','textContent','...','99ONEuDL','tokenId','5946rXRkFt','same-origin','innerHTML','/auth/login','bootstrap','location','click','addEventListener','divider','Login\x20failed','/admin/index.html','submit','oauthWrap','picker-item','</span><span\x20class=\x22picker-item-meta\x22>','providerButtonLabel','hidden','pickerSection','slice','Failed\x20to\x20load\x20login\x20methods','Sign\x20in\x20with\x20local\x20admin\x20credentials\x20or\x20continue\x20with\x20your\x20configured\x20provider.','loginStack','13215560peYEzN','getElementById','86871lIxqbn','catch','noteBox','4212873AmFdpp','727984OQZfYf','No\x20login\x20method\x20is\x20configured.','message','pickerList','redirect','/admin/auth/start?redirect=','providerLabel','</span>','isArray','608032egAXAk','replace'];_0x370a=function(){return _0x283734;};return _0x370a();}function _0x216c(_0x905fc6,_0x5d9c47){_0x905fc6=_0x905fc6-0x188;const _0x370a6c=_0x370a();let _0x216c6c=_0x370a6c[_0x905fc6];return _0x216c6c;}function showError(_0x2656bf){const _0x50e4a6=_0x52c771,_0xdda983=document[_0x50e4a6(0x18a)](_0x50e4a6(0x1b9));_0xdda983['hidden']=!0x1,_0xdda983['textContent']=_0x2656bf;}function formatDate(_0x5ae7eb){const _0x48476c=_0x52c771;return _0x5ae7eb?new Date(_0x5ae7eb)[_0x48476c(0x1af)](void 0x0,{'year':_0x48476c(0x1b2),'month':'short','day':'numeric'}):'';}function formatPermissions(_0x504689){const _0x89a3f0=_0x52c771;if(!Array[_0x89a3f0(0x197)](_0x504689)||0x0===_0x504689[_0x89a3f0(0x1b6)])return'';const _0x2fa1d5=_0x504689[_0x89a3f0(0x1a4)](',\x20');return _0x2fa1d5[_0x89a3f0(0x1b6)]>0x28?_0x2fa1d5[_0x89a3f0(0x1d0)](0x0,0x25)+_0x89a3f0(0x1bb):_0x2fa1d5;}document['getElementById'](_0x52c771(0x19a))['addEventListener'](_0x52c771(0x1c9),async _0x2e5eec=>{const _0x2f979d=_0x52c771;_0x2e5eec[_0x2f979d(0x1b5)]();const _0x217ffa=document[_0x2f979d(0x18a)]('user')[_0x2f979d(0x1a5)],_0xc2eed5=document[_0x2f979d(0x18a)](_0x2f979d(0x1b0))['value'],_0x2d58ec=await fetch(_0x2f979d(0x1c1),{'method':'POST','headers':{'content-type':_0x2f979d(0x1a3)},'credentials':_0x2f979d(0x1bf),'body':JSON[_0x2f979d(0x1ab)]({'username':_0x217ffa,'password':_0xc2eed5})}),_0x5132bb=await _0x2d58ec[_0x2f979d(0x1b7)]()[_0x2f979d(0x18c)](()=>({}));if(!_0x2d58ec['ok'])return void showError(_0x5132bb?.['error']?.[_0x2f979d(0x191)]||_0x5132bb?.[_0x2f979d(0x19d)]||_0x5132bb?.[_0x2f979d(0x1ad)]?.[_0x2f979d(0x19d)]||_0x2f979d(0x1c7));const _0x5100f8=_0x5132bb?.[_0x2f979d(0x1b4)];if(_0x5100f8?.['ambiguous']){document[_0x2f979d(0x18a)]('basicForm')[_0x2f979d(0x1ce)]=!0x0,document['getElementById'](_0x2f979d(0x1cf))[_0x2f979d(0x1ce)]=!0x1;const _0x1026aa=document['getElementById'](_0x2f979d(0x192));_0x1026aa['innerHTML']='';for(const _0x3f187c of _0x5100f8[_0x2f979d(0x1a2)]||[]){const _0x586172=document[_0x2f979d(0x1aa)](_0x2f979d(0x19c));_0x586172[_0x2f979d(0x1b8)]=_0x2f979d(0x19c),_0x586172['className']=_0x2f979d(0x1cb);const _0xaad1d4=formatPermissions(_0x3f187c[_0x2f979d(0x1b3)]),_0x2aa19a=formatDate(_0x3f187c['createdAt']);_0x586172[_0x2f979d(0x1c0)]='<span\x20class=\x22picker-item-label\x22>'+(_0x3f187c[_0x2f979d(0x1a1)]||_0x2f979d(0x19e))+_0x2f979d(0x1cc)+_0xaad1d4+(_0xaad1d4&&_0x2aa19a?_0x2f979d(0x19b):'')+_0x2aa19a+_0x2f979d(0x196),_0x586172[_0x2f979d(0x1c5)](_0x2f979d(0x1c4),async()=>{const _0x22fc06=_0x2f979d,_0x300794=await fetch('/auth/login/select',{'method':'POST','headers':{'content-type':_0x22fc06(0x1a3)},'credentials':_0x22fc06(0x1bf),'body':JSON[_0x22fc06(0x1ab)]({'username':_0x217ffa,'password':_0xc2eed5,'tokenId':_0x3f187c[_0x22fc06(0x1bd)]})}),_0x11155b=await _0x300794[_0x22fc06(0x1b7)]()[_0x22fc06(0x18c)](()=>({}));if(!_0x300794['ok'])return document[_0x22fc06(0x18a)](_0x22fc06(0x1cf))[_0x22fc06(0x1ce)]=!0x0,document['getElementById']('basicForm')['hidden']=!0x1,void showError(_0x11155b?.[_0x22fc06(0x19d)]?.[_0x22fc06(0x191)]||_0x11155b?.[_0x22fc06(0x19d)]||'Selection\x20failed');window['location'][_0x22fc06(0x199)](redirect);}),_0x1026aa['appendChild'](_0x586172);}return;}window[_0x2f979d(0x1c3)][_0x2f979d(0x199)](redirect);}),loadConfig()[_0x52c771(0x18c)](_0x4aa521=>{const _0x201511=_0x52c771,_0x197f54=document[_0x201511(0x18a)](_0x201511(0x1b9));_0x197f54[_0x201511(0x1ce)]=!0x1,_0x197f54[_0x201511(0x1ba)]=_0x4aa521?.[_0x201511(0x191)]||_0x201511(0x1d1);});
1
+ const params=new URLSearchParams(window.location.search),error=params.get("error"),redirect=params.get("redirect")||"/admin/index.html";if(error){const e=document.getElementById("errorBox");e.hidden=!1,e.textContent=error}async function loadConfig(){const e=await fetch("/admin/login/config",{credentials:"same-origin"}),t=(await e.json().catch(()=>({}))).data||{};if(t.openAccess)return void window.location.replace("/admin/index.html");if(t.bootstrap)return void window.location.replace("/admin/setup.html");const n=document.getElementById("loginStack"),o=document.getElementById("basicForm"),r=document.getElementById("oauthWrap"),i=document.getElementById("divider"),a=document.getElementById("providerLabel"),d=document.getElementById("providerButtonLabel"),c=document.getElementById("noteBox"),s=!!t.login?.enabled,m=!!t.oauth?.enabled;if(o.hidden=!s,r.hidden=!m,i.hidden=!(s&&m),n.hidden=!(s||m),m){const e=t.oauth?.label||"Use a provider";a.textContent=e,d.textContent=e,document.getElementById("loginButton").href=`/admin/auth/start?redirect=${encodeURIComponent(redirect)}`}c.textContent=s&&!m?"Use your local admin credentials to create a secure browser session.":!s&&m?"Use your organization account. API and MCP clients should use OAuth access tokens directly.":s&&m?"Sign in with local admin credentials or continue with your configured provider.":"No login method is configured."}function showError(e){const t=document.getElementById("errorBox");t.hidden=!1,t.textContent=e}function formatDate(e){return e?new Date(e).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):""}function formatPermissions(e){if(!Array.isArray(e)||0===e.length)return"";const t=e.join(", ");return t.length>40?t.slice(0,37)+"...":t}document.getElementById("basicForm").addEventListener("submit",async e=>{e.preventDefault();const t=document.getElementById("user").value,n=document.getElementById("password").value,o=await fetch("/auth/login",{method:"POST",headers:{"content-type":"application/json"},credentials:"same-origin",body:JSON.stringify({username:t,password:n})}),r=await o.json().catch(()=>({}));if(!o.ok)return void showError(r?.error?.message||r?.error||r?.result?.error||"Login failed");const i=r?.data;if(i?.ambiguous){document.getElementById("basicForm").hidden=!0,document.getElementById("pickerSection").hidden=!1;const e=document.getElementById("pickerList");e.innerHTML="";for(const o of i.tokens||[]){const r=document.createElement("button");r.type="button",r.className="picker-item";const i=formatPermissions(o.permissions),a=formatDate(o.createdAt);r.innerHTML=`<span class="picker-item-label">${o.label||"(unset)"}</span><span class="picker-item-meta">${i}${i&&a?" · ":""}${a}</span>`,r.addEventListener("click",async()=>{const e=await fetch("/auth/login/select",{method:"POST",headers:{"content-type":"application/json"},credentials:"same-origin",body:JSON.stringify({username:t,password:n,tokenId:o.tokenId})}),r=await e.json().catch(()=>({}));if(!e.ok)return document.getElementById("pickerSection").hidden=!0,document.getElementById("basicForm").hidden=!1,void showError(r?.error?.message||r?.error||"Selection failed");window.location.replace(redirect)}),e.appendChild(r)}return}window.location.replace(redirect)}),loadConfig().catch(e=>{const t=document.getElementById("errorBox");t.hidden=!1,t.textContent=e?.message||"Failed to load login methods"});