rails_pulse 0.1.3 → 0.1.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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +56 -16
  3. data/Rakefile +169 -86
  4. data/app/controllers/rails_pulse/queries_controller.rb +14 -20
  5. data/app/controllers/rails_pulse/requests_controller.rb +43 -30
  6. data/app/helpers/rails_pulse/breadcrumbs_helper.rb +1 -1
  7. data/app/helpers/rails_pulse/chart_helper.rb +1 -1
  8. data/app/helpers/rails_pulse/formatting_helper.rb +21 -2
  9. data/app/javascript/rails_pulse/controllers/index_controller.js +11 -3
  10. data/app/models/rails_pulse/dashboard/tables/slow_queries.rb +1 -1
  11. data/app/models/rails_pulse/dashboard/tables/slow_routes.rb +1 -1
  12. data/app/models/rails_pulse/queries/cards/average_query_times.rb +1 -1
  13. data/app/models/rails_pulse/queries/cards/execution_rate.rb +56 -17
  14. data/app/models/rails_pulse/queries/cards/percentile_query_times.rb +1 -1
  15. data/app/models/rails_pulse/queries/charts/average_query_times.rb +3 -7
  16. data/app/models/rails_pulse/request.rb +1 -1
  17. data/app/models/rails_pulse/requests/charts/average_response_times.rb +2 -2
  18. data/app/models/rails_pulse/requests/tables/index.rb +77 -0
  19. data/app/models/rails_pulse/routes/cards/average_response_times.rb +1 -1
  20. data/app/models/rails_pulse/routes/cards/error_rate_per_route.rb +1 -1
  21. data/app/models/rails_pulse/routes/cards/percentile_response_times.rb +1 -1
  22. data/app/models/rails_pulse/routes/cards/request_count_totals.rb +16 -5
  23. data/app/models/rails_pulse/routes/tables/index.rb +4 -2
  24. data/app/models/rails_pulse/summary.rb +7 -7
  25. data/app/services/rails_pulse/analysis/query_characteristics_analyzer.rb +11 -3
  26. data/app/views/rails_pulse/components/_metric_card.html.erb +2 -2
  27. data/app/views/rails_pulse/components/_operation_details_popover.html.erb +1 -1
  28. data/app/views/rails_pulse/components/_sparkline_stats.html.erb +1 -1
  29. data/app/views/rails_pulse/dashboard/index.html.erb +1 -1
  30. data/app/views/rails_pulse/queries/_analysis_results.html.erb +53 -23
  31. data/app/views/rails_pulse/queries/_show_table.html.erb +33 -5
  32. data/app/views/rails_pulse/queries/_table.html.erb +3 -7
  33. data/app/views/rails_pulse/requests/_table.html.erb +30 -19
  34. data/app/views/rails_pulse/requests/index.html.erb +8 -0
  35. data/app/views/rails_pulse/requests/show.html.erb +0 -2
  36. data/app/views/rails_pulse/routes/_requests_table.html.erb +39 -0
  37. data/app/views/rails_pulse/routes/_table.html.erb +3 -9
  38. data/app/views/rails_pulse/routes/show.html.erb +3 -5
  39. data/config/initializers/rails_charts_csp_patch.rb +32 -40
  40. data/db/migrate/20250930105043_install_rails_pulse_tables.rb +23 -0
  41. data/db/rails_pulse_schema.rb +1 -1
  42. data/lib/generators/rails_pulse/convert_to_migrations_generator.rb +25 -9
  43. data/lib/generators/rails_pulse/install_generator.rb +9 -5
  44. data/lib/generators/rails_pulse/templates/db/rails_pulse_schema.rb +72 -2
  45. data/lib/generators/rails_pulse/templates/migrations/install_rails_pulse_tables.rb +3 -2
  46. data/lib/generators/rails_pulse/upgrade_generator.rb +2 -1
  47. data/lib/rails_pulse/engine.rb +21 -0
  48. data/lib/rails_pulse/version.rb +1 -1
  49. data/public/rails-pulse-assets/rails-pulse.js +1 -1
  50. data/public/rails-pulse-assets/rails-pulse.js.map +2 -2
  51. metadata +5 -4
  52. data/db/migrate/20241222000001_create_rails_pulse_summaries.rb +0 -54
  53. data/db/migrate/20250916031656_add_analysis_to_rails_pulse_queries.rb +0 -13
@@ -120,7 +120,7 @@ yyyy`);var o=Ei(t),l=e?"getUTC":"get",f=o[l+"FullYear"](),h=o[l+"Month"]()+1,v=o
120
120
 
121
121
  %o
122
122
 
123
- %o`,e,t,o),(l=window.onerror)===null||l===void 0||l.call(window,e,"",0,0,t)}logFormattedMessage(t,e,o={}){o=Object.assign({application:this},o),this.logger.groupCollapsed(`${t} #${e}`),this.logger.log("details:",Object.assign({},o)),this.logger.groupEnd()}};function T$t(){return new Promise(a=>{document.readyState=="loading"?document.addEventListener("DOMContentLoaded",()=>a()):a()})}function A$t(a){return bb(a,"classes").reduce((e,o)=>Object.assign(e,C$t(o)),{})}function C$t(a){return{[`${a}Class`]:{get(){let{classes:t}=this;if(t.has(a))return t.get(a);{let e=t.getAttributeName(a);throw new Error(`Missing attribute "${e}"`)}}},[`${a}Classes`]:{get(){return this.classes.getAll(a)}},[`has${Sb(a)}Class`]:{get(){return this.classes.has(a)}}}}function D$t(a){return bb(a,"outlets").reduce((e,o)=>Object.assign(e,M$t(o)),{})}function dgt(a,t,e){return a.application.getControllerForElementAndIdentifier(t,e)}function ggt(a,t,e){let o=dgt(a,t,e);if(o||(a.application.router.proposeToConnectScopeForElementAndIdentifier(t,e),o=dgt(a,t,e),o))return o}function M$t(a){let t=R3(a);return{[`${t}Outlet`]:{get(){let e=this.outlets.find(a),o=this.outlets.getSelectorForOutletName(a);if(e){let l=ggt(this,e,a);if(l)return l;throw new Error(`The provided outlet element is missing an outlet controller "${a}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${a}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${o}".`)}},[`${t}Outlets`]:{get(){let e=this.outlets.findAll(a);return e.length>0?e.map(o=>{let l=ggt(this,o,a);if(l)return l;console.warn(`The provided outlet element is missing an outlet controller "${a}" instance for host controller "${this.identifier}"`,o)}).filter(o=>o):[]}},[`${t}OutletElement`]:{get(){let e=this.outlets.find(a),o=this.outlets.getSelectorForOutletName(a);if(e)return e;throw new Error(`Missing outlet element "${a}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${o}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(a)}},[`has${Sb(t)}Outlet`]:{get(){return this.outlets.has(a)}}}}function L$t(a){return bb(a,"targets").reduce((e,o)=>Object.assign(e,I$t(o)),{})}function I$t(a){return{[`${a}Target`]:{get(){let t=this.targets.find(a);if(t)return t;throw new Error(`Missing target element "${a}" for "${this.identifier}" controller`)}},[`${a}Targets`]:{get(){return this.targets.findAll(a)}},[`has${Sb(a)}Target`]:{get(){return this.targets.has(a)}}}}function E$t(a){let t=h$t(a,"values"),e={valueDescriptorMap:{get(){return t.reduce((o,l)=>{let f=wgt(l,this.identifier),h=this.data.getAttributeNameForKey(f.key);return Object.assign(o,{[h]:f})},{})}}};return t.reduce((o,l)=>Object.assign(o,P$t(l)),e)}function P$t(a,t){let e=wgt(a,t),{key:o,name:l,reader:f,writer:h}=e;return{[l]:{get(){let v=this.data.get(o);return v!==null?f(v):e.defaultValue},set(v){v===void 0?this.data.delete(o):this.data.set(o,h(v))}},[`has${Sb(l)}`]:{get(){return this.data.has(o)||e.hasCustomDefaultValue}}}}function wgt([a,t],e){return N$t({controller:e,token:a,typeDefinition:t})}function _I(a){switch(a){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function xb(a){switch(typeof a){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray(a))return"array";if(Object.prototype.toString.call(a)==="[object Object]")return"object"}function R$t(a){let{controller:t,token:e,typeObject:o}=a,l=cgt(o.type),f=cgt(o.default),h=l&&f,v=l&&!f,g=!l&&f,y=_I(o.type),x=xb(a.typeObject.default);if(v)return y;if(g)return x;if(y!==x){let b=t?`${t}.${e}`:e;throw new Error(`The specified default value for the Stimulus Value "${b}" must match the defined type "${y}". The provided default value of "${o.default}" is of type "${x}".`)}if(h)return y}function O$t(a){let{controller:t,token:e,typeDefinition:o}=a,f=R$t({controller:t,token:e,typeObject:o}),h=xb(o),v=_I(o),g=f||h||v;if(g)return g;let y=t?`${t}.${o}`:e;throw new Error(`Unknown value type "${y}" for "${e}" value`)}function k$t(a){let t=_I(a);if(t)return mgt[t];let e=O3(a,"default"),o=O3(a,"type"),l=a;if(e)return l.default;if(o){let{type:f}=l,h=_I(f);if(h)return mgt[h]}return a}function N$t(a){let{token:t,typeDefinition:e}=a,o=`${xgt(t)}-value`,l=O$t(a);return{type:l,key:o,name:tW(o),get defaultValue(){return k$t(e)},get hasCustomDefaultValue(){return xb(e)!==void 0},reader:z$t[l],writer:ygt[l]||ygt.default}}var mgt={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},z$t={array(a){let t=JSON.parse(a);if(!Array.isArray(t))throw new TypeError(`expected value of type "array" but instead got value "${a}" of type "${xb(t)}"`);return t},boolean(a){return!(a=="0"||String(a).toLowerCase()=="false")},number(a){return Number(a.replace(/_/g,""))},object(a){let t=JSON.parse(a);if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError(`expected value of type "object" but instead got value "${a}" of type "${xb(t)}"`);return t},string(a){return a}},ygt={default:V$t,array:_gt,object:_gt};function _gt(a){return JSON.stringify(a)}function V$t(a){return`${a}`}var wr=class{constructor(t){this.context=t}static get shouldLoad(){return!0}static afterLoad(t,e){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(t,{target:e=this.element,detail:o={},prefix:l=this.identifier,bubbles:f=!0,cancelable:h=!0}={}){let v=l?`${l}:${t}`:t,g=new CustomEvent(v,{detail:o,bubbles:f,cancelable:h});return e.dispatchEvent(g),g}};wr.blessings=[A$t,L$t,E$t,D$t];wr.targets=[];wr.outlets=[];wr.values={};var wb=class extends wr{show(a){this.menuTarget.style.setProperty("--context-menu-x",`${a.clientX-5}px`),this.menuTarget.style.setProperty("--context-menu-y",`${a.clientY-5}px`),this.menuTarget.classList.add("positioned"),setTimeout(()=>this.menuTarget.showPopover(),150)}};Nt(wb,"targets",["menu"]);var Tb=class extends wr{show(){this.menuTarget.show()}showModal(){this.menuTarget.showModal()}close(){this.menuTarget.close()}closeOnClickOutside({target:a}){a.nodeName==="DIALOG"&&this.close()}};Nt(Tb,"targets",["menu"]);var dy,SI,Tgt,gy,xI,bI,Agt,wI,Cgt,TI,Dgt,vy=class extends wr{constructor(){super(...arguments);Ce(this,SI);Ce(this,gy);Ce(this,bI);Ce(this,wI);Ce(this,TI);Ce(this,dy,void 0)}initialize(){gr(this,dy,new IntersectionObserver(Be(this,SI,Tgt).bind(this)))}connect(){Oe(this,dy).observe(this.element)}disconnect(){Oe(this,dy).disconnect()}prev(){this.indexValue>0&&(this.indexValue--,Be(this,gy,xI).call(this))}next(){this.indexValue<Oe(this,TI,Dgt)&&(this.indexValue++,Be(this,gy,xI).call(this))}};dy=new WeakMap,SI=new WeakSet,Tgt=function([t]){t.isIntersecting&&(this.indexValue=0,Be(this,gy,xI).call(this))},gy=new WeakSet,xI=function(){Be(this,bI,Agt).call(this),Be(this,wI,Cgt).call(this)},bI=new WeakSet,Agt=function(){this.itemTargets.forEach((t,e)=>{t.tabIndex=e===this.indexValue?0:-1})},wI=new WeakSet,Cgt=function(){this.itemTargets[this.indexValue].focus()},TI=new WeakSet,Dgt=function(){return this.itemTargets.length-1},Nt(vy,"targets",["item"]),Nt(vy,"values",{index:Number});var my=Math.min,ju=Math.max,Cb=Math.round,Db=Math.floor,Hs=a=>({x:a,y:a}),B$t={left:"right",right:"left",bottom:"top",top:"bottom"},F$t={start:"end",end:"start"};function eW(a,t,e){return ju(a,my(t,e))}function Mb(a,t){return typeof a=="function"?a(t):a}function qc(a){return a.split("-")[0]}function Lb(a){return a.split("-")[1]}function rW(a){return a==="x"?"y":"x"}function iW(a){return a==="y"?"height":"width"}var U$t=new Set(["top","bottom"]);function Ju(a){return U$t.has(qc(a))?"y":"x"}function aW(a){return rW(Ju(a))}function Igt(a,t,e){e===void 0&&(e=!1);let o=Lb(a),l=aW(a),f=iW(l),h=l==="x"?o===(e?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[f]>t.floating[f]&&(h=Ab(h)),[h,Ab(h)]}function Egt(a){let t=Ab(a);return[AI(a),t,AI(t)]}function AI(a){return a.replace(/start|end/g,t=>F$t[t])}var Mgt=["left","right"],Lgt=["right","left"],G$t=["top","bottom"],H$t=["bottom","top"];function W$t(a,t,e){switch(a){case"top":case"bottom":return e?t?Lgt:Mgt:t?Mgt:Lgt;case"left":case"right":return t?G$t:H$t;default:return[]}}function Pgt(a,t,e,o){let l=Lb(a),f=W$t(qc(a),e==="start",o);return l&&(f=f.map(h=>h+"-"+l),t&&(f=f.concat(f.map(AI)))),f}function Ab(a){return a.replace(/left|right|bottom|top/g,t=>B$t[t])}function Y$t(a){return{top:0,right:0,bottom:0,left:0,...a}}function Rgt(a){return typeof a!="number"?Y$t(a):{top:a,right:a,bottom:a,left:a}}function Vv(a){let{x:t,y:e,width:o,height:l}=a;return{width:o,height:l,top:e,left:t,right:t+o,bottom:e+l,x:t,y:e}}function Ogt(a,t,e){let{reference:o,floating:l}=a,f=Ju(t),h=aW(t),v=iW(h),g=qc(t),y=f==="y",x=o.x+o.width/2-l.width/2,b=o.y+o.height/2-l.height/2,T=o[v]/2-l[v]/2,C;switch(g){case"top":C={x,y:o.y-l.height};break;case"bottom":C={x,y:o.y+o.height};break;case"right":C={x:o.x+o.width,y:b};break;case"left":C={x:o.x-l.width,y:b};break;default:C={x:o.x,y:o.y}}switch(Lb(t)){case"start":C[h]-=T*(e&&y?-1:1);break;case"end":C[h]+=T*(e&&y?-1:1);break}return C}var kgt=async(a,t,e)=>{let{placement:o="bottom",strategy:l="absolute",middleware:f=[],platform:h}=e,v=f.filter(Boolean),g=await(h.isRTL==null?void 0:h.isRTL(t)),y=await h.getElementRects({reference:a,floating:t,strategy:l}),{x,y:b}=Ogt(y,o,g),T=o,C={},M=0;for(let I=0;I<v.length;I++){let{name:P,fn:O}=v[I],{x:N,y:V,data:F,reset:U}=await O({x,y:b,initialPlacement:o,placement:T,strategy:l,middlewareData:C,rects:y,platform:h,elements:{reference:a,floating:t}});x=N??x,b=V??b,C={...C,[P]:{...C[P],...F}},U&&M<=50&&(M++,typeof U=="object"&&(U.placement&&(T=U.placement),U.rects&&(y=U.rects===!0?await h.getElementRects({reference:a,floating:t,strategy:l}):U.rects),{x,y:b}=Ogt(y,T,g)),I=-1)}return{x,y:b,placement:T,strategy:l,middlewareData:C}};async function nW(a,t){var e;t===void 0&&(t={});let{x:o,y:l,platform:f,rects:h,elements:v,strategy:g}=a,{boundary:y="clippingAncestors",rootBoundary:x="viewport",elementContext:b="floating",altBoundary:T=!1,padding:C=0}=Mb(t,a),M=Rgt(C),P=v[T?b==="floating"?"reference":"floating":b],O=Vv(await f.getClippingRect({element:(e=await(f.isElement==null?void 0:f.isElement(P)))==null||e?P:P.contextElement||await(f.getDocumentElement==null?void 0:f.getDocumentElement(v.floating)),boundary:y,rootBoundary:x,strategy:g})),N=b==="floating"?{x:o,y:l,width:h.floating.width,height:h.floating.height}:h.reference,V=await(f.getOffsetParent==null?void 0:f.getOffsetParent(v.floating)),F=await(f.isElement==null?void 0:f.isElement(V))?await(f.getScale==null?void 0:f.getScale(V))||{x:1,y:1}:{x:1,y:1},U=Vv(f.convertOffsetParentRelativeRectToViewportRelativeRect?await f.convertOffsetParentRelativeRectToViewportRelativeRect({elements:v,rect:N,offsetParent:V,strategy:g}):N);return{top:(O.top-U.top+M.top)/F.y,bottom:(U.bottom-O.bottom+M.bottom)/F.y,left:(O.left-U.left+M.left)/F.x,right:(U.right-O.right+M.right)/F.x}}var Ngt=function(a){return a===void 0&&(a={}),{name:"flip",options:a,async fn(t){var e,o;let{placement:l,middlewareData:f,rects:h,initialPlacement:v,platform:g,elements:y}=t,{mainAxis:x=!0,crossAxis:b=!0,fallbackPlacements:T,fallbackStrategy:C="bestFit",fallbackAxisSideDirection:M="none",flipAlignment:I=!0,...P}=Mb(a,t);if((e=f.arrow)!=null&&e.alignmentOffset)return{};let O=qc(l),N=Ju(v),V=qc(v)===v,F=await(g.isRTL==null?void 0:g.isRTL(y.floating)),U=T||(V||!I?[Ab(v)]:Egt(v)),H=M!=="none";!T&&H&&U.push(...Pgt(v,I,M,F));let Z=[v,...U],$=await nW(t,P),K=[],Q=((o=f.flip)==null?void 0:o.overflows)||[];if(x&&K.push($[O]),b){let ft=Igt(l,h,F);K.push($[ft[0]],$[ft[1]])}if(Q=[...Q,{placement:l,overflows:K}],!K.every(ft=>ft<=0)){var rt,nt;let ft=(((rt=f.flip)==null?void 0:rt.index)||0)+1,lt=Z[ft];if(lt&&(!(b==="alignment"?N!==Ju(lt):!1)||Q.every(st=>st.overflows[0]>0&&Ju(st.placement)===N)))return{data:{index:ft,overflows:Q},reset:{placement:lt}};let pt=(nt=Q.filter(xt=>xt.overflows[0]<=0).sort((xt,st)=>xt.overflows[1]-st.overflows[1])[0])==null?void 0:nt.placement;if(!pt)switch(C){case"bestFit":{var ot;let xt=(ot=Q.filter(st=>{if(H){let dt=Ju(st.placement);return dt===N||dt==="y"}return!0}).map(st=>[st.placement,st.overflows.filter(dt=>dt>0).reduce((dt,Et)=>dt+Et,0)]).sort((st,dt)=>st[1]-dt[1])[0])==null?void 0:ot[0];xt&&(pt=xt);break}case"initialPlacement":pt=v;break}if(l!==pt)return{reset:{placement:pt}}}return{}}}};var Z$t=new Set(["left","top"]);async function X$t(a,t){let{placement:e,platform:o,elements:l}=a,f=await(o.isRTL==null?void 0:o.isRTL(l.floating)),h=qc(e),v=Lb(e),g=Ju(e)==="y",y=Z$t.has(h)?-1:1,x=f&&g?-1:1,b=Mb(t,a),{mainAxis:T,crossAxis:C,alignmentAxis:M}=typeof b=="number"?{mainAxis:b,crossAxis:0,alignmentAxis:null}:{mainAxis:b.mainAxis||0,crossAxis:b.crossAxis||0,alignmentAxis:b.alignmentAxis};return v&&typeof M=="number"&&(C=v==="end"?M*-1:M),g?{x:C*x,y:T*y}:{x:T*y,y:C*x}}var zgt=function(a){return a===void 0&&(a=0),{name:"offset",options:a,async fn(t){var e,o;let{x:l,y:f,placement:h,middlewareData:v}=t,g=await X$t(t,a);return h===((e=v.offset)==null?void 0:e.placement)&&(o=v.arrow)!=null&&o.alignmentOffset?{}:{x:l+g.x,y:f+g.y,data:{...g,placement:h}}}}},Vgt=function(a){return a===void 0&&(a={}),{name:"shift",options:a,async fn(t){let{x:e,y:o,placement:l}=t,{mainAxis:f=!0,crossAxis:h=!1,limiter:v={fn:P=>{let{x:O,y:N}=P;return{x:O,y:N}}},...g}=Mb(a,t),y={x:e,y:o},x=await nW(t,g),b=Ju(qc(l)),T=rW(b),C=y[T],M=y[b];if(f){let P=T==="y"?"top":"left",O=T==="y"?"bottom":"right",N=C+x[P],V=C-x[O];C=eW(N,C,V)}if(h){let P=b==="y"?"top":"left",O=b==="y"?"bottom":"right",N=M+x[P],V=M-x[O];M=eW(N,M,V)}let I=v.fn({...t,[T]:C,[b]:M});return{...I,data:{x:I.x-e,y:I.y-o,enabled:{[T]:f,[b]:h}}}}}};function CI(){return typeof window<"u"}function Bv(a){return Fgt(a)?(a.nodeName||"").toLowerCase():"#document"}function En(a){var t;return(a==null||(t=a.ownerDocument)==null?void 0:t.defaultView)||window}function Ws(a){var t;return(t=(Fgt(a)?a.ownerDocument:a.document)||window.document)==null?void 0:t.documentElement}function Fgt(a){return CI()?a instanceof Node||a instanceof En(a).Node:!1}function as(a){return CI()?a instanceof Element||a instanceof En(a).Element:!1}function Ys(a){return CI()?a instanceof HTMLElement||a instanceof En(a).HTMLElement:!1}function Bgt(a){return!CI()||typeof ShadowRoot>"u"?!1:a instanceof ShadowRoot||a instanceof En(a).ShadowRoot}var q$t=new Set(["inline","contents"]);function _y(a){let{overflow:t,overflowX:e,overflowY:o,display:l}=ns(a);return/auto|scroll|overlay|hidden|clip/.test(t+o+e)&&!q$t.has(l)}var $$t=new Set(["table","td","th"]);function Ugt(a){return $$t.has(Bv(a))}var K$t=[":popover-open",":modal"];function Ib(a){return K$t.some(t=>{try{return a.matches(t)}catch{return!1}})}var j$t=["transform","translate","scale","rotate","perspective"],J$t=["transform","translate","scale","rotate","perspective","filter"],Q$t=["paint","layout","strict","content"];function DI(a){let t=MI(),e=as(a)?ns(a):a;return j$t.some(o=>e[o]?e[o]!=="none":!1)||(e.containerType?e.containerType!=="normal":!1)||!t&&(e.backdropFilter?e.backdropFilter!=="none":!1)||!t&&(e.filter?e.filter!=="none":!1)||J$t.some(o=>(e.willChange||"").includes(o))||Q$t.some(o=>(e.contain||"").includes(o))}function Ggt(a){let t=Qu(a);for(;Ys(t)&&!Fv(t);){if(DI(t))return t;if(Ib(t))return null;t=Qu(t)}return null}function MI(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}var tKt=new Set(["html","body","#document"]);function Fv(a){return tKt.has(Bv(a))}function ns(a){return En(a).getComputedStyle(a)}function Eb(a){return as(a)?{scrollLeft:a.scrollLeft,scrollTop:a.scrollTop}:{scrollLeft:a.scrollX,scrollTop:a.scrollY}}function Qu(a){if(Bv(a)==="html")return a;let t=a.assignedSlot||a.parentNode||Bgt(a)&&a.host||Ws(a);return Bgt(t)?t.host:t}function Hgt(a){let t=Qu(a);return Fv(t)?a.ownerDocument?a.ownerDocument.body:a.body:Ys(t)&&_y(t)?t:Hgt(t)}function yy(a,t,e){var o;t===void 0&&(t=[]),e===void 0&&(e=!0);let l=Hgt(a),f=l===((o=a.ownerDocument)==null?void 0:o.body),h=En(l);if(f){let v=LI(h);return t.concat(h,h.visualViewport||[],_y(l)?l:[],v&&e?yy(v):[])}return t.concat(l,yy(l,[],e))}function LI(a){return a.parent&&Object.getPrototypeOf(a.parent)?a.frameElement:null}function Zgt(a){let t=ns(a),e=parseFloat(t.width)||0,o=parseFloat(t.height)||0,l=Ys(a),f=l?a.offsetWidth:e,h=l?a.offsetHeight:o,v=Cb(e)!==f||Cb(o)!==h;return v&&(e=f,o=h),{width:e,height:o,$:v}}function sW(a){return as(a)?a:a.contextElement}function xy(a){let t=sW(a);if(!Ys(t))return Hs(1);let e=t.getBoundingClientRect(),{width:o,height:l,$:f}=Zgt(t),h=(f?Cb(e.width):e.width)/o,v=(f?Cb(e.height):e.height)/l;return(!h||!Number.isFinite(h))&&(h=1),(!v||!Number.isFinite(v))&&(v=1),{x:h,y:v}}var eKt=Hs(0);function Xgt(a){let t=En(a);return!MI()||!t.visualViewport?eKt:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function rKt(a,t,e){return t===void 0&&(t=!1),!e||t&&e!==En(a)?!1:t}function Uv(a,t,e,o){t===void 0&&(t=!1),e===void 0&&(e=!1);let l=a.getBoundingClientRect(),f=sW(a),h=Hs(1);t&&(o?as(o)&&(h=xy(o)):h=xy(a));let v=rKt(f,e,o)?Xgt(f):Hs(0),g=(l.left+v.x)/h.x,y=(l.top+v.y)/h.y,x=l.width/h.x,b=l.height/h.y;if(f){let T=En(f),C=o&&as(o)?En(o):o,M=T,I=LI(M);for(;I&&o&&C!==M;){let P=xy(I),O=I.getBoundingClientRect(),N=ns(I),V=O.left+(I.clientLeft+parseFloat(N.paddingLeft))*P.x,F=O.top+(I.clientTop+parseFloat(N.paddingTop))*P.y;g*=P.x,y*=P.y,x*=P.x,b*=P.y,g+=V,y+=F,M=En(I),I=LI(M)}}return Vv({width:x,height:b,x:g,y})}function lW(a,t){let e=Eb(a).scrollLeft;return t?t.left+e:Uv(Ws(a)).left+e}function qgt(a,t,e){e===void 0&&(e=!1);let o=a.getBoundingClientRect(),l=o.left+t.scrollLeft-(e?0:lW(a,o)),f=o.top+t.scrollTop;return{x:l,y:f}}function iKt(a){let{elements:t,rect:e,offsetParent:o,strategy:l}=a,f=l==="fixed",h=Ws(o),v=t?Ib(t.floating):!1;if(o===h||v&&f)return e;let g={scrollLeft:0,scrollTop:0},y=Hs(1),x=Hs(0),b=Ys(o);if((b||!b&&!f)&&((Bv(o)!=="body"||_y(h))&&(g=Eb(o)),Ys(o))){let C=Uv(o);y=xy(o),x.x=C.x+o.clientLeft,x.y=C.y+o.clientTop}let T=h&&!b&&!f?qgt(h,g,!0):Hs(0);return{width:e.width*y.x,height:e.height*y.y,x:e.x*y.x-g.scrollLeft*y.x+x.x+T.x,y:e.y*y.y-g.scrollTop*y.y+x.y+T.y}}function aKt(a){return Array.from(a.getClientRects())}function nKt(a){let t=Ws(a),e=Eb(a),o=a.ownerDocument.body,l=ju(t.scrollWidth,t.clientWidth,o.scrollWidth,o.clientWidth),f=ju(t.scrollHeight,t.clientHeight,o.scrollHeight,o.clientHeight),h=-e.scrollLeft+lW(a),v=-e.scrollTop;return ns(o).direction==="rtl"&&(h+=ju(t.clientWidth,o.clientWidth)-l),{width:l,height:f,x:h,y:v}}function oKt(a,t){let e=En(a),o=Ws(a),l=e.visualViewport,f=o.clientWidth,h=o.clientHeight,v=0,g=0;if(l){f=l.width,h=l.height;let y=MI();(!y||y&&t==="fixed")&&(v=l.offsetLeft,g=l.offsetTop)}return{width:f,height:h,x:v,y:g}}var sKt=new Set(["absolute","fixed"]);function lKt(a,t){let e=Uv(a,!0,t==="fixed"),o=e.top+a.clientTop,l=e.left+a.clientLeft,f=Ys(a)?xy(a):Hs(1),h=a.clientWidth*f.x,v=a.clientHeight*f.y,g=l*f.x,y=o*f.y;return{width:h,height:v,x:g,y}}function Wgt(a,t,e){let o;if(t==="viewport")o=oKt(a,e);else if(t==="document")o=nKt(Ws(a));else if(as(t))o=lKt(t,e);else{let l=Xgt(a);o={x:t.x-l.x,y:t.y-l.y,width:t.width,height:t.height}}return Vv(o)}function $gt(a,t){let e=Qu(a);return e===t||!as(e)||Fv(e)?!1:ns(e).position==="fixed"||$gt(e,t)}function uKt(a,t){let e=t.get(a);if(e)return e;let o=yy(a,[],!1).filter(v=>as(v)&&Bv(v)!=="body"),l=null,f=ns(a).position==="fixed",h=f?Qu(a):a;for(;as(h)&&!Fv(h);){let v=ns(h),g=DI(h);!g&&v.position==="fixed"&&(l=null),(f?!g&&!l:!g&&v.position==="static"&&!!l&&sKt.has(l.position)||_y(h)&&!g&&$gt(a,h))?o=o.filter(x=>x!==h):l=v,h=Qu(h)}return t.set(a,o),o}function fKt(a){let{element:t,boundary:e,rootBoundary:o,strategy:l}=a,h=[...e==="clippingAncestors"?Ib(t)?[]:uKt(t,this._c):[].concat(e),o],v=h[0],g=h.reduce((y,x)=>{let b=Wgt(t,x,l);return y.top=ju(b.top,y.top),y.right=my(b.right,y.right),y.bottom=my(b.bottom,y.bottom),y.left=ju(b.left,y.left),y},Wgt(t,v,l));return{width:g.right-g.left,height:g.bottom-g.top,x:g.left,y:g.top}}function cKt(a){let{width:t,height:e}=Zgt(a);return{width:t,height:e}}function hKt(a,t,e){let o=Ys(t),l=Ws(t),f=e==="fixed",h=Uv(a,!0,f,t),v={scrollLeft:0,scrollTop:0},g=Hs(0);function y(){g.x=lW(l)}if(o||!o&&!f)if((Bv(t)!=="body"||_y(l))&&(v=Eb(t)),o){let C=Uv(t,!0,f,t);g.x=C.x+t.clientLeft,g.y=C.y+t.clientTop}else l&&y();f&&!o&&l&&y();let x=l&&!o&&!f?qgt(l,v):Hs(0),b=h.left+v.scrollLeft-g.x-x.x,T=h.top+v.scrollTop-g.y-x.y;return{x:b,y:T,width:h.width,height:h.height}}function oW(a){return ns(a).position==="static"}function Ygt(a,t){if(!Ys(a)||ns(a).position==="fixed")return null;if(t)return t(a);let e=a.offsetParent;return Ws(a)===e&&(e=e.ownerDocument.body),e}function Kgt(a,t){let e=En(a);if(Ib(a))return e;if(!Ys(a)){let l=Qu(a);for(;l&&!Fv(l);){if(as(l)&&!oW(l))return l;l=Qu(l)}return e}let o=Ygt(a,t);for(;o&&Ugt(o)&&oW(o);)o=Ygt(o,t);return o&&Fv(o)&&oW(o)&&!DI(o)?e:o||Ggt(a)||e}var pKt=async function(a){let t=this.getOffsetParent||Kgt,e=this.getDimensions,o=await e(a.floating);return{reference:hKt(a.reference,await t(a.floating),a.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function vKt(a){return ns(a).direction==="rtl"}var dKt={convertOffsetParentRelativeRectToViewportRelativeRect:iKt,getDocumentElement:Ws,getClippingRect:fKt,getOffsetParent:Kgt,getElementRects:pKt,getClientRects:aKt,getDimensions:cKt,getScale:xy,isElement:as,isRTL:vKt};function jgt(a,t){return a.x===t.x&&a.y===t.y&&a.width===t.width&&a.height===t.height}function gKt(a,t){let e=null,o,l=Ws(a);function f(){var v;clearTimeout(o),(v=e)==null||v.disconnect(),e=null}function h(v,g){v===void 0&&(v=!1),g===void 0&&(g=1),f();let y=a.getBoundingClientRect(),{left:x,top:b,width:T,height:C}=y;if(v||t(),!T||!C)return;let M=Db(b),I=Db(l.clientWidth-(x+T)),P=Db(l.clientHeight-(b+C)),O=Db(x),V={rootMargin:-M+"px "+-I+"px "+-P+"px "+-O+"px",threshold:ju(0,my(1,g))||1},F=!0;function U(H){let Z=H[0].intersectionRatio;if(Z!==g){if(!F)return h();Z?h(!1,Z):o=setTimeout(()=>{h(!1,1e-7)},1e3)}Z===1&&!jgt(y,a.getBoundingClientRect())&&h(),F=!1}try{e=new IntersectionObserver(U,{...V,root:l.ownerDocument})}catch{e=new IntersectionObserver(U,V)}e.observe(a)}return h(!0),f}function Jgt(a,t,e,o){o===void 0&&(o={});let{ancestorScroll:l=!0,ancestorResize:f=!0,elementResize:h=typeof ResizeObserver=="function",layoutShift:v=typeof IntersectionObserver=="function",animationFrame:g=!1}=o,y=sW(a),x=l||f?[...y?yy(y):[],...yy(t)]:[];x.forEach(O=>{l&&O.addEventListener("scroll",e,{passive:!0}),f&&O.addEventListener("resize",e)});let b=y&&v?gKt(y,e):null,T=-1,C=null;h&&(C=new ResizeObserver(O=>{let[N]=O;N&&N.target===y&&C&&(C.unobserve(t),cancelAnimationFrame(T),T=requestAnimationFrame(()=>{var V;(V=C)==null||V.observe(t)})),e()}),y&&!g&&C.observe(y),C.observe(t));let M,I=g?Uv(a):null;g&&P();function P(){let O=Uv(a);I&&!jgt(I,O)&&e(),I=O,M=requestAnimationFrame(P)}return e(),()=>{var O;x.forEach(N=>{l&&N.removeEventListener("scroll",e),f&&N.removeEventListener("resize",e)}),b?.(),(O=C)==null||O.disconnect(),C=null,g&&cancelAnimationFrame(M)}}var Qgt=zgt;var tmt=Vgt,emt=Ngt;var rmt=(a,t,e)=>{let o=new Map,l={platform:dKt,...e},f={...l.platform,_c:o};return kgt(a,t,{...l,platform:f})};var Pb,Rb,II,imt,Sy=class extends wr{constructor(){super(...arguments);Ce(this,II);Ce(this,Pb,null);Ce(this,Rb,null)}initialize(){this.orient=this.orient.bind(this)}connect(){this.cleanup=Jgt(this.buttonTarget,this.menuTarget,this.orient)}disconnect(){this.cleanup()}show(t){t&&t.preventDefault(),this.menuTarget.showPopover({source:this.buttonTarget}),this.orient(),this.loadOperationDetailsIfNeeded()}hide(){this.menuTarget.hidePopover()}toggle(t){t.preventDefault(),this.menuTarget.togglePopover({source:this.buttonTarget}),this.orient(),this.loadOperationDetailsIfNeeded()}debouncedShow(){clearTimeout(Oe(this,Rb)),gr(this,Pb,setTimeout(()=>this.show(),700))}debouncedHide(){clearTimeout(Oe(this,Pb)),gr(this,Rb,setTimeout(()=>this.hide(),300))}orient(){rmt(this.buttonTarget,this.menuTarget,Oe(this,II,imt)).then(({x:t,y:e})=>{this.menuTarget.style.setProperty("--popover-x",`${t}px`),this.menuTarget.style.setProperty("--popover-y",`${e}px`),this.menuTarget.classList.add("positioned")})}loadOperationDetailsIfNeeded(){let t=this.menuTarget.dataset.operationUrl;if(!t)return;let e=this.menuTarget.querySelector("turbo-frame");!e||!this.hasLoadingContent(e)||(e.src=t)}hasLoadingContent(t){return(t.textContent||"").includes("Loading operation details")}};Pb=new WeakMap,Rb=new WeakMap,II=new WeakSet,imt=function(){return{placement:this.placementValue,middleware:[Qgt(4),emt(),tmt({padding:4})]}},Nt(Sy,"targets",["button","menu"]),Nt(Sy,"values",{placement:{type:String,default:"top"}});var Ob=class extends wr{initialize(){this.search=this.debounce(this.search.bind(this),500)}debounce(a,t){let e;return function(...l){let f=()=>{clearTimeout(e),a(...l)};clearTimeout(e),e=setTimeout(f,t)}}submit(){this.element.requestSubmit()}search(){this.element.requestSubmit()}cancel(){this.cancelTarget?.click()}preventAttachment(a){a.preventDefault()}};Nt(Ob,"targets",["cancel"]);var by=class extends wr{constructor(){super(...arguments);Nt(this,"lastTurboFrameRequestAt",0);Nt(this,"pendingRequestTimeout",null);Nt(this,"pendingRequestData",null);Nt(this,"selectedColumnIndex",null);Nt(this,"originalSeriesOption",null)}connect(){this.handleChartInitialized=this.onChartInitialized.bind(this),document.addEventListener("chart:rendered",this.handleChartInitialized),window.RailsCharts?.charts?.[this.chartIdValue]&&this.setup()}disconnect(){document.removeEventListener("chart:rendered",this.handleChartInitialized),this.hasChartTarget&&this.chartTarget&&(this.chartTarget.removeEventListener("mousedown",this.handleChartMouseDown),this.chartTarget.removeEventListener("mouseup",this.handleChartMouseUp)),document.removeEventListener("mouseup",this.handleDocumentMouseUp),this.pendingRequestTimeout&&clearTimeout(this.pendingRequestTimeout)}onChartInitialized(t){t.detail.containerId===this.chartIdValue&&this.setup()}setup(){if(this.setupDone)return;let t=!1;try{t=!!this.chartTarget}catch{t=!1}this.chart=window.RailsCharts.charts[this.chartIdValue],!(!t||!this.chart)&&(this.visibleData=this.getVisibleData(),this.storeOriginalSeriesOption(),this.setupChartEventListeners(),this.setupDone=!0,t&&document.getElementById(this.chartIdValue)?.setAttribute("data-chart-rendered","true"),this.initializeColumnSelectionFromUrl())}setupChartEventListeners(){this.handleChartMouseDown=()=>{this.visibleData=this.getVisibleData()},this.chartTarget.addEventListener("mousedown",this.handleChartMouseDown),this.handleChartMouseUp=()=>{this.handleZoomChange()},this.chartTarget.addEventListener("mouseup",this.handleChartMouseUp),this.chart.on("datazoom",()=>{this.handleZoomChange()}),this.handleDocumentMouseUp=()=>{this.handleZoomChange()},document.addEventListener("mouseup",this.handleDocumentMouseUp),this.chart.on("click",t=>{this.handleColumnClick(t)})}getVisibleData(){try{let t=this.chart.getOption();if(!t.dataZoom||t.dataZoom.length===0)return{xAxis:[],series:[]};let e=t.dataZoom[1]||t.dataZoom[0];if(!t.xAxis||!t.xAxis[0]||!t.xAxis[0].data)return{xAxis:[],series:[]};if(!t.series||!t.series[0]||!t.series[0].data)return{xAxis:[],series:[]};let o=t.xAxis[0].data,l=t.series[0].data,f=e.startValue||0,h=e.endValue||o.length-1;return{xAxis:o.slice(f,h+1),series:l.slice(f,h+1)}}catch{return{xAxis:[],series:[]}}}handleZoomChange(){let t=this.getVisibleData(),e=t.xAxis.join(),o=this.visibleData.xAxis.join();e!==o&&(this.visibleData=t,this.updateUrlWithZoomParams(t),this.sendTurboFrameRequest(t))}updateUrlWithZoomParams(t){let e=new URL(window.location.href),o=new URLSearchParams(e.search),l=t.xAxis[0],f=t.xAxis[t.xAxis.length-1];o.set("zoom_start_time",l),o.set("zoom_end_time",f),e.search=o.toString(),window.history.replaceState({},"",e)}updatePaginationLimit(){let t=new URL(window.location.href),e=new URLSearchParams(t.search),o=this.paginationLimitTarget.value;e.set("limit",o),t.search=e.toString(),window.history.replaceState({},"",t)}sendTurboFrameRequest(t){let o=Date.now()-this.lastTurboFrameRequestAt;if(this.pendingRequestData=t,this.pendingRequestTimeout&&clearTimeout(this.pendingRequestTimeout),o>=1e3)this.executeTurboFrameRequest(t);else{let l=1e3-o;this.pendingRequestTimeout=setTimeout(()=>{this.executeTurboFrameRequest(this.pendingRequestData),this.pendingRequestTimeout=null},l)}}executeTurboFrameRequest(t){this.lastTurboFrameRequestAt=Date.now();let e=new URL(window.location.href),o=new URLSearchParams(e.search),l=t.xAxis[0],f=t.xAxis[t.xAxis.length-1];o.set("zoom_start_time",l),o.set("zoom_end_time",f),o.set("limit",this.paginationLimitTarget.value),e.search=o.toString(),fetch(e,{method:"GET",headers:{Accept:"text/vnd.turbo-stream.html, text/html","Turbo-Frame":this.indexTableTarget.id,"X-Requested-With":"XMLHttpRequest"}}).then(h=>h.text()).then(h=>{let v=this.indexTableTarget;if(v){let x=new DOMParser().parseFromString(h,"text/html").querySelector(`turbo-frame#${v.id}`);x?this.replaceFrameContent(v,x):this.replaceFrameContentFromHTML(v,h)}}).catch(h=>console.error("[IndexController] Fetch error:",h))}replaceFrameContent(t,e){try{for(;t.firstChild;)t.removeChild(t.firstChild);Array.from(e.childNodes).forEach(l=>{let f=l.cloneNode(!0);t.appendChild(f)})}catch(o){console.error("Error replacing frame content:",o),t.innerHTML=e.innerHTML}}replaceFrameContentFromHTML(t,e){try{let l=new DOMParser().parseFromString(e,"text/html");for(;t.firstChild;)t.removeChild(t.firstChild);Array.from(l.body.childNodes).forEach(h=>{let v=h.cloneNode(!0);t.appendChild(v)})}catch(o){console.error("Error parsing HTML content:",o),t.innerHTML=e}}handleColumnClick(t){let e=t.dataIndex;this.selectedColumnIndex===e?(this.resetColumnColors(),this.selectedColumnIndex=null,this.sendColumnDeselectionRequest()):(this.highlightColumn(e),this.selectedColumnIndex=e,this.sendColumnSelectionRequest(e))}highlightColumn(t){try{let e=this.chart.getOption();if(!e.series||!e.series[0]||!e.series[0].data)return;let o=e.series[0].data,f=this.chart.getOption().color?.[0]||"#5470c6";this.chart.setOption({series:[{data:o,itemStyle:{color:h=>h.dataIndex===t?f:"#cccccc"}}]})}catch(e){console.error("Error highlighting column:",e)}}storeOriginalSeriesOption(){try{let t=this.chart.getOption();if(t.series&&t.series[0]){let e=JSON.parse(JSON.stringify(t.series[0]));e.itemStyle&&typeof e.itemStyle.color=="function"&&delete e.itemStyle.color,this.originalSeriesOption=e}}catch(t){console.error("Error storing original series option:",t)}}resetColumnColors(){try{if(!this.originalSeriesOption){console.warn("No original series option stored, cannot reset properly");return}let e=this.chart.getOption().series[0].data,o={...this.originalSeriesOption,data:e};o.itemStyle||(o.itemStyle={}),o.itemStyle.color="#ffc91f",this.chart.setOption({series:[o]},!1)}catch(t){console.error("Error resetting column colors:",t)}}sendColumnSelectionRequest(t){let l=this.chart.getOption().xAxis[0].data[t];if(!l){console.error("Could not find timestamp for column index:",t);return}let f=new URL(window.location.href),h=new URLSearchParams(f.search);h.set("selected_column_time",l),h.set("limit",this.paginationLimitTarget.value),f.search=h.toString(),window.history.replaceState({},"",f),this.executeTurboFrameRequestForColumn(f)}sendColumnDeselectionRequest(){let t=new URL(window.location.href),e=new URLSearchParams(t.search);e.delete("selected_column_time"),e.set("limit",this.paginationLimitTarget.value),t.search=e.toString(),window.history.replaceState({},"",t),this.executeTurboFrameRequestForColumn(t)}executeTurboFrameRequestForColumn(t){fetch(t,{method:"GET",headers:{Accept:"text/vnd.turbo-stream.html, text/html","Turbo-Frame":this.indexTableTarget.id,"X-Requested-With":"XMLHttpRequest"}}).then(e=>e.text()).then(e=>{let o=this.indexTableTarget;if(o){let h=new DOMParser().parseFromString(e,"text/html").querySelector(`turbo-frame#${o.id}`);h?this.replaceFrameContent(o,h):this.replaceFrameContentFromHTML(o,e)}}).catch(e=>console.error("[IndexController] Column selection fetch error:",e))}initializeColumnSelectionFromUrl(){let e=new URLSearchParams(window.location.search).get("selected_column_time");if(e){let o=this.chart.getOption();if(!o.xAxis||!o.xAxis[0]||!o.xAxis[0].data)return;let l=o.xAxis[0].data,f=l.findIndex(h=>h.toString()===e);if(f===-1){let h=parseInt(e);f=l.findIndex(v=>parseInt(v)===h)}f!==-1&&(this.selectedColumnIndex=f,requestAnimationFrame(()=>{this.highlightColumn(f)}))}}};Nt(by,"targets",["chart","paginationLimit","indexTable"]),Nt(by,"values",{chartId:String});var EI=class extends wr{connect(){this.storageKey="color-scheme",this.html=document.documentElement;let a=localStorage.getItem(this.storageKey);a&&this.html.setAttribute("data-color-scheme",a)}toggle(a){a.preventDefault();let t=this.html.getAttribute("data-color-scheme")==="dark"?"light":"dark";this.html.setAttribute("data-color-scheme",t),localStorage.setItem(this.storageKey,t),document.dispatchEvent(new CustomEvent("rails-pulse:color-scheme-changed",{detail:{scheme:t}}))}};var wy=class extends wr{connect(){this.restorePaginationLimit()}updateLimit(){let a=this.limitTarget.value;sessionStorage.setItem(this.storageKeyValue,a);let t=this.element.closest("turbo-frame");if(t){let e=new URL(window.location);e.searchParams.set("limit",a),t.src=e.pathname+e.search}else{let e=new URL(window.location);e.searchParams.set("limit",a),window.location.href=e.pathname+e.search}}getCSRFToken(){let a=document.querySelector('meta[name="csrf-token"]');return a?a.getAttribute("content"):""}savePaginationLimit(){let a=this.limitTarget.value;sessionStorage.setItem(this.storageKeyValue,a)}restorePaginationLimit(){let a=sessionStorage.getItem(this.storageKeyValue);a&&this.limitTarget&&this.limitTarget.value!==a&&(this.limitTarget.value=a)}};Nt(wy,"targets",["limit"]),Nt(wy,"values",{storageKey:{type:String,default:"rails_pulse_pagination_limit"},url:String});var kb=class extends wr{connect(){this.updateTimestamp(),this.setupObserver(),this.setupTurboFrameListener()}disconnect(){this.observer&&this.observer.disconnect(),this.frameObserver&&this.frameObserver.disconnect(),this.documentObserver&&this.documentObserver.disconnect(),this.turboFrameListener&&document.removeEventListener("turbo:frame-load",this.turboFrameListener)}setupObserver(){if(this.targetFrameValue){this.updateTimestamp();let a=new MutationObserver(()=>{let t=document.getElementById(this.targetFrameValue);t&&(this.updateTimestamp(),this.frameObserver&&this.frameObserver.disconnect(),this.frameObserver=new MutationObserver(()=>{this.updateTimestamp()}),this.frameObserver.observe(t,{attributes:!0,attributeFilter:["data-cached-at"],childList:!0,subtree:!0}))});a.observe(document.body,{childList:!0,subtree:!0}),this.documentObserver=a}}cachedAtValueChanged(){this.updateTimestamp()}setupTurboFrameListener(){this.targetFrameValue&&(this.turboFrameListener=a=>{a.target&&a.target.id===this.targetFrameValue&&this.updateTimestamp()},document.addEventListener("turbo:frame-load",this.turboFrameListener))}updateTimestamp(){let a=this.cachedAtValue;if(!a&&this.targetFrameValue){let t=document.getElementById(this.targetFrameValue);t&&(a=t.dataset.cachedAt)}if(a)try{let e=new Date(a).toLocaleString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0});this.element.title=`Last updated: ${e}`}catch{this.element.title="Cache time unavailable"}else this.element.title="Cache time unavailable"}};Nt(kb,"values",{cachedAt:String,targetFrame:String});var Ty=class extends wr{connect(){this.renderIcon()}nameValueChanged(){this.renderIcon()}renderIcon(){this.clearIcon(),this.element.classList.add(...this.loadingClasses),this.element.classList.remove(...this.errorClasses,...this.loadedClasses);let a=this.nameValue;if(!a){this.handleError("Icon name is required");return}if(!window.RailsPulseIcons){this.handleError("RailsPulseIcons not loaded");return}let t=window.RailsPulseIcons.get(a);if(!t){this.handleError(`Icon '${a}' not found`);return}try{let e=this.createSVGElement(t);this.element.appendChild(e),this.element.classList.remove(...this.loadingClasses,...this.errorClasses),this.element.classList.add(...this.loadedClasses),this.element.setAttribute("aria-label",`${a} icon`)}catch(e){this.handleError(`Failed to render icon '${a}': ${e.message}`)}}createSVGElement(a){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");if(t.setAttribute("width",this.widthValue||"24"),t.setAttribute("height",this.heightValue||"24"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width",this.strokeWidthValue||"2"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round"),window.RailsPulseIcons.render){let f=document.createElement("div");if(window.RailsPulseIcons.render(this.nameValue,f,{width:this.widthValue||"24",height:this.heightValue||"24"})&&f.firstChild)return f.firstChild}let l=new DOMParser().parseFromString(`<svg xmlns="http://www.w3.org/2000/svg" width="${this.widthValue||"24"}" height="${this.heightValue||"24"}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="${this.strokeWidthValue||"2"}" stroke-linecap="round" stroke-linejoin="round">${a}</svg>`,"image/svg+xml").documentElement;if(l.nodeName==="parsererror")throw new Error("Invalid SVG content");return document.importNode(l,!0)}clearIcon(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild)}handleError(a){console.warn(`[Rails Pulse Icon Controller] ${a}`),this.clearIcon(),this.element.classList.remove(...this.loadingClasses,...this.loadedClasses),this.element.classList.add(...this.errorClasses),this.createErrorPlaceholder(),this.element.setAttribute("aria-label","Icon not available")}createErrorPlaceholder(){let a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("width",this.widthValue||"24"),a.setAttribute("height",this.heightValue||"24"),a.setAttribute("viewBox","0 0 24 24"),a.setAttribute("fill","currentColor"),a.setAttribute("opacity","0.3");let t=document.createElementNS("http://www.w3.org/2000/svg","rect");t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("x","2"),t.setAttribute("y","2"),t.setAttribute("rx","2"),a.appendChild(t),this.element.appendChild(a)}listAvailableIcons(){window.RailsPulseIcons?.list?console.log("Available icons:",window.RailsPulseIcons.list()):console.warn("RailsPulseIcons not loaded or list method not available")}};Nt(Ty,"values",{name:String,width:String,height:String,strokeWidth:String}),Nt(Ty,"classes",["loading","error","loaded"]);var PI=class extends wr{toggle(a){let t=a.target.closest("tr");if(!t||t.closest("tbody")!==this.element||t.classList.contains("operation-details-row"))return;let e=a.target.closest("td,th");if(e&&e.parentElement===t&&e.cellIndex===t.cells.length-1)return;a.preventDefault(),a.stopPropagation();let o=t.nextElementSibling;if(!o||o.tagName!=="TR"||!o.classList.contains("operation-details-row"))return;o.classList.contains("hidden")?this.expand(t,o):this.collapse(t,o)}expand(a,t){t.classList.remove("hidden");let e=a.querySelector(".chevron");e&&(e.style.transform="rotate(90deg)"),a.classList.add("expanded");let o=t.querySelector("turbo-frame");if(o&&!o.getAttribute("src")){let l=o.dataset.operationUrl;l&&o.setAttribute("src",l)}}collapse(a,t){t.classList.add("hidden");let e=a.querySelector(".chevron");e&&(e.style.transform="rotate(0deg)"),a.classList.remove("expanded")}};var Ay=class extends wr{connect(){this.collapse()}toggle(){this.element.classList.contains(this.collapsedClass)?this.expand():this.collapse()}collapse(){this.element.classList.add(this.collapsedClass),this.hasToggleTarget&&(this.toggleTarget.textContent="show more")}expand(){this.element.classList.remove(this.collapsedClass),this.hasToggleTarget&&(this.toggleTarget.textContent="show less")}};Nt(Ay,"targets",["content","toggle"]),Nt(Ay,"classes",["collapsed"]);var RI=class extends wr{updateUrl(a){let e=a.currentTarget.getAttribute("href");e&&window.history.replaceState({},"",e)}};var Oa=yI.start();Oa.debug=!1;window.Stimulus=Oa;window.echarts=UH;window.Turbo=L3;Oa.register("rails-pulse--context-menu",wb);Oa.register("rails-pulse--dialog",Tb);Oa.register("rails-pulse--menu",vy);Oa.register("rails-pulse--popover",Sy);Oa.register("rails-pulse--form",Ob);Oa.register("rails-pulse--index",by);Oa.register("rails-pulse--color-scheme",EI);Oa.register("rails-pulse--pagination",wy);Oa.register("rails-pulse--timezone",kb);Oa.register("rails-pulse--icon",Ty);Oa.register("rails-pulse--expandable-rows",PI);Oa.register("rails-pulse--collapsible",Ay);Oa.register("rails-pulse--table-sort",RI);document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll("turbo-frame[src]:not([complete])").forEach(t=>{let e=t.getAttribute("src");e&&(t.removeAttribute("src"),setTimeout(()=>t.setAttribute("src",e),10))})});var mKt=new MutationObserver(a=>{a.forEach(t=>{t.type==="childList"&&t.addedNodes.forEach(e=>{if(e.nodeType===1&&e.tagName==="TURBO-FRAME"&&e.hasAttribute("src")&&!e.hasAttribute("complete")){let o=e.getAttribute("src");o&&(e.removeAttribute("src"),setTimeout(()=>e.setAttribute("src",o),10))}})})});mKt.observe(document.body,{childList:!0,subtree:!0});qx("railspulse",{color:["#ffc91f","#ffde66","#fbedbf"],backgroundColor:"rgba(255,255,255,0)",textStyle:{},title:{textStyle:{color:"#666666"}},line:{lineStyle:{width:"3"},symbolSize:"8"},bar:{itemStyle:{barBorderWidth:0}}});window.addEventListener("resize",function(){window.RailsCharts&&window.RailsCharts.charts&&Object.keys(window.RailsCharts.charts).forEach(function(a){window.RailsCharts.charts[a].resize()})});function uW(){if(!window.RailsCharts||!window.RailsCharts.charts)return;let e=document.documentElement.getAttribute("data-color-scheme")==="dark"?"#ffffff":"#999999";Object.keys(window.RailsCharts.charts).forEach(function(o){let l=window.RailsCharts.charts[o];try{l.setOption({xAxis:{axisLabel:{color:e}},yAxis:{axisLabel:{color:e}}})}catch{}})}document.addEventListener("DOMContentLoaded",()=>{setTimeout(uW,50)});document.addEventListener("rails-pulse:color-scheme-changed",uW);window.initializeChartsInContainer=function(a){requestAnimationFrame(()=>{(a?document.getElementById(a):document).querySelectorAll("script").forEach(o=>{let f=o.textContent.match(/function\s+(init_rails_charts_[a-f0-9]+)/);f&&window[f[1]]&&window[f[1]]()}),setTimeout(uW,10)})};window.RailsPulse={application:Oa,version:"1.0.0"};})();
123
+ %o`,e,t,o),(l=window.onerror)===null||l===void 0||l.call(window,e,"",0,0,t)}logFormattedMessage(t,e,o={}){o=Object.assign({application:this},o),this.logger.groupCollapsed(`${t} #${e}`),this.logger.log("details:",Object.assign({},o)),this.logger.groupEnd()}};function T$t(){return new Promise(a=>{document.readyState=="loading"?document.addEventListener("DOMContentLoaded",()=>a()):a()})}function A$t(a){return bb(a,"classes").reduce((e,o)=>Object.assign(e,C$t(o)),{})}function C$t(a){return{[`${a}Class`]:{get(){let{classes:t}=this;if(t.has(a))return t.get(a);{let e=t.getAttributeName(a);throw new Error(`Missing attribute "${e}"`)}}},[`${a}Classes`]:{get(){return this.classes.getAll(a)}},[`has${Sb(a)}Class`]:{get(){return this.classes.has(a)}}}}function D$t(a){return bb(a,"outlets").reduce((e,o)=>Object.assign(e,M$t(o)),{})}function dgt(a,t,e){return a.application.getControllerForElementAndIdentifier(t,e)}function ggt(a,t,e){let o=dgt(a,t,e);if(o||(a.application.router.proposeToConnectScopeForElementAndIdentifier(t,e),o=dgt(a,t,e),o))return o}function M$t(a){let t=R3(a);return{[`${t}Outlet`]:{get(){let e=this.outlets.find(a),o=this.outlets.getSelectorForOutletName(a);if(e){let l=ggt(this,e,a);if(l)return l;throw new Error(`The provided outlet element is missing an outlet controller "${a}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${a}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${o}".`)}},[`${t}Outlets`]:{get(){let e=this.outlets.findAll(a);return e.length>0?e.map(o=>{let l=ggt(this,o,a);if(l)return l;console.warn(`The provided outlet element is missing an outlet controller "${a}" instance for host controller "${this.identifier}"`,o)}).filter(o=>o):[]}},[`${t}OutletElement`]:{get(){let e=this.outlets.find(a),o=this.outlets.getSelectorForOutletName(a);if(e)return e;throw new Error(`Missing outlet element "${a}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${o}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(a)}},[`has${Sb(t)}Outlet`]:{get(){return this.outlets.has(a)}}}}function L$t(a){return bb(a,"targets").reduce((e,o)=>Object.assign(e,I$t(o)),{})}function I$t(a){return{[`${a}Target`]:{get(){let t=this.targets.find(a);if(t)return t;throw new Error(`Missing target element "${a}" for "${this.identifier}" controller`)}},[`${a}Targets`]:{get(){return this.targets.findAll(a)}},[`has${Sb(a)}Target`]:{get(){return this.targets.has(a)}}}}function E$t(a){let t=h$t(a,"values"),e={valueDescriptorMap:{get(){return t.reduce((o,l)=>{let f=wgt(l,this.identifier),h=this.data.getAttributeNameForKey(f.key);return Object.assign(o,{[h]:f})},{})}}};return t.reduce((o,l)=>Object.assign(o,P$t(l)),e)}function P$t(a,t){let e=wgt(a,t),{key:o,name:l,reader:f,writer:h}=e;return{[l]:{get(){let v=this.data.get(o);return v!==null?f(v):e.defaultValue},set(v){v===void 0?this.data.delete(o):this.data.set(o,h(v))}},[`has${Sb(l)}`]:{get(){return this.data.has(o)||e.hasCustomDefaultValue}}}}function wgt([a,t],e){return N$t({controller:e,token:a,typeDefinition:t})}function _I(a){switch(a){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function xb(a){switch(typeof a){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray(a))return"array";if(Object.prototype.toString.call(a)==="[object Object]")return"object"}function R$t(a){let{controller:t,token:e,typeObject:o}=a,l=cgt(o.type),f=cgt(o.default),h=l&&f,v=l&&!f,g=!l&&f,y=_I(o.type),x=xb(a.typeObject.default);if(v)return y;if(g)return x;if(y!==x){let b=t?`${t}.${e}`:e;throw new Error(`The specified default value for the Stimulus Value "${b}" must match the defined type "${y}". The provided default value of "${o.default}" is of type "${x}".`)}if(h)return y}function O$t(a){let{controller:t,token:e,typeDefinition:o}=a,f=R$t({controller:t,token:e,typeObject:o}),h=xb(o),v=_I(o),g=f||h||v;if(g)return g;let y=t?`${t}.${o}`:e;throw new Error(`Unknown value type "${y}" for "${e}" value`)}function k$t(a){let t=_I(a);if(t)return mgt[t];let e=O3(a,"default"),o=O3(a,"type"),l=a;if(e)return l.default;if(o){let{type:f}=l,h=_I(f);if(h)return mgt[h]}return a}function N$t(a){let{token:t,typeDefinition:e}=a,o=`${xgt(t)}-value`,l=O$t(a);return{type:l,key:o,name:tW(o),get defaultValue(){return k$t(e)},get hasCustomDefaultValue(){return xb(e)!==void 0},reader:z$t[l],writer:ygt[l]||ygt.default}}var mgt={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},z$t={array(a){let t=JSON.parse(a);if(!Array.isArray(t))throw new TypeError(`expected value of type "array" but instead got value "${a}" of type "${xb(t)}"`);return t},boolean(a){return!(a=="0"||String(a).toLowerCase()=="false")},number(a){return Number(a.replace(/_/g,""))},object(a){let t=JSON.parse(a);if(t===null||typeof t!="object"||Array.isArray(t))throw new TypeError(`expected value of type "object" but instead got value "${a}" of type "${xb(t)}"`);return t},string(a){return a}},ygt={default:V$t,array:_gt,object:_gt};function _gt(a){return JSON.stringify(a)}function V$t(a){return`${a}`}var wr=class{constructor(t){this.context=t}static get shouldLoad(){return!0}static afterLoad(t,e){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(t,{target:e=this.element,detail:o={},prefix:l=this.identifier,bubbles:f=!0,cancelable:h=!0}={}){let v=l?`${l}:${t}`:t,g=new CustomEvent(v,{detail:o,bubbles:f,cancelable:h});return e.dispatchEvent(g),g}};wr.blessings=[A$t,L$t,E$t,D$t];wr.targets=[];wr.outlets=[];wr.values={};var wb=class extends wr{show(a){this.menuTarget.style.setProperty("--context-menu-x",`${a.clientX-5}px`),this.menuTarget.style.setProperty("--context-menu-y",`${a.clientY-5}px`),this.menuTarget.classList.add("positioned"),setTimeout(()=>this.menuTarget.showPopover(),150)}};Nt(wb,"targets",["menu"]);var Tb=class extends wr{show(){this.menuTarget.show()}showModal(){this.menuTarget.showModal()}close(){this.menuTarget.close()}closeOnClickOutside({target:a}){a.nodeName==="DIALOG"&&this.close()}};Nt(Tb,"targets",["menu"]);var dy,SI,Tgt,gy,xI,bI,Agt,wI,Cgt,TI,Dgt,vy=class extends wr{constructor(){super(...arguments);Ce(this,SI);Ce(this,gy);Ce(this,bI);Ce(this,wI);Ce(this,TI);Ce(this,dy,void 0)}initialize(){gr(this,dy,new IntersectionObserver(Be(this,SI,Tgt).bind(this)))}connect(){Oe(this,dy).observe(this.element)}disconnect(){Oe(this,dy).disconnect()}prev(){this.indexValue>0&&(this.indexValue--,Be(this,gy,xI).call(this))}next(){this.indexValue<Oe(this,TI,Dgt)&&(this.indexValue++,Be(this,gy,xI).call(this))}};dy=new WeakMap,SI=new WeakSet,Tgt=function([t]){t.isIntersecting&&(this.indexValue=0,Be(this,gy,xI).call(this))},gy=new WeakSet,xI=function(){Be(this,bI,Agt).call(this),Be(this,wI,Cgt).call(this)},bI=new WeakSet,Agt=function(){this.itemTargets.forEach((t,e)=>{t.tabIndex=e===this.indexValue?0:-1})},wI=new WeakSet,Cgt=function(){this.itemTargets[this.indexValue].focus()},TI=new WeakSet,Dgt=function(){return this.itemTargets.length-1},Nt(vy,"targets",["item"]),Nt(vy,"values",{index:Number});var my=Math.min,ju=Math.max,Cb=Math.round,Db=Math.floor,Hs=a=>({x:a,y:a}),B$t={left:"right",right:"left",bottom:"top",top:"bottom"},F$t={start:"end",end:"start"};function eW(a,t,e){return ju(a,my(t,e))}function Mb(a,t){return typeof a=="function"?a(t):a}function qc(a){return a.split("-")[0]}function Lb(a){return a.split("-")[1]}function rW(a){return a==="x"?"y":"x"}function iW(a){return a==="y"?"height":"width"}var U$t=new Set(["top","bottom"]);function Ju(a){return U$t.has(qc(a))?"y":"x"}function aW(a){return rW(Ju(a))}function Igt(a,t,e){e===void 0&&(e=!1);let o=Lb(a),l=aW(a),f=iW(l),h=l==="x"?o===(e?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[f]>t.floating[f]&&(h=Ab(h)),[h,Ab(h)]}function Egt(a){let t=Ab(a);return[AI(a),t,AI(t)]}function AI(a){return a.replace(/start|end/g,t=>F$t[t])}var Mgt=["left","right"],Lgt=["right","left"],G$t=["top","bottom"],H$t=["bottom","top"];function W$t(a,t,e){switch(a){case"top":case"bottom":return e?t?Lgt:Mgt:t?Mgt:Lgt;case"left":case"right":return t?G$t:H$t;default:return[]}}function Pgt(a,t,e,o){let l=Lb(a),f=W$t(qc(a),e==="start",o);return l&&(f=f.map(h=>h+"-"+l),t&&(f=f.concat(f.map(AI)))),f}function Ab(a){return a.replace(/left|right|bottom|top/g,t=>B$t[t])}function Y$t(a){return{top:0,right:0,bottom:0,left:0,...a}}function Rgt(a){return typeof a!="number"?Y$t(a):{top:a,right:a,bottom:a,left:a}}function Vv(a){let{x:t,y:e,width:o,height:l}=a;return{width:o,height:l,top:e,left:t,right:t+o,bottom:e+l,x:t,y:e}}function Ogt(a,t,e){let{reference:o,floating:l}=a,f=Ju(t),h=aW(t),v=iW(h),g=qc(t),y=f==="y",x=o.x+o.width/2-l.width/2,b=o.y+o.height/2-l.height/2,T=o[v]/2-l[v]/2,C;switch(g){case"top":C={x,y:o.y-l.height};break;case"bottom":C={x,y:o.y+o.height};break;case"right":C={x:o.x+o.width,y:b};break;case"left":C={x:o.x-l.width,y:b};break;default:C={x:o.x,y:o.y}}switch(Lb(t)){case"start":C[h]-=T*(e&&y?-1:1);break;case"end":C[h]+=T*(e&&y?-1:1);break}return C}var kgt=async(a,t,e)=>{let{placement:o="bottom",strategy:l="absolute",middleware:f=[],platform:h}=e,v=f.filter(Boolean),g=await(h.isRTL==null?void 0:h.isRTL(t)),y=await h.getElementRects({reference:a,floating:t,strategy:l}),{x,y:b}=Ogt(y,o,g),T=o,C={},M=0;for(let I=0;I<v.length;I++){let{name:P,fn:O}=v[I],{x:N,y:V,data:F,reset:U}=await O({x,y:b,initialPlacement:o,placement:T,strategy:l,middlewareData:C,rects:y,platform:h,elements:{reference:a,floating:t}});x=N??x,b=V??b,C={...C,[P]:{...C[P],...F}},U&&M<=50&&(M++,typeof U=="object"&&(U.placement&&(T=U.placement),U.rects&&(y=U.rects===!0?await h.getElementRects({reference:a,floating:t,strategy:l}):U.rects),{x,y:b}=Ogt(y,T,g)),I=-1)}return{x,y:b,placement:T,strategy:l,middlewareData:C}};async function nW(a,t){var e;t===void 0&&(t={});let{x:o,y:l,platform:f,rects:h,elements:v,strategy:g}=a,{boundary:y="clippingAncestors",rootBoundary:x="viewport",elementContext:b="floating",altBoundary:T=!1,padding:C=0}=Mb(t,a),M=Rgt(C),P=v[T?b==="floating"?"reference":"floating":b],O=Vv(await f.getClippingRect({element:(e=await(f.isElement==null?void 0:f.isElement(P)))==null||e?P:P.contextElement||await(f.getDocumentElement==null?void 0:f.getDocumentElement(v.floating)),boundary:y,rootBoundary:x,strategy:g})),N=b==="floating"?{x:o,y:l,width:h.floating.width,height:h.floating.height}:h.reference,V=await(f.getOffsetParent==null?void 0:f.getOffsetParent(v.floating)),F=await(f.isElement==null?void 0:f.isElement(V))?await(f.getScale==null?void 0:f.getScale(V))||{x:1,y:1}:{x:1,y:1},U=Vv(f.convertOffsetParentRelativeRectToViewportRelativeRect?await f.convertOffsetParentRelativeRectToViewportRelativeRect({elements:v,rect:N,offsetParent:V,strategy:g}):N);return{top:(O.top-U.top+M.top)/F.y,bottom:(U.bottom-O.bottom+M.bottom)/F.y,left:(O.left-U.left+M.left)/F.x,right:(U.right-O.right+M.right)/F.x}}var Ngt=function(a){return a===void 0&&(a={}),{name:"flip",options:a,async fn(t){var e,o;let{placement:l,middlewareData:f,rects:h,initialPlacement:v,platform:g,elements:y}=t,{mainAxis:x=!0,crossAxis:b=!0,fallbackPlacements:T,fallbackStrategy:C="bestFit",fallbackAxisSideDirection:M="none",flipAlignment:I=!0,...P}=Mb(a,t);if((e=f.arrow)!=null&&e.alignmentOffset)return{};let O=qc(l),N=Ju(v),V=qc(v)===v,F=await(g.isRTL==null?void 0:g.isRTL(y.floating)),U=T||(V||!I?[Ab(v)]:Egt(v)),H=M!=="none";!T&&H&&U.push(...Pgt(v,I,M,F));let Z=[v,...U],$=await nW(t,P),K=[],Q=((o=f.flip)==null?void 0:o.overflows)||[];if(x&&K.push($[O]),b){let ft=Igt(l,h,F);K.push($[ft[0]],$[ft[1]])}if(Q=[...Q,{placement:l,overflows:K}],!K.every(ft=>ft<=0)){var rt,nt;let ft=(((rt=f.flip)==null?void 0:rt.index)||0)+1,lt=Z[ft];if(lt&&(!(b==="alignment"?N!==Ju(lt):!1)||Q.every(st=>st.overflows[0]>0&&Ju(st.placement)===N)))return{data:{index:ft,overflows:Q},reset:{placement:lt}};let pt=(nt=Q.filter(xt=>xt.overflows[0]<=0).sort((xt,st)=>xt.overflows[1]-st.overflows[1])[0])==null?void 0:nt.placement;if(!pt)switch(C){case"bestFit":{var ot;let xt=(ot=Q.filter(st=>{if(H){let dt=Ju(st.placement);return dt===N||dt==="y"}return!0}).map(st=>[st.placement,st.overflows.filter(dt=>dt>0).reduce((dt,Et)=>dt+Et,0)]).sort((st,dt)=>st[1]-dt[1])[0])==null?void 0:ot[0];xt&&(pt=xt);break}case"initialPlacement":pt=v;break}if(l!==pt)return{reset:{placement:pt}}}return{}}}};var Z$t=new Set(["left","top"]);async function X$t(a,t){let{placement:e,platform:o,elements:l}=a,f=await(o.isRTL==null?void 0:o.isRTL(l.floating)),h=qc(e),v=Lb(e),g=Ju(e)==="y",y=Z$t.has(h)?-1:1,x=f&&g?-1:1,b=Mb(t,a),{mainAxis:T,crossAxis:C,alignmentAxis:M}=typeof b=="number"?{mainAxis:b,crossAxis:0,alignmentAxis:null}:{mainAxis:b.mainAxis||0,crossAxis:b.crossAxis||0,alignmentAxis:b.alignmentAxis};return v&&typeof M=="number"&&(C=v==="end"?M*-1:M),g?{x:C*x,y:T*y}:{x:T*y,y:C*x}}var zgt=function(a){return a===void 0&&(a=0),{name:"offset",options:a,async fn(t){var e,o;let{x:l,y:f,placement:h,middlewareData:v}=t,g=await X$t(t,a);return h===((e=v.offset)==null?void 0:e.placement)&&(o=v.arrow)!=null&&o.alignmentOffset?{}:{x:l+g.x,y:f+g.y,data:{...g,placement:h}}}}},Vgt=function(a){return a===void 0&&(a={}),{name:"shift",options:a,async fn(t){let{x:e,y:o,placement:l}=t,{mainAxis:f=!0,crossAxis:h=!1,limiter:v={fn:P=>{let{x:O,y:N}=P;return{x:O,y:N}}},...g}=Mb(a,t),y={x:e,y:o},x=await nW(t,g),b=Ju(qc(l)),T=rW(b),C=y[T],M=y[b];if(f){let P=T==="y"?"top":"left",O=T==="y"?"bottom":"right",N=C+x[P],V=C-x[O];C=eW(N,C,V)}if(h){let P=b==="y"?"top":"left",O=b==="y"?"bottom":"right",N=M+x[P],V=M-x[O];M=eW(N,M,V)}let I=v.fn({...t,[T]:C,[b]:M});return{...I,data:{x:I.x-e,y:I.y-o,enabled:{[T]:f,[b]:h}}}}}};function CI(){return typeof window<"u"}function Bv(a){return Fgt(a)?(a.nodeName||"").toLowerCase():"#document"}function En(a){var t;return(a==null||(t=a.ownerDocument)==null?void 0:t.defaultView)||window}function Ws(a){var t;return(t=(Fgt(a)?a.ownerDocument:a.document)||window.document)==null?void 0:t.documentElement}function Fgt(a){return CI()?a instanceof Node||a instanceof En(a).Node:!1}function as(a){return CI()?a instanceof Element||a instanceof En(a).Element:!1}function Ys(a){return CI()?a instanceof HTMLElement||a instanceof En(a).HTMLElement:!1}function Bgt(a){return!CI()||typeof ShadowRoot>"u"?!1:a instanceof ShadowRoot||a instanceof En(a).ShadowRoot}var q$t=new Set(["inline","contents"]);function _y(a){let{overflow:t,overflowX:e,overflowY:o,display:l}=ns(a);return/auto|scroll|overlay|hidden|clip/.test(t+o+e)&&!q$t.has(l)}var $$t=new Set(["table","td","th"]);function Ugt(a){return $$t.has(Bv(a))}var K$t=[":popover-open",":modal"];function Ib(a){return K$t.some(t=>{try{return a.matches(t)}catch{return!1}})}var j$t=["transform","translate","scale","rotate","perspective"],J$t=["transform","translate","scale","rotate","perspective","filter"],Q$t=["paint","layout","strict","content"];function DI(a){let t=MI(),e=as(a)?ns(a):a;return j$t.some(o=>e[o]?e[o]!=="none":!1)||(e.containerType?e.containerType!=="normal":!1)||!t&&(e.backdropFilter?e.backdropFilter!=="none":!1)||!t&&(e.filter?e.filter!=="none":!1)||J$t.some(o=>(e.willChange||"").includes(o))||Q$t.some(o=>(e.contain||"").includes(o))}function Ggt(a){let t=Qu(a);for(;Ys(t)&&!Fv(t);){if(DI(t))return t;if(Ib(t))return null;t=Qu(t)}return null}function MI(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}var tKt=new Set(["html","body","#document"]);function Fv(a){return tKt.has(Bv(a))}function ns(a){return En(a).getComputedStyle(a)}function Eb(a){return as(a)?{scrollLeft:a.scrollLeft,scrollTop:a.scrollTop}:{scrollLeft:a.scrollX,scrollTop:a.scrollY}}function Qu(a){if(Bv(a)==="html")return a;let t=a.assignedSlot||a.parentNode||Bgt(a)&&a.host||Ws(a);return Bgt(t)?t.host:t}function Hgt(a){let t=Qu(a);return Fv(t)?a.ownerDocument?a.ownerDocument.body:a.body:Ys(t)&&_y(t)?t:Hgt(t)}function yy(a,t,e){var o;t===void 0&&(t=[]),e===void 0&&(e=!0);let l=Hgt(a),f=l===((o=a.ownerDocument)==null?void 0:o.body),h=En(l);if(f){let v=LI(h);return t.concat(h,h.visualViewport||[],_y(l)?l:[],v&&e?yy(v):[])}return t.concat(l,yy(l,[],e))}function LI(a){return a.parent&&Object.getPrototypeOf(a.parent)?a.frameElement:null}function Zgt(a){let t=ns(a),e=parseFloat(t.width)||0,o=parseFloat(t.height)||0,l=Ys(a),f=l?a.offsetWidth:e,h=l?a.offsetHeight:o,v=Cb(e)!==f||Cb(o)!==h;return v&&(e=f,o=h),{width:e,height:o,$:v}}function sW(a){return as(a)?a:a.contextElement}function xy(a){let t=sW(a);if(!Ys(t))return Hs(1);let e=t.getBoundingClientRect(),{width:o,height:l,$:f}=Zgt(t),h=(f?Cb(e.width):e.width)/o,v=(f?Cb(e.height):e.height)/l;return(!h||!Number.isFinite(h))&&(h=1),(!v||!Number.isFinite(v))&&(v=1),{x:h,y:v}}var eKt=Hs(0);function Xgt(a){let t=En(a);return!MI()||!t.visualViewport?eKt:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function rKt(a,t,e){return t===void 0&&(t=!1),!e||t&&e!==En(a)?!1:t}function Uv(a,t,e,o){t===void 0&&(t=!1),e===void 0&&(e=!1);let l=a.getBoundingClientRect(),f=sW(a),h=Hs(1);t&&(o?as(o)&&(h=xy(o)):h=xy(a));let v=rKt(f,e,o)?Xgt(f):Hs(0),g=(l.left+v.x)/h.x,y=(l.top+v.y)/h.y,x=l.width/h.x,b=l.height/h.y;if(f){let T=En(f),C=o&&as(o)?En(o):o,M=T,I=LI(M);for(;I&&o&&C!==M;){let P=xy(I),O=I.getBoundingClientRect(),N=ns(I),V=O.left+(I.clientLeft+parseFloat(N.paddingLeft))*P.x,F=O.top+(I.clientTop+parseFloat(N.paddingTop))*P.y;g*=P.x,y*=P.y,x*=P.x,b*=P.y,g+=V,y+=F,M=En(I),I=LI(M)}}return Vv({width:x,height:b,x:g,y})}function lW(a,t){let e=Eb(a).scrollLeft;return t?t.left+e:Uv(Ws(a)).left+e}function qgt(a,t,e){e===void 0&&(e=!1);let o=a.getBoundingClientRect(),l=o.left+t.scrollLeft-(e?0:lW(a,o)),f=o.top+t.scrollTop;return{x:l,y:f}}function iKt(a){let{elements:t,rect:e,offsetParent:o,strategy:l}=a,f=l==="fixed",h=Ws(o),v=t?Ib(t.floating):!1;if(o===h||v&&f)return e;let g={scrollLeft:0,scrollTop:0},y=Hs(1),x=Hs(0),b=Ys(o);if((b||!b&&!f)&&((Bv(o)!=="body"||_y(h))&&(g=Eb(o)),Ys(o))){let C=Uv(o);y=xy(o),x.x=C.x+o.clientLeft,x.y=C.y+o.clientTop}let T=h&&!b&&!f?qgt(h,g,!0):Hs(0);return{width:e.width*y.x,height:e.height*y.y,x:e.x*y.x-g.scrollLeft*y.x+x.x+T.x,y:e.y*y.y-g.scrollTop*y.y+x.y+T.y}}function aKt(a){return Array.from(a.getClientRects())}function nKt(a){let t=Ws(a),e=Eb(a),o=a.ownerDocument.body,l=ju(t.scrollWidth,t.clientWidth,o.scrollWidth,o.clientWidth),f=ju(t.scrollHeight,t.clientHeight,o.scrollHeight,o.clientHeight),h=-e.scrollLeft+lW(a),v=-e.scrollTop;return ns(o).direction==="rtl"&&(h+=ju(t.clientWidth,o.clientWidth)-l),{width:l,height:f,x:h,y:v}}function oKt(a,t){let e=En(a),o=Ws(a),l=e.visualViewport,f=o.clientWidth,h=o.clientHeight,v=0,g=0;if(l){f=l.width,h=l.height;let y=MI();(!y||y&&t==="fixed")&&(v=l.offsetLeft,g=l.offsetTop)}return{width:f,height:h,x:v,y:g}}var sKt=new Set(["absolute","fixed"]);function lKt(a,t){let e=Uv(a,!0,t==="fixed"),o=e.top+a.clientTop,l=e.left+a.clientLeft,f=Ys(a)?xy(a):Hs(1),h=a.clientWidth*f.x,v=a.clientHeight*f.y,g=l*f.x,y=o*f.y;return{width:h,height:v,x:g,y}}function Wgt(a,t,e){let o;if(t==="viewport")o=oKt(a,e);else if(t==="document")o=nKt(Ws(a));else if(as(t))o=lKt(t,e);else{let l=Xgt(a);o={x:t.x-l.x,y:t.y-l.y,width:t.width,height:t.height}}return Vv(o)}function $gt(a,t){let e=Qu(a);return e===t||!as(e)||Fv(e)?!1:ns(e).position==="fixed"||$gt(e,t)}function uKt(a,t){let e=t.get(a);if(e)return e;let o=yy(a,[],!1).filter(v=>as(v)&&Bv(v)!=="body"),l=null,f=ns(a).position==="fixed",h=f?Qu(a):a;for(;as(h)&&!Fv(h);){let v=ns(h),g=DI(h);!g&&v.position==="fixed"&&(l=null),(f?!g&&!l:!g&&v.position==="static"&&!!l&&sKt.has(l.position)||_y(h)&&!g&&$gt(a,h))?o=o.filter(x=>x!==h):l=v,h=Qu(h)}return t.set(a,o),o}function fKt(a){let{element:t,boundary:e,rootBoundary:o,strategy:l}=a,h=[...e==="clippingAncestors"?Ib(t)?[]:uKt(t,this._c):[].concat(e),o],v=h[0],g=h.reduce((y,x)=>{let b=Wgt(t,x,l);return y.top=ju(b.top,y.top),y.right=my(b.right,y.right),y.bottom=my(b.bottom,y.bottom),y.left=ju(b.left,y.left),y},Wgt(t,v,l));return{width:g.right-g.left,height:g.bottom-g.top,x:g.left,y:g.top}}function cKt(a){let{width:t,height:e}=Zgt(a);return{width:t,height:e}}function hKt(a,t,e){let o=Ys(t),l=Ws(t),f=e==="fixed",h=Uv(a,!0,f,t),v={scrollLeft:0,scrollTop:0},g=Hs(0);function y(){g.x=lW(l)}if(o||!o&&!f)if((Bv(t)!=="body"||_y(l))&&(v=Eb(t)),o){let C=Uv(t,!0,f,t);g.x=C.x+t.clientLeft,g.y=C.y+t.clientTop}else l&&y();f&&!o&&l&&y();let x=l&&!o&&!f?qgt(l,v):Hs(0),b=h.left+v.scrollLeft-g.x-x.x,T=h.top+v.scrollTop-g.y-x.y;return{x:b,y:T,width:h.width,height:h.height}}function oW(a){return ns(a).position==="static"}function Ygt(a,t){if(!Ys(a)||ns(a).position==="fixed")return null;if(t)return t(a);let e=a.offsetParent;return Ws(a)===e&&(e=e.ownerDocument.body),e}function Kgt(a,t){let e=En(a);if(Ib(a))return e;if(!Ys(a)){let l=Qu(a);for(;l&&!Fv(l);){if(as(l)&&!oW(l))return l;l=Qu(l)}return e}let o=Ygt(a,t);for(;o&&Ugt(o)&&oW(o);)o=Ygt(o,t);return o&&Fv(o)&&oW(o)&&!DI(o)?e:o||Ggt(a)||e}var pKt=async function(a){let t=this.getOffsetParent||Kgt,e=this.getDimensions,o=await e(a.floating);return{reference:hKt(a.reference,await t(a.floating),a.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function vKt(a){return ns(a).direction==="rtl"}var dKt={convertOffsetParentRelativeRectToViewportRelativeRect:iKt,getDocumentElement:Ws,getClippingRect:fKt,getOffsetParent:Kgt,getElementRects:pKt,getClientRects:aKt,getDimensions:cKt,getScale:xy,isElement:as,isRTL:vKt};function jgt(a,t){return a.x===t.x&&a.y===t.y&&a.width===t.width&&a.height===t.height}function gKt(a,t){let e=null,o,l=Ws(a);function f(){var v;clearTimeout(o),(v=e)==null||v.disconnect(),e=null}function h(v,g){v===void 0&&(v=!1),g===void 0&&(g=1),f();let y=a.getBoundingClientRect(),{left:x,top:b,width:T,height:C}=y;if(v||t(),!T||!C)return;let M=Db(b),I=Db(l.clientWidth-(x+T)),P=Db(l.clientHeight-(b+C)),O=Db(x),V={rootMargin:-M+"px "+-I+"px "+-P+"px "+-O+"px",threshold:ju(0,my(1,g))||1},F=!0;function U(H){let Z=H[0].intersectionRatio;if(Z!==g){if(!F)return h();Z?h(!1,Z):o=setTimeout(()=>{h(!1,1e-7)},1e3)}Z===1&&!jgt(y,a.getBoundingClientRect())&&h(),F=!1}try{e=new IntersectionObserver(U,{...V,root:l.ownerDocument})}catch{e=new IntersectionObserver(U,V)}e.observe(a)}return h(!0),f}function Jgt(a,t,e,o){o===void 0&&(o={});let{ancestorScroll:l=!0,ancestorResize:f=!0,elementResize:h=typeof ResizeObserver=="function",layoutShift:v=typeof IntersectionObserver=="function",animationFrame:g=!1}=o,y=sW(a),x=l||f?[...y?yy(y):[],...yy(t)]:[];x.forEach(O=>{l&&O.addEventListener("scroll",e,{passive:!0}),f&&O.addEventListener("resize",e)});let b=y&&v?gKt(y,e):null,T=-1,C=null;h&&(C=new ResizeObserver(O=>{let[N]=O;N&&N.target===y&&C&&(C.unobserve(t),cancelAnimationFrame(T),T=requestAnimationFrame(()=>{var V;(V=C)==null||V.observe(t)})),e()}),y&&!g&&C.observe(y),C.observe(t));let M,I=g?Uv(a):null;g&&P();function P(){let O=Uv(a);I&&!jgt(I,O)&&e(),I=O,M=requestAnimationFrame(P)}return e(),()=>{var O;x.forEach(N=>{l&&N.removeEventListener("scroll",e),f&&N.removeEventListener("resize",e)}),b?.(),(O=C)==null||O.disconnect(),C=null,g&&cancelAnimationFrame(M)}}var Qgt=zgt;var tmt=Vgt,emt=Ngt;var rmt=(a,t,e)=>{let o=new Map,l={platform:dKt,...e},f={...l.platform,_c:o};return kgt(a,t,{...l,platform:f})};var Pb,Rb,II,imt,Sy=class extends wr{constructor(){super(...arguments);Ce(this,II);Ce(this,Pb,null);Ce(this,Rb,null)}initialize(){this.orient=this.orient.bind(this)}connect(){this.cleanup=Jgt(this.buttonTarget,this.menuTarget,this.orient)}disconnect(){this.cleanup()}show(t){t&&t.preventDefault(),this.menuTarget.showPopover({source:this.buttonTarget}),this.orient(),this.loadOperationDetailsIfNeeded()}hide(){this.menuTarget.hidePopover()}toggle(t){t.preventDefault(),this.menuTarget.togglePopover({source:this.buttonTarget}),this.orient(),this.loadOperationDetailsIfNeeded()}debouncedShow(){clearTimeout(Oe(this,Rb)),gr(this,Pb,setTimeout(()=>this.show(),700))}debouncedHide(){clearTimeout(Oe(this,Pb)),gr(this,Rb,setTimeout(()=>this.hide(),300))}orient(){rmt(this.buttonTarget,this.menuTarget,Oe(this,II,imt)).then(({x:t,y:e})=>{this.menuTarget.style.setProperty("--popover-x",`${t}px`),this.menuTarget.style.setProperty("--popover-y",`${e}px`),this.menuTarget.classList.add("positioned")})}loadOperationDetailsIfNeeded(){let t=this.menuTarget.dataset.operationUrl;if(!t)return;let e=this.menuTarget.querySelector("turbo-frame");!e||!this.hasLoadingContent(e)||(e.src=t)}hasLoadingContent(t){return(t.textContent||"").includes("Loading operation details")}};Pb=new WeakMap,Rb=new WeakMap,II=new WeakSet,imt=function(){return{placement:this.placementValue,middleware:[Qgt(4),emt(),tmt({padding:4})]}},Nt(Sy,"targets",["button","menu"]),Nt(Sy,"values",{placement:{type:String,default:"top"}});var Ob=class extends wr{initialize(){this.search=this.debounce(this.search.bind(this),500)}debounce(a,t){let e;return function(...l){let f=()=>{clearTimeout(e),a(...l)};clearTimeout(e),e=setTimeout(f,t)}}submit(){this.element.requestSubmit()}search(){this.element.requestSubmit()}cancel(){this.cancelTarget?.click()}preventAttachment(a){a.preventDefault()}};Nt(Ob,"targets",["cancel"]);var by=class extends wr{constructor(){super(...arguments);Nt(this,"lastTurboFrameRequestAt",0);Nt(this,"pendingRequestTimeout",null);Nt(this,"pendingRequestData",null);Nt(this,"selectedColumnIndex",null);Nt(this,"originalSeriesOption",null)}connect(){this.handleChartInitialized=this.onChartInitialized.bind(this),document.addEventListener("chart:rendered",this.handleChartInitialized),window.RailsCharts?.charts?.[this.chartIdValue]&&this.setup()}disconnect(){document.removeEventListener("chart:rendered",this.handleChartInitialized),this.hasChartTarget&&this.chartTarget&&(this.chartTarget.removeEventListener("mousedown",this.handleChartMouseDown),this.chartTarget.removeEventListener("mouseup",this.handleChartMouseUp)),document.removeEventListener("mouseup",this.handleDocumentMouseUp),this.pendingRequestTimeout&&clearTimeout(this.pendingRequestTimeout)}onChartInitialized(t){t.detail.containerId===this.chartIdValue&&this.setup()}setup(){if(this.setupDone)return;let t=!1;try{t=!!this.chartTarget}catch{t=!1}this.chart=window.RailsCharts.charts[this.chartIdValue],!(!t||!this.chart)&&(this.visibleData=this.getVisibleData(),this.storeOriginalSeriesOption(),this.setupChartEventListeners(),this.setupDone=!0,t&&document.getElementById(this.chartIdValue)?.setAttribute("data-chart-rendered","true"),this.initializeColumnSelectionFromUrl())}setupChartEventListeners(){this.handleChartMouseDown=()=>{this.visibleData=this.getVisibleData()},this.chartTarget.addEventListener("mousedown",this.handleChartMouseDown),this.handleChartMouseUp=()=>{this.handleZoomChange()},this.chartTarget.addEventListener("mouseup",this.handleChartMouseUp),this.chart.on("datazoom",()=>{this.handleZoomChange()}),this.handleDocumentMouseUp=()=>{this.handleZoomChange()},document.addEventListener("mouseup",this.handleDocumentMouseUp),this.chart.on("click",t=>{this.handleColumnClick(t)})}getVisibleData(){try{let t=this.chart.getOption();if(!t.dataZoom||t.dataZoom.length===0)return{xAxis:[],series:[]};let e=t.dataZoom[1]||t.dataZoom[0];if(!t.xAxis||!t.xAxis[0]||!t.xAxis[0].data)return{xAxis:[],series:[]};if(!t.series||!t.series[0]||!t.series[0].data)return{xAxis:[],series:[]};let o=t.xAxis[0].data,l=t.series[0].data,f=e.startValue||0,h=e.endValue||o.length-1;return{xAxis:o.slice(f,h+1),series:l.slice(f,h+1)}}catch{return{xAxis:[],series:[]}}}handleZoomChange(){let t=this.getVisibleData(),e=t.xAxis.join(),o=this.visibleData.xAxis.join();e!==o&&(this.visibleData=t,this.updateUrlWithZoomParams(t),this.sendTurboFrameRequest(t))}updateUrlWithZoomParams(t){let e=new URL(window.location.href),o=new URLSearchParams(e.search),l=t.xAxis[0],f=t.xAxis[t.xAxis.length-1];o.set("zoom_start_time",l),o.set("zoom_end_time",f),e.search=o.toString(),window.history.replaceState({},"",e)}updatePaginationLimit(){if(!this.hasPaginationLimitTarget)return;let t=new URL(window.location.href),e=new URLSearchParams(t.search),o=this.paginationLimitTarget.value;e.set("limit",o),t.search=e.toString(),window.history.replaceState({},"",t)}sendTurboFrameRequest(t){let o=Date.now()-this.lastTurboFrameRequestAt;if(this.pendingRequestData=t,this.pendingRequestTimeout&&clearTimeout(this.pendingRequestTimeout),o>=1e3)this.executeTurboFrameRequest(t);else{let l=1e3-o;this.pendingRequestTimeout=setTimeout(()=>{this.executeTurboFrameRequest(this.pendingRequestData),this.pendingRequestTimeout=null},l)}}executeTurboFrameRequest(t){this.lastTurboFrameRequestAt=Date.now();let e=new URL(window.location.href),o=new URLSearchParams(e.search),l=t.xAxis[0],f=t.xAxis[t.xAxis.length-1];o.set("zoom_start_time",l),o.set("zoom_end_time",f),this.hasPaginationLimitTarget&&o.set("limit",this.paginationLimitTarget.value),e.search=o.toString(),fetch(e,{method:"GET",headers:{Accept:"text/vnd.turbo-stream.html, text/html","Turbo-Frame":this.indexTableTarget.id,"X-Requested-With":"XMLHttpRequest"}}).then(h=>h.text()).then(h=>{let v=this.indexTableTarget;if(v){let x=new DOMParser().parseFromString(h,"text/html").querySelector(`turbo-frame#${v.id}`);x?this.replaceFrameContent(v,x):this.replaceFrameContentFromHTML(v,h)}}).catch(h=>console.error("[IndexController] Fetch error:",h))}replaceFrameContent(t,e){try{for(;t.firstChild;)t.removeChild(t.firstChild);Array.from(e.childNodes).forEach(l=>{let f=l.cloneNode(!0);t.appendChild(f)})}catch(o){console.error("Error replacing frame content:",o),t.innerHTML=e.innerHTML}}replaceFrameContentFromHTML(t,e){try{let l=new DOMParser().parseFromString(e,"text/html");for(;t.firstChild;)t.removeChild(t.firstChild);Array.from(l.body.childNodes).forEach(h=>{let v=h.cloneNode(!0);t.appendChild(v)})}catch(o){console.error("Error parsing HTML content:",o),t.innerHTML=e}}handleColumnClick(t){let e=t.dataIndex;this.selectedColumnIndex===e?(this.resetColumnColors(),this.selectedColumnIndex=null,this.sendColumnDeselectionRequest()):(this.highlightColumn(e),this.selectedColumnIndex=e,this.sendColumnSelectionRequest(e))}highlightColumn(t){try{let e=this.chart.getOption();if(!e.series||!e.series[0]||!e.series[0].data)return;let o=e.series[0].data,f=this.chart.getOption().color?.[0]||"#5470c6";this.chart.setOption({series:[{data:o,itemStyle:{color:h=>h.dataIndex===t?f:"#cccccc"}}]})}catch(e){console.error("Error highlighting column:",e)}}storeOriginalSeriesOption(){try{let t=this.chart.getOption();if(t.series&&t.series[0]){let e=JSON.parse(JSON.stringify(t.series[0]));e.itemStyle&&typeof e.itemStyle.color=="function"&&delete e.itemStyle.color,this.originalSeriesOption=e}}catch(t){console.error("Error storing original series option:",t)}}resetColumnColors(){try{if(!this.originalSeriesOption){console.warn("No original series option stored, cannot reset properly");return}let e=this.chart.getOption().series[0].data,o={...this.originalSeriesOption,data:e};o.itemStyle||(o.itemStyle={}),o.itemStyle.color="#ffc91f",this.chart.setOption({series:[o]},!1)}catch(t){console.error("Error resetting column colors:",t)}}sendColumnSelectionRequest(t){let l=this.chart.getOption().xAxis[0].data[t];if(!l){console.error("Could not find timestamp for column index:",t);return}let f=new URL(window.location.href),h=new URLSearchParams(f.search);h.set("selected_column_time",l),this.hasPaginationLimitTarget&&h.set("limit",this.paginationLimitTarget.value),f.search=h.toString(),window.history.replaceState({},"",f),this.executeTurboFrameRequestForColumn(f)}sendColumnDeselectionRequest(){let t=new URL(window.location.href),e=new URLSearchParams(t.search);e.delete("selected_column_time"),this.hasPaginationLimitTarget&&e.set("limit",this.paginationLimitTarget.value),t.search=e.toString(),window.history.replaceState({},"",t),this.executeTurboFrameRequestForColumn(t)}executeTurboFrameRequestForColumn(t){fetch(t,{method:"GET",headers:{Accept:"text/vnd.turbo-stream.html, text/html","Turbo-Frame":this.indexTableTarget.id,"X-Requested-With":"XMLHttpRequest"}}).then(e=>e.text()).then(e=>{let o=this.indexTableTarget;if(o){let h=new DOMParser().parseFromString(e,"text/html").querySelector(`turbo-frame#${o.id}`);h?this.replaceFrameContent(o,h):this.replaceFrameContentFromHTML(o,e)}}).catch(e=>console.error("[IndexController] Column selection fetch error:",e))}initializeColumnSelectionFromUrl(){let e=new URLSearchParams(window.location.search).get("selected_column_time");if(e){let o=this.chart.getOption();if(!o.xAxis||!o.xAxis[0]||!o.xAxis[0].data)return;let l=o.xAxis[0].data,f=l.findIndex(h=>h.toString()===e);if(f===-1){let h=parseInt(e);f=l.findIndex(v=>parseInt(v)===h)}f!==-1&&(this.selectedColumnIndex=f,requestAnimationFrame(()=>{this.highlightColumn(f)}))}}};Nt(by,"targets",["chart","paginationLimit","indexTable"]),Nt(by,"values",{chartId:String});var EI=class extends wr{connect(){this.storageKey="color-scheme",this.html=document.documentElement;let a=localStorage.getItem(this.storageKey);a&&this.html.setAttribute("data-color-scheme",a)}toggle(a){a.preventDefault();let t=this.html.getAttribute("data-color-scheme")==="dark"?"light":"dark";this.html.setAttribute("data-color-scheme",t),localStorage.setItem(this.storageKey,t),document.dispatchEvent(new CustomEvent("rails-pulse:color-scheme-changed",{detail:{scheme:t}}))}};var wy=class extends wr{connect(){this.restorePaginationLimit()}updateLimit(){let a=this.limitTarget.value;sessionStorage.setItem(this.storageKeyValue,a);let t=this.element.closest("turbo-frame");if(t){let e=new URL(window.location);e.searchParams.set("limit",a),t.src=e.pathname+e.search}else{let e=new URL(window.location);e.searchParams.set("limit",a),window.location.href=e.pathname+e.search}}getCSRFToken(){let a=document.querySelector('meta[name="csrf-token"]');return a?a.getAttribute("content"):""}savePaginationLimit(){let a=this.limitTarget.value;sessionStorage.setItem(this.storageKeyValue,a)}restorePaginationLimit(){let a=sessionStorage.getItem(this.storageKeyValue);a&&this.limitTarget&&this.limitTarget.value!==a&&(this.limitTarget.value=a)}};Nt(wy,"targets",["limit"]),Nt(wy,"values",{storageKey:{type:String,default:"rails_pulse_pagination_limit"},url:String});var kb=class extends wr{connect(){this.updateTimestamp(),this.setupObserver(),this.setupTurboFrameListener()}disconnect(){this.observer&&this.observer.disconnect(),this.frameObserver&&this.frameObserver.disconnect(),this.documentObserver&&this.documentObserver.disconnect(),this.turboFrameListener&&document.removeEventListener("turbo:frame-load",this.turboFrameListener)}setupObserver(){if(this.targetFrameValue){this.updateTimestamp();let a=new MutationObserver(()=>{let t=document.getElementById(this.targetFrameValue);t&&(this.updateTimestamp(),this.frameObserver&&this.frameObserver.disconnect(),this.frameObserver=new MutationObserver(()=>{this.updateTimestamp()}),this.frameObserver.observe(t,{attributes:!0,attributeFilter:["data-cached-at"],childList:!0,subtree:!0}))});a.observe(document.body,{childList:!0,subtree:!0}),this.documentObserver=a}}cachedAtValueChanged(){this.updateTimestamp()}setupTurboFrameListener(){this.targetFrameValue&&(this.turboFrameListener=a=>{a.target&&a.target.id===this.targetFrameValue&&this.updateTimestamp()},document.addEventListener("turbo:frame-load",this.turboFrameListener))}updateTimestamp(){let a=this.cachedAtValue;if(!a&&this.targetFrameValue){let t=document.getElementById(this.targetFrameValue);t&&(a=t.dataset.cachedAt)}if(a)try{let e=new Date(a).toLocaleString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0});this.element.title=`Last updated: ${e}`}catch{this.element.title="Cache time unavailable"}else this.element.title="Cache time unavailable"}};Nt(kb,"values",{cachedAt:String,targetFrame:String});var Ty=class extends wr{connect(){this.renderIcon()}nameValueChanged(){this.renderIcon()}renderIcon(){this.clearIcon(),this.element.classList.add(...this.loadingClasses),this.element.classList.remove(...this.errorClasses,...this.loadedClasses);let a=this.nameValue;if(!a){this.handleError("Icon name is required");return}if(!window.RailsPulseIcons){this.handleError("RailsPulseIcons not loaded");return}let t=window.RailsPulseIcons.get(a);if(!t){this.handleError(`Icon '${a}' not found`);return}try{let e=this.createSVGElement(t);this.element.appendChild(e),this.element.classList.remove(...this.loadingClasses,...this.errorClasses),this.element.classList.add(...this.loadedClasses),this.element.setAttribute("aria-label",`${a} icon`)}catch(e){this.handleError(`Failed to render icon '${a}': ${e.message}`)}}createSVGElement(a){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");if(t.setAttribute("width",this.widthValue||"24"),t.setAttribute("height",this.heightValue||"24"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width",this.strokeWidthValue||"2"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round"),window.RailsPulseIcons.render){let f=document.createElement("div");if(window.RailsPulseIcons.render(this.nameValue,f,{width:this.widthValue||"24",height:this.heightValue||"24"})&&f.firstChild)return f.firstChild}let l=new DOMParser().parseFromString(`<svg xmlns="http://www.w3.org/2000/svg" width="${this.widthValue||"24"}" height="${this.heightValue||"24"}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="${this.strokeWidthValue||"2"}" stroke-linecap="round" stroke-linejoin="round">${a}</svg>`,"image/svg+xml").documentElement;if(l.nodeName==="parsererror")throw new Error("Invalid SVG content");return document.importNode(l,!0)}clearIcon(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild)}handleError(a){console.warn(`[Rails Pulse Icon Controller] ${a}`),this.clearIcon(),this.element.classList.remove(...this.loadingClasses,...this.loadedClasses),this.element.classList.add(...this.errorClasses),this.createErrorPlaceholder(),this.element.setAttribute("aria-label","Icon not available")}createErrorPlaceholder(){let a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("width",this.widthValue||"24"),a.setAttribute("height",this.heightValue||"24"),a.setAttribute("viewBox","0 0 24 24"),a.setAttribute("fill","currentColor"),a.setAttribute("opacity","0.3");let t=document.createElementNS("http://www.w3.org/2000/svg","rect");t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("x","2"),t.setAttribute("y","2"),t.setAttribute("rx","2"),a.appendChild(t),this.element.appendChild(a)}listAvailableIcons(){window.RailsPulseIcons?.list?console.log("Available icons:",window.RailsPulseIcons.list()):console.warn("RailsPulseIcons not loaded or list method not available")}};Nt(Ty,"values",{name:String,width:String,height:String,strokeWidth:String}),Nt(Ty,"classes",["loading","error","loaded"]);var PI=class extends wr{toggle(a){let t=a.target.closest("tr");if(!t||t.closest("tbody")!==this.element||t.classList.contains("operation-details-row"))return;let e=a.target.closest("td,th");if(e&&e.parentElement===t&&e.cellIndex===t.cells.length-1)return;a.preventDefault(),a.stopPropagation();let o=t.nextElementSibling;if(!o||o.tagName!=="TR"||!o.classList.contains("operation-details-row"))return;o.classList.contains("hidden")?this.expand(t,o):this.collapse(t,o)}expand(a,t){t.classList.remove("hidden");let e=a.querySelector(".chevron");e&&(e.style.transform="rotate(90deg)"),a.classList.add("expanded");let o=t.querySelector("turbo-frame");if(o&&!o.getAttribute("src")){let l=o.dataset.operationUrl;l&&o.setAttribute("src",l)}}collapse(a,t){t.classList.add("hidden");let e=a.querySelector(".chevron");e&&(e.style.transform="rotate(0deg)"),a.classList.remove("expanded")}};var Ay=class extends wr{connect(){this.collapse()}toggle(){this.element.classList.contains(this.collapsedClass)?this.expand():this.collapse()}collapse(){this.element.classList.add(this.collapsedClass),this.hasToggleTarget&&(this.toggleTarget.textContent="show more")}expand(){this.element.classList.remove(this.collapsedClass),this.hasToggleTarget&&(this.toggleTarget.textContent="show less")}};Nt(Ay,"targets",["content","toggle"]),Nt(Ay,"classes",["collapsed"]);var RI=class extends wr{updateUrl(a){let e=a.currentTarget.getAttribute("href");e&&window.history.replaceState({},"",e)}};var Oa=yI.start();Oa.debug=!1;window.Stimulus=Oa;window.echarts=UH;window.Turbo=L3;Oa.register("rails-pulse--context-menu",wb);Oa.register("rails-pulse--dialog",Tb);Oa.register("rails-pulse--menu",vy);Oa.register("rails-pulse--popover",Sy);Oa.register("rails-pulse--form",Ob);Oa.register("rails-pulse--index",by);Oa.register("rails-pulse--color-scheme",EI);Oa.register("rails-pulse--pagination",wy);Oa.register("rails-pulse--timezone",kb);Oa.register("rails-pulse--icon",Ty);Oa.register("rails-pulse--expandable-rows",PI);Oa.register("rails-pulse--collapsible",Ay);Oa.register("rails-pulse--table-sort",RI);document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll("turbo-frame[src]:not([complete])").forEach(t=>{let e=t.getAttribute("src");e&&(t.removeAttribute("src"),setTimeout(()=>t.setAttribute("src",e),10))})});var mKt=new MutationObserver(a=>{a.forEach(t=>{t.type==="childList"&&t.addedNodes.forEach(e=>{if(e.nodeType===1&&e.tagName==="TURBO-FRAME"&&e.hasAttribute("src")&&!e.hasAttribute("complete")){let o=e.getAttribute("src");o&&(e.removeAttribute("src"),setTimeout(()=>e.setAttribute("src",o),10))}})})});mKt.observe(document.body,{childList:!0,subtree:!0});qx("railspulse",{color:["#ffc91f","#ffde66","#fbedbf"],backgroundColor:"rgba(255,255,255,0)",textStyle:{},title:{textStyle:{color:"#666666"}},line:{lineStyle:{width:"3"},symbolSize:"8"},bar:{itemStyle:{barBorderWidth:0}}});window.addEventListener("resize",function(){window.RailsCharts&&window.RailsCharts.charts&&Object.keys(window.RailsCharts.charts).forEach(function(a){window.RailsCharts.charts[a].resize()})});function uW(){if(!window.RailsCharts||!window.RailsCharts.charts)return;let e=document.documentElement.getAttribute("data-color-scheme")==="dark"?"#ffffff":"#999999";Object.keys(window.RailsCharts.charts).forEach(function(o){let l=window.RailsCharts.charts[o];try{l.setOption({xAxis:{axisLabel:{color:e}},yAxis:{axisLabel:{color:e}}})}catch{}})}document.addEventListener("DOMContentLoaded",()=>{setTimeout(uW,50)});document.addEventListener("rails-pulse:color-scheme-changed",uW);window.initializeChartsInContainer=function(a){requestAnimationFrame(()=>{(a?document.getElementById(a):document).querySelectorAll("script").forEach(o=>{let f=o.textContent.match(/function\s+(init_rails_charts_[a-f0-9]+)/);f&&window[f[1]]&&window[f[1]]()}),setTimeout(uW,10)})};window.RailsPulse={application:Oa,version:"1.0.0"};})();
124
124
  /*! Bundled license information:
125
125
 
126
126
  echarts/dist/echarts.js: