turbo_boost-elements 0.0.16 → 0.0.18
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.
- checksums.yaml +4 -4
- data/README.md +14 -12
- data/app/assets/builds/@turbo-boost/elements.js +21 -42
- data/app/assets/builds/@turbo-boost/elements.js.map +4 -4
- data/app/assets/builds/@turbo-boost/elements.metafile.json +1 -1
- data/app/helpers/turbo_boost/elements/application_helper.rb +2 -2
- data/app/javascript/index.js +2 -1
- data/app/javascript/version.js +1 -0
- data/lib/turbo_boost/elements/engine.rb +8 -0
- data/lib/turbo_boost/elements/version.rb +1 -1
- metadata +6 -6
- data/app/assets/builds/@turbo-boost/commands.metafile.json +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 85e407fb37fba9803a7f0e752a0cb44db5cec3075b707a0cc1bd427a5e2b5f85
|
|
4
|
+
data.tar.gz: 9db8b25a35ab39d05a6ad8a6bf37570db9e5edc6ea0c3b255a1fb5ba907befb6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c609c49ac6331f521029838cf5c4ba0272b423d9632568be15fbe1235db7c6f70c4396163ce01ad36d75f73918d4eef2ab4d93071a56c3e5016e2fda8914c32e
|
|
7
|
+
data.tar.gz: 9c9bab6ed2ebb5134a3a9c06c1b7e56bba1e7f33c5423ac4f21476a1f468e9fd3e41089b3751e25f45ae092b138b09336f49981377506c9d7938f11c131e70bc
|
data/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
</h1>
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="http://blog.codinghorror.com/the-best-code-is-no-code-at-all/">
|
|
7
|
-
<img alt="Lines of Code" src="https://img.shields.io/badge/loc-
|
|
7
|
+
<img alt="Lines of Code" src="https://img.shields.io/badge/loc-574-47d299.svg" />
|
|
8
8
|
</a>
|
|
9
9
|
<a href="https://codeclimate.com/github/hopsoft/turbo_boost-elements/maintainability">
|
|
10
10
|
<img src="https://api.codeclimate.com/v1/badges/7aac6daed3e4032e292e/maintainability" />
|
|
@@ -78,12 +78,12 @@ Pre-built easy to use reactive TurboBoost elements for Rails/Hotwire apps.
|
|
|
78
78
|
|
|
79
79
|
## Dependencies
|
|
80
80
|
|
|
81
|
-
- [ruby](https://www.ruby-lang.org/) `>=
|
|
82
|
-
- [rails](https://rubygems.org/gems/rails) `>=6.1`
|
|
83
|
-
- [turbo-rails](https://rubygems.org/gems/turbo-rails) `>=1.1`
|
|
84
|
-
- [@hotwired/turbo](https://
|
|
85
|
-
- [
|
|
86
|
-
- [
|
|
81
|
+
- [ruby](https://www.ruby-lang.org/) `>= 3.0`
|
|
82
|
+
- [rails](https://rubygems.org/gems/rails) `>= 6.1`
|
|
83
|
+
- [turbo-rails](https://rubygems.org/gems/turbo-rails) `>= 1.1`
|
|
84
|
+
- [@hotwired/turbo-rails](https://www.npmjs.com/package/@hotwired/turbo-rails) `>= 7.2`
|
|
85
|
+
- [turbo_boost-commands](https://rubygems.org/gems/turbo_boost-commands) `>= 0.1.1`
|
|
86
|
+
- [@turbo-boost/commands](https://www.npmjs.com/package/@turbo-boost/commands) `>= 0.1.1`
|
|
87
87
|
|
|
88
88
|
## Setup
|
|
89
89
|
|
|
@@ -195,14 +195,16 @@ TurboBoost.devtools.start()
|
|
|
195
195
|
|
|
196
196
|
## Releasing
|
|
197
197
|
|
|
198
|
-
1. Run `
|
|
199
|
-
1.
|
|
198
|
+
1. Run `npm install` and `bundle` to pick up the latest
|
|
199
|
+
1. Update the version number consistently in the following files:
|
|
200
|
+
* `lib/turbo_boost/elements/version.rb` - pre-release versions should use `.preN`
|
|
201
|
+
* `app/javascript/version.js` - pre-release versions use `-preN`
|
|
202
|
+
* `package.json` - pre-release versions use `-preN`
|
|
200
203
|
1. Run `bin/standardize`
|
|
201
|
-
1. Run `rake build` and `
|
|
204
|
+
1. Run `rake build` and `npm run build`
|
|
202
205
|
1. Commit and push changes to GitHub
|
|
203
206
|
1. Run `rake release`
|
|
204
|
-
1. Run `
|
|
205
|
-
1. Yarn will prompt you for the new version. Pre-release versions use `-preN`
|
|
207
|
+
1. Run `npm publish --access public`
|
|
206
208
|
1. Commit and push changes to GitHub
|
|
207
209
|
1. Create a new release on GitHub ([here](https://github.com/hopsoft/turbo_boost-elements/releases)) and generate the changelog for the stable release for it
|
|
208
210
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Fe=Object.defineProperty,We=Object.defineProperties,Xe=Object.getOwnPropertyDescriptors,ue=Object.getOwnPropertySymbols,Je=Object.prototype.hasOwnProperty,Ge=Object.prototype.propertyIsEnumerable,ce=(e,t,o)=>t in e?Fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,l=(e,t)=>{for(var o in t||(t={}))Je.call(t,o)&&ce(e,o,t[o]);if(ue)for(var o of ue(t))Ge.call(t,o)&&ce(e,o,t[o]);return e},p=(e,t)=>We(e,Xe(t)),Ve=class{get element(){return document.querySelector('meta[name="turbo-boost"]')}get token(){return this.element.getAttribute("content")}get busy(){return this.element.dataset.busy==="true"}set busy(e){return this.element.dataset.busy=!!e}},d=new Ve,u={start:"turbo-boost:command:start",success:"turbo-boost:command:success",finish:"turbo-boost:command:finish",abort:"turbo-boost:command:abort",clientError:"turbo-boost:command:client-error",serverError:"turbo-boost:command:server-error"},v={stateLoad:"turbo-boost:state:load",stateChange:"turbo-boost:state:change"},g=l(l({},u),v);function h(e,t,o={}){return new Promise(r=>{o=o||{},o.detail=o.detail||{},t=t||document;let n=new CustomEvent(e,p(l({},o),{bubbles:!0}));t.dispatchEvent(n),r(n)})}var W;function q(e,t=null){if(!e||typeof e!="object")return e;let o=new Proxy(e,{deleteProperty(r,n){return delete r[n],h(v.stateChange,d.element,{detail:{state:W}}),!0},set(r,n,i,s){return r[n]=q(i,this),h(v.stateChange,d.element,{detail:{state:W}}),!0}});if(Array.isArray(e))e.forEach((r,n)=>e[n]=q(r,o));else if(typeof e=="object")for(let[r,n]of Object.entries(e))e[r]=q(n,o);return t||(W=o),o}var Ue=q,U,k,$,he;function pe(){if(!d.element)return T();let e=atob(d.element.dataset.state);$={},k=Ue(JSON.parse(e)),U=l({},k),delete d.element.dataset.clientStateChange,setTimeout(()=>h(v.stateLoad,d.element,{detail:{state:k}}))}function T(){clearTimeout(he),he=setTimeout(pe,10)}U||pe();addEventListener("DOMContentLoaded",T);addEventListener("load",T);addEventListener("turbo:load",T);addEventListener("turbo:frame-load",T);addEventListener(u.success,T);addEventListener(v.stateChange,e=>{$={};for(let[t,o]of Object.entries(k))U[t]!==o&&($[t]=o);d.element.dataset.clientStateChange=!0,d.element.dataset.state=btoa(JSON.stringify(k))});var M={events:v,get current(){return k},get delta(){return $},get payloadChunks(){return btoa(JSON.stringify($)).match(/.{1,2000}/g)}};function Ke(e){let t="<html",o="</html",r=e.indexOf(t),n=e.lastIndexOf(o);if(r>=0&&n>=0){let i=e.slice(e.indexOf(">",r)+1,n);document.documentElement.innerHTML=i}}function Qe(e){document.body.insertAdjacentHTML("beforeend",e)}var O={append:Qe,replaceDocument:Ke},P={};function Ye(e){P[e.id]=e}function Ze(e){delete P[e]}var fe={add:Ye,remove:Ze,get commands(){return[...Object.values(P)]},get length(){return Object.keys(P).length}};function ve(e){e.detail.endedAt=Date.now(),e.detail.milliseconds=e.detail.endedAt-e.detail.startedAt,setTimeout(()=>h(u.finish,e.target,{detail:e.detail}),25)}addEventListener(u.serverError,ve);addEventListener(u.success,ve);addEventListener(u.finish,e=>fe.remove(e.detail.id),!0);var K={events:u},J={};addEventListener("turbo:before-fetch-request",e=>{let t=e.target.closest("turbo-frame"),{fetchOptions:o}=e.detail;if(d.busy){let r=["text/vnd.turbo-boost.html",o.headers.Accept];r=r.filter(n=>n&&n.trim().length>0).join(", "),o.headers.Accept=r,o.headers["TurboBoost-Token"]=d.token}M.payloadChunks.forEach((r,n)=>{o.headers[`TurboBoost-State-${n.toString().padStart(4,"0")}`]=r})});addEventListener("turbo:before-fetch-response",e=>{let t=e.target.closest("turbo-frame"),{fetchResponse:o}=e.detail;if(t&&(J[t.id]=t.src),o.header("TurboBoost")){if(o.statusCode<200||o.statusCode>399){let r=`Server returned a ${o.statusCode} status code! TurboBoost Commands require 2XX-3XX status codes.`;h(K.events.clientError,document,{detail:p(l({},e.detail),{error:r})},!0)}o.header("TurboBoost")==="Append"&&(e.preventDefault(),o.responseText.then(r=>O.append(r)))}});addEventListener("turbo:frame-load",e=>{let t=e.target.closest("turbo-frame");t.dataset.turboBoostSrc=J[t.id]||t.src||t.dataset.turboBoostSrc,delete J[t.id]});var et={frameAttribute:"data-turbo-frame",methodAttribute:"data-turbo-method",commandAttribute:"data-turbo-command",confirmAttribute:"data-turbo-confirm"},c=l({},et),ye={method:e=>Promise.resolve(confirm(e))},tt=e=>e.detail.driver==="method",ot=e=>{if(e.detail.driver!=="form")return!1;let t=e.target,o=t.closest("turbo-frame"),r=t.closest(`[${c.frameAttribute}]`);return!!(o||r)},rt=e=>tt(e)||ot(e);document.addEventListener(u.start,async e=>{let t=e.target.getAttribute(c.confirmAttribute);!t||(e.detail.confirmation=!0,rt(e))||await ye.method(t)||e.preventDefault()});var nt=ye,b=[],G;function it(e,t){let o=b.find(r=>r.name===e);return o&&b.splice(b.indexOf(o),1),b=[{name:e,selectors:t},...b],document.removeEventListener(e,G,!0),document.addEventListener(e,G,!0),l({},b.find(r=>r.name===e))}function st(e){return b.find(t=>t.selectors.find(o=>Array.from(document.querySelectorAll(o)).find(r=>r===e)))}function lt(e,t){let o=st(t);return o&&o.name===e}var f={register:it,isRegisteredForElement:lt,get events(){return[...b]},set handler(e){G=e}};function at(e){return e.closest(`[${c.commandAttribute}]`)}function dt(e){return e.closest("turbo-frame[src]")||e.closest("turbo-frame[data-turbo-frame-src]")||e.closest("turbo-frame")}function ut(e,t={}){if(e.tagName.toLowerCase()!=="select")return t.value=e.value||null;if(!e.multiple)return t.value=e.options[e.selectedIndex].value;t.values=Array.from(e.options).reduce((o,r)=>(r.selected&&o.push(r.value),o),[])}function ct(e){let t=Array.from(e.attributes).reduce((o,r)=>{let n=r.value;return o[r.name]=n,o},{});return t.tag=e.tagName,t.checked=!!e.checked,t.disabled=!!e.disabled,ut(e,t),delete t.class,delete t.action,delete t.href,delete t[c.commandAttribute],delete t[c.frameAttribute],t}var Q={buildAttributePayload:ct,findClosestCommand:at,findClosestFrameWithSource:dt};function ht(e,t={}){t.token=d.token;let o=document.createElement("input");o.type="hidden",o.name="turbo_boost_command",o.value=JSON.stringify(t),e.appendChild(o)}var mt={invokeCommand:ht};function gt(e,t={}){let o=document.createElement("a");o.href=e;let r=new URL(o);return r.searchParams.set("turbo_boost_command",JSON.stringify(t)),r}var Y={build:gt};function bt(e,t){let o=t.src;t=l({},t),delete t.src,e.src=Y.build(o,t)}var me={invokeCommand:bt};function pt(e,t={}){let o=t.src;t=l({},t),delete t.src,delete t.href,e.setAttribute("href",Y.build(o,t))}var ft={invokeCommand:pt};function vt(e){let t=e.target;h(K.events.abort,document,{detail:p(l({},e.detail),{xhr:t})})}function V(e){let t=e.target;t.getResponseHeader("TurboBoost")==="Append"||t.getResponseHeader("Content-Type").startsWith("text/vnd.turbo-boost.html")?O.append(t.responseText):O.replaceDocument(t.responseText);let o=`Server returned a ${t.status} status code! TurboBoost Commands require 2XX-3XX status codes.`;h(K.events.clientError,document,{detail:p(l({},e.detail),{error:o,xhr:t})},!0)}function yt(e){let t=e.target;if(t.status<200||t.status>399)return V(e);let o=t.responseText;t.getResponseHeader("TurboBoost")==="Append"||t.getResponseHeader("Content-Type").startsWith("text/vnd.turbo-boost.html")?O.append(t.responseText):O.replaceDocument(t.responseText)}function Et(e){let t=e.src;e=l({},e),delete e.src;try{let o=new XMLHttpRequest;o.open("GET",Y.build(t,e),!0),o.setRequestHeader("Accept","text/vnd.turbo-boost.html, text/html, application/xhtml+xml"),o.setRequestHeader("TurboBoost-Token",d.token),M.payloadChunks.forEach((r,n)=>o.setRequestHeader(`TurboBoost-State-${n.toString().padStart(4,"0")}`,r)),o.addEventListener("abort",vt),o.addEventListener("error",V),o.addEventListener("load",yt),o.send()}catch(o){let r=`Unexpected error sending HTTP request! ${o.message}`;V(o,{detail:{message:r}})}}var wt={invokeCommand:Et};function X(e,t){return t=t||{dataset:{}},e.href||t.src||t.dataset.turboBoostSrc||location.href}function kt(e){let t=Q.findClosestFrameWithSource(e),{turboFrame:o,turboMethod:r}=e.dataset;return e.tagName.toLowerCase()==="form"?{name:"form",reason:"Element is a form.",frame:t,src:e.action,invokeCommand:mt.invokeCommand}:r&&r.length>0?{name:"method",reason:"Element defines data-turbo-method.",frame:t,src:e.href,invokeCommand:ft.invokeCommand}:o&&o!=="_self"?(t=document.getElementById(o),{name:"frame",reason:"element targets a frame that is not _self",frame:t,src:X(e,t),invokeCommand:me.invokeCommand}):(!o||o==="_self")&&t?{name:"frame",reason:"element does NOT target a frame or targets _self and is contained by a frame",frame:t,src:X(e,t),invokeCommand:me.invokeCommand}:{name:"window",reason:"element matches one or more of the following conditions (targets _top, does NOT target a frame, is NOT contained by a frame)",frame:null,src:X(e),invokeCommand:wt.invokeCommand}}var ge={find:kt},N="unknown",Ee={debug:Object.values(g),info:Object.values(g),warn:[g.abort,g.clientError,g.serverError],error:[g.clientError,g.serverError],unknown:[]};Object.values(g).forEach(e=>{addEventListener(e,t=>{if(Ee[N].includes(t.type)){let{target:o,detail:r}=t;console[N](t.type,{target:o,detail:r})}})});var Tt={get level(){return N},set level(e){return Object.keys(Ee).includes(e)||(e="unknown"),N=e}};function xt(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var Lt={v4:xt};function be(e,t){return{id:e,name:t.getAttribute(c.commandAttribute),elementId:t.id.length>0?t.id:null,elementAttributes:Q.buildAttributePayload(t),startedAt:Date.now()}}async function St(e){let t,o={};try{if(t=Q.findClosestCommand(e.target),!t||!f.isRegisteredForElement(e.type,t))return;let r=`turbo-command-${Lt.v4()}`,n=ge.find(t),i=p(l({},be(r,t)),{driver:n.name,frameId:n.frame?n.frame.id:null,src:n.src}),s=await h(u.start,t,{cancelable:!0,detail:i});if(s.defaultPrevented||s.detail.confirmation&&e.defaultPrevented)return h(u.abort,t,{detail:{message:`An event handler for '${u.start}' prevented default behavior and blocked command invocation!`,source:s}});switch(n=ge.find(t),i=p(l({},be(r,t)),{driver:n.name,frameId:n.frame?n.frame.id:null,src:n.src}),fe.add(i),["frame","window"].includes(n.name)&&e.preventDefault(),d.busy=!0,setTimeout(()=>d.busy=!1,10),n.name){case"method":return n.invokeCommand(t,i);case"form":return n.invokeCommand(t,i);case"frame":return n.invokeCommand(n.frame,i);case"window":return n.invokeCommand(i)}}catch(r){h(u.clientError,t,{detail:p(l({},o),{error:r})})}}self.TurboBoost=self.TurboBoost||{};self.TurboBoost=p(l({},self.TurboBoost),{stateEvents:v,get state(){return M.current},get stateDelta(){return M.delta}});self.TurboBoost.Commands||(f.handler=St,f.register("click",[`[${c.commandAttribute}]`]),f.register("submit",[`form[${c.commandAttribute}]`]),f.register("change",[`input[${c.commandAttribute}]`,`select[${c.commandAttribute}]`,`textarea[${c.commandAttribute}]`]),self.TurboBoost.Commands={confirmation:nt,logger:Tt,schema:c,events:u,registerEventDelegate:f.register,get eventDelegates(){return f.events}});var Qt=self.TurboBoost.Commands;var Ct=Object.defineProperty,At=Object.defineProperties,$t=Object.getOwnPropertyDescriptors,we=Object.getOwnPropertySymbols,Ot=Object.prototype.hasOwnProperty,Dt=Object.prototype.propertyIsEnumerable,ke=(e,t,o)=>t in e?Ct(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,x=(e,t)=>{for(var o in t||(t={}))Ot.call(t,o)&&ke(e,o,t[o]);if(we)for(var o of we(t))Dt.call(t,o)&&ke(e,o,t[o]);return e},L=(e,t)=>At(e,$t(t)),m=(e,t)=>()=>(e&&(t=e(e=0)),t);function Bt(e){let t=document.createElement("template");return t.innerHTML=e,t}function se(e,t){t=t||document.body;let o=Bt(e).content.cloneNode(!0).querySelector("*");return t.appendChild(o)}function Z(e,t={}){if(!e)return;re(e);let{outline:o,outlineOffset:r}=t;o=o||"dashed 3px red",r=r||"0px",e.originalStyles=e.originalStyles||{display:e.style.display,minHeight:e.style.minHeight,minWidth:e.style.minWidth,outline:e.style.outline,outlineOffset:e.style.outlineOffset},getComputedStyle(e).display.match(/^inline$/i)&&e.offsetWidth===0&&e.offsetHeight===0&&(e.style.display="inline-block",e.style.minHeight="2px",e.style.minWidth="2px"),e.style.outline=o,e.style.outlineOffset=r,e.dataset.turboBoostHighlight=!0}function re(e){if(e){if(e.originalStyles){for(let[t,o]of Object.entries(e.originalStyles))o?e.style[t]=o:e.style[t]="";delete e.originalStyles}delete e.dataset.turboBoostHighlight}}function ee(e){if(!e)return{};let t=e.getBoundingClientRect(),o=e.offsetWidth,r=e.offsetHeight,n=t.top+window.scrollY,i=t.left+window.scrollX,s=i+o,C=n+r;return{top:n,left:i,right:s,bottom:C,width:o,height:r}}function D(e){try{e()}catch(t){}}var le=m(()=>{}),$e,Ht=m(()=>{$e=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=this.html,this.labelElement.addEventListener("click",e=>{e.preventDefault(),this.toggle()}),this.checkboxElement.addEventListener("change",e=>this.dispatchEvent(new CustomEvent("change",{bubbles:!0})))}toggle(){this.checked?this.uncheck():this.check()}check(){this.checkboxElement.checked=!0,this.dispatchEvent(new CustomEvent("change",{bubbles:!0}))}uncheck(){this.checkboxElement.checked=!1,this.dispatchEvent(new CustomEvent("change",{bubbles:!0}))}get name(){return this.getAttribute("name")}get checked(){return this.checkboxElement.checked}get checkboxElement(){return this.shadowRoot.querySelector("input")}get labelElement(){return this.shadowRoot.querySelector("label")}get html(){return`
|
|
1
|
+
import"@turbo-boost/commands";var K=Object.defineProperty,U=Object.defineProperties,X=Object.getOwnPropertyDescriptors,O=Object.getOwnPropertySymbols,Y=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,H=(t,e,o)=>e in t?K(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,c=(t,e)=>{for(var o in e||(e={}))Y.call(e,o)&&H(t,o,e[o]);if(O)for(var o of O(e))Q.call(e,o)&&H(t,o,e[o]);return t},h=(t,e)=>U(t,X(e)),Z="0.0.6";function ee(t){let e=document.createElement("template");return e.innerHTML=t,e}function $(t,e){e=e||document.body;let o=ee(t).content.cloneNode(!0).querySelector("*");return e.appendChild(o)}function w(t,e={}){if(!t)return;L(t);let{outline:o,outlineOffset:r}=e;o=o||"dashed 3px red",r=r||"0px",t.originalStyles=t.originalStyles||{display:t.style.display,minHeight:t.style.minHeight,minWidth:t.style.minWidth,outline:t.style.outline,outlineOffset:t.style.outlineOffset},getComputedStyle(t).display.match(/^inline$/i)&&t.offsetWidth===0&&t.offsetHeight===0&&(t.style.display="inline-block",t.style.minHeight="2px",t.style.minWidth="2px"),t.style.outline=o,t.style.outlineOffset=r,t.dataset.turboBoostHighlight=!0}function L(t){if(t){if(t.originalStyles){for(let[e,o]of Object.entries(t.originalStyles))o?t.style[e]=o:t.style[e]="";delete t.originalStyles}delete t.dataset.turboBoostHighlight}}function k(t){if(!t)return{};let e=t.getBoundingClientRect(),o=t.offsetWidth,r=t.offsetHeight,s=e.top+window.scrollY,i=e.left+window.scrollX,n=i+o,g=s+r;return{top:s,left:i,right:n,bottom:g,width:o,height:r}}function b(t){try{t()}catch(e){}}var te=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=this.html,this.labelElement.addEventListener("click",t=>{t.preventDefault(),this.toggle()}),this.checkboxElement.addEventListener("change",t=>this.dispatchEvent(new CustomEvent("change",{bubbles:!0})))}toggle(){this.checked?this.uncheck():this.check()}check(){this.checkboxElement.checked=!0,this.dispatchEvent(new CustomEvent("change",{bubbles:!0}))}uncheck(){this.checkboxElement.checked=!1,this.dispatchEvent(new CustomEvent("change",{bubbles:!0}))}get name(){return this.getAttribute("name")}get checked(){return this.checkboxElement.checked}get checkboxElement(){return this.shadowRoot.querySelector("input")}get labelElement(){return this.shadowRoot.querySelector("label")}get html(){return`
|
|
2
2
|
<style>${this.stylesheet}</style>
|
|
3
3
|
<div>
|
|
4
4
|
<input name="checkbox" type="checkbox">
|
|
@@ -21,7 +21,7 @@ var Fe=Object.defineProperty,We=Object.defineProperties,Xe=Object.getOwnProperty
|
|
|
21
21
|
label {
|
|
22
22
|
color: black;
|
|
23
23
|
}
|
|
24
|
-
`}}
|
|
24
|
+
`}},oe=class extends HTMLElement{constructor(){super(),this.enabledDevtools={},this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=this.html,this.shadowRoot.querySelector("button").addEventListener("click",()=>this.dispatchEvent(new CustomEvent("turbo-boost:devtools-close",{bubbles:!0}))),this.addEventListener("change",t=>{let e=t.target,{checked:o,name:r}=e;o?this.enableDevtool(r):this.disableDevtool(r)})}enableDevtool(t){this.enabledDevtools[t]||(this.enabledDevtools[t]=!0,this.dispatchEvent(new CustomEvent("turbo-boost:devtool-enable",{bubbles:!0,detail:{name:t}})))}disableDevtool(t){this.enabledDevtools[t]&&(delete this.enabledDevtools[t],this.dispatchEvent(new CustomEvent("turbo-boost:devtool-disable",{bubbles:!0,detail:{name:t}})))}close(){this.devtoolElements.forEach(t=>{t.checked&&t.uncheck()}),this.remove()}get devtoolElements(){return this.querySelectorAll('[slot="devtool"]')}get closeElement(){return this.querySelector("button")}get html(){return`
|
|
25
25
|
<style>${this.stylesheet}</style>
|
|
26
26
|
<div>
|
|
27
27
|
<img src="https://ik.imagekit.io/hopsoft/turbo-boost-logo_zHiiimlvT.webp?ik-sdk-version=javascript-1.4.3&updatedAt=1671722004342">
|
|
@@ -89,7 +89,7 @@ var Fe=Object.defineProperty,We=Object.defineProperties,Xe=Object.getOwnProperty
|
|
|
89
89
|
button:hover {
|
|
90
90
|
opacity: 1;
|
|
91
91
|
}
|
|
92
|
-
`}}
|
|
92
|
+
`}},re=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=this.html}connectedCallback(){let t=localStorage.getItem(`turbo-boost-devtools-${location.href}-${this.id}-transform`);t&&(this.style.transform=t)}disconnectedCallback(){this.id!=="undefined"&&this.id!==""&&localStorage.setItem(`turbo-boost-devtools-${location.href}-${this.id}-transform`,this.style.transform)}get color(){return this.getAttribute("color")||"darkslategray"}get backgroundColor(){return this.getAttribute("background-color")||"gainsboro"}get position(){return this.getAttribute("position")||"top"}get html(){return`
|
|
93
93
|
<style>${this.stylesheet}</style>
|
|
94
94
|
<div role="container">
|
|
95
95
|
<div role="title">
|
|
@@ -183,59 +183,38 @@ var Fe=Object.defineProperty,We=Object.defineProperties,Xe=Object.getOwnProperty
|
|
|
183
183
|
slot[name="content-bottom"] {
|
|
184
184
|
color: red;
|
|
185
185
|
}
|
|
186
|
-
`}}}
|
|
187
|
-
<turbo-boost-devtool name="${
|
|
188
|
-
<span slot="label">${
|
|
186
|
+
`}},u=[],ie={LeaderLine:{src:"https://cdnjs.cloudflare.com/ajax/libs/leader-line/1.0.7/leader-line.min.js",integrity:"sha512-0dNdzMjpT6pJdFGF1DwybFCfm3K/lzHhxaMXC/92J9/DZujHlqYFqmhTOAoD0o+LkeEsVK2ar/ESs7/Q2B6wJg==",global:"LeaderLine"},PlainDraggable:{src:"https://cdn.jsdelivr.net/npm/plain-draggable@2.5.14/plain-draggable.min.js",global:"PlainDraggable"}};function se(t){return t.global&&self[t.global]||document.querySelector(`[src='${t.src}']`)?!0:u.includes(t)}function le(t){if(se(t))return;u.push(t);let{src:e,integrity:o}=t,r=document.createElement("script");r.setAttribute("src",e),r.setAttribute("crossorigin","anonymous"),r.setAttribute("referrerpolicy","no-referrer"),o&&r.setAttribute("integrity",o),document.head.appendChild(r)}function M(t){if(!u.includes(t))return;u.splice(u.indexOf(t),1);let{src:e}=t,o=document.querySelector(`script[src='${e}']`);o&&o.remove(),t.global&&self[t.global]&&(self[t.global]=null)}function ne(){[...u].forEach(t=>M(t))}var p=h(c({},ie),{add:le,remove:M,removeAll:ne});customElements.define("turbo-boost-devtool",te);customElements.define("turbo-boost-devtool-supervisor",oe);customElements.define("turbo-boost-devtool-tooltip",re);var l;function j(){if(l)try{new PlainDraggable(l)}catch(t){setTimeout(j,200)}}function A(){N()||(l.close(),l.dispatchEvent(new CustomEvent("turbo-boost:devtools-stop",{bubbles:!0})),l=null,p.removeAll())}function I(){y()||(p.add(p.LeaderLine),p.add(p.PlainDraggable),l=$("<turbo-boost-devtool-supervisor></turbo-boost-devtool-supervisor>"),setTimeout(j,200),l.dispatchEvent(new CustomEvent("turbo-boost:devtools-start",{bubbles:!0})))}function ae(){let t=l?Object.keys(l.enabledDevtools):[];A(),I(),l.devtoolElements.forEach(e=>{t.includes(e.name)&&e.check()})}function y(){return!!l}function N(){return!y()}var R;function q(){clearTimeout(R),R=setTimeout(ae,25)}function v(){y()&&q()}addEventListener("turbo:load",v);addEventListener("turbo-frame:load",v);addEventListener("turbo-boost:devtools-connect",v);addEventListener("turbo-boost:devtools-close",A);window.TurboBoost&&(addEventListener(TurboBoost.Commands.events.success,v),addEventListener(TurboBoost.Commands.events.finish,v));function de(t,e){if(l)return $(`
|
|
187
|
+
<turbo-boost-devtool name="${t}" slot="devtool">
|
|
188
|
+
<span slot="label">${e}</span>
|
|
189
189
|
</turbo-boost-devtool>
|
|
190
|
-
`,
|
|
191
|
-
<turbo-boost-devtool-tooltip id="${
|
|
192
|
-
<div slot='title'>${
|
|
193
|
-
<div slot='subtitle'>${
|
|
190
|
+
`,l)}function ce(t){return l?l.enabledDevtools[t]:!1}var S={enabled:ce,register:de,start:I,stop:A,restart:q,get started(){return y()},get stopped(){return N()}};function x(t,e,o,r={}){let{backgroundColor:s,color:i,position:n,id:g}=r;return i=i||"white",n=n||"top",$(`
|
|
191
|
+
<turbo-boost-devtool-tooltip id="${g}" position="${n}" background-color="${s}" color="${i}">
|
|
192
|
+
<div slot='title'>${t}</div>
|
|
193
|
+
<div slot='subtitle'>${e}</div>
|
|
194
194
|
${o}
|
|
195
195
|
</turbo-boost-devtool-tooltip>
|
|
196
|
-
`)}var
|
|
196
|
+
`)}var T,D=class{constructor(t){this.delegate=t;let e,o=()=>{clearTimeout(e),e=setTimeout(this.hide({active:!1}),25)};this.eventListeners["turbo-boost:devtool-enable"]=r=>{let{name:s}=r.detail;s===this.delegate.name&&(w(this.delegate.triggerElement,{outline:"3px dashed blueviolet",outlineOffset:"2px"}),this.hide({active:!1}),this.active&&this.show())},this.eventListeners["turbo-boost:devtool-disable"]=r=>{let{name:s}=r.detail;s===this.delegate.name&&L(this.delegate.triggerElement)},this.eventListeners.click=r=>{r.target.closest("turbo-boost-devtool-tooltip")||o()},this.eventListeners["turbo:load"]=o,this.eventListeners["turbo-frame:load"]=o,window.TurboBoost&&(this.eventListeners[TurboBoost.Commands.events.finish]=o),this.registerEventListeners()}registerEventListeners(){Object.entries(this.eventListeners).forEach(([t,e])=>{addEventListener(t,e)})}unregisterEventListeners(){Object.entries(this.eventListeners).forEach(([t,e])=>{removeEventListener(t,e)})}get eventListeners(){return this._eventListeners||(this._eventListeners={})}show(){if(!this.enabled||this.active)return;this.active=!0,this.hide({active:!0}),w(this.delegate.targetElement,{outline:"3px dashed darkcyan",outlineOffset:"-2px"}),w(this.delegate.morphElement,{outline:"3px dashed chocolate",outlineOffset:"3px"}),this.renderingTooltip=this.createRenderingTooltip(),this.targetTooltip=this.createTargetTooltip(),this.triggerTooltip=this.createTriggerTooltip(this.targetTooltip,this.renderingTooltip),document.querySelectorAll(".leader-line").forEach(e=>e.style.zIndex=1e5);let t={morph:{partial:this.delegate.triggerElement.renders,id:this.delegate.triggerElement.morphs,status:this.delegate.morphElement?"OK":"Not Found"},trigger:{partial:null,id:null,status:"Not Found"},target:{partial:null,id:null,status:"Not Found"}};this.delegate.triggerElement&&(t.trigger={partial:this.delegate.triggerElement.partial,id:this.delegate.triggerElement.id,status:"OK"},t.target.id=this.delegate.triggerElement.controls),this.delegate.targetElement&&(t.target={partial:this.delegate.targetElement.partial,dom_id:this.delegate.targetElement.id,status:"OK"}),console.table(t)}hide({active:t=!1}){document.querySelectorAll("turbo-boost-devtool-tooltip").forEach(e=>{b(()=>e.line.remove()),b(()=>e.drag.remove()),b(()=>e.lineToRendering.remove()),b(()=>e.lineToTarget.remove()),b(()=>e.remove())}),document.querySelectorAll("[data-turbo-boost-highlight]").forEach(e=>{e.tagName.match(/turbo-boost-toggle-trigger/i)||L(e)}),this.active=t}get active(){return T===this.delegate}set active(t){t?T=this.delegate:T=null}get enabled(){return S.enabled(this.delegate.name)}static register(t,e){S.register(t,e)}createRenderingTooltip(){if(!this.delegate.triggerElement.renders)return console.debug("Unable to create the rendering tooltip! The trigger element must set the 'renders' attribute.");if(!this.delegate.triggerElement.morphs)return console.debug(`Unable to create the rendering tooltip! The trigger element specified the 'morphs' attrbiute but no element matches the DOM id: '${this.triggerElement.morphs}'`);let t=`
|
|
197
197
|
<svg xmlns="http://www.w3.org/2000/svg" style="display:inline-block;" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19l7-7 3 3-7 7-3-3z"></path><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"></path><path d="M2 2l7.586 7.586"></path><circle cx="11" cy="11" r="2"></circle></svg>
|
|
198
198
|
RENDERING - <${this.delegate.triggerElement.tagName.toLowerCase()}>
|
|
199
|
-
`,
|
|
199
|
+
`,e=`
|
|
200
200
|
<b>partial</b>: ${this.delegate.triggerElement.renders||"unknown"}<br>
|
|
201
201
|
<b>morphs</b>: ${this.delegate.triggerElement.morphs||"unknown"}<br>
|
|
202
|
-
`,o=
|
|
202
|
+
`,o=x(t,e,`
|
|
203
203
|
<div slot="content-top" style="font-size:85%; font-style:italic; font-weight:100;">
|
|
204
204
|
The <b>TRIGGER</b> toggles the <b>TARGET</b> then renders the partial & morphs the element.<br>
|
|
205
205
|
</div>
|
|
206
|
-
`,{id:`${this.delegate.id}-rendering`,backgroundColor:"lightyellow",color:"chocolate"}),r=
|
|
206
|
+
`,{id:`${this.delegate.id}-rendering`,backgroundColor:"lightyellow",color:"chocolate"}),r=k(this.delegate.morphElement),s=Math.ceil(r.top+r.height/2-o.offsetHeight/2),i=Math.ceil(r.left+r.width+100);return o.style.top=`${s}px`,o.style.left=`${i}px`,o.line=new LeaderLine(o,this.delegate.morphElement,h(c({},this.leaderLineOptions),{color:"chocolate"})),o.drag=new PlainDraggable(o),o}createTargetTooltip(){var t,e;if(!this.delegate.targetElement)return console.debug(`Unable to create the target tooltip! No element matches the DOM id: '${this.delegate.triggerElement.controls}'`);let o=`
|
|
207
207
|
<svg xmlns="http://www.w3.org/2000/svg" style="display:inline-block;" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="6"></circle><circle cx="12" cy="12" r="2"></circle></svg>
|
|
208
208
|
TARGET - <${this.delegate.targetElement.tagName.toLowerCase()}>
|
|
209
|
-
`,r=
|
|
209
|
+
`,r=x(o,((t=this.delegate.targetTooltipData)==null?void 0:t.subtitle)||"",((e=this.delegate.targetTooltipData)==null?void 0:e.content)||"",{id:`${this.delegate.id}-target`,backgroundColor:"lightcyan",color:"darkcyan",position:"bottom"}),s=k(this.delegate.targetElement),i=Math.ceil(s.top+r.offsetHeight),n=Math.ceil(s.left+s.width+r.offsetWidth/3);return r.style.top=`${i}px`,r.style.left=`${n}px`,r.line=new LeaderLine(r,this.delegate.targetElement,h(c({},this.leaderLineOptions),{color:"darkcyan"})),r.drag=new PlainDraggable(r),r}createTriggerTooltip(t,e){var o,r;if(!this.delegate.triggerElement)return;let s=`
|
|
210
210
|
<svg xmlns="http://www.w3.org/2000/svg" style="display:inline;" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
|
|
211
211
|
TRIGGER - <${this.delegate.triggerElement.tagName.toLowerCase()}>
|
|
212
|
-
`,i=
|
|
213
|
-
<b>identifier</b>: ${e.identifier}<br>
|
|
214
|
-
<b>query</b>: ${e.query}
|
|
215
|
-
`,content:`
|
|
216
|
-
<div slot="content-top">
|
|
217
|
-
<svg xmlns="http://www.w3.org/2000/svg" style="display:inline-block;" width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
|
|
218
|
-
<b>element log</b>
|
|
219
|
-
</div>
|
|
220
|
-
${e.targetElementLog.queue.slice(-10).map(t=>`<div slot="content">${t}</div>`).join("")}
|
|
221
|
-
`}}},triggerTooltipData:{get(){return{subtitle:`
|
|
222
|
-
<b>identifier</b>: ${this.identifier}<br>
|
|
223
|
-
<b>only</b>: ${this.getAttribute("only")||""}<br>
|
|
224
|
-
<b>url</b>: ${this.getAttribute("url")||location.href}<br>
|
|
225
|
-
<b>debounce (client-side)</b>: ${this.debounce}<br>
|
|
226
|
-
<b>ignore-inner-updates</b>: ${this.hasAttribute("ignore-inner-updates")}
|
|
227
|
-
`,content:`
|
|
228
|
-
<div slot="content-top">
|
|
229
|
-
<svg xmlns="http://www.w3.org/2000/svg" style="display:inline-block;" width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
|
|
230
|
-
<b>element log</b>
|
|
231
|
-
</div>
|
|
232
|
-
${e.triggerElementLog.queue.slice(-10).map(t=>`<div slot="content">${t}</div>`).join("")}
|
|
233
|
-
`}}}})}function Xt(){document.addEventListener("turbo-boost:devtools-start",()=>H.register("updates-for","updates-for")),window.CableReady.devtools=F,document.addEventListener("turbo:load",()=>{document.querySelectorAll("updates-for").forEach(e=>{z(e,"updates-for","updates"),Le(e),e.initializeDevtool()}),document.querySelectorAll("cable-ready-updates-for").forEach(e=>{z(e,"updates-for","updates"),Le(e),e.initializeDevtool()}),CableReady.devtools.start()})}var Jt=m(()=>{ie(),ie(),Xt()});function z(e,t,o){Object.assign(e,{initializeDevtool(){let r=()=>this.devtool.show();addEventListener("turbo-boost:devtools-start",()=>{this.devtool=new H(this),this.addEventListener("mouseenter",r)}),addEventListener("turbo-boost:devtools-stop",()=>{this.removeEventListener("mouseenter",r),this.removeDevtool()}),this.dispatchEvent(new CustomEvent("turbo-boost:devtools-connect",{bubbles:!0}))},hideDevtool(){var r;(r=this.devtool)==null||r.hide({active:!1})},removeDevtool(){this.devtool.hide({active:!1}),this.devtool.unregisterEventListeners(),delete this.devtool},name:t,targetLineLabel:o}),["triggerElement","morphElement","targetElement"].filter(r=>e[r]===void 0).forEach(r=>{Object.defineProperty(e,r,{get(){return e}})})}var Se,Ce,Ae,F,ie=m(()=>{Me(),Ft(),{restart:Se,start:Ce,stop:Ae}=I,(async()=>window.CableReady&&await Promise.resolve().then(()=>(Jt(),Wt)))(),F={restart:Se,start:Ce,stop:Ae}});ie();var E=class extends HTMLElement{constructor(t){super(),this.devtool="unknown",this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=t||"<slot></slot>"}connectedCallback(){this.ensureId()}ensureId(){this.id.trim().length||(this.id=`${this.tagName}-${this.uuidv4()}`.toLowerCase())}uuidv4(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,t=>(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16))}get viewStack(){let t=this.getAttribute("view-stack");return t?JSON.parse(t):[]}get partial(){return this.viewStack[0]}};var Gt=`
|
|
212
|
+
`,i=x(s,((o=this.delegate.triggerTooltipData)==null?void 0:o.subtitle)||"",((r=this.delegate.triggerTooltipData)==null?void 0:r.content)||"",{id:`${this.delegate.id}-trigger`,backgroundColor:"lavender",color:"blueviolet"}),n=k(this.delegate.triggerElement),g=Math.ceil(n.top-i.offsetHeight*2),J=Math.ceil(n.left+n.width+i.offsetWidth/3);return i.style.top=`${g}px`,i.style.left=`${J}px`,i.line=new LeaderLine(this.delegate.triggerElement,i,h(c({},this.leaderLineOptions),{color:"blueviolet"})),t&&(i.lineToTarget=new LeaderLine(i,t,h(c({},this.leaderLineOptions),{color:"blueviolet",middleLabel:this.delegate.targetLineLabel,size:2.1})),t.drag.onMove=()=>{var m,B;t.line.position(),(m=i.lineToTarget)==null||m.position(),(B=i.lineToRendering)==null||B.position()}),e&&(i.lineToRendering=new LeaderLine(i,e,h(c({},this.leaderLineOptions),{color:"blueviolet",middleLabel:this.delegate.renderingLineLabel,size:2.1})),e.drag.onMove=()=>{var m;e.line.position(),i.lineToTarget&&i.lineToTarget.position(),(m=i.lineToRendering)==null||m.position()}),i.drag=new PlainDraggable(i),i.drag.onMove=()=>{i.line.position(),i.lineToTarget&&i.lineToTarget.position(),i.lineToRendering&&i.lineToRendering.position()},i}get leaderLineOptions(){return{dash:{animation:!0},dropShadow:{opacity:.3},endPlug:"arrow3",endPlugSize:1.7,size:3,startPlug:"disc",startPlugSize:1}}},{restart:he,start:ue,stop:ge}=S;function z(t,e,o){Object.assign(t,{initializeDevtool(){let r=()=>this.devtool.show();addEventListener("turbo-boost:devtools-start",()=>{this.devtool=new D(this),this.addEventListener("mouseenter",r)}),addEventListener("turbo-boost:devtools-stop",()=>{this.removeEventListener("mouseenter",r),this.removeDevtool()}),this.dispatchEvent(new CustomEvent("turbo-boost:devtools-connect",{bubbles:!0}))},hideDevtool(){var r;(r=this.devtool)==null||r.hide({active:!1})},removeDevtool(){var r,s;(r=this.devtool)!=null&&r.hide&&this.devtool.hide({active:!1}),(s=this.devtool)!=null&&s.unregisterEventListeners&&this.devtool.unregisterEventListeners(),delete this.devtool},name:e,targetLineLabel:o}),["triggerElement","morphElement","targetElement"].filter(r=>t[r]===void 0).forEach(r=>{Object.defineProperty(t,r,{get(){return t}})})}var P={restart:he,start:ue,stop:ge,VERSION:Z};var V="0.0.18";var a=class extends HTMLElement{constructor(e){super(),this.devtool="unknown",this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=e||"<slot></slot>"}connectedCallback(){this.ensureId()}ensureId(){this.id.trim().length||(this.id=`${this.tagName}-${this.uuidv4()}`.toLowerCase())}uuidv4(){return("10000000-1000-4000-8000"+-1e11).replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}get viewStack(){let e=this.getAttribute("view-stack");return e?JSON.parse(e):[]}get partial(){return this.viewStack[0]}};var me=`
|
|
234
213
|
<turbo-boost>
|
|
235
214
|
<slot name="busy" hidden></slot>
|
|
236
215
|
<slot></slot>
|
|
237
216
|
</turbo-boost>
|
|
238
|
-
`,
|
|
217
|
+
`,F=100,C=400,d=class extends a{constructor(){super(me)}showBusyElement(){clearTimeout(this.showBusyElementTimeout),clearTimeout(this.hideBusyElementTimeout),this.busyElement&&(this.busyStartedAt=Date.now()+F,this.showBusyElementTimeout=setTimeout(()=>{this.busySlotElement.hidden=!1,this.defaultSlotElement.hidden=!0},F))}hideBusyElement(){if(clearTimeout(this.showBusyElementTimeout),clearTimeout(this.hideBusyElementTimeout),!this.busyElement)return;let e=C-(Date.now()-this.busyStartedAt);e<0&&(e=0),delete this.busyStartedAt,this.hideBusyElementTimeout=setTimeout(()=>{this.busySlotElement.hidden=!0,this.defaultSlotElement.hidden=!1},e)}get busyElement(){return this.querySelector(':scope > [slot="busy"]')}get busySlotElement(){return this.shadowRoot.querySelector('slot[name="busy"]')}get defaultSlotElement(){return this.shadowRoot.querySelector("slot:not([name])")}get busy(){return this.getAttribute("busy")==="true"}set busy(e){e=!!e,this.busy!==e&&(this.setAttribute("busy",e),e?this.showBusyElement():this.hideBusyElement())}get busyStartedAt(){return this.dataset.busyStartedAt?Number(this.dataset.busyStartedAt):0}set busyStartedAt(e){this.dataset.busyStartedAt=e}};var f=class extends d{connectedCallback(){super.connectedCallback(),this.mouseenterHandler=this.onMouseenter.bind(this),this.addEventListener("mouseenter",this.mouseenterHandler),this.collapseHandler=this.collapse.bind(this),this.collapseNowHandler=this.collapseNow.bind(this),this.collapseOn.forEach(e=>{let o=e.split("@"),r=o[0];o.length>1?(o[1].match(/^self|window$/)?self:self[o[1]]).addEventListener(r,this.collapseNowHandler):this.addEventListener(r,this.collapseHandler)})}disconnectedCallback(){this.removeEventListener("mouseenter",this.mouseenterHandler),this.collapseOn.forEach(e=>{let o=e.split("@"),r=o[0];o.length>1?(o[1].match(/^self|window$/)?self:self[o[1]]).removeEventListener(r,this.collapseNowHandler):this.removeEventListener(r,this.collapseHandler)})}cacheHTML(){}renderCachedHTML(){}onMouseenter(){clearTimeout(this.collapseTimeout)}collapse(e=250){if(clearTimeout(this.collapseTimeout),!this.busy){if(typeof e!="number"&&(e=250),e>0)return this.collapseTimeout=setTimeout(()=>this.collapse(0),e);this.innerHTML="";try{this.expanded=!1,this.triggerElement.hideDevtool()}catch(o){}}}collapseNow(e){e.target.closest("turbo-boost-devtool-tooltip")||this.collapse(0)}collapseMatches(){document.querySelectorAll(this.collapseSelector).forEach(e=>{e.id!==this.id&&e.collapse&&e.collapse(0)})}get collapseSelector(){return this.triggerElement.collapseSelector||this.getAttribute("collapse-selector")}get focusSelector(){return this.getAttribute("focus-selector")}get triggerElement(){return document.getElementById(this.labeledBy)}get triggerElements(){return document.querySelectorAll(`[aria-controls="${this.id}"]`)}get labeledBy(){return this.getAttribute("aria-labeledby")}set labeledBy(e){return this.setAttribute("aria-labeledby",e)}get collapseOn(){let e=this.getAttribute("collapse-on");return e?JSON.parse(e):[]}get expanded(){return this.triggerElement?this.triggerElement.expanded:!1}set expanded(e){this.triggerElements.forEach(o=>o.expanded=e)}get busy(){return this.triggerElement&&this.triggerElement.busy}};var W;function be(t){["bold","bullet","code","heading1","href","italic","number","quote","strike"].forEach(o=>t.deactivateAttribute(o))}function pe(t){if(t.value.length===0)return;let e=t.editor,o=[];for(;o[0]!==e.getSelectedRange()[0]&&o[1]!==e.getSelectedRange()[1];)o=e.getSelectedRange(),e.moveCursorInDirection("forward");e.insertString(" "),e.moveCursorInDirection("forward"),e.setSelectedRange([o[1],e.getSelectedRange()[1]]),be(e),e.setSelectedRange([e.getSelectedRange()[1],e.getSelectedRange()[1]])}function ve(t){clearTimeout(W),W=setTimeout(()=>{if(!t)return;t.focus();let e=t.closest("trix-editor");try{e?pe(e):t.selectionStart=t.selectionEnd=t.value.length}catch(o){}finally{t.scrollIntoView({block:"center",behavior:"smooth"})}},100)}var G=t=>ve(t);document.addEventListener("turbo-boost:devtools-start",()=>D.register("toggle","toggles"));var _,E=class extends d{constructor(){super(),z(this,"toggle","toggles")}connectedCallback(){super.connectedCallback();let{start:e}=TurboBoost.Commands.events;this.commandStartHandler=this.onCommandStart.bind(this),this.addEventListener(e,this.commandStartHandler);let{before:o}=TurboBoost.Streams.invokeEvents;this.beforeInvokeHandler=this.onBeforeInvoke.bind(this),addEventListener(o,this.beforeInvokeHandler),this.initializeDevtool()}disconnectedCallback(){setTimeout(()=>{let{start:e}=TurboBoost.Commands.events;this.removeEventListener(e,this.commandStartHandler);let{before:o}=TurboBoost.Streams.invokeEvents;removeEventListener(o,this.beforeInvokeHandler),this.removeDevtool()},1e3)}onCommandStart(e){_=this.focusSelector,this.targetElement.labeledBy=this.id,this.targetElement.collapseMatches(),this.busy=!0}onBeforeInvoke(e){if(e.detail.method!=="morph"||e.target.id!==this.morphs)return;let o=`turbo-boost-toggle-target[aria-labeledby="${this.id}"]`;if(!e.target.querySelector(o))return;let r=Date.now()-this.busyStartedAt,s=C-r;s<10&&(s=10),e.detail.invoke={delay:s},setTimeout(()=>{this.busy=!1,this.morphToggleTriggerElements.forEach(i=>i.busy=!1)},s-10),setTimeout(()=>G(this.targetElement.querySelector(_)),s+100)}get sharedViews(){if(!this.targetElement)return[];if(!this.targetElement.viewStack)return[];let e=(o,r)=>(this.targetElement.viewStack.includes(r)&&o.push(r),o);return this.viewStack.reduce(e.bind(this),[])}get renders(){return this.getAttribute("renders")}get morphs(){return this.getAttribute("morphs")}get morphToggleTriggerElements(){return Array.from(this.morphElement.querySelectorAll("turbo-boost-toggle-trigger"))}get controls(){return this.getAttribute("aria-controls")}get collapseSelector(){return this.getAttribute("collapse-selector")}get focusSelector(){return this.getAttribute("focus-selector")||this.targetElement.focusSelector}get remember(){return this.getAttribute("remember")==="true"}set remember(e){return this.setAttribute("remember",!!e)}get expanded(){return this.getAttribute("aria-expanded")==="true"}set expanded(e){this.setAttribute("aria-expanded",!!e)}get collapsed(){return!this.expanded}get command(){return this.dataset.turboCommand}get renderingLineLabel(){return"renders & morphs"}get morphElement(){return this.morphs?document.getElementById(this.morphs):null}get targetElement(){return this.controls?document.getElementById(this.controls):null}get triggerTooltipData(){let e=this.triggerElement.viewStack.reverse().map((o,r)=>this.triggerElement.sharedViews.includes(o)?`<div slot="content">${r+1}. ${o}</div>`:`<div slot="content-bottom">${r+1}. ${o}</div>`,this).join("");return{subtitle:`
|
|
239
218
|
<b>id</b>: ${this.triggerElement.id}<br>
|
|
240
219
|
<b>aria-controls</b>: ${this.triggerElement.controls}<br>
|
|
241
220
|
<b>aria-expanded</b>: ${this.triggerElement.expanded}<br>
|
|
@@ -245,14 +224,14 @@ var Fe=Object.defineProperty,We=Object.defineProperties,Xe=Object.getOwnProperty
|
|
|
245
224
|
<svg xmlns="http://www.w3.org/2000/svg" style="display:inline-block;" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
|
|
246
225
|
<b>View Stack</b>
|
|
247
226
|
</div>
|
|
248
|
-
${
|
|
249
|
-
`}}get targetTooltipData(){let
|
|
227
|
+
${e}
|
|
228
|
+
`}}get targetTooltipData(){let e=this.targetElement.viewStack.reverse().map((o,r)=>this.triggerElement.sharedViews.includes(o)?`<div slot="content">${r+1}. ${o}</div>`:`<div slot="content-bottom">${r+1}. ${o}</div>`,this).join("");return{subtitle:`<b>id</b>: ${this.targetElement.id}<br>
|
|
250
229
|
<b>aria-labeled-by</b>: ${this.targetElement.labeledBy}<br>
|
|
251
230
|
`,content:`
|
|
252
231
|
<div slot="content-top">
|
|
253
232
|
<svg xmlns="http://www.w3.org/2000/svg" style="display:inline-block;" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
|
|
254
233
|
<b>View Stack</b>
|
|
255
234
|
</div>
|
|
256
|
-
${
|
|
257
|
-
`}}};customElements.define("turbo-boost",
|
|
235
|
+
${e}
|
|
236
|
+
`}}};customElements.define("turbo-boost",a);customElements.define("turbo-boost-toggle-target",f);customElements.define("turbo-boost-toggle-trigger",E);self.TurboBoost=self.TurboBoost||{};self.TurboBoost.devtools=P;self.TurboBoost.Elements={VERSION:V};var Pe=self.TurboBoost.Elements;export{Pe as default};
|
|
258
237
|
//# sourceMappingURL=elements.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../node_modules/@turbo-boost/
|
|
4
|
-
"sourcesContent": ["var Z=Object.defineProperty,ee=Object.defineProperties;var te=Object.getOwnPropertyDescriptors;var X=Object.getOwnPropertySymbols;var re=Object.prototype.hasOwnProperty,oe=Object.prototype.propertyIsEnumerable;var _=(e,t,r)=>t in e?Z(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,s=(e,t)=>{for(var r in t||(t={}))re.call(t,r)&&_(e,r,t[r]);if(X)for(var r of X(t))oe.call(t,r)&&_(e,r,t[r]);return e},u=(e,t)=>ee(e,te(t));var O=class{get element(){return document.querySelector('meta[name=\"turbo-boost\"]')}get token(){return this.element.getAttribute(\"content\")}get busy(){return this.element.dataset.busy===\"true\"}set busy(t){return this.element.dataset.busy=!!t}},a=new O;var i={start:\"turbo-boost:command:start\",success:\"turbo-boost:command:success\",finish:\"turbo-boost:command:finish\",abort:\"turbo-boost:command:abort\",clientError:\"turbo-boost:command:client-error\",serverError:\"turbo-boost:command:server-error\"},l={stateLoad:\"turbo-boost:state:load\",stateChange:\"turbo-boost:state:change\"},f=s(s({},i),l);function d(e,t,r={}){return new Promise(o=>{r=r||{},r.detail=r.detail||{},t=t||document;let n=new CustomEvent(e,u(s({},r),{bubbles:!0}));t.dispatchEvent(n),o(n)})}var B;function k(e,t=null){if(!e||typeof e!=\"object\")return e;let r=new Proxy(e,{deleteProperty(o,n){return delete o[n],d(l.stateChange,a.element,{detail:{state:B}}),!0},set(o,n,c,A){return o[n]=k(c,this),d(l.stateChange,a.element,{detail:{state:B}}),!0}});if(Array.isArray(e))e.forEach((o,n)=>e[n]=k(o,r));else if(typeof e==\"object\")for(let[o,n]of Object.entries(e))e[o]=k(n,r);return t||(B=r),r}var F=k;var D,g,C,N;function J(){if(!a.element)return E();let e=atob(a.element.dataset.state);C={},g=F(JSON.parse(e)),D=s({},g),delete a.element.dataset.clientStateChange,setTimeout(()=>d(l.stateLoad,a.element,{detail:{state:g}}))}function E(){clearTimeout(N),N=setTimeout(J,10)}D||J();addEventListener(\"DOMContentLoaded\",E);addEventListener(\"load\",E);addEventListener(\"turbo:load\",E);addEventListener(\"turbo:frame-load\",E);addEventListener(i.success,E);addEventListener(l.stateChange,e=>{C={};for(let[t,r]of Object.entries(g))D[t]!==r&&(C[t]=r);a.element.dataset.clientStateChange=!0,a.element.dataset.state=btoa(JSON.stringify(g))});var h={events:l,get current(){return g},get delta(){return C},get payloadChunks(){return btoa(JSON.stringify(C)).match(/.{1,2000}/g)}};function ne(e){let t=\"<html\",r=\"</html\",o=e.indexOf(t),n=e.lastIndexOf(r);if(o>=0&&n>=0){let c=e.slice(e.indexOf(\">\",o)+1,n);document.documentElement.innerHTML=c}}function se(e){document.body.insertAdjacentHTML(\"beforeend\",e)}var v={append:se,replaceDocument:ne};var L={};function ae(e){L[e.id]=e}function ie(e){delete L[e]}var S={add:ae,remove:ie,get commands(){return[...Object.values(L)]},get length(){return Object.keys(L).length}};function M(e){e.detail.endedAt=Date.now(),e.detail.milliseconds=e.detail.endedAt-e.detail.startedAt,setTimeout(()=>d(i.finish,e.target,{detail:e.detail}),25)}addEventListener(i.serverError,M);addEventListener(i.success,M);addEventListener(i.finish,e=>S.remove(e.detail.id),!0);var T={events:i};var R={};addEventListener(\"turbo:before-fetch-request\",e=>{let t=e.target.closest(\"turbo-frame\"),{fetchOptions:r}=e.detail;if(a.busy){let o=[\"text/vnd.turbo-boost.html\",r.headers.Accept];o=o.filter(n=>n&&n.trim().length>0).join(\", \"),r.headers.Accept=o,r.headers[\"TurboBoost-Token\"]=a.token}h.payloadChunks.forEach((o,n)=>{r.headers[`TurboBoost-State-${n.toString().padStart(4,\"0\")}`]=o})});addEventListener(\"turbo:before-fetch-response\",e=>{let t=e.target.closest(\"turbo-frame\"),{fetchResponse:r}=e.detail;if(t&&(R[t.id]=t.src),r.header(\"TurboBoost\")){if(r.statusCode<200||r.statusCode>399){let o=`Server returned a ${r.statusCode} status code! TurboBoost Commands require 2XX-3XX status codes.`;d(T.events.clientError,document,{detail:u(s({},e.detail),{error:o})},!0)}r.header(\"TurboBoost\")===\"Append\"&&(e.preventDefault(),r.responseText.then(o=>v.append(o)))}});addEventListener(\"turbo:frame-load\",e=>{let t=e.target.closest(\"turbo-frame\");t.dataset.turboBoostSrc=R[t.id]||t.src||t.dataset.turboBoostSrc,delete R[t.id]});var de={frameAttribute:\"data-turbo-frame\",methodAttribute:\"data-turbo-method\",commandAttribute:\"data-turbo-command\",confirmAttribute:\"data-turbo-confirm\"},m=s({},de);var j={method:e=>Promise.resolve(confirm(e))},me=e=>e.detail.driver===\"method\",ue=e=>{if(e.detail.driver!==\"form\")return!1;let t=e.target,r=t.closest(\"turbo-frame\"),o=t.closest(`[${m.frameAttribute}]`);return!!(r||o)},ce=e=>me(e)||ue(e);document.addEventListener(i.start,async e=>{let t=e.target.getAttribute(m.confirmAttribute);if(!t||(e.detail.confirmation=!0,ce(e)))return;await j.method(t)||e.preventDefault()});var W=j;var b=[],$;function le(e,t){let r=b.find(o=>o.name===e);return r&&b.splice(b.indexOf(r),1),b=[{name:e,selectors:t},...b],document.removeEventListener(e,$,!0),document.addEventListener(e,$,!0),s({},b.find(o=>o.name===e))}function fe(e){return b.find(t=>t.selectors.find(r=>Array.from(document.querySelectorAll(r)).find(o=>o===e)))}function be(e,t){let r=fe(t);return r&&r.name===e}var p={register:le,isRegisteredForElement:be,get events(){return[...b]},set handler(e){$=e}};function pe(e){return e.closest(`[${m.commandAttribute}]`)}function he(e){return e.closest(\"turbo-frame[src]\")||e.closest(\"turbo-frame[data-turbo-frame-src]\")||e.closest(\"turbo-frame\")}function ve(e,t={}){if(e.tagName.toLowerCase()!==\"select\")return t.value=e.value||null;if(!e.multiple)return t.value=e.options[e.selectedIndex].value;t.values=Array.from(e.options).reduce((r,o)=>(o.selected&&r.push(o.value),r),[])}function ge(e){let t=Array.from(e.attributes).reduce((r,o)=>{let n=o.value;return r[o.name]=n,r},{});return t.tag=e.tagName,t.checked=!!e.checked,t.disabled=!!e.disabled,ve(e,t),delete t.class,delete t.action,delete t.href,delete t[m.commandAttribute],delete t[m.frameAttribute],t}var y={buildAttributePayload:ge,findClosestCommand:pe,findClosestFrameWithSource:he};function Ee(e,t={}){t.token=a.token;let r=document.createElement(\"input\");r.type=\"hidden\",r.name=\"turbo_boost_command\",r.value=JSON.stringify(t),e.appendChild(r)}var U={invokeCommand:Ee};function xe(e,t={}){let r=document.createElement(\"a\");r.href=e;let o=new URL(r);return o.searchParams.set(\"turbo_boost_command\",JSON.stringify(t)),o}var x={build:xe};function Ce(e,t){let r=t.src;t=s({},t),delete t.src,e.src=x.build(r,t)}var H={invokeCommand:Ce};function Te(e,t={}){let r=t.src;t=s({},t),delete t.src,delete t.href,e.setAttribute(\"href\",x.build(r,t))}var V={invokeCommand:Te};function ye(e){let t=e.target;d(T.events.abort,document,{detail:u(s({},e.detail),{xhr:t})})}function P(e){let t=e.target;t.getResponseHeader(\"TurboBoost\")===\"Append\"||t.getResponseHeader(\"Content-Type\").startsWith(\"text/vnd.turbo-boost.html\")?v.append(t.responseText):v.replaceDocument(t.responseText);let o=`Server returned a ${t.status} status code! TurboBoost Commands require 2XX-3XX status codes.`;d(T.events.clientError,document,{detail:u(s({},e.detail),{error:o,xhr:t})},!0)}function Ae(e){let t=e.target;if(t.status<200||t.status>399)return P(e);let r=t.responseText;t.getResponseHeader(\"TurboBoost\")===\"Append\"||t.getResponseHeader(\"Content-Type\").startsWith(\"text/vnd.turbo-boost.html\")?v.append(t.responseText):v.replaceDocument(t.responseText)}function ke(e){let t=e.src;e=s({},e),delete e.src;try{let r=new XMLHttpRequest;r.open(\"GET\",x.build(t,e),!0),r.setRequestHeader(\"Accept\",\"text/vnd.turbo-boost.html, text/html, application/xhtml+xml\"),r.setRequestHeader(\"TurboBoost-Token\",a.token),h.payloadChunks.forEach((o,n)=>r.setRequestHeader(`TurboBoost-State-${n.toString().padStart(4,\"0\")}`,o)),r.addEventListener(\"abort\",ye),r.addEventListener(\"error\",P),r.addEventListener(\"load\",Ae),r.send()}catch(r){let o=`Unexpected error sending HTTP request! ${r.message}`;P(r,{detail:{message:o}})}}var G={invokeCommand:ke};function q(e,t){return t=t||{dataset:{}},e.href||t.src||t.dataset.turboBoostSrc||location.href}function Le(e){let t=y.findClosestFrameWithSource(e),{turboFrame:r,turboMethod:o}=e.dataset;return e.tagName.toLowerCase()===\"form\"?{name:\"form\",reason:\"Element is a form.\",frame:t,src:e.action,invokeCommand:U.invokeCommand}:o&&o.length>0?{name:\"method\",reason:\"Element defines data-turbo-method.\",frame:t,src:e.href,invokeCommand:V.invokeCommand}:r&&r!==\"_self\"?(t=document.getElementById(r),{name:\"frame\",reason:\"element targets a frame that is not _self\",frame:t,src:q(e,t),invokeCommand:H.invokeCommand}):(!r||r===\"_self\")&&t?{name:\"frame\",reason:\"element does NOT target a frame or targets _self and is contained by a frame\",frame:t,src:q(e,t),invokeCommand:H.invokeCommand}:{name:\"window\",reason:\"element matches one or more of the following conditions (targets _top, does NOT target a frame, is NOT contained by a frame)\",frame:null,src:q(e),invokeCommand:G.invokeCommand}}var I={find:Le};var w=\"unknown\",z={debug:Object.values(f),info:Object.values(f),warn:[f.abort,f.clientError,f.serverError],error:[f.clientError,f.serverError],unknown:[]};Object.values(f).forEach(e=>{addEventListener(e,t=>{if(z[w].includes(t.type)){let{target:r,detail:o}=t;console[w](t.type,{target:r,detail:o})}})});var K={get level(){return w},set level(e){return Object.keys(z).includes(e)||(e=\"unknown\"),w=e}};function Se(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var Q={v4:Se};function Y(e,t){return{id:e,name:t.getAttribute(m.commandAttribute),elementId:t.id.length>0?t.id:null,elementAttributes:y.buildAttributePayload(t),startedAt:Date.now()}}async function we(e){let t,r={};try{if(t=y.findClosestCommand(e.target),!t||!p.isRegisteredForElement(e.type,t))return;let o=`turbo-command-${Q.v4()}`,n=I.find(t),c=u(s({},Y(o,t)),{driver:n.name,frameId:n.frame?n.frame.id:null,src:n.src}),A=await d(i.start,t,{cancelable:!0,detail:c});if(A.defaultPrevented||A.detail.confirmation&&e.defaultPrevented)return d(i.abort,t,{detail:{message:`An event handler for '${i.start}' prevented default behavior and blocked command invocation!`,source:A}});switch(n=I.find(t),c=u(s({},Y(o,t)),{driver:n.name,frameId:n.frame?n.frame.id:null,src:n.src}),S.add(c),[\"frame\",\"window\"].includes(n.name)&&e.preventDefault(),a.busy=!0,setTimeout(()=>a.busy=!1,10),n.name){case\"method\":return n.invokeCommand(t,c);case\"form\":return n.invokeCommand(t,c);case\"frame\":return n.invokeCommand(n.frame,c);case\"window\":return n.invokeCommand(c)}}catch(o){d(i.clientError,t,{detail:u(s({},r),{error:o})})}}self.TurboBoost=self.TurboBoost||{};self.TurboBoost=u(s({},self.TurboBoost),{stateEvents:l,get state(){return h.current},get stateDelta(){return h.delta}});self.TurboBoost.Commands||(p.handler=we,p.register(\"click\",[`[${m.commandAttribute}]`]),p.register(\"submit\",[`form[${m.commandAttribute}]`]),p.register(\"change\",[`input[${m.commandAttribute}]`,`select[${m.commandAttribute}]`,`textarea[${m.commandAttribute}]`]),self.TurboBoost.Commands={confirmation:W,logger:K,schema:m,events:i,registerEventDelegate:p.register,get eventDelegates(){return p.events}});var Qt=self.TurboBoost.Commands;export{Qt as default};\n//# sourceMappingURL=commands.js.map\n", "export function template (html) {\n let template = document.createElement('template')\n template.innerHTML = html\n return template\n}\n\nexport function appendHTML (html, parent) {\n parent = parent || document.body\n const clone = template(html).content.cloneNode(true)\n const child = clone.querySelector('*')\n return parent.appendChild(child)\n}\n\nexport function addHighlight (element, options = {}) {\n if (!element) return\n removeHighlight(element)\n let { outline, outlineOffset } = options\n\n outline = outline || 'dashed 3px red'\n outlineOffset = outlineOffset || '0px'\n\n element.originalStyles = element.originalStyles || {\n display: element.style.display,\n minHeight: element.style.minHeight,\n minWidth: element.style.minWidth,\n outline: element.style.outline,\n outlineOffset: element.style.outlineOffset\n }\n\n if (\n getComputedStyle(element).display.match(/^inline$/i) &&\n element.offsetWidth === 0 &&\n element.offsetHeight === 0\n ) {\n element.style.display = 'inline-block'\n element.style.minHeight = '2px'\n element.style.minWidth = '2px'\n }\n element.style.outline = outline\n element.style.outlineOffset = outlineOffset\n element.dataset.turboBoostHighlight = true\n}\n\nexport function removeHighlight (element) {\n if (!element) return\n if (element.originalStyles) {\n for (const [key, value] of Object.entries(element.originalStyles))\n value ? (element.style[key] = value) : (element.style[key] = '')\n delete element.originalStyles\n }\n delete element.dataset.turboBoostHighlight\n}\n\nexport function coordinates (element) {\n if (!element) return {}\n const rect = element.getBoundingClientRect()\n const width = element.offsetWidth\n const height = element.offsetHeight\n const top = rect.top + window.scrollY\n const left = rect.left + window.scrollX\n const right = left + width\n const bottom = top + height\n return { top, left, right, bottom, width, height }\n}\n\nexport function attempt (callback) {\n try {\n callback()\n } catch {}\n}\n", "export default class DevtoolElement extends HTMLElement {\n constructor () {\n super()\n this.attachShadow({ mode: 'open' })\n this.shadowRoot.innerHTML = this.html\n this.labelElement.addEventListener('click', event => {\n event.preventDefault()\n this.toggle()\n })\n this.checkboxElement.addEventListener('change', event =>\n this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n )\n }\n\n toggle () {\n this.checked ? this.uncheck() : this.check()\n }\n\n check () {\n this.checkboxElement.checked = true\n this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n }\n\n uncheck () {\n this.checkboxElement.checked = false\n this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n }\n\n get name () {\n return this.getAttribute('name')\n }\n\n get checked () {\n return this.checkboxElement.checked\n }\n\n get checkboxElement () {\n return this.shadowRoot.querySelector('input')\n }\n\n get labelElement () {\n return this.shadowRoot.querySelector('label')\n }\n\n get html () {\n return `\n <style>${this.stylesheet}</style>\n <div>\n <input name=\"checkbox\" type=\"checkbox\">\n <label for=\"checkbox\"><slot name=\"label\"></slot></label>\n </div>\n `\n }\n\n get stylesheet () {\n return `\n :host, :host * {\n cursor: pointer;\n }\n\n div {\n display: flex;\n margin-right: 10px;\n }\n\n input:checked + label{\n font-weight: bold;\n }\n\n label {\n color: black;\n }\n `\n }\n}\n", "import { appendHTML } from '../utils/dom.js'\n\nexport default class SupervisorElement extends HTMLElement {\n constructor () {\n super()\n this.enabledDevtools = {}\n this.attachShadow({ mode: 'open' })\n this.shadowRoot.innerHTML = this.html\n this.shadowRoot.querySelector('button').addEventListener('click', () =>\n this.dispatchEvent(\n new CustomEvent('turbo-boost:devtools-close', {\n bubbles: true\n })\n )\n )\n\n this.addEventListener('change', event => {\n const devtoolElement = event.target\n const { checked, name } = devtoolElement\n checked ? this.enableDevtool(name) : this.disableDevtool(name)\n })\n }\n\n enableDevtool (name) {\n if (this.enabledDevtools[name]) return\n this.enabledDevtools[name] = true\n this.dispatchEvent(\n new CustomEvent('turbo-boost:devtool-enable', {\n bubbles: true,\n detail: { name: name }\n })\n )\n }\n\n disableDevtool (name) {\n if (!this.enabledDevtools[name]) return\n delete this.enabledDevtools[name]\n this.dispatchEvent(\n new CustomEvent('turbo-boost:devtool-disable', {\n bubbles: true,\n detail: { name: name }\n })\n )\n }\n\n close () {\n this.devtoolElements.forEach(el => {\n if (el.checked) el.uncheck()\n })\n this.remove()\n }\n\n get devtoolElements () {\n return this.querySelectorAll('[slot=\"devtool\"]')\n }\n\n get closeElement () {\n return this.querySelector('button')\n }\n\n get html () {\n return `\n <style>${this.stylesheet}</style>\n <div>\n <img src=\"https://ik.imagekit.io/hopsoft/turbo-boost-logo_zHiiimlvT.webp?ik-sdk-version=javascript-1.4.3&updatedAt=1671722004342\">\n <slot name=\"devtool\"></slot>\n <button>\u2715</button>\n </div>\n `\n }\n\n get stylesheet () {\n return `\n :host {\n background-color: gainsboro;\n border-radius: 5px;\n bottom: 20px;\n display: block;\n filter: drop-shadow(3px 3px 3px rgba(0,0,0,0.3));\n left: 50%;\n outline-offset: 1px;\n outline: solid 2px black;\n padding: 5px 10px;\n position: fixed;\n transform: translateX(-50%);\n z-index: 8999;\n }\n\n * {\n -webkit-user-select: none;\n font-family: helvetica, sans-serif;\n font-size: 1rem;\n user-select: none;\n }\n\n img {\n align-self: center;\n cursor: grab;\n height: 25px;\n margin-left: -5px;\n vertical-align: middle;\n }\n\n div {\n display: flex;\n gap: 0 5px;\n position: relative;\n }\n\n [slot=\"devtool\"] {\n align-self: center;\n }\n\n button {\n align-self: center;\n background-color: darkgray;\n border-radius: 50%;\n border: none;\n color: black;\n cursor: pointer;\n font-size: 10px;\n height: 18px;\n line-height: 18px;\n margin-right: -5px;\n opacity: 0.5;\n outline: solid 1px black;\n padding: 0 2px;\n width: 18px;\n }\n\n button:hover {\n opacity: 1;\n }\n `\n }\n}\n", "export default class TooltipElement extends HTMLElement {\n constructor () {\n super()\n this.attachShadow({ mode: 'open' })\n this.shadowRoot.innerHTML = this.html\n }\n\n connectedCallback () {\n const savedTransform = localStorage.getItem(\n `turbo-boost-devtools-${location.href}-${this.id}-transform`\n )\n\n if (savedTransform) {\n this.style.transform = savedTransform\n }\n }\n\n disconnectedCallback () {\n if (this.id !== 'undefined' && this.id !== '') {\n localStorage.setItem(\n `turbo-boost-devtools-${location.href}-${this.id}-transform`,\n this.style.transform\n )\n }\n }\n\n get color () {\n return this.getAttribute('color') || 'darkslategray'\n }\n\n get backgroundColor () {\n return this.getAttribute('background-color') || 'gainsboro'\n }\n\n get position () {\n return this.getAttribute('position') || 'top'\n }\n\n get html () {\n return `\n <style>${this.stylesheet}</style>\n <div role=\"container\">\n <div role=\"title\">\n <slot name=\"title\"></slot>\n <img src=\"https://ik.imagekit.io/hopsoft/turbo-boost-logo_zHiiimlvT.webp?ik-sdk-version=javascript-1.4.3&updatedAt=1671722004342\">\n </div>\n <slot name=\"subtitle\"></slot>\n <slot name=\"content-top\"></slot>\n <slot name=\"content\"></slot>\n <slot name=\"content-bottom\"></slot>\n </div>\n `\n }\n\n get stylesheet () {\n return `\n :host {\n display: block;\n position: absolute;\n z-index: 8999;\n }\n\n * {\n color: ${this.color}\n font-size: 1rem;\n }\n\n [role=\"container\"] {\n background-color: ${this.backgroundColor};\n border-radius: 15px;\n filter: drop-shadow(3px 3px 3px rgba(0,0,0,0.3));\n font-family: monospace;\n min-height: 30px;\n min-width: 100px;\n opacity: 0.9;\n outline-offset: 1px;\n outline: dashed 3px ${this.color};\n padding: 12px;\n position: relative;\n white-space: nowrap;\n }\n\n [role=\"title\"] {\n display: flex;\n }\n\n [role=\"title\"] slot[name=\"title\"] {\n color: ${this.color};\n display: block;\n flex-grow: 1;\n font-weight: bold;\n }\n\n [role=\"title\"] img {\n height: 25px;\n vertical-align: middle;\n }\n\n slot[name=\"subtitle\"] {\n border-bottom: dotted 1px ${this.color};\n border-top: dotted 1px ${this.color};\n color: ${this.color};\n display: block;\n font-size: 0.8rem;\n font-weight: lighter;\n margin-bottom: 12px;\n margin-top: 8px;\n padding-bottom: 4px;\n padding-top: 4px;\n width: 100%;\n }\n\n slot[name=\"content-top\"],\n slot[name=\"content\"],\n slot[name=\"content-bottom\"] {\n display: block;\n font-weight: normal;\n }\n\n slot[name=\"content-top\"] {\n color: ${this.color};\n margin-bottom: 8px;\n }\n\n slot[name=\"content\"],\n slot[name=\"content-bottom\"] {\n opacity: 0.7;\n padding-left: 12px;\n }\n\n slot[name=\"content\"] {\n color: ${this.color};\n }\n\n slot[name=\"content-bottom\"] {\n color: red;\n }\n `\n }\n}\n", "const added = []\n\nconst dependencies = {\n LeaderLine: {\n src:\n 'https://cdnjs.cloudflare.com/ajax/libs/leader-line/1.0.7/leader-line.min.js',\n integrity:\n 'sha512-0dNdzMjpT6pJdFGF1DwybFCfm3K/lzHhxaMXC/92J9/DZujHlqYFqmhTOAoD0o+LkeEsVK2ar/ESs7/Q2B6wJg==',\n global: 'LeaderLine'\n },\n\n PlainDraggable: {\n src:\n 'https://cdn.jsdelivr.net/npm/plain-draggable@2.5.14/plain-draggable.min.js',\n global: 'PlainDraggable'\n }\n}\n\nfunction exists (dependency) {\n if (dependency.global && self[dependency.global]) return true\n if (document.querySelector(`[src='${dependency.src}']`)) return true\n return added.includes(dependency)\n}\n\nfunction add (dependency) {\n if (exists(dependency)) return\n added.push(dependency)\n\n const { src, integrity } = dependency\n const script = document.createElement('script')\n script.setAttribute('src', src)\n script.setAttribute('crossorigin', 'anonymous')\n script.setAttribute('referrerpolicy', 'no-referrer')\n if (integrity) script.setAttribute('integrity', integrity)\n document.head.appendChild(script)\n}\n\nfunction remove (dependency) {\n if (!added.includes(dependency)) return\n added.splice(added.indexOf(dependency), 1)\n\n const { src } = dependency\n const el = document.querySelector(`script[src='${src}']`)\n if (el) el.remove()\n if (dependency.global && self[dependency.global])\n self[dependency.global] = null\n}\n\nfunction removeAll () {\n ;[...added].forEach(dependency => remove(dependency))\n}\n\nexport default { ...dependencies, add, remove, removeAll }\n", "import { appendHTML } from './utils/dom'\nimport DevtoolElement from './elements/devtool_element'\nimport SupervisorElement from './elements/supervisor_element'\nimport TooltipElement from './elements/tooltip_element'\nimport dependencies from './dependencies'\n\ncustomElements.define('turbo-boost-devtool', DevtoolElement)\ncustomElements.define('turbo-boost-devtool-supervisor', SupervisorElement)\ncustomElements.define('turbo-boost-devtool-tooltip', TooltipElement)\n\nlet supervisorElement\n\nfunction makeDraggable () {\n if (!supervisorElement) return\n try {\n new PlainDraggable(supervisorElement)\n } catch {\n setTimeout(makeDraggable, 200)\n }\n}\n\nfunction stop () {\n if (stopped()) return\n supervisorElement.close()\n supervisorElement.dispatchEvent(\n new CustomEvent('turbo-boost:devtools-stop', {\n bubbles: true\n })\n )\n supervisorElement = null\n dependencies.removeAll()\n}\n\nfunction start () {\n if (started()) return\n dependencies.add(dependencies.LeaderLine)\n dependencies.add(dependencies.PlainDraggable)\n supervisorElement = appendHTML(\n '<turbo-boost-devtool-supervisor></turbo-boost-devtool-supervisor>'\n )\n setTimeout(makeDraggable, 200)\n supervisorElement.dispatchEvent(\n new CustomEvent('turbo-boost:devtools-start', {\n bubbles: true\n })\n )\n}\n\nfunction restart () {\n const enabledList = supervisorElement\n ? Object.keys(supervisorElement.enabledDevtools)\n : []\n\n stop()\n start()\n\n supervisorElement.devtoolElements.forEach(el => {\n if (enabledList.includes(el.name)) el.check()\n })\n}\n\nfunction started () {\n return !!supervisorElement\n}\n\nfunction stopped () {\n return !started()\n}\n\nlet restartTimeout\nfunction debouncedRestart () {\n clearTimeout(restartTimeout)\n restartTimeout = setTimeout(restart, 25)\n}\n\nfunction autoRestart () {\n if (started()) debouncedRestart()\n}\n\naddEventListener('turbo:load', autoRestart)\naddEventListener('turbo-frame:load', autoRestart)\naddEventListener('turbo-boost:devtools-connect', autoRestart)\naddEventListener('turbo-boost:devtools-close', stop)\n\nif (window.TurboBoost) {\n addEventListener(TurboBoost.Commands.events.success, autoRestart)\n addEventListener(TurboBoost.Commands.events.finish, autoRestart)\n}\n\nfunction register (name, label) {\n if (!supervisorElement) return\n return appendHTML(\n `\n <turbo-boost-devtool name=\"${name}\" slot=\"devtool\">\n <span slot=\"label\">${label}</span>\n </turbo-boost-devtool>\n `,\n supervisorElement\n )\n}\n\nfunction enabled (name) {\n if (!supervisorElement) return false\n return supervisorElement.enabledDevtools[name]\n}\n\nexport default {\n enabled,\n register,\n start,\n stop,\n restart: debouncedRestart,\n get started () {\n return started()\n },\n get stopped () {\n return stopped()\n }\n}\n", "// Icons courtesy of https://feathericons.com/\nimport supervisor from './supervisor'\nimport {\n appendHTML,\n addHighlight,\n attempt,\n coordinates,\n removeHighlight\n} from './utils/dom.js'\n\nfunction appendTooltip (title, subtitle, content, options = {}) {\n let { backgroundColor, color, position, id } = options\n color = color || 'white'\n position = position || 'top'\n return appendHTML(`\n <turbo-boost-devtool-tooltip id=\"${id}\" position=\"${position}\" background-color=\"${backgroundColor}\" color=\"${color}\">\n <div slot='title'>${title}</div>\n <div slot='subtitle'>${subtitle}</div>\n ${content}\n </turbo-boost-devtool-tooltip>\n `)\n}\n\nlet activeTarget\n\nexport default class Devtool {\n constructor (delegate) {\n this.delegate = delegate\n\n let hideTimeout\n const debouncedHide = () => {\n clearTimeout(hideTimeout)\n hideTimeout = setTimeout(this.hide({ active: false }), 25)\n }\n\n this.eventListeners['turbo-boost:devtool-enable'] = event => {\n // LeaderLine.positionByWindowResize = false\n const { name } = event.detail\n if (name !== this.delegate.name) return\n\n addHighlight(this.delegate.triggerElement, {\n outline: '3px dashed blueviolet',\n outlineOffset: '2px'\n })\n\n this.hide({ active: false })\n if (this.active) this.show()\n }\n\n this.eventListeners['turbo-boost:devtool-disable'] = event => {\n const { name } = event.detail\n if (name === this.delegate.name)\n removeHighlight(this.delegate.triggerElement)\n }\n\n this.eventListeners['click'] = event => {\n if (event.target.closest('turbo-boost-devtool-tooltip')) return\n debouncedHide()\n }\n\n this.eventListeners['turbo:load'] = debouncedHide\n this.eventListeners['turbo-frame:load'] = debouncedHide\n if (window.TurboBoost) {\n this.eventListeners[TurboBoost.Commands.events.finish] = debouncedHide\n }\n\n this.registerEventListeners()\n }\n\n registerEventListeners () {\n Object.entries(this.eventListeners).forEach(([type, listener]) => {\n addEventListener(type, listener)\n })\n }\n\n unregisterEventListeners () {\n Object.entries(this.eventListeners).forEach(([type, listener]) => {\n removeEventListener(type, listener)\n })\n }\n\n get eventListeners () {\n return this._eventListeners || (this._eventListeners = {})\n }\n\n show () {\n if (!this.enabled) return\n\n if (this.active) return\n this.active = true\n\n this.hide({ active: true })\n\n addHighlight(this.delegate.targetElement, {\n outline: '3px dashed darkcyan',\n outlineOffset: '-2px'\n })\n\n addHighlight(this.delegate.morphElement, {\n outline: '3px dashed chocolate',\n outlineOffset: '3px'\n })\n\n this.renderingTooltip = this.createRenderingTooltip()\n this.targetTooltip = this.createTargetTooltip()\n this.triggerTooltip = this.createTriggerTooltip(\n this.targetTooltip,\n this.renderingTooltip\n )\n\n document\n .querySelectorAll('.leader-line')\n .forEach(el => (el.style.zIndex = 100000))\n\n const data = {\n morph: {\n partial: this.delegate.triggerElement.renders,\n id: this.delegate.triggerElement.morphs,\n status: this.delegate.morphElement ? 'OK' : 'Not Found'\n },\n trigger: { partial: null, id: null, status: 'Not Found' },\n target: { partial: null, id: null, status: 'Not Found' }\n }\n\n if (this.delegate.triggerElement) {\n data.trigger = {\n partial: this.delegate.triggerElement.partial,\n id: this.delegate.triggerElement.id,\n status: 'OK'\n }\n data.target.id = this.delegate.triggerElement.controls\n }\n\n if (this.delegate.targetElement)\n data.target = {\n partial: this.delegate.targetElement.partial,\n dom_id: this.delegate.targetElement.id,\n status: 'OK'\n }\n\n console.table(data)\n }\n\n hide ({ active: active = false }) {\n document\n .querySelectorAll('turbo-boost-devtool-tooltip')\n .forEach(tooltip => {\n attempt(() => tooltip.line.remove())\n attempt(() => tooltip.drag.remove())\n attempt(() => tooltip.lineToRendering.remove())\n attempt(() => tooltip.lineToTarget.remove())\n attempt(() => tooltip.remove())\n })\n\n document.querySelectorAll('[data-turbo-boost-highlight]').forEach(el => {\n if (!el.tagName.match(/turbo-boost-toggle-trigger/i)) removeHighlight(el)\n })\n\n this.active = active\n }\n\n get active () {\n return activeTarget === this.delegate\n }\n\n set active (value) {\n if (value) activeTarget = this.delegate\n else activeTarget = null\n }\n\n get enabled () {\n return supervisor.enabled(this.delegate.name)\n }\n\n static register (name, label) {\n supervisor.register(name, label)\n }\n\n createRenderingTooltip () {\n if (!this.delegate.triggerElement.renders)\n return console.debug(\n `Unable to create the rendering tooltip! The trigger element must set the 'renders' attribute.`\n )\n\n if (!this.delegate.triggerElement.morphs)\n return console.debug(\n `Unable to create the rendering tooltip! The trigger element specified the 'morphs' attrbiute but no element matches the DOM id: '${this.triggerElement.morphs}'`\n )\n\n const title = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 19l7-7 3 3-7 7-3-3z\"></path><path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\"></path><path d=\"M2 2l7.586 7.586\"></path><circle cx=\"11\" cy=\"11\" r=\"2\"></circle></svg>\n RENDERING - <${this.delegate.triggerElement.tagName.toLowerCase()}>\n `\n const subtitle = `\n <b>partial</b>: ${this.delegate.triggerElement.renders || 'unknown'}<br>\n <b>morphs</b>: ${this.delegate.triggerElement.morphs || 'unknown'}<br>\n `\n const content = `\n <div slot=\"content-top\" style=\"font-size:85%; font-style:italic; font-weight:100;\">\n The <b>TRIGGER</b> toggles the <b>TARGET</b> then renders the partial & morphs the element.<br>\n </div>\n `\n const tooltip = appendTooltip(title, subtitle, content, {\n id: `${this.delegate.id}-rendering`,\n backgroundColor: 'lightyellow',\n color: 'chocolate'\n })\n\n const coords = coordinates(this.delegate.morphElement)\n const top = Math.ceil(\n coords.top + coords.height / 2 - tooltip.offsetHeight / 2\n )\n const left = Math.ceil(coords.left + coords.width + 100)\n tooltip.style.top = `${top}px`\n tooltip.style.left = `${left}px`\n\n tooltip.line = new LeaderLine(tooltip, this.delegate.morphElement, {\n ...this.leaderLineOptions,\n color: 'chocolate'\n })\n\n tooltip.drag = new PlainDraggable(tooltip)\n return tooltip\n }\n\n createTargetTooltip () {\n if (!this.delegate.targetElement)\n return console.debug(\n `Unable to create the target tooltip! No element matches the DOM id: '${this.delegate.triggerElement.controls}'`\n )\n\n const title = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"6\"></circle><circle cx=\"12\" cy=\"12\" r=\"2\"></circle></svg>\n TARGET - <${this.delegate.targetElement.tagName.toLowerCase()}>\n `\n\n const tooltip = appendTooltip(\n title,\n this.delegate.targetTooltipData?.subtitle || '',\n this.delegate.targetTooltipData?.content || '',\n {\n id: `${this.delegate.id}-target`,\n backgroundColor: 'lightcyan',\n color: 'darkcyan',\n position: 'bottom'\n }\n )\n\n const coords = coordinates(this.delegate.targetElement)\n const top = Math.ceil(coords.top + tooltip.offsetHeight)\n const left = Math.ceil(coords.left + coords.width + tooltip.offsetWidth / 3)\n tooltip.style.top = `${top}px`\n tooltip.style.left = `${left}px`\n\n tooltip.line = new LeaderLine(tooltip, this.delegate.targetElement, {\n ...this.leaderLineOptions,\n color: 'darkcyan'\n })\n\n tooltip.drag = new PlainDraggable(tooltip)\n return tooltip\n }\n\n createTriggerTooltip (targetTooltip, renderingTooltip) {\n if (!this.delegate.triggerElement) return\n const title = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"></polygon></svg>\n TRIGGER - <${this.delegate.triggerElement.tagName.toLowerCase()}>\n `\n\n const tooltip = appendTooltip(\n title,\n this.delegate.triggerTooltipData?.subtitle || '',\n this.delegate.triggerTooltipData?.content || '',\n {\n id: `${this.delegate.id}-trigger`,\n backgroundColor: 'lavender',\n color: 'blueviolet'\n }\n )\n\n const coords = coordinates(this.delegate.triggerElement)\n const top = Math.ceil(coords.top - tooltip.offsetHeight * 2)\n const left = Math.ceil(coords.left + coords.width + tooltip.offsetWidth / 3)\n tooltip.style.top = `${top}px`\n tooltip.style.left = `${left}px`\n\n tooltip.line = new LeaderLine(this.delegate.triggerElement, tooltip, {\n ...this.leaderLineOptions,\n color: 'blueviolet'\n })\n\n if (targetTooltip) {\n tooltip.lineToTarget = new LeaderLine(tooltip, targetTooltip, {\n ...this.leaderLineOptions,\n color: 'blueviolet',\n middleLabel: this.delegate.targetLineLabel,\n size: 2.1\n })\n\n targetTooltip.drag.onMove = () => {\n targetTooltip.line.position()\n tooltip.lineToTarget?.position()\n tooltip.lineToRendering?.position()\n }\n }\n\n if (renderingTooltip) {\n tooltip.lineToRendering = new LeaderLine(tooltip, renderingTooltip, {\n ...this.leaderLineOptions,\n color: 'blueviolet',\n middleLabel: this.delegate.renderingLineLabel,\n size: 2.1\n })\n\n renderingTooltip.drag.onMove = () => {\n renderingTooltip.line.position()\n if (tooltip.lineToTarget) tooltip.lineToTarget.position()\n tooltip.lineToRendering?.position()\n }\n }\n\n tooltip.drag = new PlainDraggable(tooltip)\n tooltip.drag.onMove = () => {\n tooltip.line.position()\n if (tooltip.lineToTarget) tooltip.lineToTarget.position()\n if (tooltip.lineToRendering) tooltip.lineToRendering.position()\n }\n\n return tooltip\n }\n\n get leaderLineOptions () {\n return {\n dash: { animation: true },\n dropShadow: { opacity: 0.3 },\n endPlug: 'arrow3',\n endPlugSize: 1.7,\n size: 3,\n startPlug: 'disc',\n startPlugSize: 1\n }\n }\n}\n", "import devtools from '..'\nimport { Devtool, decorateElementWithDevtool } from '..'\n\nfunction defineTooltipData (element) {\n Object.defineProperties(element, {\n targetTooltipData: {\n get () {\n return {\n subtitle: `\n <b>identifier</b>: ${element.identifier}<br>\n <b>query</b>: ${element.query}\n `,\n content: `\n <div slot=\"content-top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentcolor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline></svg>\n <b>element log</b>\n </div>\n ${element.targetElementLog.queue\n .slice(-10)\n .map(logEntry => `<div slot=\"content\">${logEntry}</div>`)\n .join('')}\n `\n }\n }\n },\n\n triggerTooltipData: {\n get () {\n return {\n subtitle: `\n <b>identifier</b>: ${this.identifier}<br>\n <b>only</b>: ${this.getAttribute('only') || ''}<br>\n <b>url</b>: ${this.getAttribute('url') || location.href}<br>\n <b>debounce (client-side)</b>: ${this.debounce}<br>\n <b>ignore-inner-updates</b>: ${this.hasAttribute(\n 'ignore-inner-updates'\n )}\n `,\n content: `\n <div slot=\"content-top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentcolor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline></svg>\n <b>element log</b>\n </div>\n ${element.triggerElementLog.queue\n .slice(-10)\n .map(logEntry => `<div slot=\"content\">${logEntry}</div>`)\n .join('')}\n `\n }\n }\n }\n })\n}\n\nfunction initialize () {\n document.addEventListener('turbo-boost:devtools-start', () =>\n Devtool.register('updates-for', 'updates-for')\n )\n\n window.CableReady.devtools = devtools\n\n document.addEventListener('turbo:load', () => {\n document.querySelectorAll('updates-for').forEach(element => {\n decorateElementWithDevtool(element, 'updates-for', 'updates')\n defineTooltipData(element)\n element.initializeDevtool()\n })\n\n document.querySelectorAll('cable-ready-updates-for').forEach(element => {\n decorateElementWithDevtool(element, 'updates-for', 'updates')\n defineTooltipData(element)\n element.initializeDevtool()\n })\n\n CableReady.devtools.start()\n })\n}\n\ninitialize()\n", "import supervisor from './supervisor'\nimport Devtool from './devtool'\n\nconst { restart, start, stop } = supervisor\n\nfunction decorateElementWithDevtool (element, name, label) {\n Object.assign(element, {\n initializeDevtool () {\n const mouseenter = () => this.devtool.show()\n\n addEventListener('turbo-boost:devtools-start', () => {\n this.devtool = new Devtool(this)\n this.addEventListener('mouseenter', mouseenter)\n })\n\n addEventListener('turbo-boost:devtools-stop', () => {\n this.removeEventListener('mouseenter', mouseenter)\n this.removeDevtool()\n })\n\n this.dispatchEvent(\n new CustomEvent('turbo-boost:devtools-connect', { bubbles: true })\n )\n },\n hideDevtool () {\n this.devtool?.hide({ active: false })\n },\n removeDevtool () {\n this.devtool.hide({ active: false })\n this.devtool.unregisterEventListeners()\n delete this.devtool\n },\n name,\n targetLineLabel: label\n })\n\n // the element references below are defaults that are placed on the receiver if not present\n const properties = ['triggerElement', 'morphElement', 'targetElement']\n\n properties\n .filter(property => {\n return element[property] === undefined\n })\n .forEach(property => {\n Object.defineProperty(element, property, {\n get () {\n return element\n }\n })\n })\n}\n\n;(async () => {\n // we cannot detect customElements.get(\"cable-ready-updates-for\") because they are lazily initialized\n if (window.CableReady) await import('./delegates/cable_ready.js')\n})()\n\nexport { Devtool, decorateElementWithDevtool }\n\nexport default { restart, start, stop }\n", "export default class TurboBoostElement extends HTMLElement {\n constructor(html) {\n super()\n this.devtool = 'unknown'\n this.attachShadow({ mode: 'open' })\n this.shadowRoot.innerHTML = html || '<slot></slot>'\n }\n\n connectedCallback() {\n this.ensureId()\n }\n\n ensureId() {\n if (this.id.trim().length) return\n this.id = `${this.tagName}-${this.uuidv4()}`.toLowerCase()\n }\n\n // SEE: https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid\n uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\n )\n }\n\n get viewStack() {\n const value = this.getAttribute('view-stack')\n if (!value) return []\n return JSON.parse(value)\n }\n\n get partial() {\n return this.viewStack[0]\n }\n}\n", "import TurboBoostElement from '../../turbo_boost_element'\n\nconst html = `\n <turbo-boost>\n <slot name=\"busy\" hidden></slot>\n <slot></slot>\n </turbo-boost>\n`\n\nexport const busyDelay = 100 // milliseconds - time to wait before showing busy element\nexport const busyDuration = 400 // milliseconds - minimum time that busy element is shown\n\nexport default class ToggleElement extends TurboBoostElement {\n constructor() {\n super(html)\n }\n\n // TODO: Should we timeout after a theoretical max wait time?\n // The idea being that a server error occurred and the toggle failed.\n showBusyElement() {\n clearTimeout(this.showBusyElementTimeout)\n clearTimeout(this.hideBusyElementTimeout)\n\n if (!this.busyElement) return\n\n this.busyStartedAt = Date.now() + busyDelay\n this.showBusyElementTimeout = setTimeout(() => {\n this.busySlotElement.hidden = false\n this.defaultSlotElement.hidden = true\n }, busyDelay)\n }\n\n hideBusyElement() {\n clearTimeout(this.showBusyElementTimeout)\n clearTimeout(this.hideBusyElementTimeout)\n\n if (!this.busyElement) return\n\n let delay = busyDuration - (Date.now() - this.busyStartedAt)\n if (delay < 0) delay = 0\n\n delete this.busyStartedAt\n this.hideBusyElementTimeout = setTimeout(() => {\n this.busySlotElement.hidden = true\n this.defaultSlotElement.hidden = false\n }, delay)\n }\n\n get busyElement() {\n return this.querySelector(':scope > [slot=\"busy\"]')\n }\n\n get busySlotElement() {\n return this.shadowRoot.querySelector('slot[name=\"busy\"]')\n }\n\n get defaultSlotElement() {\n return this.shadowRoot.querySelector('slot:not([name])')\n }\n\n // indicates if an rpc call is active/busy\n get busy() {\n return this.getAttribute('busy') === 'true'\n }\n\n // indicates if an rpc call is active/busy\n set busy(value) {\n value = !!value\n if (this.busy === value) return\n this.setAttribute('busy', value)\n if (value) this.showBusyElement()\n else this.hideBusyElement()\n }\n\n get busyStartedAt() {\n if (!this.dataset.busyStartedAt) return 0\n return Number(this.dataset.busyStartedAt)\n }\n\n set busyStartedAt(value) {\n this.dataset.busyStartedAt = value\n }\n}\n", "import ToggleElement from '../toggle_element'\n\nexport default class ToggleTargetElement extends ToggleElement {\n connectedCallback() {\n super.connectedCallback()\n\n this.mouseenterHandler = this.onMouseenter.bind(this)\n this.addEventListener('mouseenter', this.mouseenterHandler)\n\n this.collapseHandler = this.collapse.bind(this)\n this.collapseNowHandler = this.collapseNow.bind(this)\n\n this.collapseOn.forEach(entry => {\n const parts = entry.split('@')\n const name = parts[0]\n\n if (parts.length > 1) {\n const target = parts[1].match(/^self|window$/) ? self : self[parts[1]]\n target.addEventListener(name, this.collapseNowHandler)\n } else {\n this.addEventListener(name, this.collapseHandler)\n }\n })\n }\n\n disconnectedCallback() {\n this.removeEventListener('mouseenter', this.mouseenterHandler)\n\n this.collapseOn.forEach(entry => {\n const parts = entry.split('@')\n const name = parts[0]\n\n if (parts.length > 1) {\n const target = parts[1].match(/^self|window$/) ? self : self[parts[1]]\n target.removeEventListener(name, this.collapseNowHandler)\n } else {\n this.removeEventListener(name, this.collapseHandler)\n }\n })\n }\n\n // TODO: get cached content working properly\n // perhaps use a mechanic other than morph\n\n // TODO: implement cache (similar to Turbo Drive restoration visit)\n cacheHTML() {\n // this.cachedHTML = this.innerHTML\n }\n\n // TODO: implement cache (similar to Turbo Drive restoration visit)\n renderCachedHTML() {\n // if (!this.cachedHTML) return\n // this.innerHTML = this.cachedHTML\n }\n\n onMouseenter() {\n clearTimeout(this.collapseTimeout)\n }\n\n collapse(delay = 250) {\n clearTimeout(this.collapseTimeout)\n if (this.busy) return\n if (typeof delay !== 'number') delay = 250\n\n if (delay > 0) return (this.collapseTimeout = setTimeout(() => this.collapse(0), delay))\n\n this.innerHTML = ''\n try {\n this.expanded = false\n this.triggerElement.hideDevtool()\n } catch {}\n }\n\n collapseNow(event) {\n if (event.target.closest('turbo-boost-devtool-tooltip')) return\n this.collapse(0)\n }\n\n collapseMatches() {\n document.querySelectorAll(this.collapseSelector).forEach(el => {\n if (el.id === this.id) return\n if (el.collapse) el.collapse(0)\n })\n }\n\n get collapseSelector() {\n return this.triggerElement.collapseSelector || this.getAttribute('collapse-selector')\n }\n\n get focusSelector() {\n return this.getAttribute('focus-selector')\n }\n\n // the active trigger\n get triggerElement() {\n return document.getElementById(this.labeledBy)\n }\n\n // all triggers\n get triggerElements() {\n return document.querySelectorAll(`[aria-controls=\"${this.id}\"]`)\n }\n\n // the dom id of the active trigger\n get labeledBy() {\n return this.getAttribute('aria-labeledby')\n }\n\n set labeledBy(value) {\n return this.setAttribute('aria-labeledby', value)\n }\n\n get collapseOn() {\n const value = this.getAttribute('collapse-on')\n if (!value) return []\n return JSON.parse(value)\n }\n\n get expanded() {\n return this.triggerElement ? this.triggerElement.expanded : false\n }\n\n set expanded(value) {\n this.triggerElements.forEach(el => (el.expanded = value))\n }\n\n get busy() {\n return this.triggerElement && this.triggerElement.busy\n }\n}\n", "let focusTimeout\n\nfunction deactivateTrixAttributes(editor) {\n const attributes = ['bold', 'bullet', 'code', 'heading1', 'href', 'italic', 'number', 'quote', 'strike']\n attributes.forEach(name => editor.deactivateAttribute(name))\n}\n\nfunction focusTrixEditorElement(element) {\n if (element.value.length === 0) return\n\n const editor = element.editor\n\n // move cursor to the end\n let lastRange = []\n while (lastRange[0] !== editor.getSelectedRange()[0] && lastRange[1] !== editor.getSelectedRange()[1]) {\n lastRange = editor.getSelectedRange()\n editor.moveCursorInDirection('forward')\n }\n\n // insert an empty char and select it\n editor.insertString(' ')\n editor.moveCursorInDirection('forward')\n editor.setSelectedRange([lastRange[1], editor.getSelectedRange()[1]])\n\n // deactivate all trix features for the selection\n deactivateTrixAttributes(editor)\n\n // move cursor to end and collapse the selection\n editor.setSelectedRange([editor.getSelectedRange()[1], editor.getSelectedRange()[1]])\n}\n\nfunction debouncedFocus(element) {\n clearTimeout(focusTimeout)\n\n focusTimeout = setTimeout(() => {\n if (!element) return\n\n element.focus()\n const trixEditorElement = element.closest('trix-editor')\n\n try {\n if (trixEditorElement) {\n focusTrixEditorElement(trixEditorElement)\n } else {\n element.selectionStart = element.selectionEnd = element.value.length\n }\n } catch (_) {\n } finally {\n element.scrollIntoView({ block: 'center', behavior: 'smooth' })\n }\n }, 100)\n}\n\nexport default element => debouncedFocus(element)\n", "import { Devtool, decorateElementWithDevtool } from '@turbo-boost/devtools'\n\nimport ToggleElement, { busyDuration } from '../toggle_element'\nimport focus from './focus'\n\ndocument.addEventListener('turbo-boost:devtools-start', () => Devtool.register('toggle', 'toggles'))\n\nlet currentFocusSelector\n\nexport default class ToggleTriggerElement extends ToggleElement {\n constructor() {\n super()\n\n decorateElementWithDevtool(this, 'toggle', 'toggles')\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n const { start: commandStartEvent } = TurboBoost.Commands.events\n this.commandStartHandler = this.onCommandStart.bind(this)\n this.addEventListener(commandStartEvent, this.commandStartHandler)\n\n const { before: beforeInvokeEvent } = TurboBoost.Streams.invokeEvents\n this.beforeInvokeHandler = this.onBeforeInvoke.bind(this)\n addEventListener(beforeInvokeEvent, this.beforeInvokeHandler)\n\n // fires after receiving the toggle morph Turbo Stream but before it is executed\n // this.addEventListener(TurboBoost.Commands.events.success, event => {\n // // TODO: imlement cache, this.targetElement.cacheHTML()\n // })\n\n this.initializeDevtool()\n }\n\n disconnectedCallback() {\n // delay cleanup because the trigger may have been morphed out of the DOM,\n // but it's needed to apply behavior like focus etc...\n setTimeout(() => {\n const { start: commandStartEvent } = TurboBoost.Commands.events\n this.removeEventListener(commandStartEvent, this.commandStartHandler)\n\n const { before: beforeInvokeEvent } = TurboBoost.Streams.invokeEvents\n removeEventListener(beforeInvokeEvent, this.beforeInvokeHandler)\n\n this.removeDevtool()\n }, 1000)\n }\n\n onCommandStart(event) {\n currentFocusSelector = this.focusSelector\n this.targetElement.labeledBy = this.id\n this.targetElement.collapseMatches()\n this.busy = true\n // TODO: implement cache - this.targetElement.renderCachedHTML()\n }\n\n // runs before an invoke turbo stream is executed\n onBeforeInvoke(event) {\n // return early if we're not the element responsible for this invoke\n if (event.detail.method !== 'morph') return\n if (event.target.id !== this.morphs) return\n const selector = `turbo-boost-toggle-target[aria-labeledby=\"${this.id}\"]`\n if (!event.target.querySelector(selector)) return\n\n // ensure the busy element is shown long enough for a good user experience\n // we accomplish this by modifying the event.detail with invoke instructions i.e. { delay }\n // SEE: the TurboBoost Streams library for details on how this works\n const duration = Date.now() - this.busyStartedAt\n let delay = busyDuration - duration\n if (delay < 10) delay = 10\n event.detail.invoke = { delay }\n\n // runs before the morph is executed\n setTimeout(() => {\n this.busy = false\n this.morphToggleTriggerElements.forEach(el => (el.busy = false))\n }, delay - 10)\n\n // runs after the morph is executed\n setTimeout(() => focus(this.targetElement.querySelector(currentFocusSelector)), delay + 100)\n }\n\n // a list of views shared between the trigger and target\n get sharedViews() {\n if (!this.targetElement) return []\n if (!this.targetElement.viewStack) return []\n const reducer = (memo, view) => {\n if (this.targetElement.viewStack.includes(view)) memo.push(view)\n return memo\n }\n return this.viewStack.reduce(reducer.bind(this), [])\n }\n\n // the partial to render\n get renders() {\n return this.getAttribute('renders')\n }\n\n // the renderered partial's top wrapping dom_id\n get morphs() {\n return this.getAttribute('morphs')\n }\n\n // all toggle elements contained by the `morphElement`\n get morphToggleTriggerElements() {\n return Array.from(this.morphElement.querySelectorAll('turbo-boost-toggle-trigger'))\n }\n\n // the target's dom_id\n get controls() {\n return this.getAttribute('aria-controls')\n }\n\n get collapseSelector() {\n return this.getAttribute('collapse-selector')\n }\n\n get focusSelector() {\n return this.getAttribute('focus-selector') || this.targetElement.focusSelector\n }\n\n // indicates if the toggle state should be remembered across requests\n get remember() {\n return this.getAttribute('remember') === 'true'\n }\n\n set remember(value) {\n return this.setAttribute('remember', !!value)\n }\n\n // indicates if the target is expanded\n get expanded() {\n return this.getAttribute('aria-expanded') === 'true'\n }\n\n set expanded(value) {\n this.setAttribute('aria-expanded', !!value)\n }\n\n // indicates if the target is expanded\n get collapsed() {\n return !this.expanded\n }\n\n // ------ DevToolDelegate ------\n get command() {\n return this.dataset.turboCommand\n }\n\n get renderingLineLabel() {\n return 'renders & morphs'\n }\n\n // the morph element\n get morphElement() {\n if (!this.morphs) return null\n return document.getElementById(this.morphs)\n }\n\n // the target element\n get targetElement() {\n if (!this.controls) return null\n return document.getElementById(this.controls)\n }\n\n get triggerTooltipData() {\n let content = this.triggerElement.viewStack\n .reverse()\n .map((view, index) => {\n return this.triggerElement.sharedViews.includes(view)\n ? `<div slot=\"content\">${index + 1}. ${view}</div>`\n : `<div slot=\"content-bottom\">${index + 1}. ${view}</div>`\n }, this)\n .join('')\n\n return {\n subtitle: `\n <b>id</b>: ${this.triggerElement.id}<br>\n <b>aria-controls</b>: ${this.triggerElement.controls}<br>\n <b>aria-expanded</b>: ${this.triggerElement.expanded}<br>\n <b>remember</b>: ${this.triggerElement.remember}<br>\n `,\n content: `\n <div slot=\"content-top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline></svg>\n <b>View Stack</b>\n </div>\n ${content}\n `\n }\n }\n\n get targetTooltipData() {\n let content = this.targetElement.viewStack\n .reverse()\n .map((view, index) => {\n return this.triggerElement.sharedViews.includes(view)\n ? `<div slot=\"content\">${index + 1}. ${view}</div>`\n : `<div slot=\"content-bottom\">${index + 1}. ${view}</div>`\n }, this)\n .join('')\n\n return {\n subtitle: `<b>id</b>: ${this.targetElement.id}<br>\n <b>aria-labeled-by</b>: ${this.targetElement.labeledBy}<br>\n`,\n content: `\n <div slot=\"content-top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline></svg>\n <b>View Stack</b>\n </div>\n ${content}\n `\n }\n }\n}\n", "import TurboBoostElement from './turbo_boost_element'\nimport ToggleTargetElement from './toggle_elements/target_element'\nimport ToggleTriggerElement from './toggle_elements/trigger_element'\n\n// Valid custom element names: https://html.spec.whatwg.org/#valid-custom-element-name\n\ncustomElements.define('turbo-boost', TurboBoostElement)\ncustomElements.define('turbo-boost-toggle-target', ToggleTargetElement)\ncustomElements.define('turbo-boost-toggle-trigger', ToggleTriggerElement)\n", "import '@turbo-boost/commands'\nimport devtools from '@turbo-boost/devtools'\nimport './elements'\n\nself.TurboBoost = self.TurboBoost || {}\nself.TurboBoost.devtools = devtools\nself.TurboBoost.Elements = {}\n\nexport default self.TurboBoost.Elements\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../../../javascript/index.js", "../../../../node_modules/@turbo-boost/devtools/src/version.js", "../../../../node_modules/@turbo-boost/devtools/src/utils/dom.js", "../../../../node_modules/@turbo-boost/devtools/src/elements/devtool_element.js", "../../../../node_modules/@turbo-boost/devtools/src/elements/supervisor_element.js", "../../../../node_modules/@turbo-boost/devtools/src/elements/tooltip_element.js", "../../../../node_modules/@turbo-boost/devtools/src/dependencies.js", "../../../../node_modules/@turbo-boost/devtools/src/supervisor.js", "../../../../node_modules/@turbo-boost/devtools/src/devtool.js", "../../../../node_modules/@turbo-boost/devtools/src/index.js", "../../../javascript/version.js", "../../../javascript/elements/turbo_boost_element/index.js", "../../../javascript/elements/toggle_elements/toggle_element/index.js", "../../../javascript/elements/toggle_elements/target_element/index.js", "../../../javascript/elements/toggle_elements/trigger_element/focus.js", "../../../javascript/elements/toggle_elements/trigger_element/index.js", "../../../javascript/elements/index.js"],
|
|
4
|
+
"sourcesContent": ["import '@turbo-boost/commands'\nimport devtools from '@turbo-boost/devtools'\nimport VERSION from './version'\nimport './elements'\n\nself.TurboBoost = self.TurboBoost || {}\nself.TurboBoost.devtools = devtools\nself.TurboBoost.Elements = { VERSION }\n\nexport default self.TurboBoost.Elements\n", "export default '0.0.6'\n", "export function template(html) {\n let template = document.createElement('template')\n template.innerHTML = html\n return template\n}\n\nexport function appendHTML(html, parent) {\n parent = parent || document.body\n const clone = template(html).content.cloneNode(true)\n const child = clone.querySelector('*')\n return parent.appendChild(child)\n}\n\nexport function addHighlight(element, options = {}) {\n if (!element) return\n removeHighlight(element)\n let { outline, outlineOffset } = options\n\n outline = outline || 'dashed 3px red'\n outlineOffset = outlineOffset || '0px'\n\n element.originalStyles = element.originalStyles || {\n display: element.style.display,\n minHeight: element.style.minHeight,\n minWidth: element.style.minWidth,\n outline: element.style.outline,\n outlineOffset: element.style.outlineOffset\n }\n\n if (\n getComputedStyle(element).display.match(/^inline$/i) &&\n element.offsetWidth === 0 &&\n element.offsetHeight === 0\n ) {\n element.style.display = 'inline-block'\n element.style.minHeight = '2px'\n element.style.minWidth = '2px'\n }\n element.style.outline = outline\n element.style.outlineOffset = outlineOffset\n element.dataset.turboBoostHighlight = true\n}\n\nexport function removeHighlight(element) {\n if (!element) return\n if (element.originalStyles) {\n for (const [key, value] of Object.entries(element.originalStyles))\n value ? (element.style[key] = value) : (element.style[key] = '')\n delete element.originalStyles\n }\n delete element.dataset.turboBoostHighlight\n}\n\nexport function coordinates(element) {\n if (!element) return {}\n const rect = element.getBoundingClientRect()\n const width = element.offsetWidth\n const height = element.offsetHeight\n const top = rect.top + window.scrollY\n const left = rect.left + window.scrollX\n const right = left + width\n const bottom = top + height\n return { top, left, right, bottom, width, height }\n}\n\nexport function attempt(callback) {\n try {\n callback()\n } catch {}\n}\n", "export default class DevtoolElement extends HTMLElement {\n constructor() {\n super()\n this.attachShadow({ mode: 'open' })\n this.shadowRoot.innerHTML = this.html\n this.labelElement.addEventListener('click', event => {\n event.preventDefault()\n this.toggle()\n })\n this.checkboxElement.addEventListener('change', event =>\n this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n )\n }\n\n toggle() {\n this.checked ? this.uncheck() : this.check()\n }\n\n check() {\n this.checkboxElement.checked = true\n this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n }\n\n uncheck() {\n this.checkboxElement.checked = false\n this.dispatchEvent(new CustomEvent('change', { bubbles: true }))\n }\n\n get name() {\n return this.getAttribute('name')\n }\n\n get checked() {\n return this.checkboxElement.checked\n }\n\n get checkboxElement() {\n return this.shadowRoot.querySelector('input')\n }\n\n get labelElement() {\n return this.shadowRoot.querySelector('label')\n }\n\n get html() {\n return `\n <style>${this.stylesheet}</style>\n <div>\n <input name=\"checkbox\" type=\"checkbox\">\n <label for=\"checkbox\"><slot name=\"label\"></slot></label>\n </div>\n `\n }\n\n get stylesheet() {\n return `\n :host, :host * {\n cursor: pointer;\n }\n\n div {\n display: flex;\n margin-right: 10px;\n }\n\n input:checked + label{\n font-weight: bold;\n }\n\n label {\n color: black;\n }\n `\n }\n}\n", "import { appendHTML } from '../utils/dom.js'\n\nexport default class SupervisorElement extends HTMLElement {\n constructor() {\n super()\n this.enabledDevtools = {}\n this.attachShadow({ mode: 'open' })\n this.shadowRoot.innerHTML = this.html\n this.shadowRoot.querySelector('button').addEventListener('click', () =>\n this.dispatchEvent(\n new CustomEvent('turbo-boost:devtools-close', {\n bubbles: true\n })\n )\n )\n\n this.addEventListener('change', event => {\n const devtoolElement = event.target\n const { checked, name } = devtoolElement\n checked ? this.enableDevtool(name) : this.disableDevtool(name)\n })\n }\n\n enableDevtool(name) {\n if (this.enabledDevtools[name]) return\n this.enabledDevtools[name] = true\n this.dispatchEvent(\n new CustomEvent('turbo-boost:devtool-enable', {\n bubbles: true,\n detail: { name: name }\n })\n )\n }\n\n disableDevtool(name) {\n if (!this.enabledDevtools[name]) return\n delete this.enabledDevtools[name]\n this.dispatchEvent(\n new CustomEvent('turbo-boost:devtool-disable', {\n bubbles: true,\n detail: { name: name }\n })\n )\n }\n\n close() {\n this.devtoolElements.forEach(el => {\n if (el.checked) el.uncheck()\n })\n this.remove()\n }\n\n get devtoolElements() {\n return this.querySelectorAll('[slot=\"devtool\"]')\n }\n\n get closeElement() {\n return this.querySelector('button')\n }\n\n get html() {\n return `\n <style>${this.stylesheet}</style>\n <div>\n <img src=\"https://ik.imagekit.io/hopsoft/turbo-boost-logo_zHiiimlvT.webp?ik-sdk-version=javascript-1.4.3&updatedAt=1671722004342\">\n <slot name=\"devtool\"></slot>\n <button>\u2715</button>\n </div>\n `\n }\n\n get stylesheet() {\n return `\n :host {\n background-color: gainsboro;\n border-radius: 5px;\n bottom: 20px;\n display: block;\n filter: drop-shadow(3px 3px 3px rgba(0,0,0,0.3));\n left: 50%;\n outline-offset: 1px;\n outline: solid 2px black;\n padding: 5px 10px;\n position: fixed;\n transform: translateX(-50%);\n z-index: 8999;\n }\n\n * {\n -webkit-user-select: none;\n font-family: helvetica, sans-serif;\n font-size: 1rem;\n user-select: none;\n }\n\n img {\n align-self: center;\n cursor: grab;\n height: 25px;\n margin-left: -5px;\n vertical-align: middle;\n }\n\n div {\n display: flex;\n gap: 0 5px;\n position: relative;\n }\n\n [slot=\"devtool\"] {\n align-self: center;\n }\n\n button {\n align-self: center;\n background-color: darkgray;\n border-radius: 50%;\n border: none;\n color: black;\n cursor: pointer;\n font-size: 10px;\n height: 18px;\n line-height: 18px;\n margin-right: -5px;\n opacity: 0.5;\n outline: solid 1px black;\n padding: 0 2px;\n width: 18px;\n }\n\n button:hover {\n opacity: 1;\n }\n `\n }\n}\n", "export default class TooltipElement extends HTMLElement {\n constructor() {\n super()\n this.attachShadow({ mode: 'open' })\n this.shadowRoot.innerHTML = this.html\n }\n\n connectedCallback() {\n const savedTransform = localStorage.getItem(`turbo-boost-devtools-${location.href}-${this.id}-transform`)\n\n if (savedTransform) {\n this.style.transform = savedTransform\n }\n }\n\n disconnectedCallback() {\n if (this.id !== 'undefined' && this.id !== '') {\n localStorage.setItem(`turbo-boost-devtools-${location.href}-${this.id}-transform`, this.style.transform)\n }\n }\n\n get color() {\n return this.getAttribute('color') || 'darkslategray'\n }\n\n get backgroundColor() {\n return this.getAttribute('background-color') || 'gainsboro'\n }\n\n get position() {\n return this.getAttribute('position') || 'top'\n }\n\n get html() {\n return `\n <style>${this.stylesheet}</style>\n <div role=\"container\">\n <div role=\"title\">\n <slot name=\"title\"></slot>\n <img src=\"https://ik.imagekit.io/hopsoft/turbo-boost-logo_zHiiimlvT.webp?ik-sdk-version=javascript-1.4.3&updatedAt=1671722004342\">\n </div>\n <slot name=\"subtitle\"></slot>\n <slot name=\"content-top\"></slot>\n <slot name=\"content\"></slot>\n <slot name=\"content-bottom\"></slot>\n </div>\n `\n }\n\n get stylesheet() {\n return `\n :host {\n display: block;\n position: absolute;\n z-index: 8999;\n }\n\n * {\n color: ${this.color}\n font-size: 1rem;\n }\n\n [role=\"container\"] {\n background-color: ${this.backgroundColor};\n border-radius: 15px;\n filter: drop-shadow(3px 3px 3px rgba(0,0,0,0.3));\n font-family: monospace;\n min-height: 30px;\n min-width: 100px;\n opacity: 0.9;\n outline-offset: 1px;\n outline: dashed 3px ${this.color};\n padding: 12px;\n position: relative;\n white-space: nowrap;\n }\n\n [role=\"title\"] {\n display: flex;\n }\n\n [role=\"title\"] slot[name=\"title\"] {\n color: ${this.color};\n display: block;\n flex-grow: 1;\n font-weight: bold;\n }\n\n [role=\"title\"] img {\n height: 25px;\n vertical-align: middle;\n }\n\n slot[name=\"subtitle\"] {\n border-bottom: dotted 1px ${this.color};\n border-top: dotted 1px ${this.color};\n color: ${this.color};\n display: block;\n font-size: 0.8rem;\n font-weight: lighter;\n margin-bottom: 12px;\n margin-top: 8px;\n padding-bottom: 4px;\n padding-top: 4px;\n width: 100%;\n }\n\n slot[name=\"content-top\"],\n slot[name=\"content\"],\n slot[name=\"content-bottom\"] {\n display: block;\n font-weight: normal;\n }\n\n slot[name=\"content-top\"] {\n color: ${this.color};\n margin-bottom: 8px;\n }\n\n slot[name=\"content\"],\n slot[name=\"content-bottom\"] {\n opacity: 0.7;\n padding-left: 12px;\n }\n\n slot[name=\"content\"] {\n color: ${this.color};\n }\n\n slot[name=\"content-bottom\"] {\n color: red;\n }\n `\n }\n}\n", "const added = []\n\nconst dependencies = {\n LeaderLine: {\n src: 'https://cdnjs.cloudflare.com/ajax/libs/leader-line/1.0.7/leader-line.min.js',\n integrity:\n 'sha512-0dNdzMjpT6pJdFGF1DwybFCfm3K/lzHhxaMXC/92J9/DZujHlqYFqmhTOAoD0o+LkeEsVK2ar/ESs7/Q2B6wJg==',\n global: 'LeaderLine'\n },\n\n PlainDraggable: {\n src: 'https://cdn.jsdelivr.net/npm/plain-draggable@2.5.14/plain-draggable.min.js',\n global: 'PlainDraggable'\n }\n}\n\nfunction exists(dependency) {\n if (dependency.global && self[dependency.global]) return true\n if (document.querySelector(`[src='${dependency.src}']`)) return true\n return added.includes(dependency)\n}\n\nfunction add(dependency) {\n if (exists(dependency)) return\n added.push(dependency)\n\n const { src, integrity } = dependency\n const script = document.createElement('script')\n script.setAttribute('src', src)\n script.setAttribute('crossorigin', 'anonymous')\n script.setAttribute('referrerpolicy', 'no-referrer')\n if (integrity) script.setAttribute('integrity', integrity)\n document.head.appendChild(script)\n}\n\nfunction remove(dependency) {\n if (!added.includes(dependency)) return\n added.splice(added.indexOf(dependency), 1)\n\n const { src } = dependency\n const el = document.querySelector(`script[src='${src}']`)\n if (el) el.remove()\n if (dependency.global && self[dependency.global]) self[dependency.global] = null\n}\n\nfunction removeAll() {\n ;[...added].forEach(dependency => remove(dependency))\n}\n\nexport default { ...dependencies, add, remove, removeAll }\n", "import { appendHTML } from './utils/dom'\nimport DevtoolElement from './elements/devtool_element'\nimport SupervisorElement from './elements/supervisor_element'\nimport TooltipElement from './elements/tooltip_element'\nimport dependencies from './dependencies'\n\ncustomElements.define('turbo-boost-devtool', DevtoolElement)\ncustomElements.define('turbo-boost-devtool-supervisor', SupervisorElement)\ncustomElements.define('turbo-boost-devtool-tooltip', TooltipElement)\n\nlet supervisorElement\n\nfunction makeDraggable() {\n if (!supervisorElement) return\n try {\n new PlainDraggable(supervisorElement)\n } catch {\n setTimeout(makeDraggable, 200)\n }\n}\n\nfunction stop() {\n if (stopped()) return\n supervisorElement.close()\n supervisorElement.dispatchEvent(\n new CustomEvent('turbo-boost:devtools-stop', {\n bubbles: true\n })\n )\n supervisorElement = null\n dependencies.removeAll()\n}\n\nfunction start() {\n if (started()) return\n dependencies.add(dependencies.LeaderLine)\n dependencies.add(dependencies.PlainDraggable)\n supervisorElement = appendHTML('<turbo-boost-devtool-supervisor></turbo-boost-devtool-supervisor>')\n setTimeout(makeDraggable, 200)\n supervisorElement.dispatchEvent(\n new CustomEvent('turbo-boost:devtools-start', {\n bubbles: true\n })\n )\n}\n\nfunction restart() {\n const enabledList = supervisorElement ? Object.keys(supervisorElement.enabledDevtools) : []\n\n stop()\n start()\n\n supervisorElement.devtoolElements.forEach(el => {\n if (enabledList.includes(el.name)) el.check()\n })\n}\n\nfunction started() {\n return !!supervisorElement\n}\n\nfunction stopped() {\n return !started()\n}\n\nlet restartTimeout\nfunction debouncedRestart() {\n clearTimeout(restartTimeout)\n restartTimeout = setTimeout(restart, 25)\n}\n\nfunction autoRestart() {\n if (started()) debouncedRestart()\n}\n\naddEventListener('turbo:load', autoRestart)\naddEventListener('turbo-frame:load', autoRestart)\naddEventListener('turbo-boost:devtools-connect', autoRestart)\naddEventListener('turbo-boost:devtools-close', stop)\n\nif (window.TurboBoost) {\n addEventListener(TurboBoost.Commands.events.success, autoRestart)\n addEventListener(TurboBoost.Commands.events.finish, autoRestart)\n}\n\nfunction register(name, label) {\n if (!supervisorElement) return\n return appendHTML(\n `\n <turbo-boost-devtool name=\"${name}\" slot=\"devtool\">\n <span slot=\"label\">${label}</span>\n </turbo-boost-devtool>\n `,\n supervisorElement\n )\n}\n\nfunction enabled(name) {\n if (!supervisorElement) return false\n return supervisorElement.enabledDevtools[name]\n}\n\nexport default {\n enabled,\n register,\n start,\n stop,\n restart: debouncedRestart,\n get started() {\n return started()\n },\n get stopped() {\n return stopped()\n }\n}\n", "// Icons courtesy of https://feathericons.com/\nimport supervisor from './supervisor'\nimport { appendHTML, addHighlight, attempt, coordinates, removeHighlight } from './utils/dom.js'\n\nfunction appendTooltip(title, subtitle, content, options = {}) {\n let { backgroundColor, color, position, id } = options\n color = color || 'white'\n position = position || 'top'\n return appendHTML(`\n <turbo-boost-devtool-tooltip id=\"${id}\" position=\"${position}\" background-color=\"${backgroundColor}\" color=\"${color}\">\n <div slot='title'>${title}</div>\n <div slot='subtitle'>${subtitle}</div>\n ${content}\n </turbo-boost-devtool-tooltip>\n `)\n}\n\nlet activeTarget\n\nexport default class Devtool {\n constructor(delegate) {\n this.delegate = delegate\n\n let hideTimeout\n const debouncedHide = () => {\n clearTimeout(hideTimeout)\n hideTimeout = setTimeout(this.hide({ active: false }), 25)\n }\n\n this.eventListeners['turbo-boost:devtool-enable'] = event => {\n // LeaderLine.positionByWindowResize = false\n const { name } = event.detail\n if (name !== this.delegate.name) return\n\n addHighlight(this.delegate.triggerElement, {\n outline: '3px dashed blueviolet',\n outlineOffset: '2px'\n })\n\n this.hide({ active: false })\n if (this.active) this.show()\n }\n\n this.eventListeners['turbo-boost:devtool-disable'] = event => {\n const { name } = event.detail\n if (name === this.delegate.name) removeHighlight(this.delegate.triggerElement)\n }\n\n this.eventListeners['click'] = event => {\n if (event.target.closest('turbo-boost-devtool-tooltip')) return\n debouncedHide()\n }\n\n this.eventListeners['turbo:load'] = debouncedHide\n this.eventListeners['turbo-frame:load'] = debouncedHide\n if (window.TurboBoost) {\n this.eventListeners[TurboBoost.Commands.events.finish] = debouncedHide\n }\n\n this.registerEventListeners()\n }\n\n registerEventListeners() {\n Object.entries(this.eventListeners).forEach(([type, listener]) => {\n addEventListener(type, listener)\n })\n }\n\n unregisterEventListeners() {\n Object.entries(this.eventListeners).forEach(([type, listener]) => {\n removeEventListener(type, listener)\n })\n }\n\n get eventListeners() {\n return this._eventListeners || (this._eventListeners = {})\n }\n\n show() {\n if (!this.enabled) return\n\n if (this.active) return\n this.active = true\n\n this.hide({ active: true })\n\n addHighlight(this.delegate.targetElement, {\n outline: '3px dashed darkcyan',\n outlineOffset: '-2px'\n })\n\n addHighlight(this.delegate.morphElement, {\n outline: '3px dashed chocolate',\n outlineOffset: '3px'\n })\n\n this.renderingTooltip = this.createRenderingTooltip()\n this.targetTooltip = this.createTargetTooltip()\n this.triggerTooltip = this.createTriggerTooltip(this.targetTooltip, this.renderingTooltip)\n\n document.querySelectorAll('.leader-line').forEach(el => (el.style.zIndex = 100000))\n\n const data = {\n morph: {\n partial: this.delegate.triggerElement.renders,\n id: this.delegate.triggerElement.morphs,\n status: this.delegate.morphElement ? 'OK' : 'Not Found'\n },\n trigger: { partial: null, id: null, status: 'Not Found' },\n target: { partial: null, id: null, status: 'Not Found' }\n }\n\n if (this.delegate.triggerElement) {\n data.trigger = {\n partial: this.delegate.triggerElement.partial,\n id: this.delegate.triggerElement.id,\n status: 'OK'\n }\n data.target.id = this.delegate.triggerElement.controls\n }\n\n if (this.delegate.targetElement)\n data.target = {\n partial: this.delegate.targetElement.partial,\n dom_id: this.delegate.targetElement.id,\n status: 'OK'\n }\n\n console.table(data)\n }\n\n hide({ active: active = false }) {\n document.querySelectorAll('turbo-boost-devtool-tooltip').forEach(tooltip => {\n attempt(() => tooltip.line.remove())\n attempt(() => tooltip.drag.remove())\n attempt(() => tooltip.lineToRendering.remove())\n attempt(() => tooltip.lineToTarget.remove())\n attempt(() => tooltip.remove())\n })\n\n document.querySelectorAll('[data-turbo-boost-highlight]').forEach(el => {\n if (!el.tagName.match(/turbo-boost-toggle-trigger/i)) removeHighlight(el)\n })\n\n this.active = active\n }\n\n get active() {\n return activeTarget === this.delegate\n }\n\n set active(value) {\n if (value) activeTarget = this.delegate\n else activeTarget = null\n }\n\n get enabled() {\n return supervisor.enabled(this.delegate.name)\n }\n\n static register(name, label) {\n supervisor.register(name, label)\n }\n\n createRenderingTooltip() {\n if (!this.delegate.triggerElement.renders)\n return console.debug(\n `Unable to create the rendering tooltip! The trigger element must set the 'renders' attribute.`\n )\n\n if (!this.delegate.triggerElement.morphs)\n return console.debug(\n `Unable to create the rendering tooltip! The trigger element specified the 'morphs' attrbiute but no element matches the DOM id: '${this.triggerElement.morphs}'`\n )\n\n const title = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 19l7-7 3 3-7 7-3-3z\"></path><path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\"></path><path d=\"M2 2l7.586 7.586\"></path><circle cx=\"11\" cy=\"11\" r=\"2\"></circle></svg>\n RENDERING - <${this.delegate.triggerElement.tagName.toLowerCase()}>\n `\n const subtitle = `\n <b>partial</b>: ${this.delegate.triggerElement.renders || 'unknown'}<br>\n <b>morphs</b>: ${this.delegate.triggerElement.morphs || 'unknown'}<br>\n `\n const content = `\n <div slot=\"content-top\" style=\"font-size:85%; font-style:italic; font-weight:100;\">\n The <b>TRIGGER</b> toggles the <b>TARGET</b> then renders the partial & morphs the element.<br>\n </div>\n `\n const tooltip = appendTooltip(title, subtitle, content, {\n id: `${this.delegate.id}-rendering`,\n backgroundColor: 'lightyellow',\n color: 'chocolate'\n })\n\n const coords = coordinates(this.delegate.morphElement)\n const top = Math.ceil(coords.top + coords.height / 2 - tooltip.offsetHeight / 2)\n const left = Math.ceil(coords.left + coords.width + 100)\n tooltip.style.top = `${top}px`\n tooltip.style.left = `${left}px`\n\n tooltip.line = new LeaderLine(tooltip, this.delegate.morphElement, {\n ...this.leaderLineOptions,\n color: 'chocolate'\n })\n\n tooltip.drag = new PlainDraggable(tooltip)\n return tooltip\n }\n\n createTargetTooltip() {\n if (!this.delegate.targetElement)\n return console.debug(\n `Unable to create the target tooltip! No element matches the DOM id: '${this.delegate.triggerElement.controls}'`\n )\n\n const title = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><circle cx=\"12\" cy=\"12\" r=\"6\"></circle><circle cx=\"12\" cy=\"12\" r=\"2\"></circle></svg>\n TARGET - <${this.delegate.targetElement.tagName.toLowerCase()}>\n `\n\n const tooltip = appendTooltip(\n title,\n this.delegate.targetTooltipData?.subtitle || '',\n this.delegate.targetTooltipData?.content || '',\n {\n id: `${this.delegate.id}-target`,\n backgroundColor: 'lightcyan',\n color: 'darkcyan',\n position: 'bottom'\n }\n )\n\n const coords = coordinates(this.delegate.targetElement)\n const top = Math.ceil(coords.top + tooltip.offsetHeight)\n const left = Math.ceil(coords.left + coords.width + tooltip.offsetWidth / 3)\n tooltip.style.top = `${top}px`\n tooltip.style.left = `${left}px`\n\n tooltip.line = new LeaderLine(tooltip, this.delegate.targetElement, {\n ...this.leaderLineOptions,\n color: 'darkcyan'\n })\n\n tooltip.drag = new PlainDraggable(tooltip)\n return tooltip\n }\n\n createTriggerTooltip(targetTooltip, renderingTooltip) {\n if (!this.delegate.triggerElement) return\n const title = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"></polygon></svg>\n TRIGGER - <${this.delegate.triggerElement.tagName.toLowerCase()}>\n `\n\n const tooltip = appendTooltip(\n title,\n this.delegate.triggerTooltipData?.subtitle || '',\n this.delegate.triggerTooltipData?.content || '',\n {\n id: `${this.delegate.id}-trigger`,\n backgroundColor: 'lavender',\n color: 'blueviolet'\n }\n )\n\n const coords = coordinates(this.delegate.triggerElement)\n const top = Math.ceil(coords.top - tooltip.offsetHeight * 2)\n const left = Math.ceil(coords.left + coords.width + tooltip.offsetWidth / 3)\n tooltip.style.top = `${top}px`\n tooltip.style.left = `${left}px`\n\n tooltip.line = new LeaderLine(this.delegate.triggerElement, tooltip, {\n ...this.leaderLineOptions,\n color: 'blueviolet'\n })\n\n if (targetTooltip) {\n tooltip.lineToTarget = new LeaderLine(tooltip, targetTooltip, {\n ...this.leaderLineOptions,\n color: 'blueviolet',\n middleLabel: this.delegate.targetLineLabel,\n size: 2.1\n })\n\n targetTooltip.drag.onMove = () => {\n targetTooltip.line.position()\n tooltip.lineToTarget?.position()\n tooltip.lineToRendering?.position()\n }\n }\n\n if (renderingTooltip) {\n tooltip.lineToRendering = new LeaderLine(tooltip, renderingTooltip, {\n ...this.leaderLineOptions,\n color: 'blueviolet',\n middleLabel: this.delegate.renderingLineLabel,\n size: 2.1\n })\n\n renderingTooltip.drag.onMove = () => {\n renderingTooltip.line.position()\n if (tooltip.lineToTarget) tooltip.lineToTarget.position()\n tooltip.lineToRendering?.position()\n }\n }\n\n tooltip.drag = new PlainDraggable(tooltip)\n tooltip.drag.onMove = () => {\n tooltip.line.position()\n if (tooltip.lineToTarget) tooltip.lineToTarget.position()\n if (tooltip.lineToRendering) tooltip.lineToRendering.position()\n }\n\n return tooltip\n }\n\n get leaderLineOptions() {\n return {\n dash: { animation: true },\n dropShadow: { opacity: 0.3 },\n endPlug: 'arrow3',\n endPlugSize: 1.7,\n size: 3,\n startPlug: 'disc',\n startPlugSize: 1\n }\n }\n}\n", "import VERSION from './version'\nimport supervisor from './supervisor'\nimport Devtool from './devtool'\n\nconst { restart, start, stop } = supervisor\n\nfunction decorateElementWithDevtool(element, name, label) {\n Object.assign(element, {\n initializeDevtool() {\n const mouseenter = () => this.devtool.show()\n\n addEventListener('turbo-boost:devtools-start', () => {\n this.devtool = new Devtool(this)\n this.addEventListener('mouseenter', mouseenter)\n })\n\n addEventListener('turbo-boost:devtools-stop', () => {\n this.removeEventListener('mouseenter', mouseenter)\n this.removeDevtool()\n })\n\n this.dispatchEvent(new CustomEvent('turbo-boost:devtools-connect', { bubbles: true }))\n },\n hideDevtool() {\n this.devtool?.hide({ active: false })\n },\n removeDevtool() {\n if (this.devtool?.hide) this.devtool.hide({ active: false })\n if (this.devtool?.unregisterEventListeners) this.devtool.unregisterEventListeners()\n delete this.devtool\n },\n name,\n targetLineLabel: label\n })\n\n // the element references below are defaults that are placed on the receiver if not present\n const properties = ['triggerElement', 'morphElement', 'targetElement']\n\n properties\n .filter(property => {\n return element[property] === undefined\n })\n .forEach(property => {\n Object.defineProperty(element, property, {\n get() {\n return element\n }\n })\n })\n}\n\n//;(async () => {\n// // we cannot detect customElements.get(\"cable-ready-updates-for\") because they are lazily initialized\n// if (window.CableReady) await import('./delegates/cable_ready.js')\n//})()\n\nexport { Devtool, decorateElementWithDevtool }\n\nexport default { restart, start, stop, VERSION }\n", "export default '0.0.18'\n", "export default class TurboBoostElement extends HTMLElement {\n constructor(html) {\n super()\n this.devtool = 'unknown'\n this.attachShadow({ mode: 'open' })\n this.shadowRoot.innerHTML = html || '<slot></slot>'\n }\n\n connectedCallback() {\n this.ensureId()\n }\n\n ensureId() {\n if (this.id.trim().length) return\n this.id = `${this.tagName}-${this.uuidv4()}`.toLowerCase()\n }\n\n // SEE: https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid\n uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\n (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)\n )\n }\n\n get viewStack() {\n const value = this.getAttribute('view-stack')\n if (!value) return []\n return JSON.parse(value)\n }\n\n get partial() {\n return this.viewStack[0]\n }\n}\n", "import TurboBoostElement from '../../turbo_boost_element'\n\nconst html = `\n <turbo-boost>\n <slot name=\"busy\" hidden></slot>\n <slot></slot>\n </turbo-boost>\n`\n\nexport const busyDelay = 100 // milliseconds - time to wait before showing busy element\nexport const busyDuration = 400 // milliseconds - minimum time that busy element is shown\n\nexport default class ToggleElement extends TurboBoostElement {\n constructor() {\n super(html)\n }\n\n // TODO: Should we timeout after a theoretical max wait time?\n // The idea being that a server error occurred and the toggle failed.\n showBusyElement() {\n clearTimeout(this.showBusyElementTimeout)\n clearTimeout(this.hideBusyElementTimeout)\n\n if (!this.busyElement) return\n\n this.busyStartedAt = Date.now() + busyDelay\n this.showBusyElementTimeout = setTimeout(() => {\n this.busySlotElement.hidden = false\n this.defaultSlotElement.hidden = true\n }, busyDelay)\n }\n\n hideBusyElement() {\n clearTimeout(this.showBusyElementTimeout)\n clearTimeout(this.hideBusyElementTimeout)\n\n if (!this.busyElement) return\n\n let delay = busyDuration - (Date.now() - this.busyStartedAt)\n if (delay < 0) delay = 0\n\n delete this.busyStartedAt\n this.hideBusyElementTimeout = setTimeout(() => {\n this.busySlotElement.hidden = true\n this.defaultSlotElement.hidden = false\n }, delay)\n }\n\n get busyElement() {\n return this.querySelector(':scope > [slot=\"busy\"]')\n }\n\n get busySlotElement() {\n return this.shadowRoot.querySelector('slot[name=\"busy\"]')\n }\n\n get defaultSlotElement() {\n return this.shadowRoot.querySelector('slot:not([name])')\n }\n\n // indicates if an rpc call is active/busy\n get busy() {\n return this.getAttribute('busy') === 'true'\n }\n\n // indicates if an rpc call is active/busy\n set busy(value) {\n value = !!value\n if (this.busy === value) return\n this.setAttribute('busy', value)\n if (value) this.showBusyElement()\n else this.hideBusyElement()\n }\n\n get busyStartedAt() {\n if (!this.dataset.busyStartedAt) return 0\n return Number(this.dataset.busyStartedAt)\n }\n\n set busyStartedAt(value) {\n this.dataset.busyStartedAt = value\n }\n}\n", "import ToggleElement from '../toggle_element'\n\nexport default class ToggleTargetElement extends ToggleElement {\n connectedCallback() {\n super.connectedCallback()\n\n this.mouseenterHandler = this.onMouseenter.bind(this)\n this.addEventListener('mouseenter', this.mouseenterHandler)\n\n this.collapseHandler = this.collapse.bind(this)\n this.collapseNowHandler = this.collapseNow.bind(this)\n\n this.collapseOn.forEach(entry => {\n const parts = entry.split('@')\n const name = parts[0]\n\n if (parts.length > 1) {\n const target = parts[1].match(/^self|window$/) ? self : self[parts[1]]\n target.addEventListener(name, this.collapseNowHandler)\n } else {\n this.addEventListener(name, this.collapseHandler)\n }\n })\n }\n\n disconnectedCallback() {\n this.removeEventListener('mouseenter', this.mouseenterHandler)\n\n this.collapseOn.forEach(entry => {\n const parts = entry.split('@')\n const name = parts[0]\n\n if (parts.length > 1) {\n const target = parts[1].match(/^self|window$/) ? self : self[parts[1]]\n target.removeEventListener(name, this.collapseNowHandler)\n } else {\n this.removeEventListener(name, this.collapseHandler)\n }\n })\n }\n\n // TODO: get cached content working properly\n // perhaps use a mechanic other than morph\n\n // TODO: implement cache (similar to Turbo Drive restoration visit)\n cacheHTML() {\n // this.cachedHTML = this.innerHTML\n }\n\n // TODO: implement cache (similar to Turbo Drive restoration visit)\n renderCachedHTML() {\n // if (!this.cachedHTML) return\n // this.innerHTML = this.cachedHTML\n }\n\n onMouseenter() {\n clearTimeout(this.collapseTimeout)\n }\n\n collapse(delay = 250) {\n clearTimeout(this.collapseTimeout)\n if (this.busy) return\n if (typeof delay !== 'number') delay = 250\n\n if (delay > 0) return (this.collapseTimeout = setTimeout(() => this.collapse(0), delay))\n\n this.innerHTML = ''\n try {\n this.expanded = false\n this.triggerElement.hideDevtool()\n } catch {}\n }\n\n collapseNow(event) {\n if (event.target.closest('turbo-boost-devtool-tooltip')) return\n this.collapse(0)\n }\n\n collapseMatches() {\n document.querySelectorAll(this.collapseSelector).forEach(el => {\n if (el.id === this.id) return\n if (el.collapse) el.collapse(0)\n })\n }\n\n get collapseSelector() {\n return this.triggerElement.collapseSelector || this.getAttribute('collapse-selector')\n }\n\n get focusSelector() {\n return this.getAttribute('focus-selector')\n }\n\n // the active trigger\n get triggerElement() {\n return document.getElementById(this.labeledBy)\n }\n\n // all triggers\n get triggerElements() {\n return document.querySelectorAll(`[aria-controls=\"${this.id}\"]`)\n }\n\n // the dom id of the active trigger\n get labeledBy() {\n return this.getAttribute('aria-labeledby')\n }\n\n set labeledBy(value) {\n return this.setAttribute('aria-labeledby', value)\n }\n\n get collapseOn() {\n const value = this.getAttribute('collapse-on')\n if (!value) return []\n return JSON.parse(value)\n }\n\n get expanded() {\n return this.triggerElement ? this.triggerElement.expanded : false\n }\n\n set expanded(value) {\n this.triggerElements.forEach(el => (el.expanded = value))\n }\n\n get busy() {\n return this.triggerElement && this.triggerElement.busy\n }\n}\n", "let focusTimeout\n\nfunction deactivateTrixAttributes(editor) {\n const attributes = ['bold', 'bullet', 'code', 'heading1', 'href', 'italic', 'number', 'quote', 'strike']\n attributes.forEach(name => editor.deactivateAttribute(name))\n}\n\nfunction focusTrixEditorElement(element) {\n if (element.value.length === 0) return\n\n const editor = element.editor\n\n // move cursor to the end\n let lastRange = []\n while (lastRange[0] !== editor.getSelectedRange()[0] && lastRange[1] !== editor.getSelectedRange()[1]) {\n lastRange = editor.getSelectedRange()\n editor.moveCursorInDirection('forward')\n }\n\n // insert an empty char and select it\n editor.insertString(' ')\n editor.moveCursorInDirection('forward')\n editor.setSelectedRange([lastRange[1], editor.getSelectedRange()[1]])\n\n // deactivate all trix features for the selection\n deactivateTrixAttributes(editor)\n\n // move cursor to end and collapse the selection\n editor.setSelectedRange([editor.getSelectedRange()[1], editor.getSelectedRange()[1]])\n}\n\nfunction debouncedFocus(element) {\n clearTimeout(focusTimeout)\n\n focusTimeout = setTimeout(() => {\n if (!element) return\n\n element.focus()\n const trixEditorElement = element.closest('trix-editor')\n\n try {\n if (trixEditorElement) {\n focusTrixEditorElement(trixEditorElement)\n } else {\n element.selectionStart = element.selectionEnd = element.value.length\n }\n } catch (_) {\n } finally {\n element.scrollIntoView({ block: 'center', behavior: 'smooth' })\n }\n }, 100)\n}\n\nexport default element => debouncedFocus(element)\n", "import { Devtool, decorateElementWithDevtool } from '@turbo-boost/devtools'\n\nimport ToggleElement, { busyDuration } from '../toggle_element'\nimport focus from './focus'\n\ndocument.addEventListener('turbo-boost:devtools-start', () => Devtool.register('toggle', 'toggles'))\n\nlet currentFocusSelector\n\nexport default class ToggleTriggerElement extends ToggleElement {\n constructor() {\n super()\n\n decorateElementWithDevtool(this, 'toggle', 'toggles')\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n const { start: commandStartEvent } = TurboBoost.Commands.events\n this.commandStartHandler = this.onCommandStart.bind(this)\n this.addEventListener(commandStartEvent, this.commandStartHandler)\n\n const { before: beforeInvokeEvent } = TurboBoost.Streams.invokeEvents\n this.beforeInvokeHandler = this.onBeforeInvoke.bind(this)\n addEventListener(beforeInvokeEvent, this.beforeInvokeHandler)\n\n // fires after receiving the toggle morph Turbo Stream but before it is executed\n // this.addEventListener(TurboBoost.Commands.events.success, event => {\n // // TODO: imlement cache, this.targetElement.cacheHTML()\n // })\n\n this.initializeDevtool()\n }\n\n disconnectedCallback() {\n // delay cleanup because the trigger may have been morphed out of the DOM,\n // but it's needed to apply behavior like focus etc...\n setTimeout(() => {\n const { start: commandStartEvent } = TurboBoost.Commands.events\n this.removeEventListener(commandStartEvent, this.commandStartHandler)\n\n const { before: beforeInvokeEvent } = TurboBoost.Streams.invokeEvents\n removeEventListener(beforeInvokeEvent, this.beforeInvokeHandler)\n\n this.removeDevtool()\n }, 1000)\n }\n\n onCommandStart(event) {\n currentFocusSelector = this.focusSelector\n this.targetElement.labeledBy = this.id\n this.targetElement.collapseMatches()\n this.busy = true\n // TODO: implement cache - this.targetElement.renderCachedHTML()\n }\n\n // runs before an invoke turbo stream is executed\n onBeforeInvoke(event) {\n // return early if we're not the element responsible for this invoke\n if (event.detail.method !== 'morph') return\n if (event.target.id !== this.morphs) return\n const selector = `turbo-boost-toggle-target[aria-labeledby=\"${this.id}\"]`\n if (!event.target.querySelector(selector)) return\n\n // ensure the busy element is shown long enough for a good user experience\n // we accomplish this by modifying the event.detail with invoke instructions i.e. { delay }\n // SEE: the TurboBoost Streams library for details on how this works\n const duration = Date.now() - this.busyStartedAt\n let delay = busyDuration - duration\n if (delay < 10) delay = 10\n event.detail.invoke = { delay }\n\n // runs before the morph is executed\n setTimeout(() => {\n this.busy = false\n this.morphToggleTriggerElements.forEach(el => (el.busy = false))\n }, delay - 10)\n\n // runs after the morph is executed\n setTimeout(() => focus(this.targetElement.querySelector(currentFocusSelector)), delay + 100)\n }\n\n // a list of views shared between the trigger and target\n get sharedViews() {\n if (!this.targetElement) return []\n if (!this.targetElement.viewStack) return []\n const reducer = (memo, view) => {\n if (this.targetElement.viewStack.includes(view)) memo.push(view)\n return memo\n }\n return this.viewStack.reduce(reducer.bind(this), [])\n }\n\n // the partial to render\n get renders() {\n return this.getAttribute('renders')\n }\n\n // the renderered partial's top wrapping dom_id\n get morphs() {\n return this.getAttribute('morphs')\n }\n\n // all toggle elements contained by the `morphElement`\n get morphToggleTriggerElements() {\n return Array.from(this.morphElement.querySelectorAll('turbo-boost-toggle-trigger'))\n }\n\n // the target's dom_id\n get controls() {\n return this.getAttribute('aria-controls')\n }\n\n get collapseSelector() {\n return this.getAttribute('collapse-selector')\n }\n\n get focusSelector() {\n return this.getAttribute('focus-selector') || this.targetElement.focusSelector\n }\n\n // indicates if the toggle state should be remembered across requests\n get remember() {\n return this.getAttribute('remember') === 'true'\n }\n\n set remember(value) {\n return this.setAttribute('remember', !!value)\n }\n\n // indicates if the target is expanded\n get expanded() {\n return this.getAttribute('aria-expanded') === 'true'\n }\n\n set expanded(value) {\n this.setAttribute('aria-expanded', !!value)\n }\n\n // indicates if the target is expanded\n get collapsed() {\n return !this.expanded\n }\n\n // ------ DevToolDelegate ------\n get command() {\n return this.dataset.turboCommand\n }\n\n get renderingLineLabel() {\n return 'renders & morphs'\n }\n\n // the morph element\n get morphElement() {\n if (!this.morphs) return null\n return document.getElementById(this.morphs)\n }\n\n // the target element\n get targetElement() {\n if (!this.controls) return null\n return document.getElementById(this.controls)\n }\n\n get triggerTooltipData() {\n let content = this.triggerElement.viewStack\n .reverse()\n .map((view, index) => {\n return this.triggerElement.sharedViews.includes(view)\n ? `<div slot=\"content\">${index + 1}. ${view}</div>`\n : `<div slot=\"content-bottom\">${index + 1}. ${view}</div>`\n }, this)\n .join('')\n\n return {\n subtitle: `\n <b>id</b>: ${this.triggerElement.id}<br>\n <b>aria-controls</b>: ${this.triggerElement.controls}<br>\n <b>aria-expanded</b>: ${this.triggerElement.expanded}<br>\n <b>remember</b>: ${this.triggerElement.remember}<br>\n `,\n content: `\n <div slot=\"content-top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline></svg>\n <b>View Stack</b>\n </div>\n ${content}\n `\n }\n }\n\n get targetTooltipData() {\n let content = this.targetElement.viewStack\n .reverse()\n .map((view, index) => {\n return this.triggerElement.sharedViews.includes(view)\n ? `<div slot=\"content\">${index + 1}. ${view}</div>`\n : `<div slot=\"content-bottom\">${index + 1}. ${view}</div>`\n }, this)\n .join('')\n\n return {\n subtitle: `<b>id</b>: ${this.targetElement.id}<br>\n <b>aria-labeled-by</b>: ${this.targetElement.labeledBy}<br>\n`,\n content: `\n <div slot=\"content-top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:inline-block;\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"></polygon><polyline points=\"2 17 12 22 22 17\"></polyline><polyline points=\"2 12 12 17 22 12\"></polyline></svg>\n <b>View Stack</b>\n </div>\n ${content}\n `\n }\n }\n}\n", "import TurboBoostElement from './turbo_boost_element'\nimport ToggleTargetElement from './toggle_elements/target_element'\nimport ToggleTriggerElement from './toggle_elements/trigger_element'\n\n// Valid custom element names: https://html.spec.whatwg.org/#valid-custom-element-name\n\ncustomElements.define('turbo-boost', TurboBoostElement)\ncustomElements.define('turbo-boost-toggle-target', ToggleTargetElement)\ncustomElements.define('turbo-boost-toggle-trigger', ToggleTriggerElement)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["version_default", "template", "html", "appendHTML", "parent", "child", "addHighlight", "element", "options", "removeHighlight", "outline", "outlineOffset", "key", "value", "coordinates", "rect", "width", "height", "top", "left", "right", "bottom", "attempt", "callback", "e", "DevtoolElement", "event", "SupervisorElement", "devtoolElement", "checked", "name", "el", "TooltipElement", "savedTransform", "added", "dependencies", "exists", "dependency", "add", "src", "integrity", "script", "remove", "removeAll", "dependencies_default", "__spreadProps", "__spreadValues", "supervisorElement", "makeDraggable", "stop", "stopped", "start", "started", "restart", "enabledList", "restartTimeout", "debouncedRestart", "autoRestart", "register", "label", "enabled", "supervisor_default", "appendTooltip", "title", "subtitle", "content", "backgroundColor", "color", "position", "id", "activeTarget", "Devtool", "delegate", "hideTimeout", "debouncedHide", "type", "listener", "data", "active", "tooltip", "coords", "_a", "_b", "targetTooltip", "renderingTooltip", "decorateElementWithDevtool", "mouseenter", "property", "src_default", "version_default", "TurboBoostElement", "html", "c", "value", "html", "busyDelay", "busyDuration", "ToggleElement", "TurboBoostElement", "delay", "value", "ToggleTargetElement", "ToggleElement", "entry", "parts", "name", "delay", "e", "event", "el", "value", "focusTimeout", "deactivateTrixAttributes", "editor", "name", "focusTrixEditorElement", "element", "lastRange", "debouncedFocus", "trixEditorElement", "_", "focus_default", "y", "currentFocusSelector", "ToggleTriggerElement", "ToggleElement", "$t", "commandStartEvent", "beforeInvokeEvent", "event", "selector", "duration", "delay", "busyDuration", "el", "focus_default", "reducer", "memo", "view", "value", "content", "index", "TurboBoostElement", "ToggleTargetElement", "ToggleTriggerElement", "Dt", "version_default", "javascript_default"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"node_modules/@turbo-boost/
|
|
1
|
+
{"inputs":{"node_modules/@turbo-boost/devtools/dist/@turbo-boost/devtools.js":{"bytes":19453,"imports":[],"format":"esm"},"app/javascript/version.js":{"bytes":24,"imports":[],"format":"esm"},"app/javascript/elements/turbo_boost_element/index.js":{"bytes":844,"imports":[],"format":"esm"},"app/javascript/elements/toggle_elements/toggle_element/index.js":{"bytes":2193,"imports":[{"path":"app/javascript/elements/turbo_boost_element/index.js","kind":"import-statement","original":"../../turbo_boost_element"}],"format":"esm"},"app/javascript/elements/toggle_elements/target_element/index.js":{"bytes":3370,"imports":[{"path":"app/javascript/elements/toggle_elements/toggle_element/index.js","kind":"import-statement","original":"../toggle_element"}],"format":"esm"},"app/javascript/elements/toggle_elements/trigger_element/focus.js":{"bytes":1585,"imports":[],"format":"esm"},"app/javascript/elements/toggle_elements/trigger_element/index.js":{"bytes":7168,"imports":[{"path":"node_modules/@turbo-boost/devtools/dist/@turbo-boost/devtools.js","kind":"import-statement","original":"@turbo-boost/devtools"},{"path":"app/javascript/elements/toggle_elements/toggle_element/index.js","kind":"import-statement","original":"../toggle_element"},{"path":"app/javascript/elements/toggle_elements/trigger_element/focus.js","kind":"import-statement","original":"./focus"}],"format":"esm"},"app/javascript/elements/index.js":{"bytes":481,"imports":[{"path":"app/javascript/elements/turbo_boost_element/index.js","kind":"import-statement","original":"./turbo_boost_element"},{"path":"app/javascript/elements/toggle_elements/target_element/index.js","kind":"import-statement","original":"./toggle_elements/target_element"},{"path":"app/javascript/elements/toggle_elements/trigger_element/index.js","kind":"import-statement","original":"./toggle_elements/trigger_element"}],"format":"esm"},"app/javascript/index.js":{"bytes":285,"imports":[{"path":"@turbo-boost/commands","kind":"import-statement","external":true},{"path":"node_modules/@turbo-boost/devtools/dist/@turbo-boost/devtools.js","kind":"import-statement","original":"@turbo-boost/devtools"},{"path":"app/javascript/version.js","kind":"import-statement","original":"./version"},{"path":"app/javascript/elements/index.js","kind":"import-statement","original":"./elements"}],"format":"esm"}},"outputs":{"app/assets/builds/@turbo-boost/elements.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":68586},"app/assets/builds/@turbo-boost/elements.js":{"imports":[{"path":"@turbo-boost/commands","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"app/javascript/index.js","inputs":{"app/javascript/index.js":{"bytesInOutput":162},"node_modules/@turbo-boost/devtools/dist/@turbo-boost/devtools.js":{"bytesInOutput":19332},"app/javascript/version.js":{"bytesInOutput":15},"app/javascript/elements/turbo_boost_element/index.js":{"bytesInOutput":546},"app/javascript/elements/toggle_elements/toggle_element/index.js":{"bytesInOutput":1279},"app/javascript/elements/toggle_elements/target_element/index.js":{"bytesInOutput":2040},"app/javascript/elements/toggle_elements/trigger_element/focus.js":{"bytesInOutput":764},"app/javascript/elements/toggle_elements/trigger_element/index.js":{"bytesInOutput":4292},"app/javascript/elements/index.js":{"bytesInOutput":146}},"bytes":28636}}}
|
|
@@ -13,7 +13,7 @@ module TurboBoost::Elements::ApplicationHelper
|
|
|
13
13
|
prefixes = %w[toggle_]
|
|
14
14
|
prefixes.each do |prefix|
|
|
15
15
|
next unless name.start_with?(prefix)
|
|
16
|
-
return send("#{prefix}tag_builder").public_send(name.to_s.delete_prefix(prefix), ...)
|
|
16
|
+
return send(:"#{prefix}tag_builder").public_send(name.to_s.delete_prefix(prefix), ...)
|
|
17
17
|
end
|
|
18
18
|
super
|
|
19
19
|
end
|
|
@@ -22,7 +22,7 @@ module TurboBoost::Elements::ApplicationHelper
|
|
|
22
22
|
prefixes = %w[toggle_]
|
|
23
23
|
prefixes.each do |prefix|
|
|
24
24
|
next unless name.start_with?(prefix)
|
|
25
|
-
return send("#{prefix}tag_builder").respond_to_missing?(name.to_s.delete_prefix(prefix), ...)
|
|
25
|
+
return send(:"#{prefix}tag_builder").respond_to_missing?(name.to_s.delete_prefix(prefix), ...)
|
|
26
26
|
end
|
|
27
27
|
super
|
|
28
28
|
end
|
data/app/javascript/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import '@turbo-boost/commands'
|
|
2
2
|
import devtools from '@turbo-boost/devtools'
|
|
3
|
+
import VERSION from './version'
|
|
3
4
|
import './elements'
|
|
4
5
|
|
|
5
6
|
self.TurboBoost = self.TurboBoost || {}
|
|
6
7
|
self.TurboBoost.devtools = devtools
|
|
7
|
-
self.TurboBoost.Elements = {}
|
|
8
|
+
self.TurboBoost.Elements = { VERSION }
|
|
8
9
|
|
|
9
10
|
export default self.TurboBoost.Elements
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default '0.0.18'
|
|
@@ -11,11 +11,19 @@ module TurboBoost::Elements
|
|
|
11
11
|
|
|
12
12
|
class Engine < ::Rails::Engine
|
|
13
13
|
isolate_namespace TurboBoost::Elements
|
|
14
|
+
|
|
14
15
|
config.turbo_boost_elements = ActiveSupport::OrderedOptions.new
|
|
16
|
+
config.turbo_boost_elements.precompile_assets = true
|
|
15
17
|
|
|
16
18
|
ActiveSupport.on_load(:action_controller_base) do
|
|
17
19
|
# `self` is ActionController::Base
|
|
18
20
|
helper TurboBoost::Elements::ApplicationHelper
|
|
19
21
|
end
|
|
22
|
+
|
|
23
|
+
config.after_initialize do |app|
|
|
24
|
+
if app.config.respond_to?(:assets) && app.config.turbo_boost_elements.precompile_assets
|
|
25
|
+
app.config.assets.precompile += %w[@turbo-boost/elements.js]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
20
28
|
end
|
|
21
29
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: turbo_boost-elements
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.18
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nate Hopkins (hopsoft)
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-02-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -44,14 +44,14 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.
|
|
47
|
+
version: 0.1.2
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.
|
|
54
|
+
version: 0.1.2
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: magic_frozen_string_literal
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -132,7 +132,6 @@ extra_rdoc_files: []
|
|
|
132
132
|
files:
|
|
133
133
|
- MIT-LICENSE
|
|
134
134
|
- README.md
|
|
135
|
-
- app/assets/builds/@turbo-boost/commands.metafile.json
|
|
136
135
|
- app/assets/builds/@turbo-boost/elements.js
|
|
137
136
|
- app/assets/builds/@turbo-boost/elements.js.map
|
|
138
137
|
- app/assets/builds/@turbo-boost/elements.metafile.json
|
|
@@ -146,6 +145,7 @@ files:
|
|
|
146
145
|
- app/javascript/elements/toggle_elements/trigger_element/index.js
|
|
147
146
|
- app/javascript/elements/turbo_boost_element/index.js
|
|
148
147
|
- app/javascript/index.js
|
|
148
|
+
- app/javascript/version.js
|
|
149
149
|
- lib/turbo_boost/elements.rb
|
|
150
150
|
- lib/turbo_boost/elements/engine.rb
|
|
151
151
|
- lib/turbo_boost/elements/tag_builders.rb
|
|
@@ -174,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
174
174
|
- !ruby/object:Gem::Version
|
|
175
175
|
version: '0'
|
|
176
176
|
requirements: []
|
|
177
|
-
rubygems_version: 3.
|
|
177
|
+
rubygems_version: 3.5.3
|
|
178
178
|
signing_key:
|
|
179
179
|
specification_version: 4
|
|
180
180
|
summary: Pre-built easy to use reactive TurboBoost elements for Rails/Hotwire apps.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"inputs":{"node_modules/@turbo-boost/commands/app/assets/builds/@turbo-boost/commands.js":{"bytes":11151,"imports":[],"format":"esm"},"node_modules/@turbo-boost/devtools/dist/@turbo-boost/devtools.js":{"bytes":19326,"imports":[],"format":"esm"},"app/javascript/elements/turbo_boost_element/index.js":{"bytes":844,"imports":[],"format":"esm"},"app/javascript/elements/toggle_elements/toggle_element/index.js":{"bytes":2193,"imports":[{"path":"app/javascript/elements/turbo_boost_element/index.js","kind":"import-statement","original":"../../turbo_boost_element"}],"format":"esm"},"app/javascript/elements/toggle_elements/target_element/index.js":{"bytes":3370,"imports":[{"path":"app/javascript/elements/toggle_elements/toggle_element/index.js","kind":"import-statement","original":"../toggle_element"}],"format":"esm"},"app/javascript/elements/toggle_elements/trigger_element/focus.js":{"bytes":1585,"imports":[],"format":"esm"},"app/javascript/elements/toggle_elements/trigger_element/index.js":{"bytes":7168,"imports":[{"path":"node_modules/@turbo-boost/devtools/dist/@turbo-boost/devtools.js","kind":"import-statement","original":"@turbo-boost/devtools"},{"path":"app/javascript/elements/toggle_elements/toggle_element/index.js","kind":"import-statement","original":"../toggle_element"},{"path":"app/javascript/elements/toggle_elements/trigger_element/focus.js","kind":"import-statement","original":"./focus"}],"format":"esm"},"app/javascript/elements/index.js":{"bytes":481,"imports":[{"path":"app/javascript/elements/turbo_boost_element/index.js","kind":"import-statement","original":"./turbo_boost_element"},{"path":"app/javascript/elements/toggle_elements/target_element/index.js","kind":"import-statement","original":"./toggle_elements/target_element"},{"path":"app/javascript/elements/toggle_elements/trigger_element/index.js","kind":"import-statement","original":"./toggle_elements/trigger_element"}],"format":"esm"},"app/javascript/index.js":{"bytes":244,"imports":[{"path":"node_modules/@turbo-boost/commands/app/assets/builds/@turbo-boost/commands.js","kind":"import-statement","original":"@turbo-boost/commands"},{"path":"node_modules/@turbo-boost/devtools/dist/@turbo-boost/devtools.js","kind":"import-statement","original":"@turbo-boost/devtools"},{"path":"app/javascript/elements/index.js","kind":"import-statement","original":"./elements"}],"format":"esm"}},"outputs":{"app/assets/builds/@turbo-boost/elements.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":92571},"app/assets/builds/@turbo-boost/elements.js":{"imports":[],"exports":["default"],"entryPoint":"app/javascript/index.js","inputs":{"node_modules/@turbo-boost/commands/app/assets/builds/@turbo-boost/commands.js":{"bytesInOutput":11085},"node_modules/@turbo-boost/devtools/dist/@turbo-boost/devtools.js":{"bytesInOutput":19262},"app/javascript/elements/turbo_boost_element/index.js":{"bytesInOutput":541},"app/javascript/elements/toggle_elements/toggle_element/index.js":{"bytesInOutput":1284},"app/javascript/elements/toggle_elements/target_element/index.js":{"bytesInOutput":2040},"app/javascript/elements/toggle_elements/trigger_element/focus.js":{"bytesInOutput":768},"app/javascript/elements/toggle_elements/trigger_element/index.js":{"bytesInOutput":4299},"app/javascript/elements/index.js":{"bytesInOutput":146},"app/javascript/index.js":{"bytesInOutput":124}},"bytes":39609}}}
|