covara 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -9
- package/assets/logo.svg +19 -0
- package/dist/auth/adapter.d.ts +1 -0
- package/dist/auth/adapter.d.ts.map +1 -1
- package/dist/auth/adapter.js +37 -1
- package/dist/auth/adapter.js.map +1 -1
- package/dist/auth/routes.d.ts.map +1 -1
- package/dist/auth/routes.js +15 -2
- package/dist/auth/routes.js.map +1 -1
- package/dist/auth/types.d.ts +4 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js +10 -0
- package/dist/auth/types.js.map +1 -1
- package/dist/cli/templates/readme.js +2 -2
- package/dist/client/aggregate-subscription.d.ts +32 -0
- package/dist/client/aggregate-subscription.d.ts.map +1 -0
- package/dist/client/aggregate-subscription.js +131 -0
- package/dist/client/aggregate-subscription.js.map +1 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/live-store.d.ts.map +1 -1
- package/dist/client/live-store.js +18 -3
- package/dist/client/live-store.js.map +1 -1
- package/dist/client/react.d.ts +25 -1
- package/dist/client/react.d.ts.map +1 -1
- package/dist/client/react.js +53 -0
- package/dist/client/react.js.map +1 -1
- package/dist/client/repository.d.ts +2 -0
- package/dist/client/repository.d.ts.map +1 -1
- package/dist/client/repository.js +9 -0
- package/dist/client/repository.js.map +1 -1
- package/dist/client/types.d.ts +17 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/middleware/securityHeaders.d.ts +1 -0
- package/dist/middleware/securityHeaders.d.ts.map +1 -1
- package/dist/middleware/securityHeaders.js +6 -3
- package/dist/middleware/securityHeaders.js.map +1 -1
- package/dist/resource/changelog.d.ts +3 -3
- package/dist/resource/changelog.d.ts.map +1 -1
- package/dist/resource/changelog.js +6 -3
- package/dist/resource/changelog.js.map +1 -1
- package/dist/resource/hook.d.ts.map +1 -1
- package/dist/resource/hook.js +141 -18
- package/dist/resource/hook.js.map +1 -1
- package/dist/resource/mutate.d.ts +3 -3
- package/dist/resource/mutate.d.ts.map +1 -1
- package/dist/resource/mutate.js +8 -8
- package/dist/resource/mutate.js.map +1 -1
- package/dist/resource/pagination.d.ts.map +1 -1
- package/dist/resource/pagination.js +32 -4
- package/dist/resource/pagination.js.map +1 -1
- package/dist/resource/query.d.ts +1 -0
- package/dist/resource/query.d.ts.map +1 -1
- package/dist/resource/query.js +12 -0
- package/dist/resource/query.js.map +1 -1
- package/dist/resource/subscription.d.ts +18 -1
- package/dist/resource/subscription.d.ts.map +1 -1
- package/dist/resource/subscription.js +310 -53
- package/dist/resource/subscription.js.map +1 -1
- package/dist/resource/track-mutations.d.ts.map +1 -1
- package/dist/resource/track-mutations.js +1 -1
- package/dist/resource/track-mutations.js.map +1 -1
- package/dist/resource/types.d.ts +2 -0
- package/dist/resource/types.d.ts.map +1 -1
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +28 -3
- package/dist/server/app.js.map +1 -1
- package/dist/ui/html/client/data-explorer-app.d.ts +2 -0
- package/dist/ui/html/client/data-explorer-app.d.ts.map +1 -0
- package/dist/ui/html/client/data-explorer-app.js +441 -0
- package/dist/ui/html/client/data-explorer-app.js.map +1 -0
- package/dist/ui/html/client/htmx-vendor.d.ts +3 -0
- package/dist/ui/html/client/htmx-vendor.d.ts.map +1 -0
- package/dist/ui/html/client/htmx-vendor.js +5 -0
- package/dist/ui/html/client/htmx-vendor.js.map +1 -0
- package/dist/ui/html/client/runtime.d.ts +2 -0
- package/dist/ui/html/client/runtime.d.ts.map +1 -0
- package/dist/ui/html/client/runtime.js +198 -0
- package/dist/ui/html/client/runtime.js.map +1 -0
- package/dist/ui/html/components/index.d.ts +5 -1
- package/dist/ui/html/components/index.d.ts.map +1 -1
- package/dist/ui/html/components/index.js +10 -5
- package/dist/ui/html/components/index.js.map +1 -1
- package/dist/ui/html/icons.d.ts +3 -0
- package/dist/ui/html/icons.d.ts.map +1 -0
- package/dist/ui/html/icons.js +23 -0
- package/dist/ui/html/icons.js.map +1 -0
- package/dist/ui/html/layout.d.ts.map +1 -1
- package/dist/ui/html/layout.js +38 -18
- package/dist/ui/html/layout.js.map +1 -1
- package/dist/ui/html/logo.d.ts +2 -0
- package/dist/ui/html/logo.d.ts.map +1 -0
- package/dist/ui/html/logo.js +23 -0
- package/dist/ui/html/logo.js.map +1 -0
- package/dist/ui/html/pages/dashboard.d.ts.map +1 -1
- package/dist/ui/html/pages/dashboard.js +6 -5
- package/dist/ui/html/pages/dashboard.js.map +1 -1
- package/dist/ui/html/pages/data-explorer.d.ts.map +1 -1
- package/dist/ui/html/pages/data-explorer.js +5 -94
- package/dist/ui/html/pages/data-explorer.js.map +1 -1
- package/dist/ui/html/pages/kv-inspector.d.ts.map +1 -1
- package/dist/ui/html/pages/kv-inspector.js +0 -1
- package/dist/ui/html/pages/kv-inspector.js.map +1 -1
- package/dist/ui/html/pages/sessions.d.ts.map +1 -1
- package/dist/ui/html/pages/sessions.js +4 -3
- package/dist/ui/html/pages/sessions.js.map +1 -1
- package/dist/ui/html/pages/subscriptions.d.ts.map +1 -1
- package/dist/ui/html/pages/subscriptions.js +2 -3
- package/dist/ui/html/pages/subscriptions.js.map +1 -1
- package/dist/ui/html/pages/tasks.d.ts.map +1 -1
- package/dist/ui/html/pages/tasks.js +0 -1
- package/dist/ui/html/pages/tasks.js.map +1 -1
- package/dist/ui/html/pages/users.js +1 -1
- package/dist/ui/html/pages/users.js.map +1 -1
- package/dist/ui/html/styles.d.ts +1 -1
- package/dist/ui/html/styles.d.ts.map +1 -1
- package/dist/ui/html/styles.js +367 -40
- package/dist/ui/html/styles.js.map +1 -1
- package/dist/ui/html/utils.d.ts +1 -1
- package/dist/ui/html/utils.d.ts.map +1 -1
- package/dist/ui/html/utils.js +4 -0
- package/dist/ui/html/utils.js.map +1 -1
- package/dist/ui/index.d.ts +2 -2
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/middleware.d.ts +7 -2
- package/dist/ui/middleware.d.ts.map +1 -1
- package/dist/ui/middleware.js +362 -117
- package/dist/ui/middleware.js.map +1 -1
- package/dist/ui/schema-registry.d.ts +1 -0
- package/dist/ui/schema-registry.d.ts.map +1 -1
- package/dist/ui/schema-registry.js +1 -0
- package/dist/ui/schema-registry.js.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Vendored htmx 2.0.4 (https://htmx.org), MIT-licensed, served locally so the
|
|
2
|
+
// admin UI makes zero external requests. Regenerate with scripts/vendor-htmx.
|
|
3
|
+
export const htmxVersion = "2.0.4";
|
|
4
|
+
export const htmxScript = "var htmx=function(){\"use strict\";const Q={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){const n=cn(e,t||\"post\");return n.values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:\"innerHTML\",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:\"htmx-indicator\",requestClass:\"htmx-request\",addedClass:\"htmx-added\",settlingClass:\"htmx-settling\",swappingClass:\"htmx-swapping\",allowEval:true,allowScriptTags:true,inlineScriptNonce:\"\",inlineStyleNonce:\"\",attributesToSettle:[\"class\",\"style\",\"width\",\"height\"],withCredentials:false,timeout:0,wsReconnectDelay:\"full-jitter\",wsBinaryType:\"blob\",disableSelector:\"[hx-disable], [data-hx-disable]\",scrollBehavior:\"instant\",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:[\"get\",\"delete\"],selfRequestsOnly:true,ignoreTitle:false,scrollIntoViewOnBoost:true,triggerSpecsCache:null,disableInheritance:false,responseHandling:[{code:\"204\",swap:false},{code:\"[23]..\",swap:true},{code:\"[45]..\",swap:false,error:true}],allowNestedOobSwaps:true},parseInterval:null,_:null,version:\"2.0.4\"};Q.onLoad=j;Q.process=kt;Q.on=ye;Q.off=be;Q.trigger=he;Q.ajax=Rn;Q.find=u;Q.findAll=x;Q.closest=g;Q.remove=z;Q.addClass=K;Q.removeClass=G;Q.toggleClass=W;Q.takeClass=Z;Q.swap=$e;Q.defineExtension=Fn;Q.removeExtension=Bn;Q.logAll=V;Q.logNone=_;Q.parseInterval=d;Q._=e;const n={addTriggerHandler:St,bodyContains:le,canAccessLocalStorage:B,findThisElement:Se,filterValues:hn,swap:$e,hasAttribute:s,getAttributeValue:te,getClosestAttributeValue:re,getClosestMatch:o,getExpressionVars:En,getHeaders:fn,getInputValues:cn,getInternalData:ie,getSwapSpecification:gn,getTriggerSpecs:st,getTarget:Ee,makeFragment:P,mergeObjects:ce,makeSettleInfo:xn,oobSwap:He,querySelectorExt:ae,settleImmediately:Kt,shouldCancel:ht,triggerEvent:he,triggerErrorEvent:fe,withExtensions:Ft};const r=[\"get\",\"post\",\"put\",\"delete\",\"patch\"];const H=r.map(function(e){return\"[hx-\"+e+\"], [data-hx-\"+e+\"]\"}).join(\", \");function d(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)==\"ms\"){t=parseFloat(e.slice(0,-2))}else if(e.slice(-1)==\"s\"){t=parseFloat(e.slice(0,-1))*1e3}else if(e.slice(-1)==\"m\"){t=parseFloat(e.slice(0,-1))*1e3*60}else{t=parseFloat(e)}return isNaN(t)?undefined:t}function ee(e,t){return e instanceof Element&&e.getAttribute(t)}function s(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute(\"data-\"+t))}function te(e,t){return ee(e,t)||ee(e,\"data-\"+t)}function c(e){const t=e.parentElement;if(!t&&e.parentNode instanceof ShadowRoot)return e.parentNode;return t}function ne(){return document}function m(e,t){return e.getRootNode?e.getRootNode({composed:t}):ne()}function o(e,t){while(e&&!t(e)){e=c(e)}return e||null}function i(e,t,n){const r=te(t,n);const o=te(t,\"hx-disinherit\");var i=te(t,\"hx-inherit\");if(e!==t){if(Q.config.disableInheritance){if(i&&(i===\"*\"||i.split(\" \").indexOf(n)>=0)){return r}else{return null}}if(o&&(o===\"*\"||o.split(\" \").indexOf(n)>=0)){return\"unset\"}}return r}function re(t,n){let r=null;o(t,function(e){return!!(r=i(t,ue(e),n))});if(r!==\"unset\"){return r}}function h(e,t){const n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function T(e){const t=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;const n=t.exec(e);if(n){return n[1].toLowerCase()}else{return\"\"}}function q(e){const t=new DOMParser;return t.parseFromString(e,\"text/html\")}function L(e,t){while(t.childNodes.length>0){e.append(t.childNodes[0])}}function A(e){const t=ne().createElement(\"script\");se(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(Q.config.inlineScriptNonce){t.nonce=Q.config.inlineScriptNonce}return t}function N(e){return e.matches(\"script\")&&(e.type===\"text/javascript\"||e.type===\"module\"||e.type===\"\")}function I(e){Array.from(e.querySelectorAll(\"script\")).forEach(e=>{if(N(e)){const t=A(e);const n=e.parentNode;try{n.insertBefore(t,e)}catch(e){O(e)}finally{e.remove()}}})}function P(e){const t=e.replace(/<head(\\s[^>]*)?>[\\s\\S]*?<\\/head>/i,\"\");const n=T(t);let r;if(n===\"html\"){r=new DocumentFragment;const i=q(e);L(r,i.body);r.title=i.title}else if(n===\"body\"){r=new DocumentFragment;const i=q(t);L(r,i.body);r.title=i.title}else{const i=q('<body><template class=\"internal-htmx-wrapper\">'+t+\"</template></body>\");r=i.querySelector(\"template\").content;r.title=i.title;var o=r.querySelector(\"title\");if(o&&o.parentNode===r){o.remove();r.title=o.innerText}}if(r){if(Q.config.allowScriptTags){I(r)}else{r.querySelectorAll(\"script\").forEach(e=>e.remove())}}return r}function oe(e){if(e){e()}}function t(e,t){return Object.prototype.toString.call(e)===\"[object \"+t+\"]\"}function k(e){return typeof e===\"function\"}function D(e){return t(e,\"Object\")}function ie(e){const t=\"htmx-internal-data\";let n=e[t];if(!n){n=e[t]={}}return n}function M(t){const n=[];if(t){for(let e=0;e<t.length;e++){n.push(t[e])}}return n}function se(t,n){if(t){for(let e=0;e<t.length;e++){n(t[e])}}}function X(e){const t=e.getBoundingClientRect();const n=t.top;const r=t.bottom;return n<window.innerHeight&&r>=0}function le(e){return e.getRootNode({composed:true})===document}function F(e){return e.trim().split(/\\s+/)}function ce(e,t){for(const n in t){if(t.hasOwnProperty(n)){e[n]=t[n]}}return e}function S(e){try{return JSON.parse(e)}catch(e){O(e);return null}}function B(){const e=\"htmx:localStorageTest\";try{localStorage.setItem(e,e);localStorage.removeItem(e);return true}catch(e){return false}}function U(t){try{const e=new URL(t);if(e){t=e.pathname+e.search}if(!/^\\/$/.test(t)){t=t.replace(/\\/+$/,\"\")}return t}catch(e){return t}}function e(e){return vn(ne().body,function(){return eval(e)})}function j(t){const e=Q.on(\"htmx:load\",function(e){t(e.detail.elt)});return e}function V(){Q.logger=function(e,t,n){if(console){console.log(t,e,n)}}}function _(){Q.logger=null}function u(e,t){if(typeof e!==\"string\"){return e.querySelector(t)}else{return u(ne(),e)}}function x(e,t){if(typeof e!==\"string\"){return e.querySelectorAll(t)}else{return x(ne(),e)}}function E(){return window}function z(e,t){e=y(e);if(t){E().setTimeout(function(){z(e);e=null},t)}else{c(e).removeChild(e)}}function ue(e){return e instanceof Element?e:null}function $(e){return e instanceof HTMLElement?e:null}function J(e){return typeof e===\"string\"?e:null}function f(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function K(e,t,n){e=ue(y(e));if(!e){return}if(n){E().setTimeout(function(){K(e,t);e=null},n)}else{e.classList&&e.classList.add(t)}}function G(e,t,n){let r=ue(y(e));if(!r){return}if(n){E().setTimeout(function(){G(r,t);r=null},n)}else{if(r.classList){r.classList.remove(t);if(r.classList.length===0){r.removeAttribute(\"class\")}}}}function W(e,t){e=y(e);e.classList.toggle(t)}function Z(e,t){e=y(e);se(e.parentElement.children,function(e){G(e,t)});K(ue(e),t)}function g(e,t){e=ue(y(e));if(e&&e.closest){return e.closest(t)}else{do{if(e==null||h(e,t)){return e}}while(e=e&&ue(c(e)));return null}}function l(e,t){return e.substring(0,t.length)===t}function Y(e,t){return e.substring(e.length-t.length)===t}function ge(e){const t=e.trim();if(l(t,\"<\")&&Y(t,\"/>\")){return t.substring(1,t.length-2)}else{return t}}function p(t,r,n){if(r.indexOf(\"global \")===0){return p(t,r.slice(7),true)}t=y(t);const o=[];{let t=0;let n=0;for(let e=0;e<r.length;e++){const l=r[e];if(l===\",\"&&t===0){o.push(r.substring(n,e));n=e+1;continue}if(l===\"<\"){t++}else if(l===\"/\"&&e<r.length-1&&r[e+1]===\">\"){t--}}if(n<r.length){o.push(r.substring(n))}}const i=[];const s=[];while(o.length>0){const r=ge(o.shift());let e;if(r.indexOf(\"closest \")===0){e=g(ue(t),ge(r.substr(8)))}else if(r.indexOf(\"find \")===0){e=u(f(t),ge(r.substr(5)))}else if(r===\"next\"||r===\"nextElementSibling\"){e=ue(t).nextElementSibling}else if(r.indexOf(\"next \")===0){e=pe(t,ge(r.substr(5)),!!n)}else if(r===\"previous\"||r===\"previousElementSibling\"){e=ue(t).previousElementSibling}else if(r.indexOf(\"previous \")===0){e=me(t,ge(r.substr(9)),!!n)}else if(r===\"document\"){e=document}else if(r===\"window\"){e=window}else if(r===\"body\"){e=document.body}else if(r===\"root\"){e=m(t,!!n)}else if(r===\"host\"){e=t.getRootNode().host}else{s.push(r)}if(e){i.push(e)}}if(s.length>0){const e=s.join(\",\");const c=f(m(t,!!n));i.push(...M(c.querySelectorAll(e)))}return i}var pe=function(t,e,n){const r=f(m(t,n)).querySelectorAll(e);for(let e=0;e<r.length;e++){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_PRECEDING){return o}}};var me=function(t,e,n){const r=f(m(t,n)).querySelectorAll(e);for(let e=r.length-1;e>=0;e--){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_FOLLOWING){return o}}};function ae(e,t){if(typeof e!==\"string\"){return p(e,t)[0]}else{return p(ne().body,e)[0]}}function y(e,t){if(typeof e===\"string\"){return u(f(t)||document,e)}else{return e}}function xe(e,t,n,r){if(k(t)){return{target:ne().body,event:J(e),listener:t,options:n}}else{return{target:y(e),event:J(t),listener:n,options:r}}}function ye(t,n,r,o){Vn(function(){const e=xe(t,n,r,o);e.target.addEventListener(e.event,e.listener,e.options)});const e=k(n);return e?n:r}function be(t,n,r){Vn(function(){const e=xe(t,n,r);e.target.removeEventListener(e.event,e.listener)});return k(n)?n:r}const ve=ne().createElement(\"output\");function we(e,t){const n=re(e,t);if(n){if(n===\"this\"){return[Se(e,t)]}else{const r=p(e,n);if(r.length===0){O('The selector \"'+n+'\" on '+t+\" returned no matches!\");return[ve]}else{return r}}}}function Se(e,t){return ue(o(e,function(e){return te(ue(e),t)!=null}))}function Ee(e){const t=re(e,\"hx-target\");if(t){if(t===\"this\"){return Se(e,\"hx-target\")}else{return ae(e,t)}}else{const n=ie(e);if(n.boosted){return ne().body}else{return e}}}function Ce(t){const n=Q.config.attributesToSettle;for(let e=0;e<n.length;e++){if(t===n[e]){return true}}return false}function Oe(t,n){se(t.attributes,function(e){if(!n.hasAttribute(e.name)&&Ce(e.name)){t.removeAttribute(e.name)}});se(n.attributes,function(e){if(Ce(e.name)){t.setAttribute(e.name,e.value)}})}function Re(t,e){const n=Un(e);for(let e=0;e<n.length;e++){const r=n[e];try{if(r.isInlineSwap(t)){return true}}catch(e){O(e)}}return t===\"outerHTML\"}function He(e,o,i,t){t=t||ne();let n=\"#\"+ee(o,\"id\");let s=\"outerHTML\";if(e===\"true\"){}else if(e.indexOf(\":\")>0){s=e.substring(0,e.indexOf(\":\"));n=e.substring(e.indexOf(\":\")+1)}else{s=e}o.removeAttribute(\"hx-swap-oob\");o.removeAttribute(\"data-hx-swap-oob\");const r=p(t,n,false);if(r){se(r,function(e){let t;const n=o.cloneNode(true);t=ne().createDocumentFragment();t.appendChild(n);if(!Re(s,e)){t=f(n)}const r={shouldSwap:true,target:e,fragment:t};if(!he(e,\"htmx:oobBeforeSwap\",r))return;e=r.target;if(r.shouldSwap){qe(t);_e(s,e,e,t,i);Te()}se(i.elts,function(e){he(e,\"htmx:oobAfterSwap\",r)})});o.parentNode.removeChild(o)}else{o.parentNode.removeChild(o);fe(ne().body,\"htmx:oobErrorNoTarget\",{content:o})}return e}function Te(){const e=u(\"#--htmx-preserve-pantry--\");if(e){for(const t of[...e.children]){const n=u(\"#\"+t.id);n.parentNode.moveBefore(t,n);n.remove()}e.remove()}}function qe(e){se(x(e,\"[hx-preserve], [data-hx-preserve]\"),function(e){const t=te(e,\"id\");const n=ne().getElementById(t);if(n!=null){if(e.moveBefore){let e=u(\"#--htmx-preserve-pantry--\");if(e==null){ne().body.insertAdjacentHTML(\"afterend\",\"<div id='--htmx-preserve-pantry--'></div>\");e=u(\"#--htmx-preserve-pantry--\")}e.moveBefore(n,null)}else{e.parentNode.replaceChild(n,e)}}})}function Le(l,e,c){se(e.querySelectorAll(\"[id]\"),function(t){const n=ee(t,\"id\");if(n&&n.length>0){const r=n.replace(\"'\",\"\\\\'\");const o=t.tagName.replace(\":\",\"\\\\:\");const e=f(l);const i=e&&e.querySelector(o+\"[id='\"+r+\"']\");if(i&&i!==e){const s=t.cloneNode();Oe(t,i);c.tasks.push(function(){Oe(t,s)})}}})}function Ae(e){return function(){G(e,Q.config.addedClass);kt(ue(e));Ne(f(e));he(e,\"htmx:load\")}}function Ne(e){const t=\"[autofocus]\";const n=$(h(e,t)?e:e.querySelector(t));if(n!=null){n.focus()}}function a(e,t,n,r){Le(e,n,r);while(n.childNodes.length>0){const o=n.firstChild;K(ue(o),Q.config.addedClass);e.insertBefore(o,t);if(o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE){r.tasks.push(Ae(o))}}}function Ie(e,t){let n=0;while(n<e.length){t=(t<<5)-t+e.charCodeAt(n++)|0}return t}function Pe(t){let n=0;if(t.attributes){for(let e=0;e<t.attributes.length;e++){const r=t.attributes[e];if(r.value){n=Ie(r.name,n);n=Ie(r.value,n)}}}return n}function ke(t){const n=ie(t);if(n.onHandlers){for(let e=0;e<n.onHandlers.length;e++){const r=n.onHandlers[e];be(t,r.event,r.listener)}delete n.onHandlers}}function De(e){const t=ie(e);if(t.timeout){clearTimeout(t.timeout)}if(t.listenerInfos){se(t.listenerInfos,function(e){if(e.on){be(e.on,e.trigger,e.listener)}})}ke(e);se(Object.keys(t),function(e){if(e!==\"firstInitCompleted\")delete t[e]})}function b(e){he(e,\"htmx:beforeCleanupElement\");De(e);if(e.children){se(e.children,function(e){b(e)})}}function Me(t,e,n){if(t instanceof Element&&t.tagName===\"BODY\"){return Ve(t,e,n)}let r;const o=t.previousSibling;const i=c(t);if(!i){return}a(i,t,e,n);if(o==null){r=i.firstChild}else{r=o.nextSibling}n.elts=n.elts.filter(function(e){return e!==t});while(r&&r!==t){if(r instanceof Element){n.elts.push(r)}r=r.nextSibling}b(t);if(t instanceof Element){t.remove()}else{t.parentNode.removeChild(t)}}function Xe(e,t,n){return a(e,e.firstChild,t,n)}function Fe(e,t,n){return a(c(e),e,t,n)}function Be(e,t,n){return a(e,null,t,n)}function Ue(e,t,n){return a(c(e),e.nextSibling,t,n)}function je(e){b(e);const t=c(e);if(t){return t.removeChild(e)}}function Ve(e,t,n){const r=e.firstChild;a(e,r,t,n);if(r){while(r.nextSibling){b(r.nextSibling);e.removeChild(r.nextSibling)}b(r);e.removeChild(r)}}function _e(t,e,n,r,o){switch(t){case\"none\":return;case\"outerHTML\":Me(n,r,o);return;case\"afterbegin\":Xe(n,r,o);return;case\"beforebegin\":Fe(n,r,o);return;case\"beforeend\":Be(n,r,o);return;case\"afterend\":Ue(n,r,o);return;case\"delete\":je(n);return;default:var i=Un(e);for(let e=0;e<i.length;e++){const s=i[e];try{const l=s.handleSwap(t,n,r,o);if(l){if(Array.isArray(l)){for(let e=0;e<l.length;e++){const c=l[e];if(c.nodeType!==Node.TEXT_NODE&&c.nodeType!==Node.COMMENT_NODE){o.tasks.push(Ae(c))}}}return}}catch(e){O(e)}}if(t===\"innerHTML\"){Ve(n,r,o)}else{_e(Q.config.defaultSwapStyle,e,n,r,o)}}}function ze(e,n,r){var t=x(e,\"[hx-swap-oob], [data-hx-swap-oob]\");se(t,function(e){if(Q.config.allowNestedOobSwaps||e.parentElement===null){const t=te(e,\"hx-swap-oob\");if(t!=null){He(t,e,n,r)}}else{e.removeAttribute(\"hx-swap-oob\");e.removeAttribute(\"data-hx-swap-oob\")}});return t.length>0}function $e(e,t,r,o){if(!o){o={}}e=y(e);const i=o.contextElement?m(o.contextElement,false):ne();const n=document.activeElement;let s={};try{s={elt:n,start:n?n.selectionStart:null,end:n?n.selectionEnd:null}}catch(e){}const l=xn(e);if(r.swapStyle===\"textContent\"){e.textContent=t}else{let n=P(t);l.title=n.title;if(o.selectOOB){const u=o.selectOOB.split(\",\");for(let t=0;t<u.length;t++){const a=u[t].split(\":\",2);let e=a[0].trim();if(e.indexOf(\"#\")===0){e=e.substring(1)}const f=a[1]||\"true\";const h=n.querySelector(\"#\"+e);if(h){He(f,h,l,i)}}}ze(n,l,i);se(x(n,\"template\"),function(e){if(e.content&&ze(e.content,l,i)){e.remove()}});if(o.select){const d=ne().createDocumentFragment();se(n.querySelectorAll(o.select),function(e){d.appendChild(e)});n=d}qe(n);_e(r.swapStyle,o.contextElement,e,n,l);Te()}if(s.elt&&!le(s.elt)&&ee(s.elt,\"id\")){const g=document.getElementById(ee(s.elt,\"id\"));const p={preventScroll:r.focusScroll!==undefined?!r.focusScroll:!Q.config.defaultFocusScroll};if(g){if(s.start&&g.setSelectionRange){try{g.setSelectionRange(s.start,s.end)}catch(e){}}g.focus(p)}}e.classList.remove(Q.config.swappingClass);se(l.elts,function(e){if(e.classList){e.classList.add(Q.config.settlingClass)}he(e,\"htmx:afterSwap\",o.eventInfo)});if(o.afterSwapCallback){o.afterSwapCallback()}if(!r.ignoreTitle){kn(l.title)}const c=function(){se(l.tasks,function(e){e.call()});se(l.elts,function(e){if(e.classList){e.classList.remove(Q.config.settlingClass)}he(e,\"htmx:afterSettle\",o.eventInfo)});if(o.anchor){const e=ue(y(\"#\"+o.anchor));if(e){e.scrollIntoView({block:\"start\",behavior:\"auto\"})}}yn(l.elts,r);if(o.afterSettleCallback){o.afterSettleCallback()}};if(r.settleDelay>0){E().setTimeout(c,r.settleDelay)}else{c()}}function Je(e,t,n){const r=e.getResponseHeader(t);if(r.indexOf(\"{\")===0){const o=S(r);for(const i in o){if(o.hasOwnProperty(i)){let e=o[i];if(D(e)){n=e.target!==undefined?e.target:n}else{e={value:e}}he(n,i,e)}}}else{const s=r.split(\",\");for(let e=0;e<s.length;e++){he(n,s[e].trim(),[])}}}const Ke=/\\s/;const v=/[\\s,]/;const Ge=/[_$a-zA-Z]/;const We=/[_$a-zA-Z0-9]/;const Ze=['\"',\"'\",\"/\"];const w=/[^\\s]/;const Ye=/[{(]/;const Qe=/[})]/;function et(e){const t=[];let n=0;while(n<e.length){if(Ge.exec(e.charAt(n))){var r=n;while(We.exec(e.charAt(n+1))){n++}t.push(e.substring(r,n+1))}else if(Ze.indexOf(e.charAt(n))!==-1){const o=e.charAt(n);var r=n;n++;while(n<e.length&&e.charAt(n)!==o){if(e.charAt(n)===\"\\\\\"){n++}n++}t.push(e.substring(r,n+1))}else{const i=e.charAt(n);t.push(i)}n++}return t}function tt(e,t,n){return Ge.exec(e.charAt(0))&&e!==\"true\"&&e!==\"false\"&&e!==\"this\"&&e!==n&&t!==\".\"}function nt(r,o,i){if(o[0]===\"[\"){o.shift();let e=1;let t=\" return (function(\"+i+\"){ return (\";let n=null;while(o.length>0){const s=o[0];if(s===\"]\"){e--;if(e===0){if(n===null){t=t+\"true\"}o.shift();t+=\")})\";try{const l=vn(r,function(){return Function(t)()},function(){return true});l.source=t;return l}catch(e){fe(ne().body,\"htmx:syntax:error\",{error:e,source:t});return null}}}else if(s===\"[\"){e++}if(tt(s,n,i)){t+=\"((\"+i+\".\"+s+\") ? (\"+i+\".\"+s+\") : (window.\"+s+\"))\"}else{t=t+s}n=o.shift()}}}function C(e,t){let n=\"\";while(e.length>0&&!t.test(e[0])){n+=e.shift()}return n}function rt(e){let t;if(e.length>0&&Ye.test(e[0])){e.shift();t=C(e,Qe).trim();e.shift()}else{t=C(e,v)}return t}const ot=\"input, textarea, select\";function it(e,t,n){const r=[];const o=et(t);do{C(o,w);const l=o.length;const c=C(o,/[,\\[\\s]/);if(c!==\"\"){if(c===\"every\"){const u={trigger:\"every\"};C(o,w);u.pollInterval=d(C(o,/[,\\[\\s]/));C(o,w);var i=nt(e,o,\"event\");if(i){u.eventFilter=i}r.push(u)}else{const a={trigger:c};var i=nt(e,o,\"event\");if(i){a.eventFilter=i}C(o,w);while(o.length>0&&o[0]!==\",\"){const f=o.shift();if(f===\"changed\"){a.changed=true}else if(f===\"once\"){a.once=true}else if(f===\"consume\"){a.consume=true}else if(f===\"delay\"&&o[0]===\":\"){o.shift();a.delay=d(C(o,v))}else if(f===\"from\"&&o[0]===\":\"){o.shift();if(Ye.test(o[0])){var s=rt(o)}else{var s=C(o,v);if(s===\"closest\"||s===\"find\"||s===\"next\"||s===\"previous\"){o.shift();const h=rt(o);if(h.length>0){s+=\" \"+h}}}a.from=s}else if(f===\"target\"&&o[0]===\":\"){o.shift();a.target=rt(o)}else if(f===\"throttle\"&&o[0]===\":\"){o.shift();a.throttle=d(C(o,v))}else if(f===\"queue\"&&o[0]===\":\"){o.shift();a.queue=C(o,v)}else if(f===\"root\"&&o[0]===\":\"){o.shift();a[f]=rt(o)}else if(f===\"threshold\"&&o[0]===\":\"){o.shift();a[f]=C(o,v)}else{fe(e,\"htmx:syntax:error\",{token:o.shift()})}C(o,w)}r.push(a)}}if(o.length===l){fe(e,\"htmx:syntax:error\",{token:o.shift()})}C(o,w)}while(o[0]===\",\"&&o.shift());if(n){n[t]=r}return r}function st(e){const t=te(e,\"hx-trigger\");let n=[];if(t){const r=Q.config.triggerSpecsCache;n=r&&r[t]||it(e,t,r)}if(n.length>0){return n}else if(h(e,\"form\")){return[{trigger:\"submit\"}]}else if(h(e,'input[type=\"button\"], input[type=\"submit\"]')){return[{trigger:\"click\"}]}else if(h(e,ot)){return[{trigger:\"change\"}]}else{return[{trigger:\"click\"}]}}function lt(e){ie(e).cancelled=true}function ct(e,t,n){const r=ie(e);r.timeout=E().setTimeout(function(){if(le(e)&&r.cancelled!==true){if(!gt(n,e,Mt(\"hx:poll:trigger\",{triggerSpec:n,target:e}))){t(e)}ct(e,t,n)}},n.pollInterval)}function ut(e){return location.hostname===e.hostname&&ee(e,\"href\")&&ee(e,\"href\").indexOf(\"#\")!==0}function at(e){return g(e,Q.config.disableSelector)}function ft(t,n,e){if(t instanceof HTMLAnchorElement&&ut(t)&&(t.target===\"\"||t.target===\"_self\")||t.tagName===\"FORM\"&&String(ee(t,\"method\")).toLowerCase()!==\"dialog\"){n.boosted=true;let r,o;if(t.tagName===\"A\"){r=\"get\";o=ee(t,\"href\")}else{const i=ee(t,\"method\");r=i?i.toLowerCase():\"get\";o=ee(t,\"action\");if(o==null||o===\"\"){o=ne().location.href}if(r===\"get\"&&o.includes(\"?\")){o=o.replace(/\\?[^#]+/,\"\")}}e.forEach(function(e){pt(t,function(e,t){const n=ue(e);if(at(n)){b(n);return}de(r,o,n,t)},n,e,true)})}}function ht(e,t){const n=ue(t);if(!n){return false}if(e.type===\"submit\"||e.type===\"click\"){if(n.tagName===\"FORM\"){return true}if(h(n,'input[type=\"submit\"], button')&&(h(n,\"[form]\")||g(n,\"form\")!==null)){return true}if(n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute(\"href\")===\"#\"||n.getAttribute(\"href\").indexOf(\"#\")!==0)){return true}}return false}function dt(e,t){return ie(e).boosted&&e instanceof HTMLAnchorElement&&t.type===\"click\"&&(t.ctrlKey||t.metaKey)}function gt(e,t,n){const r=e.eventFilter;if(r){try{return r.call(t,n)!==true}catch(e){const o=r.source;fe(ne().body,\"htmx:eventFilter:error\",{error:e,source:o});return true}}return false}function pt(l,c,e,u,a){const f=ie(l);let t;if(u.from){t=p(l,u.from)}else{t=[l]}if(u.changed){if(!(\"lastValue\"in f)){f.lastValue=new WeakMap}t.forEach(function(e){if(!f.lastValue.has(u)){f.lastValue.set(u,new WeakMap)}f.lastValue.get(u).set(e,e.value)})}se(t,function(i){const s=function(e){if(!le(l)){i.removeEventListener(u.trigger,s);return}if(dt(l,e)){return}if(a||ht(e,l)){e.preventDefault()}if(gt(u,l,e)){return}const t=ie(e);t.triggerSpec=u;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(l)<0){t.handledFor.push(l);if(u.consume){e.stopPropagation()}if(u.target&&e.target){if(!h(ue(e.target),u.target)){return}}if(u.once){if(f.triggeredOnce){return}else{f.triggeredOnce=true}}if(u.changed){const n=event.target;const r=n.value;const o=f.lastValue.get(u);if(o.has(n)&&o.get(n)===r){return}o.set(n,r)}if(f.delayed){clearTimeout(f.delayed)}if(f.throttle){return}if(u.throttle>0){if(!f.throttle){he(l,\"htmx:trigger\");c(l,e);f.throttle=E().setTimeout(function(){f.throttle=null},u.throttle)}}else if(u.delay>0){f.delayed=E().setTimeout(function(){he(l,\"htmx:trigger\");c(l,e)},u.delay)}else{he(l,\"htmx:trigger\");c(l,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:u.trigger,listener:s,on:i});i.addEventListener(u.trigger,s)})}let mt=false;let xt=null;function yt(){if(!xt){xt=function(){mt=true};window.addEventListener(\"scroll\",xt);window.addEventListener(\"resize\",xt);setInterval(function(){if(mt){mt=false;se(ne().querySelectorAll(\"[hx-trigger*='revealed'],[data-hx-trigger*='revealed']\"),function(e){bt(e)})}},200)}}function bt(e){if(!s(e,\"data-hx-revealed\")&&X(e)){e.setAttribute(\"data-hx-revealed\",\"true\");const t=ie(e);if(t.initHash){he(e,\"revealed\")}else{e.addEventListener(\"htmx:afterProcessNode\",function(){he(e,\"revealed\")},{once:true})}}}function vt(e,t,n,r){const o=function(){if(!n.loaded){n.loaded=true;he(e,\"htmx:trigger\");t(e)}};if(r>0){E().setTimeout(o,r)}else{o()}}function wt(t,n,e){let i=false;se(r,function(r){if(s(t,\"hx-\"+r)){const o=te(t,\"hx-\"+r);i=true;n.path=o;n.verb=r;e.forEach(function(e){St(t,e,n,function(e,t){const n=ue(e);if(g(n,Q.config.disableSelector)){b(n);return}de(r,o,n,t)})})}});return i}function St(r,e,t,n){if(e.trigger===\"revealed\"){yt();pt(r,n,t,e);bt(ue(r))}else if(e.trigger===\"intersect\"){const o={};if(e.root){o.root=ae(r,e.root)}if(e.threshold){o.threshold=parseFloat(e.threshold)}const i=new IntersectionObserver(function(t){for(let e=0;e<t.length;e++){const n=t[e];if(n.isIntersecting){he(r,\"intersect\");break}}},o);i.observe(ue(r));pt(ue(r),n,t,e)}else if(!t.firstInitCompleted&&e.trigger===\"load\"){if(!gt(e,r,Mt(\"load\",{elt:r}))){vt(ue(r),n,t,e.delay)}}else if(e.pollInterval>0){t.polling=true;ct(ue(r),n,e)}else{pt(r,n,t,e)}}function Et(e){const t=ue(e);if(!t){return false}const n=t.attributes;for(let e=0;e<n.length;e++){const r=n[e].name;if(l(r,\"hx-on:\")||l(r,\"data-hx-on:\")||l(r,\"hx-on-\")||l(r,\"data-hx-on-\")){return true}}return false}const Ct=(new XPathEvaluator).createExpression('.//*[@*[ starts-with(name(), \"hx-on:\") or starts-with(name(), \"data-hx-on:\") or'+' starts-with(name(), \"hx-on-\") or starts-with(name(), \"data-hx-on-\") ]]');function Ot(e,t){if(Et(e)){t.push(ue(e))}const n=Ct.evaluate(e);let r=null;while(r=n.iterateNext())t.push(ue(r))}function Rt(e){const t=[];if(e instanceof DocumentFragment){for(const n of e.childNodes){Ot(n,t)}}else{Ot(e,t)}return t}function Ht(e){if(e.querySelectorAll){const n=\", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]\";const r=[];for(const i in Mn){const s=Mn[i];if(s.getSelectors){var t=s.getSelectors();if(t){r.push(t)}}}const o=e.querySelectorAll(H+n+\", form, [type='submit'],\"+\" [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]\"+r.flat().map(e=>\", \"+e).join(\"\"));return o}else{return[]}}function Tt(e){const t=g(ue(e.target),\"button, input[type='submit']\");const n=Lt(e);if(n){n.lastButtonClicked=t}}function qt(e){const t=Lt(e);if(t){t.lastButtonClicked=null}}function Lt(e){const t=g(ue(e.target),\"button, input[type='submit']\");if(!t){return}const n=y(\"#\"+ee(t,\"form\"),t.getRootNode())||g(t,\"form\");if(!n){return}return ie(n)}function At(e){e.addEventListener(\"click\",Tt);e.addEventListener(\"focusin\",Tt);e.addEventListener(\"focusout\",qt)}function Nt(t,e,n){const r=ie(t);if(!Array.isArray(r.onHandlers)){r.onHandlers=[]}let o;const i=function(e){vn(t,function(){if(at(t)){return}if(!o){o=new Function(\"event\",n)}o.call(t,e)})};t.addEventListener(e,i);r.onHandlers.push({event:e,listener:i})}function It(t){ke(t);for(let e=0;e<t.attributes.length;e++){const n=t.attributes[e].name;const r=t.attributes[e].value;if(l(n,\"hx-on\")||l(n,\"data-hx-on\")){const o=n.indexOf(\"-on\")+3;const i=n.slice(o,o+1);if(i===\"-\"||i===\":\"){let e=n.slice(o+1);if(l(e,\":\")){e=\"htmx\"+e}else if(l(e,\"-\")){e=\"htmx:\"+e.slice(1)}else if(l(e,\"htmx-\")){e=\"htmx:\"+e.slice(5)}Nt(t,e,r)}}}}function Pt(t){if(g(t,Q.config.disableSelector)){b(t);return}const n=ie(t);const e=Pe(t);if(n.initHash!==e){De(t);n.initHash=e;he(t,\"htmx:beforeProcessNode\");const r=st(t);const o=wt(t,n,r);if(!o){if(re(t,\"hx-boost\")===\"true\"){ft(t,n,r)}else if(s(t,\"hx-trigger\")){r.forEach(function(e){St(t,e,n,function(){})})}}if(t.tagName===\"FORM\"||ee(t,\"type\")===\"submit\"&&s(t,\"form\")){At(t)}n.firstInitCompleted=true;he(t,\"htmx:afterProcessNode\")}}function kt(e){e=y(e);if(g(e,Q.config.disableSelector)){b(e);return}Pt(e);se(Ht(e),function(e){Pt(e)});se(Rt(e),It)}function Dt(e){return e.replace(/([a-z0-9])([A-Z])/g,\"$1-$2\").toLowerCase()}function Mt(e,t){let n;if(window.CustomEvent&&typeof window.CustomEvent===\"function\"){n=new CustomEvent(e,{bubbles:true,cancelable:true,composed:true,detail:t})}else{n=ne().createEvent(\"CustomEvent\");n.initCustomEvent(e,true,true,t)}return n}function fe(e,t,n){he(e,t,ce({error:t},n))}function Xt(e){return e===\"htmx:afterProcessNode\"}function Ft(e,t){se(Un(e),function(e){try{t(e)}catch(e){O(e)}})}function O(e){if(console.error){console.error(e)}else if(console.log){console.log(\"ERROR: \",e)}}function he(e,t,n){e=y(e);if(n==null){n={}}n.elt=e;const r=Mt(t,n);if(Q.logger&&!Xt(t)){Q.logger(e,t,n)}if(n.error){O(n.error);he(e,\"htmx:error\",{errorInfo:n})}let o=e.dispatchEvent(r);const i=Dt(t);if(o&&i!==t){const s=Mt(i,r.detail);o=o&&e.dispatchEvent(s)}Ft(ue(e),function(e){o=o&&(e.onEvent(t,r)!==false&&!r.defaultPrevented)});return o}let Bt=location.pathname+location.search;function Ut(){const e=ne().querySelector(\"[hx-history-elt],[data-hx-history-elt]\");return e||ne().body}function jt(t,e){if(!B()){return}const n=_t(e);const r=ne().title;const o=window.scrollY;if(Q.config.historyCacheSize<=0){localStorage.removeItem(\"htmx-history-cache\");return}t=U(t);const i=S(localStorage.getItem(\"htmx-history-cache\"))||[];for(let e=0;e<i.length;e++){if(i[e].url===t){i.splice(e,1);break}}const s={url:t,content:n,title:r,scroll:o};he(ne().body,\"htmx:historyItemCreated\",{item:s,cache:i});i.push(s);while(i.length>Q.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem(\"htmx-history-cache\",JSON.stringify(i));break}catch(e){fe(ne().body,\"htmx:historyCacheError\",{cause:e,cache:i});i.shift()}}}function Vt(t){if(!B()){return null}t=U(t);const n=S(localStorage.getItem(\"htmx-history-cache\"))||[];for(let e=0;e<n.length;e++){if(n[e].url===t){return n[e]}}return null}function _t(e){const t=Q.config.requestClass;const n=e.cloneNode(true);se(x(n,\".\"+t),function(e){G(e,t)});se(x(n,\"[data-disabled-by-htmx]\"),function(e){e.removeAttribute(\"disabled\")});return n.innerHTML}function zt(){const e=Ut();const t=Bt||location.pathname+location.search;let n;try{n=ne().querySelector('[hx-history=\"false\" i],[data-hx-history=\"false\" i]')}catch(e){n=ne().querySelector('[hx-history=\"false\"],[data-hx-history=\"false\"]')}if(!n){he(ne().body,\"htmx:beforeHistorySave\",{path:t,historyElt:e});jt(t,e)}if(Q.config.historyEnabled)history.replaceState({htmx:true},ne().title,window.location.href)}function $t(e){if(Q.config.getCacheBusterParam){e=e.replace(/org\\.htmx\\.cache-buster=[^&]*&?/,\"\");if(Y(e,\"&\")||Y(e,\"?\")){e=e.slice(0,-1)}}if(Q.config.historyEnabled){history.pushState({htmx:true},\"\",e)}Bt=e}function Jt(e){if(Q.config.historyEnabled)history.replaceState({htmx:true},\"\",e);Bt=e}function Kt(e){se(e,function(e){e.call(undefined)})}function Gt(o){const e=new XMLHttpRequest;const i={path:o,xhr:e};he(ne().body,\"htmx:historyCacheMiss\",i);e.open(\"GET\",o,true);e.setRequestHeader(\"HX-Request\",\"true\");e.setRequestHeader(\"HX-History-Restore-Request\",\"true\");e.setRequestHeader(\"HX-Current-URL\",ne().location.href);e.onload=function(){if(this.status>=200&&this.status<400){he(ne().body,\"htmx:historyCacheMissLoad\",i);const e=P(this.response);const t=e.querySelector(\"[hx-history-elt],[data-hx-history-elt]\")||e;const n=Ut();const r=xn(n);kn(e.title);qe(e);Ve(n,t,r);Te();Kt(r.tasks);Bt=o;he(ne().body,\"htmx:historyRestore\",{path:o,cacheMiss:true,serverResponse:this.response})}else{fe(ne().body,\"htmx:historyCacheMissLoadError\",i)}};e.send()}function Wt(e){zt();e=e||location.pathname+location.search;const t=Vt(e);if(t){const n=P(t.content);const r=Ut();const o=xn(r);kn(t.title);qe(n);Ve(r,n,o);Te();Kt(o.tasks);E().setTimeout(function(){window.scrollTo(0,t.scroll)},0);Bt=e;he(ne().body,\"htmx:historyRestore\",{path:e,item:t})}else{if(Q.config.refreshOnHistoryMiss){window.location.reload(true)}else{Gt(e)}}}function Zt(e){let t=we(e,\"hx-indicator\");if(t==null){t=[e]}se(t,function(e){const t=ie(e);t.requestCount=(t.requestCount||0)+1;e.classList.add.call(e.classList,Q.config.requestClass)});return t}function Yt(e){let t=we(e,\"hx-disabled-elt\");if(t==null){t=[]}se(t,function(e){const t=ie(e);t.requestCount=(t.requestCount||0)+1;e.setAttribute(\"disabled\",\"\");e.setAttribute(\"data-disabled-by-htmx\",\"\")});return t}function Qt(e,t){se(e.concat(t),function(e){const t=ie(e);t.requestCount=(t.requestCount||1)-1});se(e,function(e){const t=ie(e);if(t.requestCount===0){e.classList.remove.call(e.classList,Q.config.requestClass)}});se(t,function(e){const t=ie(e);if(t.requestCount===0){e.removeAttribute(\"disabled\");e.removeAttribute(\"data-disabled-by-htmx\")}})}function en(t,n){for(let e=0;e<t.length;e++){const r=t[e];if(r.isSameNode(n)){return true}}return false}function tn(e){const t=e;if(t.name===\"\"||t.name==null||t.disabled||g(t,\"fieldset[disabled]\")){return false}if(t.type===\"button\"||t.type===\"submit\"||t.tagName===\"image\"||t.tagName===\"reset\"||t.tagName===\"file\"){return false}if(t.type===\"checkbox\"||t.type===\"radio\"){return t.checked}return true}function nn(t,e,n){if(t!=null&&e!=null){if(Array.isArray(e)){e.forEach(function(e){n.append(t,e)})}else{n.append(t,e)}}}function rn(t,n,r){if(t!=null&&n!=null){let e=r.getAll(t);if(Array.isArray(n)){e=e.filter(e=>n.indexOf(e)<0)}else{e=e.filter(e=>e!==n)}r.delete(t);se(e,e=>r.append(t,e))}}function on(t,n,r,o,i){if(o==null||en(t,o)){return}else{t.push(o)}if(tn(o)){const s=ee(o,\"name\");let e=o.value;if(o instanceof HTMLSelectElement&&o.multiple){e=M(o.querySelectorAll(\"option:checked\")).map(function(e){return e.value})}if(o instanceof HTMLInputElement&&o.files){e=M(o.files)}nn(s,e,n);if(i){sn(o,r)}}if(o instanceof HTMLFormElement){se(o.elements,function(e){if(t.indexOf(e)>=0){rn(e.name,e.value,n)}else{t.push(e)}if(i){sn(e,r)}});new FormData(o).forEach(function(e,t){if(e instanceof File&&e.name===\"\"){return}nn(t,e,n)})}}function sn(e,t){const n=e;if(n.willValidate){he(n,\"htmx:validation:validate\");if(!n.checkValidity()){t.push({elt:n,message:n.validationMessage,validity:n.validity});he(n,\"htmx:validation:failed\",{message:n.validationMessage,validity:n.validity})}}}function ln(n,e){for(const t of e.keys()){n.delete(t)}e.forEach(function(e,t){n.append(t,e)});return n}function cn(e,t){const n=[];const r=new FormData;const o=new FormData;const i=[];const s=ie(e);if(s.lastButtonClicked&&!le(s.lastButtonClicked)){s.lastButtonClicked=null}let l=e instanceof HTMLFormElement&&e.noValidate!==true||te(e,\"hx-validate\")===\"true\";if(s.lastButtonClicked){l=l&&s.lastButtonClicked.formNoValidate!==true}if(t!==\"get\"){on(n,o,i,g(e,\"form\"),l)}on(n,r,i,e,l);if(s.lastButtonClicked||e.tagName===\"BUTTON\"||e.tagName===\"INPUT\"&&ee(e,\"type\")===\"submit\"){const u=s.lastButtonClicked||e;const a=ee(u,\"name\");nn(a,u.value,o)}const c=we(e,\"hx-include\");se(c,function(e){on(n,r,i,ue(e),l);if(!h(e,\"form\")){se(f(e).querySelectorAll(ot),function(e){on(n,r,i,e,l)})}});ln(r,o);return{errors:i,formData:r,values:An(r)}}function un(e,t,n){if(e!==\"\"){e+=\"&\"}if(String(n)===\"[object Object]\"){n=JSON.stringify(n)}const r=encodeURIComponent(n);e+=encodeURIComponent(t)+\"=\"+r;return e}function an(e){e=qn(e);let n=\"\";e.forEach(function(e,t){n=un(n,t,e)});return n}function fn(e,t,n){const r={\"HX-Request\":\"true\",\"HX-Trigger\":ee(e,\"id\"),\"HX-Trigger-Name\":ee(e,\"name\"),\"HX-Target\":te(t,\"id\"),\"HX-Current-URL\":ne().location.href};bn(e,\"hx-headers\",false,r);if(n!==undefined){r[\"HX-Prompt\"]=n}if(ie(e).boosted){r[\"HX-Boosted\"]=\"true\"}return r}function hn(n,e){const t=re(e,\"hx-params\");if(t){if(t===\"none\"){return new FormData}else if(t===\"*\"){return n}else if(t.indexOf(\"not \")===0){se(t.slice(4).split(\",\"),function(e){e=e.trim();n.delete(e)});return n}else{const r=new FormData;se(t.split(\",\"),function(t){t=t.trim();if(n.has(t)){n.getAll(t).forEach(function(e){r.append(t,e)})}});return r}}else{return n}}function dn(e){return!!ee(e,\"href\")&&ee(e,\"href\").indexOf(\"#\")>=0}function gn(e,t){const n=t||re(e,\"hx-swap\");const r={swapStyle:ie(e).boosted?\"innerHTML\":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&ie(e).boosted&&!dn(e)){r.show=\"top\"}if(n){const s=F(n);if(s.length>0){for(let e=0;e<s.length;e++){const l=s[e];if(l.indexOf(\"swap:\")===0){r.swapDelay=d(l.slice(5))}else if(l.indexOf(\"settle:\")===0){r.settleDelay=d(l.slice(7))}else if(l.indexOf(\"transition:\")===0){r.transition=l.slice(11)===\"true\"}else if(l.indexOf(\"ignoreTitle:\")===0){r.ignoreTitle=l.slice(12)===\"true\"}else if(l.indexOf(\"scroll:\")===0){const c=l.slice(7);var o=c.split(\":\");const u=o.pop();var i=o.length>0?o.join(\":\"):null;r.scroll=u;r.scrollTarget=i}else if(l.indexOf(\"show:\")===0){const a=l.slice(5);var o=a.split(\":\");const f=o.pop();var i=o.length>0?o.join(\":\"):null;r.show=f;r.showTarget=i}else if(l.indexOf(\"focus-scroll:\")===0){const h=l.slice(\"focus-scroll:\".length);r.focusScroll=h==\"true\"}else if(e==0){r.swapStyle=l}else{O(\"Unknown modifier in hx-swap: \"+l)}}}}return r}function pn(e){return re(e,\"hx-encoding\")===\"multipart/form-data\"||h(e,\"form\")&&ee(e,\"enctype\")===\"multipart/form-data\"}function mn(t,n,r){let o=null;Ft(n,function(e){if(o==null){o=e.encodeParameters(t,r,n)}});if(o!=null){return o}else{if(pn(n)){return ln(new FormData,qn(r))}else{return an(r)}}}function xn(e){return{tasks:[],elts:[e]}}function yn(e,t){const n=e[0];const r=e[e.length-1];if(t.scroll){var o=null;if(t.scrollTarget){o=ue(ae(n,t.scrollTarget))}if(t.scroll===\"top\"&&(n||o)){o=o||n;o.scrollTop=0}if(t.scroll===\"bottom\"&&(r||o)){o=o||r;o.scrollTop=o.scrollHeight}}if(t.show){var o=null;if(t.showTarget){let e=t.showTarget;if(t.showTarget===\"window\"){e=\"body\"}o=ue(ae(n,e))}if(t.show===\"top\"&&(n||o)){o=o||n;o.scrollIntoView({block:\"start\",behavior:Q.config.scrollBehavior})}if(t.show===\"bottom\"&&(r||o)){o=o||r;o.scrollIntoView({block:\"end\",behavior:Q.config.scrollBehavior})}}}function bn(r,e,o,i){if(i==null){i={}}if(r==null){return i}const s=te(r,e);if(s){let e=s.trim();let t=o;if(e===\"unset\"){return null}if(e.indexOf(\"javascript:\")===0){e=e.slice(11);t=true}else if(e.indexOf(\"js:\")===0){e=e.slice(3);t=true}if(e.indexOf(\"{\")!==0){e=\"{\"+e+\"}\"}let n;if(t){n=vn(r,function(){return Function(\"return (\"+e+\")\")()},{})}else{n=S(e)}for(const l in n){if(n.hasOwnProperty(l)){if(i[l]==null){i[l]=n[l]}}}}return bn(ue(c(r)),e,o,i)}function vn(e,t,n){if(Q.config.allowEval){return t()}else{fe(e,\"htmx:evalDisallowedError\");return n}}function wn(e,t){return bn(e,\"hx-vars\",true,t)}function Sn(e,t){return bn(e,\"hx-vals\",false,t)}function En(e){return ce(wn(e),Sn(e))}function Cn(t,n,r){if(r!==null){try{t.setRequestHeader(n,r)}catch(e){t.setRequestHeader(n,encodeURIComponent(r));t.setRequestHeader(n+\"-URI-AutoEncoded\",\"true\")}}}function On(t){if(t.responseURL&&typeof URL!==\"undefined\"){try{const e=new URL(t.responseURL);return e.pathname+e.search}catch(e){fe(ne().body,\"htmx:badResponseUrl\",{url:t.responseURL})}}}function R(e,t){return t.test(e.getAllResponseHeaders())}function Rn(t,n,r){t=t.toLowerCase();if(r){if(r instanceof Element||typeof r===\"string\"){return de(t,n,null,null,{targetOverride:y(r)||ve,returnPromise:true})}else{let e=y(r.target);if(r.target&&!e||r.source&&!e&&!y(r.source)){e=ve}return de(t,n,y(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:e,swapOverride:r.swap,select:r.select,returnPromise:true})}}else{return de(t,n,null,null,{returnPromise:true})}}function Hn(e){const t=[];while(e){t.push(e);e=e.parentElement}return t}function Tn(e,t,n){let r;let o;if(typeof URL===\"function\"){o=new URL(t,document.location.href);const i=document.location.origin;r=i===o.origin}else{o=t;r=l(t,document.location.origin)}if(Q.config.selfRequestsOnly){if(!r){return false}}return he(e,\"htmx:validateUrl\",ce({url:o,sameHost:r},n))}function qn(e){if(e instanceof FormData)return e;const t=new FormData;for(const n in e){if(e.hasOwnProperty(n)){if(e[n]&&typeof e[n].forEach===\"function\"){e[n].forEach(function(e){t.append(n,e)})}else if(typeof e[n]===\"object\"&&!(e[n]instanceof Blob)){t.append(n,JSON.stringify(e[n]))}else{t.append(n,e[n])}}}return t}function Ln(r,o,e){return new Proxy(e,{get:function(t,e){if(typeof e===\"number\")return t[e];if(e===\"length\")return t.length;if(e===\"push\"){return function(e){t.push(e);r.append(o,e)}}if(typeof t[e]===\"function\"){return function(){t[e].apply(t,arguments);r.delete(o);t.forEach(function(e){r.append(o,e)})}}if(t[e]&&t[e].length===1){return t[e][0]}else{return t[e]}},set:function(e,t,n){e[t]=n;r.delete(o);e.forEach(function(e){r.append(o,e)});return true}})}function An(o){return new Proxy(o,{get:function(e,t){if(typeof t===\"symbol\"){const r=Reflect.get(e,t);if(typeof r===\"function\"){return function(){return r.apply(o,arguments)}}else{return r}}if(t===\"toJSON\"){return()=>Object.fromEntries(o)}if(t in e){if(typeof e[t]===\"function\"){return function(){return o[t].apply(o,arguments)}}else{return e[t]}}const n=o.getAll(t);if(n.length===0){return undefined}else if(n.length===1){return n[0]}else{return Ln(e,t,n)}},set:function(t,n,e){if(typeof n!==\"string\"){return false}t.delete(n);if(e&&typeof e.forEach===\"function\"){e.forEach(function(e){t.append(n,e)})}else if(typeof e===\"object\"&&!(e instanceof Blob)){t.append(n,JSON.stringify(e))}else{t.append(n,e)}return true},deleteProperty:function(e,t){if(typeof t===\"string\"){e.delete(t)}return true},ownKeys:function(e){return Reflect.ownKeys(Object.fromEntries(e))},getOwnPropertyDescriptor:function(e,t){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(e),t)}})}function de(t,n,r,o,i,D){let s=null;let l=null;i=i!=null?i:{};if(i.returnPromise&&typeof Promise!==\"undefined\"){var e=new Promise(function(e,t){s=e;l=t})}if(r==null){r=ne().body}const M=i.handler||Dn;const X=i.select||null;if(!le(r)){oe(s);return e}const c=i.targetOverride||ue(Ee(r));if(c==null||c==ve){fe(r,\"htmx:targetError\",{target:te(r,\"hx-target\")});oe(l);return e}let u=ie(r);const a=u.lastButtonClicked;if(a){const L=ee(a,\"formaction\");if(L!=null){n=L}const A=ee(a,\"formmethod\");if(A!=null){if(A.toLowerCase()!==\"dialog\"){t=A}}}const f=re(r,\"hx-confirm\");if(D===undefined){const K=function(e){return de(t,n,r,o,i,!!e)};const G={target:c,elt:r,path:n,verb:t,triggeringEvent:o,etc:i,issueRequest:K,question:f};if(he(r,\"htmx:confirm\",G)===false){oe(s);return e}}let h=r;let d=re(r,\"hx-sync\");let g=null;let F=false;if(d){const N=d.split(\":\");const I=N[0].trim();if(I===\"this\"){h=Se(r,\"hx-sync\")}else{h=ue(ae(r,I))}d=(N[1]||\"drop\").trim();u=ie(h);if(d===\"drop\"&&u.xhr&&u.abortable!==true){oe(s);return e}else if(d===\"abort\"){if(u.xhr){oe(s);return e}else{F=true}}else if(d===\"replace\"){he(h,\"htmx:abort\")}else if(d.indexOf(\"queue\")===0){const W=d.split(\" \");g=(W[1]||\"last\").trim()}}if(u.xhr){if(u.abortable){he(h,\"htmx:abort\")}else{if(g==null){if(o){const P=ie(o);if(P&&P.triggerSpec&&P.triggerSpec.queue){g=P.triggerSpec.queue}}if(g==null){g=\"last\"}}if(u.queuedRequests==null){u.queuedRequests=[]}if(g===\"first\"&&u.queuedRequests.length===0){u.queuedRequests.push(function(){de(t,n,r,o,i)})}else if(g===\"all\"){u.queuedRequests.push(function(){de(t,n,r,o,i)})}else if(g===\"last\"){u.queuedRequests=[];u.queuedRequests.push(function(){de(t,n,r,o,i)})}oe(s);return e}}const p=new XMLHttpRequest;u.xhr=p;u.abortable=F;const m=function(){u.xhr=null;u.abortable=false;if(u.queuedRequests!=null&&u.queuedRequests.length>0){const e=u.queuedRequests.shift();e()}};const B=re(r,\"hx-prompt\");if(B){var x=prompt(B);if(x===null||!he(r,\"htmx:prompt\",{prompt:x,target:c})){oe(s);m();return e}}if(f&&!D){if(!confirm(f)){oe(s);m();return e}}let y=fn(r,c,x);if(t!==\"get\"&&!pn(r)){y[\"Content-Type\"]=\"application/x-www-form-urlencoded\"}if(i.headers){y=ce(y,i.headers)}const U=cn(r,t);let b=U.errors;const j=U.formData;if(i.values){ln(j,qn(i.values))}const V=qn(En(r));const v=ln(j,V);let w=hn(v,r);if(Q.config.getCacheBusterParam&&t===\"get\"){w.set(\"org.htmx.cache-buster\",ee(c,\"id\")||\"true\")}if(n==null||n===\"\"){n=ne().location.href}const S=bn(r,\"hx-request\");const _=ie(r).boosted;let E=Q.config.methodsThatUseUrlParams.indexOf(t)>=0;const C={boosted:_,useUrlParams:E,formData:w,parameters:An(w),unfilteredFormData:v,unfilteredParameters:An(v),headers:y,target:c,verb:t,errors:b,withCredentials:i.credentials||S.credentials||Q.config.withCredentials,timeout:i.timeout||S.timeout||Q.config.timeout,path:n,triggeringEvent:o};if(!he(r,\"htmx:configRequest\",C)){oe(s);m();return e}n=C.path;t=C.verb;y=C.headers;w=qn(C.parameters);b=C.errors;E=C.useUrlParams;if(b&&b.length>0){he(r,\"htmx:validation:halted\",C);oe(s);m();return e}const z=n.split(\"#\");const $=z[0];const O=z[1];let R=n;if(E){R=$;const Z=!w.keys().next().done;if(Z){if(R.indexOf(\"?\")<0){R+=\"?\"}else{R+=\"&\"}R+=an(w);if(O){R+=\"#\"+O}}}if(!Tn(r,R,C)){fe(r,\"htmx:invalidPath\",C);oe(l);return e}p.open(t.toUpperCase(),R,true);p.overrideMimeType(\"text/html\");p.withCredentials=C.withCredentials;p.timeout=C.timeout;if(S.noHeaders){}else{for(const k in y){if(y.hasOwnProperty(k)){const Y=y[k];Cn(p,k,Y)}}}const H={xhr:p,target:c,requestConfig:C,etc:i,boosted:_,select:X,pathInfo:{requestPath:n,finalRequestPath:R,responsePath:null,anchor:O}};p.onload=function(){try{const t=Hn(r);H.pathInfo.responsePath=On(p);M(r,H);if(H.keepIndicators!==true){Qt(T,q)}he(r,\"htmx:afterRequest\",H);he(r,\"htmx:afterOnLoad\",H);if(!le(r)){let e=null;while(t.length>0&&e==null){const n=t.shift();if(le(n)){e=n}}if(e){he(e,\"htmx:afterRequest\",H);he(e,\"htmx:afterOnLoad\",H)}}oe(s);m()}catch(e){fe(r,\"htmx:onLoadError\",ce({error:e},H));throw e}};p.onerror=function(){Qt(T,q);fe(r,\"htmx:afterRequest\",H);fe(r,\"htmx:sendError\",H);oe(l);m()};p.onabort=function(){Qt(T,q);fe(r,\"htmx:afterRequest\",H);fe(r,\"htmx:sendAbort\",H);oe(l);m()};p.ontimeout=function(){Qt(T,q);fe(r,\"htmx:afterRequest\",H);fe(r,\"htmx:timeout\",H);oe(l);m()};if(!he(r,\"htmx:beforeRequest\",H)){oe(s);m();return e}var T=Zt(r);var q=Yt(r);se([\"loadstart\",\"loadend\",\"progress\",\"abort\"],function(t){se([p,p.upload],function(e){e.addEventListener(t,function(e){he(r,\"htmx:xhr:\"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});he(r,\"htmx:beforeSend\",H);const J=E?null:mn(p,r,w);p.send(J);return e}function Nn(e,t){const n=t.xhr;let r=null;let o=null;if(R(n,/HX-Push:/i)){r=n.getResponseHeader(\"HX-Push\");o=\"push\"}else if(R(n,/HX-Push-Url:/i)){r=n.getResponseHeader(\"HX-Push-Url\");o=\"push\"}else if(R(n,/HX-Replace-Url:/i)){r=n.getResponseHeader(\"HX-Replace-Url\");o=\"replace\"}if(r){if(r===\"false\"){return{}}else{return{type:o,path:r}}}const i=t.pathInfo.finalRequestPath;const s=t.pathInfo.responsePath;const l=re(e,\"hx-push-url\");const c=re(e,\"hx-replace-url\");const u=ie(e).boosted;let a=null;let f=null;if(l){a=\"push\";f=l}else if(c){a=\"replace\";f=c}else if(u){a=\"push\";f=s||i}if(f){if(f===\"false\"){return{}}if(f===\"true\"){f=s||i}if(t.pathInfo.anchor&&f.indexOf(\"#\")===-1){f=f+\"#\"+t.pathInfo.anchor}return{type:a,path:f}}else{return{}}}function In(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function Pn(e){for(var t=0;t<Q.config.responseHandling.length;t++){var n=Q.config.responseHandling[t];if(In(n,e.status)){return n}}return{swap:false}}function kn(e){if(e){const t=u(\"title\");if(t){t.innerHTML=e}else{window.document.title=e}}}function Dn(o,i){const s=i.xhr;let l=i.target;const e=i.etc;const c=i.select;if(!he(o,\"htmx:beforeOnLoad\",i))return;if(R(s,/HX-Trigger:/i)){Je(s,\"HX-Trigger\",o)}if(R(s,/HX-Location:/i)){zt();let e=s.getResponseHeader(\"HX-Location\");var t;if(e.indexOf(\"{\")===0){t=S(e);e=t.path;delete t.path}Rn(\"get\",e,t).then(function(){$t(e)});return}const n=R(s,/HX-Refresh:/i)&&s.getResponseHeader(\"HX-Refresh\")===\"true\";if(R(s,/HX-Redirect:/i)){i.keepIndicators=true;location.href=s.getResponseHeader(\"HX-Redirect\");n&&location.reload();return}if(n){i.keepIndicators=true;location.reload();return}if(R(s,/HX-Retarget:/i)){if(s.getResponseHeader(\"HX-Retarget\")===\"this\"){i.target=o}else{i.target=ue(ae(o,s.getResponseHeader(\"HX-Retarget\")))}}const u=Nn(o,i);const r=Pn(s);const a=r.swap;let f=!!r.error;let h=Q.config.ignoreTitle||r.ignoreTitle;let d=r.select;if(r.target){i.target=ue(ae(o,r.target))}var g=e.swapOverride;if(g==null&&r.swapOverride){g=r.swapOverride}if(R(s,/HX-Retarget:/i)){if(s.getResponseHeader(\"HX-Retarget\")===\"this\"){i.target=o}else{i.target=ue(ae(o,s.getResponseHeader(\"HX-Retarget\")))}}if(R(s,/HX-Reswap:/i)){g=s.getResponseHeader(\"HX-Reswap\")}var p=s.response;var m=ce({shouldSwap:a,serverResponse:p,isError:f,ignoreTitle:h,selectOverride:d,swapOverride:g},i);if(r.event&&!he(l,r.event,m))return;if(!he(l,\"htmx:beforeSwap\",m))return;l=m.target;p=m.serverResponse;f=m.isError;h=m.ignoreTitle;d=m.selectOverride;g=m.swapOverride;i.target=l;i.failed=f;i.successful=!f;if(m.shouldSwap){if(s.status===286){lt(o)}Ft(o,function(e){p=e.transformResponse(p,s,o)});if(u.type){zt()}var x=gn(o,g);if(!x.hasOwnProperty(\"ignoreTitle\")){x.ignoreTitle=h}l.classList.add(Q.config.swappingClass);let n=null;let r=null;if(c){d=c}if(R(s,/HX-Reselect:/i)){d=s.getResponseHeader(\"HX-Reselect\")}const y=re(o,\"hx-select-oob\");const b=re(o,\"hx-select\");let e=function(){try{if(u.type){he(ne().body,\"htmx:beforeHistoryUpdate\",ce({history:u},i));if(u.type===\"push\"){$t(u.path);he(ne().body,\"htmx:pushedIntoHistory\",{path:u.path})}else{Jt(u.path);he(ne().body,\"htmx:replacedInHistory\",{path:u.path})}}$e(l,p,x,{select:d||b,selectOOB:y,eventInfo:i,anchor:i.pathInfo.anchor,contextElement:o,afterSwapCallback:function(){if(R(s,/HX-Trigger-After-Swap:/i)){let e=o;if(!le(o)){e=ne().body}Je(s,\"HX-Trigger-After-Swap\",e)}},afterSettleCallback:function(){if(R(s,/HX-Trigger-After-Settle:/i)){let e=o;if(!le(o)){e=ne().body}Je(s,\"HX-Trigger-After-Settle\",e)}oe(n)}})}catch(e){fe(o,\"htmx:swapError\",i);oe(r);throw e}};let t=Q.config.globalViewTransitions;if(x.hasOwnProperty(\"transition\")){t=x.transition}if(t&&he(o,\"htmx:beforeTransition\",i)&&typeof Promise!==\"undefined\"&&document.startViewTransition){const v=new Promise(function(e,t){n=e;r=t});const w=e;e=function(){document.startViewTransition(function(){w();return v})}}if(x.swapDelay>0){E().setTimeout(e,x.swapDelay)}else{e()}}if(f){fe(o,\"htmx:responseError\",ce({error:\"Response Status Error Code \"+s.status+\" from \"+i.pathInfo.requestPath},i))}}const Mn={};function Xn(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,n,r){return false},encodeParameters:function(e,t,n){return null}}}function Fn(e,t){if(t.init){t.init(n)}Mn[e]=ce(Xn(),t)}function Bn(e){delete Mn[e]}function Un(e,n,r){if(n==undefined){n=[]}if(e==undefined){return n}if(r==undefined){r=[]}const t=te(e,\"hx-ext\");if(t){se(t.split(\",\"),function(e){e=e.replace(/ /g,\"\");if(e.slice(0,7)==\"ignore:\"){r.push(e.slice(7));return}if(r.indexOf(e)<0){const t=Mn[e];if(t&&n.indexOf(t)<0){n.push(t)}}})}return Un(ue(c(e)),n,r)}var jn=false;ne().addEventListener(\"DOMContentLoaded\",function(){jn=true});function Vn(e){if(jn||ne().readyState===\"complete\"){e()}else{ne().addEventListener(\"DOMContentLoaded\",e)}}function _n(){if(Q.config.includeIndicatorStyles!==false){const e=Q.config.inlineStyleNonce?` nonce=\"${Q.config.inlineStyleNonce}\"`:\"\";ne().head.insertAdjacentHTML(\"beforeend\",\"<style\"+e+\"> .\"+Q.config.indicatorClass+\"{opacity:0} .\"+Q.config.requestClass+\" .\"+Q.config.indicatorClass+\"{opacity:1; transition: opacity 200ms ease-in;} .\"+Q.config.requestClass+\".\"+Q.config.indicatorClass+\"{opacity:1; transition: opacity 200ms ease-in;} </style>\")}}function zn(){const e=ne().querySelector('meta[name=\"htmx-config\"]');if(e){return S(e.content)}else{return null}}function $n(){const e=zn();if(e){Q.config=ce(Q.config,e)}}Vn(function(){$n();_n();let e=ne().body;kt(e);const t=ne().querySelectorAll(\"[hx-trigger='restored'],[data-hx-trigger='restored']\");e.addEventListener(\"htmx:abort\",function(e){const t=e.target;const n=ie(t);if(n&&n.xhr){n.xhr.abort()}});const n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){Wt();se(t,function(e){he(e,\"htmx:restored\",{document:ne(),triggerEvent:he})})}else{if(n){n(e)}}};E().setTimeout(function(){he(e,\"htmx:load\",{});e=null},0)});return Q}();";
|
|
5
|
+
//# sourceMappingURL=htmx-vendor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htmx-vendor.js","sourceRoot":"","sources":["../../../../src/ui/html/client/htmx-vendor.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,49lDAA49lD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/ui/html/client/runtime.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,QAiMzB,CAAC"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// Browser runtime for the Covara admin UI: command palette (Cmd/Ctrl-K),
|
|
2
|
+
// rich toasts, clipboard copy, relative timestamps, and a small fetch helper.
|
|
3
|
+
// Served verbatim as application/javascript; no build step, no dependencies.
|
|
4
|
+
export const runtimeScript = String.raw `
|
|
5
|
+
(function () {
|
|
6
|
+
var cfg = window.__COVARA__ || {};
|
|
7
|
+
var base = cfg.basePath || '/__covara';
|
|
8
|
+
|
|
9
|
+
// ---- helpers -------------------------------------------------------------
|
|
10
|
+
function el(tag, attrs, kids) {
|
|
11
|
+
var n = document.createElement(tag);
|
|
12
|
+
if (attrs) for (var k in attrs) {
|
|
13
|
+
if (k === 'class') n.className = attrs[k];
|
|
14
|
+
else if (k === 'html') n.innerHTML = attrs[k];
|
|
15
|
+
else if (k === 'text') n.textContent = attrs[k];
|
|
16
|
+
else if (k.slice(0,2) === 'on' && typeof attrs[k] === 'function') n.addEventListener(k.slice(2), attrs[k]);
|
|
17
|
+
else if (attrs[k] != null) n.setAttribute(k, attrs[k]);
|
|
18
|
+
}
|
|
19
|
+
(kids || []).forEach(function (c) { if (c != null) n.appendChild(typeof c === 'string' ? document.createTextNode(c) : c); });
|
|
20
|
+
return n;
|
|
21
|
+
}
|
|
22
|
+
function escapeHtml(s) {
|
|
23
|
+
return String(s).replace(/[&<>"']/g, function (c) {
|
|
24
|
+
return { '&':'&','<':'<','>':'>','"':'"',"'":''' }[c];
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// ---- toasts --------------------------------------------------------------
|
|
29
|
+
function ensureToasts() {
|
|
30
|
+
var c = document.getElementById('toast-container');
|
|
31
|
+
if (!c) { c = el('div', { id: 'toast-container', class: 'toast-container' }); document.body.appendChild(c); }
|
|
32
|
+
return c;
|
|
33
|
+
}
|
|
34
|
+
function toast(message, type) {
|
|
35
|
+
type = type || 'success';
|
|
36
|
+
var icons = { success: '✓', error: '✕', info: 'ℹ', warning: '⚠' };
|
|
37
|
+
var t = el('div', { class: 'toast toast-' + type }, [
|
|
38
|
+
el('span', { text: icons[type] || '', style: 'font-weight:700;color:var(--' + (type==='success'?'success':type==='error'?'error':'info') + ')' }),
|
|
39
|
+
el('span', { text: message, style: 'flex:1' })
|
|
40
|
+
]);
|
|
41
|
+
ensureToasts().appendChild(t);
|
|
42
|
+
setTimeout(function () { t.style.opacity = '0'; t.style.transform = 'translateY(6px)'; setTimeout(function(){ t.remove(); }, 200); }, 3200);
|
|
43
|
+
}
|
|
44
|
+
window.showToast = toast; // back-compat with existing inline handlers
|
|
45
|
+
|
|
46
|
+
// ---- fetch helper --------------------------------------------------------
|
|
47
|
+
async function fetchJSON(url, opts) {
|
|
48
|
+
var res = await fetch(url, Object.assign({ headers: { 'Accept': 'application/json' }, credentials: 'same-origin' }, opts || {}));
|
|
49
|
+
var body = null;
|
|
50
|
+
try { body = await res.json(); } catch (e) {}
|
|
51
|
+
if (!res.ok) {
|
|
52
|
+
var msg = (body && (body.detail || body.title)) || ('Request failed (' + res.status + ')');
|
|
53
|
+
var err = new Error(msg); err.status = res.status; err.body = body; throw err;
|
|
54
|
+
}
|
|
55
|
+
return body;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// ---- clipboard -----------------------------------------------------------
|
|
59
|
+
function copy(text) {
|
|
60
|
+
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
61
|
+
navigator.clipboard.writeText(text).then(function () { toast('Copied to clipboard', 'success'); });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
document.addEventListener('click', function (e) {
|
|
65
|
+
var b = e.target.closest && e.target.closest('[data-copy]');
|
|
66
|
+
if (b) { e.preventDefault(); copy(b.getAttribute('data-copy')); }
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// ---- relative time -------------------------------------------------------
|
|
70
|
+
function relTime(ts) {
|
|
71
|
+
var d = (typeof ts === 'number' ? ts : Date.parse(ts));
|
|
72
|
+
if (isNaN(d)) return '';
|
|
73
|
+
var s = Math.round((Date.now() - d) / 1000);
|
|
74
|
+
if (s < 60) return s + 's ago';
|
|
75
|
+
if (s < 3600) return Math.floor(s/60) + 'm ago';
|
|
76
|
+
if (s < 86400) return Math.floor(s/3600) + 'h ago';
|
|
77
|
+
return Math.floor(s/86400) + 'd ago';
|
|
78
|
+
}
|
|
79
|
+
function refreshTimes() {
|
|
80
|
+
document.querySelectorAll('[data-time]').forEach(function (n) { n.textContent = relTime(n.getAttribute('data-time')); });
|
|
81
|
+
}
|
|
82
|
+
setInterval(refreshTimes, 30000);
|
|
83
|
+
|
|
84
|
+
// ---- JSON syntax highlight ----------------------------------------------
|
|
85
|
+
function highlightJSON(value) {
|
|
86
|
+
var json = typeof value === 'string' ? value : JSON.stringify(value, null, 2);
|
|
87
|
+
return escapeHtml(json).replace(
|
|
88
|
+
/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,
|
|
89
|
+
function (m) {
|
|
90
|
+
var cls = 'n';
|
|
91
|
+
if (/^"/.test(m)) cls = /:$/.test(m) ? 'k' : 's';
|
|
92
|
+
else if (/true|false|null/.test(m)) cls = 'b';
|
|
93
|
+
return '<span class="' + cls + '">' + m + '</span>';
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ---- command palette -----------------------------------------------------
|
|
99
|
+
var palette = null, paletteItems = [], paletteFiltered = [], paletteIdx = 0;
|
|
100
|
+
|
|
101
|
+
function buildPalette() {
|
|
102
|
+
var overlay = el('div', { class: 'overlay', id: 'cmdk-overlay' });
|
|
103
|
+
var box = el('div', { class: 'cmdk' }, [
|
|
104
|
+
el('div', { class: 'cmdk-box' }, [
|
|
105
|
+
el('input', { class: 'input cmdk-input', id: 'cmdk-input', placeholder: 'Search pages, resources, actions…', autocomplete: 'off' }),
|
|
106
|
+
el('div', { class: 'cmdk-list', id: 'cmdk-list' })
|
|
107
|
+
])
|
|
108
|
+
]);
|
|
109
|
+
overlay.appendChild(box);
|
|
110
|
+
overlay.addEventListener('click', function (e) { if (e.target === overlay) closePalette(); });
|
|
111
|
+
document.body.appendChild(overlay);
|
|
112
|
+
palette = overlay;
|
|
113
|
+
var input = overlay.querySelector('#cmdk-input');
|
|
114
|
+
input.addEventListener('input', function () { renderPalette(input.value); });
|
|
115
|
+
input.addEventListener('keydown', function (e) {
|
|
116
|
+
if (e.key === 'ArrowDown') { e.preventDefault(); paletteIdx = Math.min(paletteIdx + 1, paletteFiltered.length - 1); renderActive(); }
|
|
117
|
+
else if (e.key === 'ArrowUp') { e.preventDefault(); paletteIdx = Math.max(paletteIdx - 1, 0); renderActive(); }
|
|
118
|
+
else if (e.key === 'Enter') { e.preventDefault(); if (paletteFiltered[paletteIdx]) runItem(paletteFiltered[paletteIdx]); }
|
|
119
|
+
else if (e.key === 'Escape') { closePalette(); }
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function collectItems() {
|
|
124
|
+
var items = [];
|
|
125
|
+
(cfg.nav || []).forEach(function (s) {
|
|
126
|
+
(s.items || []).forEach(function (it) {
|
|
127
|
+
items.push({ group: s.title, icon: it.icon, label: it.label, hint: 'Page', action: function () { go(it.href); } });
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
var ICO_THEME = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></svg>';
|
|
131
|
+
var ICO_RES = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/><path d="M9 3v18"/></svg>';
|
|
132
|
+
items.push({ group: 'Appearance', icon: ICO_THEME, label: 'Toggle theme', hint: '', action: function () { if (window.toggleTheme) window.toggleTheme(); } });
|
|
133
|
+
paletteItems = items;
|
|
134
|
+
// resources (best-effort) for quick jump into the data explorer
|
|
135
|
+
fetchJSON(base + '/api/explorer/schemas').then(function (r) {
|
|
136
|
+
(r.schemas || []).forEach(function (s) {
|
|
137
|
+
var name = s.name || s.resource || s;
|
|
138
|
+
paletteItems.push({ group: 'Resources', icon: ICO_RES, label: name, hint: 'Open in Data Explorer',
|
|
139
|
+
action: function () { go(base + '/ui/data-explorer?resource=' + encodeURIComponent(name)); } });
|
|
140
|
+
});
|
|
141
|
+
}).catch(function () {});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function go(href) { closePalette(); window.location.href = href; }
|
|
145
|
+
function runItem(it) { it.action(); }
|
|
146
|
+
|
|
147
|
+
function renderPalette(q) {
|
|
148
|
+
q = (q || '').toLowerCase().trim();
|
|
149
|
+
paletteFiltered = q ? paletteItems.filter(function (it) { return it.label.toLowerCase().indexOf(q) >= 0 || (it.group||'').toLowerCase().indexOf(q) >= 0; }) : paletteItems.slice();
|
|
150
|
+
paletteIdx = 0;
|
|
151
|
+
var list = palette.querySelector('#cmdk-list');
|
|
152
|
+
list.innerHTML = '';
|
|
153
|
+
var lastGroup = null;
|
|
154
|
+
if (!paletteFiltered.length) { list.appendChild(el('div', { class: 'cmdk-group', text: 'No results' })); return; }
|
|
155
|
+
paletteFiltered.forEach(function (it, i) {
|
|
156
|
+
if (it.group !== lastGroup) { list.appendChild(el('div', { class: 'cmdk-group', text: it.group })); lastGroup = it.group; }
|
|
157
|
+
var row = el('div', { class: 'cmdk-item' + (i === 0 ? ' active' : ''), 'data-idx': i }, [
|
|
158
|
+
el('span', { class: 'cmdk-ico', html: it.icon || '' }),
|
|
159
|
+
el('span', { text: it.label }),
|
|
160
|
+
it.hint ? el('span', { class: 'cmdk-hint', text: it.hint }) : null
|
|
161
|
+
]);
|
|
162
|
+
row.addEventListener('click', function () { runItem(it); });
|
|
163
|
+
row.addEventListener('mousemove', function () { paletteIdx = i; renderActive(); });
|
|
164
|
+
list.appendChild(row);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
function renderActive() {
|
|
168
|
+
palette.querySelectorAll('.cmdk-item').forEach(function (n) {
|
|
169
|
+
var on = parseInt(n.getAttribute('data-idx'), 10) === paletteIdx;
|
|
170
|
+
n.classList.toggle('active', on);
|
|
171
|
+
if (on) n.scrollIntoView({ block: 'nearest' });
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
function openPalette() {
|
|
175
|
+
if (!palette) buildPalette();
|
|
176
|
+
if (!paletteItems.length) collectItems();
|
|
177
|
+
renderPalette('');
|
|
178
|
+
palette.classList.add('open');
|
|
179
|
+
var input = palette.querySelector('#cmdk-input'); input.value = ''; setTimeout(function () { input.focus(); }, 10);
|
|
180
|
+
}
|
|
181
|
+
function closePalette() { if (palette) palette.classList.remove('open'); }
|
|
182
|
+
|
|
183
|
+
document.addEventListener('keydown', function (e) {
|
|
184
|
+
if ((e.metaKey || e.ctrlKey) && (e.key === 'k' || e.key === 'K')) { e.preventDefault(); openPalette(); }
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// ---- public namespace ----------------------------------------------------
|
|
188
|
+
window.Covara = {
|
|
189
|
+
base: base, toast: toast, fetchJSON: fetchJSON, copy: copy, el: el,
|
|
190
|
+
escapeHtml: escapeHtml, highlightJSON: highlightJSON, relTime: relTime,
|
|
191
|
+
openPalette: openPalette, closePalette: closePalette
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
document.addEventListener('DOMContentLoaded', refreshTimes);
|
|
195
|
+
refreshTimes();
|
|
196
|
+
})();
|
|
197
|
+
`;
|
|
198
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/ui/html/client/runtime.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8EAA8E;AAC9E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiMtC,CAAC"}
|
|
@@ -5,7 +5,11 @@ export interface CardProps {
|
|
|
5
5
|
flush?: boolean;
|
|
6
6
|
}
|
|
7
7
|
export declare const card: (props: CardProps, body: string) => string;
|
|
8
|
-
export declare const statCard: (label: string, value: string | number, variant?: BadgeVariant
|
|
8
|
+
export declare const statCard: (label: string, value: string | number, variant?: BadgeVariant, opts?: {
|
|
9
|
+
icon?: string;
|
|
10
|
+
href?: string;
|
|
11
|
+
sub?: string;
|
|
12
|
+
}) => string;
|
|
9
13
|
export type BadgeVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info';
|
|
10
14
|
export declare const badge: (text: string | number, variant?: BadgeVariant) => string;
|
|
11
15
|
export declare const methodBadge: (method: string) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/html/components/index.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,IAAI,GAAI,OAAO,SAAS,EAAE,MAAM,MAAM,KAAG,MAYrD,CAAC;AAEF,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/html/components/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,12 +12,17 @@ export const card = (props, body) => html `
|
|
|
12
12
|
</div>
|
|
13
13
|
</div>
|
|
14
14
|
`;
|
|
15
|
-
export const statCard = (label, value, variant = 'neutral') =>
|
|
16
|
-
|
|
17
|
-
<div class="stat-label">${escapeHtml(label)}</div>
|
|
15
|
+
export const statCard = (label, value, variant = 'neutral', opts = {}) => {
|
|
16
|
+
const inner = html `
|
|
17
|
+
<div class="stat-label">${opts.icon ? html `<span class="nav-icon" style="opacity:.7">${opts.icon}</span>` : ''}${escapeHtml(label)}</div>
|
|
18
18
|
<div class="stat-value">${escapeHtml(value)}</div>
|
|
19
|
-
|
|
20
|
-
`;
|
|
19
|
+
${opts.sub ? html `<div class="stat-sub">${escapeHtml(opts.sub)}</div>` : ''}
|
|
20
|
+
`;
|
|
21
|
+
if (opts.href) {
|
|
22
|
+
return html `<a class="stat-card stat-${variant}" href="${opts.href}" hx-get="${opts.href}" hx-target="#content" hx-push-url="true" hx-swap="innerHTML" style="text-decoration:none;color:inherit;display:block">${inner}</a>`;
|
|
23
|
+
}
|
|
24
|
+
return html `<div class="stat-card stat-${variant}">${inner}</div>`;
|
|
25
|
+
};
|
|
21
26
|
export const badge = (text, variant = 'neutral') => html `
|
|
22
27
|
<span class="badge badge-${variant}">${escapeHtml(text)}</span>
|
|
23
28
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ui/html/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AASxD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI,CAAA;;MAE9D,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;;mCAEW,KAAK,CAAC,KAAK;UACpC,KAAK,CAAC,WAAW,IAAI,EAAE;;KAE5B,CAAC,CAAC,CAAC,EAAE;kBACQ,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;QACpF,IAAI;;;CAGX,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ui/html/components/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/ui/html/icons.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBxC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,KAAG,MAA2B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Inline SVG icon set for the admin UI. Using SVGs (stroke: currentColor)
|
|
2
|
+
// instead of Unicode glyphs guarantees consistent, crisp rendering across every
|
|
3
|
+
// OS/font and inherits the current text color for theming. Lucide-style paths.
|
|
4
|
+
const svg = (paths) => `<svg class="ico" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${paths}</svg>`;
|
|
5
|
+
export const icons = {
|
|
6
|
+
dashboard: svg('<rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/>'),
|
|
7
|
+
resources: svg('<ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M3 5v14a9 3 0 0 0 18 0V5"/><path d="M3 12a9 3 0 0 0 18 0"/>'),
|
|
8
|
+
requests: svg('<path d="M22 12h-4l-3 9L9 3l-3 9H2"/>'),
|
|
9
|
+
errors: svg('<path d="m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4"/><path d="M12 17h.01"/>'),
|
|
10
|
+
data: svg('<rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/><path d="M9 3v18"/>'),
|
|
11
|
+
audit: svg('<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z"/><path d="m9 12 2 2 4-4"/>'),
|
|
12
|
+
filter: svg('<polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"/>'),
|
|
13
|
+
subscriptions: svg('<path d="M4.9 19.1C1 15.2 1 8.8 4.9 4.9"/><path d="M7.8 16.2a6 6 0 0 1 0-8.5"/><circle cx="12" cy="12" r="2"/><path d="M16.2 7.7a6 6 0 0 1 0 8.5"/><path d="M19.1 4.9a10 10 0 0 1 0 14.2"/>'),
|
|
14
|
+
changelog: svg('<line x1="8" y1="6" x2="21" y2="6"/><line x1="8" y1="12" x2="21" y2="12"/><line x1="8" y1="18" x2="21" y2="18"/><line x1="3" y1="6" x2="3.01" y2="6"/><line x1="3" y1="12" x2="3.01" y2="12"/><line x1="3" y1="18" x2="3.01" y2="18"/>'),
|
|
15
|
+
api: svg('<polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/>'),
|
|
16
|
+
users: svg('<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>'),
|
|
17
|
+
sessions: svg('<circle cx="7.5" cy="15.5" r="5.5"/><path d="m21 2-9.6 9.6"/><path d="m15.5 7.5 3 3L22 7l-3-3"/>'),
|
|
18
|
+
tasks: svg('<circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/>'),
|
|
19
|
+
kv: svg('<rect x="2" y="3" width="20" height="8" rx="2"/><rect x="2" y="13" width="20" height="8" rx="2"/><line x1="6" y1="7" x2="6.01" y2="7"/><line x1="6" y1="17" x2="6.01" y2="17"/>'),
|
|
20
|
+
search: svg('<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>'),
|
|
21
|
+
};
|
|
22
|
+
export const icon = (name) => icons[name] ?? "";
|
|
23
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/ui/html/icons.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,gFAAgF;AAChF,+EAA+E;AAE/E,MAAM,GAAG,GAAG,CAAC,KAAa,EAAU,EAAE,CACpC,oLAAoL,KAAK,QAAQ,CAAC;AAEpM,MAAM,CAAC,MAAM,KAAK,GAA2B;IAC3C,SAAS,EAAE,GAAG,CAAC,kMAAkM,CAAC;IAClN,SAAS,EAAE,GAAG,CAAC,6GAA6G,CAAC;IAC7H,QAAQ,EAAE,GAAG,CAAC,uCAAuC,CAAC;IACtD,MAAM,EAAE,GAAG,CAAC,gIAAgI,CAAC;IAC7I,IAAI,EAAE,GAAG,CAAC,6GAA6G,CAAC;IACxH,KAAK,EAAE,GAAG,CAAC,kFAAkF,CAAC;IAC9F,MAAM,EAAE,GAAG,CAAC,iEAAiE,CAAC;IAC9E,aAAa,EAAE,GAAG,CAAC,6LAA6L,CAAC;IACjN,SAAS,EAAE,GAAG,CAAC,wOAAwO,CAAC;IACxP,GAAG,EAAE,GAAG,CAAC,4EAA4E,CAAC;IACtF,KAAK,EAAE,GAAG,CAAC,+JAA+J,CAAC;IAC3K,QAAQ,EAAE,GAAG,CAAC,kGAAkG,CAAC;IACjH,KAAK,EAAE,GAAG,CAAC,uEAAuE,CAAC;IACnF,EAAE,EAAE,GAAG,CAAC,iLAAiL,CAAC;IAC1L,MAAM,EAAE,GAAG,CAAC,2DAA2D,CAAC;CACzE,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/ui/html/layout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/ui/html/layout.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,EAAE,UAAU,EAmClC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,WAAW,EAAE,SAAS,MAAM,KAAG,MA6I5D,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAAiB,CAAC"}
|
package/dist/ui/html/layout.js
CHANGED
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
import { html, escapeHtml } from './utils.js';
|
|
2
2
|
import { styles } from './styles.js';
|
|
3
3
|
import { envBadge } from './components/index.js';
|
|
4
|
+
import { icon } from './icons.js';
|
|
4
5
|
export const navigation = [
|
|
5
6
|
{
|
|
6
7
|
title: 'Overview',
|
|
7
8
|
items: [
|
|
8
|
-
{ id: 'dashboard', icon: '
|
|
9
|
-
{ id: 'resources', icon: '
|
|
10
|
-
{ id: 'requests', icon: '
|
|
11
|
-
{ id: 'errors', icon: '
|
|
9
|
+
{ id: 'dashboard', icon: 'dashboard', label: 'Dashboard', href: '/__covara/ui' },
|
|
10
|
+
{ id: 'resources', icon: 'resources', label: 'Resources', href: '/__covara/ui/resources' },
|
|
11
|
+
{ id: 'requests', icon: 'requests', label: 'Requests', href: '/__covara/ui/requests' },
|
|
12
|
+
{ id: 'errors', icon: 'errors', label: 'Errors', href: '/__covara/ui/errors' },
|
|
12
13
|
],
|
|
13
14
|
},
|
|
14
15
|
{
|
|
15
16
|
title: 'Data',
|
|
16
17
|
items: [
|
|
17
|
-
{ id: 'data-explorer', icon: '
|
|
18
|
-
{ id: 'admin-audit', icon: '
|
|
18
|
+
{ id: 'data-explorer', icon: 'data', label: 'Data Explorer', href: '/__covara/ui/data-explorer' },
|
|
19
|
+
{ id: 'admin-audit', icon: 'audit', label: 'Admin Audit', href: '/__covara/ui/admin-audit' },
|
|
19
20
|
],
|
|
20
21
|
},
|
|
21
22
|
{
|
|
22
23
|
title: 'Tools',
|
|
23
24
|
items: [
|
|
24
|
-
{ id: 'filter-tester', icon: '
|
|
25
|
-
{ id: 'subscriptions', icon: '
|
|
26
|
-
{ id: 'changelog', icon: '
|
|
27
|
-
{ id: 'api-explorer', icon: '
|
|
25
|
+
{ id: 'filter-tester', icon: 'filter', label: 'Filter Tester', href: '/__covara/ui/filter-tester' },
|
|
26
|
+
{ id: 'subscriptions', icon: 'subscriptions', label: 'Subscriptions', href: '/__covara/ui/subscriptions' },
|
|
27
|
+
{ id: 'changelog', icon: 'changelog', label: 'Changelog', href: '/__covara/ui/changelog' },
|
|
28
|
+
{ id: 'api-explorer', icon: 'api', label: 'API Explorer', href: '/__covara/ui/api-explorer' },
|
|
28
29
|
],
|
|
29
30
|
},
|
|
30
31
|
{
|
|
31
32
|
title: 'System',
|
|
32
33
|
items: [
|
|
33
|
-
{ id: 'users', icon: '
|
|
34
|
-
{ id: 'sessions', icon: '
|
|
35
|
-
{ id: 'tasks', icon: '
|
|
36
|
-
{ id: 'kv-inspector', icon: '
|
|
34
|
+
{ id: 'users', icon: 'users', label: 'Users', href: '/__covara/ui/users' },
|
|
35
|
+
{ id: 'sessions', icon: 'sessions', label: 'Sessions', href: '/__covara/ui/sessions' },
|
|
36
|
+
{ id: 'tasks', icon: 'tasks', label: 'Task Queue', href: '/__covara/ui/tasks' },
|
|
37
|
+
{ id: 'kv-inspector', icon: 'kv', label: 'KV Inspector', href: '/__covara/ui/kv-inspector' },
|
|
37
38
|
],
|
|
38
39
|
},
|
|
39
40
|
];
|
|
@@ -44,8 +45,19 @@ export const layout = (props, content) => html `
|
|
|
44
45
|
<meta charset="UTF-8">
|
|
45
46
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
46
47
|
<title>${escapeHtml(props.title)} - Covara Admin</title>
|
|
47
|
-
<
|
|
48
|
+
<link rel="icon" type="image/svg+xml" href="/__covara/logo.svg">
|
|
49
|
+
<script src="/__covara/ui/htmx.js"></script>
|
|
48
50
|
<style>${styles}</style>
|
|
51
|
+
<script>
|
|
52
|
+
window.__COVARA__ = {
|
|
53
|
+
basePath: '/__covara',
|
|
54
|
+
nav: ${JSON.stringify(navigation.map((s) => ({
|
|
55
|
+
title: s.title,
|
|
56
|
+
items: s.items.map((i) => ({ icon: icon(i.icon), label: i.label, href: i.href })),
|
|
57
|
+
})))}
|
|
58
|
+
};
|
|
59
|
+
</script>
|
|
60
|
+
<script src="/__covara/ui/covara-runtime.js" defer></script>
|
|
49
61
|
<script>
|
|
50
62
|
// Theme handling
|
|
51
63
|
const theme = localStorage.getItem('covara-theme') || 'light';
|
|
@@ -113,7 +125,10 @@ export const layout = (props, content) => html `
|
|
|
113
125
|
<div class="app">
|
|
114
126
|
<aside class="sidebar">
|
|
115
127
|
<div class="sidebar-header">
|
|
116
|
-
<span class="sidebar-logo">
|
|
128
|
+
<span class="sidebar-logo">
|
|
129
|
+
<img class="sidebar-logo-img" src="/__covara/logo.svg" alt="Covara" width="24" height="24">
|
|
130
|
+
Covara
|
|
131
|
+
</span>
|
|
117
132
|
${envBadge(props.mode)}
|
|
118
133
|
</div>
|
|
119
134
|
<nav class="sidebar-nav">
|
|
@@ -127,7 +142,7 @@ export const layout = (props, content) => html `
|
|
|
127
142
|
hx-target="#content"
|
|
128
143
|
hx-push-url="true"
|
|
129
144
|
hx-swap="innerHTML">
|
|
130
|
-
<span class="nav-icon">${item.icon}</span>
|
|
145
|
+
<span class="nav-icon">${icon(item.icon)}</span>
|
|
131
146
|
<span>${escapeHtml(item.label)}</span>
|
|
132
147
|
</a>
|
|
133
148
|
`).join('')}
|
|
@@ -139,7 +154,12 @@ export const layout = (props, content) => html `
|
|
|
139
154
|
<main class="main">
|
|
140
155
|
<header class="header">
|
|
141
156
|
<div class="header-left">
|
|
142
|
-
<
|
|
157
|
+
<button class="cmdk-trigger" onclick="window.Covara && Covara.openPalette()">
|
|
158
|
+
<span class="row">${icon('search')}</span>
|
|
159
|
+
<span>Search or jump to…</span>
|
|
160
|
+
<span class="spacer"></span>
|
|
161
|
+
<kbd>⌘K</kbd>
|
|
162
|
+
</button>
|
|
143
163
|
</div>
|
|
144
164
|
<div class="header-right">
|
|
145
165
|
<button id="theme-toggle" class="btn btn-ghost btn-icon" onclick="toggleTheme()">
|