refine-rails 2.9.0 → 2.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -6
  3. data/app/assets/javascripts/refine-stimulus.esm.js +1 -1
  4. data/app/assets/javascripts/refine-stimulus.esm.js.map +1 -1
  5. data/app/assets/javascripts/refine-stimulus.js +1 -1
  6. data/app/assets/javascripts/refine-stimulus.js.map +1 -1
  7. data/app/assets/javascripts/refine-stimulus.modern.js +1 -1
  8. data/app/assets/javascripts/refine-stimulus.modern.js.map +1 -1
  9. data/app/assets/javascripts/refine-stimulus.umd.js +1 -1
  10. data/app/assets/javascripts/refine-stimulus.umd.js.map +1 -1
  11. data/app/assets/stylesheets/index.css +16 -17
  12. data/app/assets/stylesheets/index.tailwind.css +16 -15
  13. data/app/controllers/refine/inline/criteria_controller.rb +6 -0
  14. data/app/javascript/controllers/index.js +3 -3
  15. data/app/javascript/controllers/refine/criterion-form-controller.js +13 -12
  16. data/app/javascript/controllers/refine/typeahead-list-controller.js +33 -0
  17. data/app/models/refine/conditions/date_condition.rb +1 -1
  18. data/app/models/refine/filter/internationalized.rb +28 -0
  19. data/app/models/refine/filter.rb +17 -3
  20. data/app/models/refine/inline/criteria/date_refinement.rb +14 -0
  21. data/app/models/refine/inline/criteria/input.rb +16 -2
  22. data/app/models/refine/inline/criterion.rb +2 -2
  23. data/app/views/refine/blueprints/_criterion.html.erb +1 -1
  24. data/app/views/refine/inline/criteria/_form_fields.html.erb +88 -17
  25. data/app/views/refine/inline/criteria/edit.turbo_stream.erb +11 -11
  26. data/app/views/refine/inline/criteria/index.html.erb +6 -5
  27. data/app/views/refine/inline/criteria/new.turbo_stream.erb +10 -11
  28. data/app/views/refine/inline/filters/_criterion.html.erb +0 -1
  29. data/app/views/refine/inline/inputs/_date_condition.html.erb +2 -2
  30. data/app/views/refine/inline/inputs/_date_condition_range.html.erb +2 -2
  31. data/app/views/refine/inline/inputs/_date_condition_single.html.erb +1 -1
  32. data/app/views/refine/inline/inputs/_option_condition.html.erb +21 -10
  33. data/lib/refine/rails/version.rb +1 -1
  34. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 89f6505a5ab34fd0aac124680ee4c0d478de69a6d9449e57bf1c8aeea717b3fa
4
- data.tar.gz: cb19bfe97dc8d2bdfd8421f51283247e508191b131646b549ebe0b576e004a2a
3
+ metadata.gz: 7291e0c87324f5ea5f6d9116e74b4996e873738a1a6f0cb192b5b4f3d6428482
4
+ data.tar.gz: 10d80a905ddc6ce6d3d0f9e3b1f6c0439bda1e93e0092866b36d184247ec4a6c
5
5
  SHA512:
6
- metadata.gz: d9c85e53a17d8ab5060273d2ea061dc57f89ef7308b7a96d4f3285fa74e5d87ca8d782151761a7358f91707940a95875b9e62eaf1ae4aea5a1c60a8ee94b96ae
7
- data.tar.gz: 46b44612a9b8ba2aafbe98cc8a316f51da9c81aa5a535b0c9eef9f2089297061317fac4dda5999a0353288cc1c683e968f26616f1e1bc02485242c97e630937b
6
+ metadata.gz: bd7d4016067808b0d9d32c3d7a564be9c3c35c15b39d1461a7ab01fef04ff44ed9dd65d03162209b339406103620a9b69f591e7d6be7a46d686b69dce74dd283
7
+ data.tar.gz: 660cd1e5bc02473e92d11d8155ea78591d572a288986c09be87ec355719e59476f6e7085eec63e8450817dbc67c680a97b5c9ba1b353c6cd6054404897e460c9
data/README.md CHANGED
@@ -399,15 +399,12 @@ If you need even more customization you can override the views with `rails gener
399
399
  ```sh
400
400
  bump patch #(or bump minor, major, etc)
401
401
  gem build
402
- fury push *.gem --as=hammerstonedev
402
+ gem push *.gem
403
403
  rm *.gem
404
404
  ```
405
405
 
406
406
  ### Releasing the NPM Package
407
407
 
408
408
  1. Publish the gem with a new version number
409
- 2. Copy the version number in package.json
410
- 3. run `yarn build`. This will prepare the different javascript outputs
411
- 4. run `yarn pack`. This will create a new`.tgz`file for the new version
412
- 5. run `yarn publish <tgz filename> --new-version <version number in package.json>`
413
- 6. remove the`*.tgz`file
409
+ 2. run npm version <update_type> (patch | minor | major) OR directly update the version in package.json
410
+ 3. run `npm publish`
@@ -1,2 +1,2 @@
1
- import{Controller as e}from"@hotwired/stimulus";import{FetchRequest as t}from"@rails/request.js";import{useClickOutside as r}from"stimulus-use";import{delegate as i,abnegate as n}from"jquery-events-to-dom-events";import{isEqual as s,debounce as o}from"lodash";import l from"moment";import a from"jquery";import"daterangepicker";function d(e){const t=(e.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(t)return t.replace(/_/g,"-").replace(/\//g,"--")}class u extends e{connect(){this.state.finishUpdate()}get state(){let e=this.element;for(;e!==document.body;){if(e.matches('[data-controller~="refine--state"]'))return this.application.getControllerForElementAndIdentifier(e,"refine--state");e=e.parentNode}return null}refreshFromServer(e){void 0===e&&(e={});try{const r=this,{includeErrors:i}=e;r.state.startUpdate();const n=new t("GET",r.state.refreshUrlValue,{responseKind:"turbo-stream",query:{"refine_filters_builder[filter_class]":r.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(r.state.blueprint),"refine_filters_builder[client_id]":r.state.clientIdValue,include_errors:!!i}});return Promise.resolve(n.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class c extends u{criterion(){try{const e=this;return Promise.resolve(e.validateBlueprint()).then(function(t){t&&e.state.addCriterion(e.previousCriterionIdValue),e.refreshFromServer({includeErrors:!t})})}catch(e){return Promise.reject(e)}}group(){try{const e=this;return Promise.resolve(e.validateBlueprint()).then(function(t){t&&e.state.addGroup(),e.refreshFromServer({includeErrors:!t})})}catch(e){return Promise.reject(e)}}validateBlueprint(e){try{const e=this,r=new t("GET",e.state.validateBlueprintUrlValue,{query:{"refine_filters_builder[filter_class]":e.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(e.state.blueprint),"refine_filters_builder[client_id]":e.state.clientIdValue}});return Promise.resolve(r.perform()).then(function(e){return e.ok})}catch(e){return Promise.reject(e)}}}c.values={previousCriterionId:Number};class h extends e{filterConditions(e){const t=e.currentTarget.value.toLowerCase(),r=new Set;this.conditionTargets.forEach(e=>{e.innerHTML.toLowerCase().includes(t)?(e.hidden=!1,r.add(e.dataset.category)):e.hidden=!0}),this.categoryTargets.forEach(e=>{e.hidden=!r.has(e.innerHTML)})}}h.targets=["condition","category"];class p extends e{refresh(e){const t=new FormData(this.element),r=new URL(this.urlValue);for(const[e,i]of t.entries())console.log(e,i),r.searchParams.set(e,i);window.Turbo.visit(r.toString(),{frame:this.turboFrameValue})}}p.values={url:String,turboFrame:String,method:{type:String,default:"POST"}};class m extends e{connect(){this.state=this.getStateController(),this.state.updateInput(this.criterionIdValue,this.inputValue)}getStateController(){let e=this.element;for(;e!==document.body;){const t=this.application.getControllerForElementAndIdentifier(e,"refine--state");if(t)return t;e=e.parentNode}return null}}m.values={criterionId:Number,input:Object};class f extends u{criterion(){const{state:e,criterionIdValue:t}=this;e.deleteCriterion(t),this.refreshFromServer()}}f.values={criterionId:Number};class g extends e{connect(){const e=new URLSearchParams(window.location.search);this.existingParams=e,this.existingParams.delete("stable_id")}delete(e){const{criterionId:t}=e.currentTarget.dataset;var r=parseInt(t);this.stateController.deleteCriterion(r),this.reloadPage()}reloadPage(){try{const e=this,{blueprint:r}=e.stateController,i=new t("POST",e.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:e.stateController.filterName,blueprint_json:JSON.stringify(r),client_id:e.stateController.clientIdValue}})});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}redirectToStableId(e){const t=new URLSearchParams;e&&t.append("stable_id",e);const r=new URLSearchParams({...Object.fromEntries(this.existingParams),...Object.fromEntries(t)}).toString(),i=window.location.pathname+"?"+r;history.pushState({},document.title,i),window.location.reload()}get stateController(){return this.element.refineStateController}get stabilizeFilterController(){return this.element.stabilizeFilterController}}g.values={submitUrl:String};class b extends e{connect(){r(this),this.boundHandleKeyUp=this.handleKeyUp.bind(this),document.addEventListener("keyup",this.boundHandleKeyUp)}disconnect(){document.removeEventListener("keyup",this.boundHandleKeyUp)}show(e){e.preventDefault(),this.frameTarget.src=this.srcValue,this.isOpenValue=!0}hide(e){this.isOpenValue&&(null==e||e.preventDefault(),this.frameTarget.innerHTML="",this.isOpenValue=!1)}clickOutside(e){this.hide(e)}handleKeyUp(e){"Escape"!==e.key&&"Esc"!==e.key||this.hide(e)}}b.targets=["frame"],b.values={src:String,isOpen:{type:Boolean,default:!1}};class v extends e{search(e){e.preventDefault(),this.submitFilter(),document.activeElement.blur()}submitFilter(){try{const e=this,{blueprint:r}=e.stateController,i=new t("POST",e.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:e.stateController.filterName,blueprint_json:JSON.stringify(r),client_id:e.stateController.clientIdValue}})});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}get stateController(){return this.element.querySelector('[data-controller~="refine--state"]').refineStateController}loadResults(e){let{detail:{url:t}}=e;console.log("filter submit success"),window.Turbo?window.Turbo.visit(t):window.location.href=t}}v.values={submitUrl:String},function(){if("function"==typeof window.CustomEvent)return!1;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var r=document.createEvent("CustomEvent");return r.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r}e.prototype=window.Event.prototype,window.CustomEvent=e}();const w=(e,t)=>{let{blueprint:r,formId:i}=t;const n=new CustomEvent("blueprint-updated",{bubbles:!0,cancelable:!0,detail:{blueprint:r,formId:i}});e.dispatchEvent(n)},y=(e,t,r)=>{var i;const n=null==r?void 0:r.component,s=(null==r?void 0:r.meta)||{clauses:[],options:{}},o=(null==r?void 0:r.refinements)||[],{clauses:l,options:a}=s;let d;d="option-condition"===n?a[0]?[a[0].id]:[]:void 0;let u={clause:null==(i=l[0])?void 0:i.id,selected:d};return o.forEach(e=>{const{meta:t,component:r}=e,{clauses:i,options:n}=t;let s;s="option-condition"===r?n[0]?[n[0].id]:[]:void 0,u[e.id]={clause:i[0].id,selected:s}}),{depth:t,type:"criterion",condition_id:e,input:u}};class C extends e{connect(){this.element.refineStateController=this,this.changeDelegate=i("change",["event","picker"]),this.blueprint=this.blueprintValue,this.conditions=this.conditionsValue,this.filterName=this.classNameValue,this.conditionsLookup=this.conditions.reduce((e,t)=>(e[t.id]=t,e),{}),this.loadingTimeout=null,w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}disconnect(){n("change",this.changeDelegate)}startUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTimeout=window.setTimeout(()=>{this.loadingTarget.classList.remove("hidden")},1e3)}finishUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTarget.classList.add("hidden")}conditionConfigFor(e){return this.conditionsLookup[e]}addGroup(){const{conditions:e}=this,t=e.find(e=>e.id==this.defaultConditionIdValue)||e[0];var r;this.blueprint.length>0&&this.blueprint.push({depth:r=void 0===r?0:r,type:"conjunction",word:"or"}),this.blueprint.push(y(t.id,1,t)),w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}addCriterion(e){const{blueprint:t,conditions:r}=this,i=r.find(e=>e.id==this.defaultConditionIdValue)||r[0];var n;t.splice(e+1,0,{depth:n=void 0===n?1:n,type:"conjunction",word:"and"},y(i.id,1,i)),w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}deleteCriterion(e){const{blueprint:t}=this,r=t[e-1],i=t[e+1],n=r&&"or"===r.word,s=i&&"or"===i.word||!i,o=n||!r,l=o&&s;r||i?t.splice(l&&n?e-1:l&&!r||o&&!s?e:e-1,2):this.blueprint=[],w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}replaceCriterion(e,t,r){const i=this.blueprint[e];if("criterion"!==i.type)throw new Error("You can't call updateConditionId on a non-criterion type. Trying to update "+JSON.stringify(y));const n=this.blueprint[e],o=y(t,i.depth,r);return!s(n,o)&&(this.blueprint[e]=o,w(this.element,{blueprint:this.blueprint,formId:this.formIdValue}),!0)}updateInput(e,t,r){const{blueprint:i}=this,n=i[e],s=(r=r||"input").split(", ");s.length>1?n[s[0]][s[1]]={...n[s[0]][s[1]],...t}:n[r]={...n[r],...t},w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}}C.values={blueprint:Array,conditions:Array,className:String,refreshUrl:String,clientId:String,validateBlueprintUrl:String,defaultConditionId:String},C.targets=["loading"];class I extends e{connect(){const e=document.getElementById(this.stateDomIdValue).refineStateController;this.blueprintFieldTarget.value=JSON.stringify(e.blueprint),console.log("connect",this.blueprintFieldTarget.value)}updateBlueprintField(e){if(e.detail.formId!=this.formIdValue)return null;const{detail:t}=e,{blueprint:r}=t;this.blueprintFieldTarget.value=JSON.stringify(r),console.log("update blueprint",this.blueprintFieldTarget.value)}}I.targets=["blueprintField"],I.values={formId:String,stateDomId:String};class S extends e{submit(e){e.preventDefault(),this.element.submit()}}class T extends e{toggle(e){this.contentTargets.forEach(e=>{e.toggleAttribute("hidden")})}}T.targets=["content"];class V extends e{submit(e){try{const r=this;e.preventDefault();const i=new t(r.element.method||"POST",r.element.action,{responseKind:"turbo-stream",body:new FormData(r.element)});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class F extends e{visit(e){try{const r=this;e.preventDefault();const i=new t(r.element.dataset.turboMethod||"GET",r.element.href,{responseKind:"turbo-stream"});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class P extends u{initialize(){this.updateBlueprint=o((e,t,r)=>{this.value(e,t,r)},500)}refinedFilter(e){const{criterionIdValue:t,state:r}=this;r.updateInput(t,{id:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}clause(e){const{criterionIdValue:t,state:r}=this;r.updateInput(t,{clause:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}selected(e){const{target:t}=e,r=Array.prototype.slice.call(t.options).filter(e=>e.selected).map(e=>e.value);this.value(e,r,"selected")}value(e,t,r){const{criterionIdValue:i,state:n}=this,s=e.target.dataset;n.updateInput(i,{[r=r||s.inputKey||"value"]:t=t||e.target.value},s.inputId)}condition(e){const{criterionIdValue:t,state:r}=this,i=e.target;let n=i.value;n||(n=i.querySelector("select").value);const s=this.state.conditionConfigFor(n);r.replaceCriterion(t,n,s)&&this.refreshFromServer()}cancelEnter(e){"Enter"===e.code&&(e.preventDefault(),e.stopPropagation())}}P.values={criterionId:Number},require("daterangepicker/daterangepicker.css");class E extends e{connect(){this.initPluginInstance()}disconnect(){this.teardownPluginInstance()}clearDate(e){e.preventDefault(),window.$(this.fieldTarget).val(""),this.dispatch("value-cleared")}applyDateToField(e,t){const r=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,i=t?l(t.startDate.toISOString()):l(this.fieldTarget.value,"YYYY-MM-DDTHH:mm").format("YYYY-MM-DDTHH:mm"),n=i.format(r),s=this.includeTimeValue?i.toISOString(!0):i.format("YYYY-MM-DD");this.fieldTarget.value=n,this.hiddenFieldTarget.value=s,window.$(this.fieldTarget).trigger("change",t),this.hiddenFieldTarget.dispatchEvent(new Event("change",{detail:t,bubbles:!0}))}initPluginInstance(){const e=this.pickerLocaleValue,t=this.isAmPmValue;e.format=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,window.$(this.fieldTarget).daterangepicker({singleDatePicker:!0,timePicker:this.includeTimeValue,timePickerIncrement:5,autoUpdateInput:!1,autoApply:!0,minDate:!!this.futureOnlyValue&&new Date,locale:e,parentEl:a(this.element),drops:this.dropsValue?this.dropsValue:"down",timePicker24Hour:!t}),window.$(this.fieldTarget).on("apply.daterangepicker",this.applyDateToField.bind(this)),window.$(this.fieldTarget).on("cancel.daterangepicker",this.clearDate.bind(this)),window.$(this.fieldTarget).on("showCalendar.daterangepicker",this.showCalendar.bind(this)),this.pluginMainEl=this.fieldTarget,this.plugin=a(this.pluginMainEl).data("daterangepicker"),this.inlineValue&&this.element.classList.add("date-input--inline")}teardownPluginInstance(){void 0!==this.plugin&&(a(this.pluginMainEl).off("apply.daterangepicker"),a(this.pluginMainEl).off("cancel.daterangepicker"),a(this.pluginMainEl).off("showCalendar.daterangepicker"),this.plugin.remove())}showCalendar(){this.dispatch("show-calendar")}}E.targets=["field","hiddenField","clearButton"],E.values={includeTime:Boolean,futureOnly:Boolean,drops:String,inline:Boolean,dateFormat:String,timeFormat:String,isAmPm:Boolean,locale:{type:String,default:"en"},datetimeFormat:{type:String,default:"MM/DD/YYYY h:mm A"},pickerLocale:{type:Object,default:{}}};const j=[[c,"refine/add-controller.js"],[h,"./refine/inline-conditions-controller.js"],[p,"refine/criterion-form-controller.js"],[m,"refine/defaults-controller.js"],[f,"refine/delete-controller.js"],[g,"refine/filter-pills-controller.js"],[b,"refine/popup-controller.js"],[v,"refine/search-filter-controller.js"],[u,"refine/server-refresh-controller.js"],[C,"refine/state-controller.js"],[I,"refine/stored-filter-controller.js"],[S,"refine/submit-form-controller.js"],[T,"refine/toggle-controller.js"],[V,"refine/turbo-stream-form-controller.js"],[F,"refine/turbo-stream-link-controller.js"],[P,"refine/update-controller.js"],[E,"refine/date-controller.js"]].map(function(e){const t=e[0];return{identifier:d(e[1]),controllerConstructor:t}});export{c as AddController,p as CriterionFormController,E as DateController,m as DefaultsController,f as DeleteController,g as FilterPillsController,h as InlineConditionsController,b as PopupController,v as SearchFilterController,u as ServerRefreshController,C as StateController,I as StoredFilterController,S as SubmitForm,T as ToggleController,V as TurboStreamFormController,F as TurboStreamLinkController,P as UpdateController,j as controllerDefinitions};
1
+ import{Controller as e}from"@hotwired/stimulus";import{FetchRequest as t}from"@rails/request.js";import{useClickOutside as r}from"stimulus-use";import{delegate as i,abnegate as n}from"jquery-events-to-dom-events";import{isEqual as s,debounce as l}from"lodash";import o from"moment";import a from"jquery";import"daterangepicker";function d(e){const t=(e.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(t)return t.replace(/_/g,"-").replace(/\//g,"--")}class u extends e{connect(){this.state.finishUpdate()}get state(){let e=this.element;for(;e!==document.body;){if(e.matches('[data-controller~="refine--state"]'))return this.application.getControllerForElementAndIdentifier(e,"refine--state");e=e.parentNode}return null}refreshFromServer(e){void 0===e&&(e={});try{const r=this,{includeErrors:i}=e;r.state.startUpdate();const n=new t("GET",r.state.refreshUrlValue,{responseKind:"turbo-stream",query:{"refine_filters_builder[filter_class]":r.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(r.state.blueprint),"refine_filters_builder[client_id]":r.state.clientIdValue,include_errors:!!i}});return Promise.resolve(n.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class c extends u{criterion(){try{const e=this;return Promise.resolve(e.validateBlueprint()).then(function(t){t&&e.state.addCriterion(e.previousCriterionIdValue),e.refreshFromServer({includeErrors:!t})})}catch(e){return Promise.reject(e)}}group(){try{const e=this;return Promise.resolve(e.validateBlueprint()).then(function(t){t&&e.state.addGroup(),e.refreshFromServer({includeErrors:!t})})}catch(e){return Promise.reject(e)}}validateBlueprint(e){try{const e=this,r=new t("GET",e.state.validateBlueprintUrlValue,{query:{"refine_filters_builder[filter_class]":e.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(e.state.blueprint),"refine_filters_builder[client_id]":e.state.clientIdValue}});return Promise.resolve(r.perform()).then(function(e){return e.ok})}catch(e){return Promise.reject(e)}}}c.values={previousCriterionId:Number};class h extends e{refresh(e){try{const e=this,r=document.getElementById(e.formIdValue),i=new FormData(r),n=new t("GET",e.urlValue,{query:i,responseKind:"turbo-stream"});return Promise.resolve(n.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}h.values={url:String,formId:String};class p extends e{connect(){this.state=this.getStateController(),this.state.updateInput(this.criterionIdValue,this.inputValue)}getStateController(){let e=this.element;for(;e!==document.body;){const t=this.application.getControllerForElementAndIdentifier(e,"refine--state");if(t)return t;e=e.parentNode}return null}}p.values={criterionId:Number,input:Object};class m extends u{criterion(){const{state:e,criterionIdValue:t}=this;e.deleteCriterion(t),this.refreshFromServer()}}m.values={criterionId:Number};class f extends e{connect(){const e=new URLSearchParams(window.location.search);this.existingParams=e,this.existingParams.delete("stable_id")}delete(e){const{criterionId:t}=e.currentTarget.dataset;var r=parseInt(t);this.stateController.deleteCriterion(r),this.reloadPage()}reloadPage(){try{const e=this,{blueprint:r}=e.stateController,i=new t("POST",e.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:e.stateController.filterName,blueprint_json:JSON.stringify(r),client_id:e.stateController.clientIdValue}})});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}redirectToStableId(e){const t=new URLSearchParams;e&&t.append("stable_id",e);const r=new URLSearchParams({...Object.fromEntries(this.existingParams),...Object.fromEntries(t)}).toString(),i=window.location.pathname+"?"+r;history.pushState({},document.title,i),window.location.reload()}get stateController(){return this.element.refineStateController}get stabilizeFilterController(){return this.element.stabilizeFilterController}}f.values={submitUrl:String};class g extends e{connect(){r(this),this.boundHandleKeyUp=this.handleKeyUp.bind(this),document.addEventListener("keyup",this.boundHandleKeyUp)}disconnect(){document.removeEventListener("keyup",this.boundHandleKeyUp)}show(e){e.preventDefault(),this.frameTarget.src=this.srcValue,this.isOpenValue=!0}hide(e){this.isOpenValue&&(null==e||e.preventDefault(),this.frameTarget.innerHTML="",this.isOpenValue=!1)}clickOutside(e){this.hide(e)}handleKeyUp(e){"Escape"!==e.key&&"Esc"!==e.key||this.hide(e)}}g.targets=["frame"],g.values={src:String,isOpen:{type:Boolean,default:!1}};class b extends e{search(e){e.preventDefault(),this.submitFilter(),document.activeElement.blur()}submitFilter(){try{const e=this,{blueprint:r}=e.stateController,i=new t("POST",e.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:e.stateController.filterName,blueprint_json:JSON.stringify(r),client_id:e.stateController.clientIdValue}})});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}get stateController(){return this.element.querySelector('[data-controller~="refine--state"]').refineStateController}loadResults(e){let{detail:{url:t}}=e;console.log("filter submit success"),window.Turbo?window.Turbo.visit(t):window.location.href=t}}b.values={submitUrl:String},function(){if("function"==typeof window.CustomEvent)return!1;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var r=document.createEvent("CustomEvent");return r.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r}e.prototype=window.Event.prototype,window.CustomEvent=e}();const v=(e,t)=>{let{blueprint:r,formId:i}=t;const n=new CustomEvent("blueprint-updated",{bubbles:!0,cancelable:!0,detail:{blueprint:r,formId:i}});e.dispatchEvent(n)},y=(e,t,r)=>{var i;const n=null==r?void 0:r.component,s=(null==r?void 0:r.meta)||{clauses:[],options:{}},l=(null==r?void 0:r.refinements)||[],{clauses:o,options:a}=s;let d;d="option-condition"===n?a[0]?[a[0].id]:[]:void 0;let u={clause:null==(i=o[0])?void 0:i.id,selected:d};return l.forEach(e=>{const{meta:t,component:r}=e,{clauses:i,options:n}=t;let s;s="option-condition"===r?n[0]?[n[0].id]:[]:void 0,u[e.id]={clause:i[0].id,selected:s}}),{depth:t,type:"criterion",condition_id:e,input:u}};class w extends e{connect(){this.element.refineStateController=this,this.changeDelegate=i("change",["event","picker"]),this.blueprint=this.blueprintValue,this.conditions=this.conditionsValue,this.filterName=this.classNameValue,this.conditionsLookup=this.conditions.reduce((e,t)=>(e[t.id]=t,e),{}),this.loadingTimeout=null,v(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}disconnect(){n("change",this.changeDelegate)}startUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTimeout=window.setTimeout(()=>{this.loadingTarget.classList.remove("hidden")},1e3)}finishUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTarget.classList.add("hidden")}conditionConfigFor(e){return this.conditionsLookup[e]}addGroup(){const{conditions:e}=this,t=e.find(e=>e.id==this.defaultConditionIdValue)||e[0];var r;this.blueprint.length>0&&this.blueprint.push({depth:r=void 0===r?0:r,type:"conjunction",word:"or"}),this.blueprint.push(y(t.id,1,t)),v(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}addCriterion(e){const{blueprint:t,conditions:r}=this,i=r.find(e=>e.id==this.defaultConditionIdValue)||r[0];var n;t.splice(e+1,0,{depth:n=void 0===n?1:n,type:"conjunction",word:"and"},y(i.id,1,i)),v(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}deleteCriterion(e){const{blueprint:t}=this,r=t[e-1],i=t[e+1],n=r&&"or"===r.word,s=i&&"or"===i.word||!i,l=n||!r,o=l&&s;r||i?t.splice(o&&n?e-1:o&&!r||l&&!s?e:e-1,2):this.blueprint=[],v(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}replaceCriterion(e,t,r){const i=this.blueprint[e];if("criterion"!==i.type)throw new Error("You can't call updateConditionId on a non-criterion type. Trying to update "+JSON.stringify(y));const n=this.blueprint[e],l=y(t,i.depth,r);return!s(n,l)&&(this.blueprint[e]=l,v(this.element,{blueprint:this.blueprint,formId:this.formIdValue}),!0)}updateInput(e,t,r){const{blueprint:i}=this,n=i[e],s=(r=r||"input").split(", ");s.length>1?n[s[0]][s[1]]={...n[s[0]][s[1]],...t}:n[r]={...n[r],...t},v(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}}w.values={blueprint:Array,conditions:Array,className:String,refreshUrl:String,clientId:String,validateBlueprintUrl:String,defaultConditionId:String},w.targets=["loading"];class I extends e{connect(){const e=document.getElementById(this.stateDomIdValue).refineStateController;this.blueprintFieldTarget.value=JSON.stringify(e.blueprint),console.log("connect",this.blueprintFieldTarget.value)}updateBlueprintField(e){if(e.detail.formId!=this.formIdValue)return null;const{detail:t}=e,{blueprint:r}=t;this.blueprintFieldTarget.value=JSON.stringify(r),console.log("update blueprint",this.blueprintFieldTarget.value)}}I.targets=["blueprintField"],I.values={formId:String,stateDomId:String};class C extends e{submit(e){e.preventDefault(),this.element.submit()}}class S extends e{toggle(e){this.contentTargets.forEach(e=>{e.toggleAttribute("hidden")})}}S.targets=["content"];class T extends e{submit(e){try{const r=this;e.preventDefault();const i=new t(r.element.method||"POST",r.element.action,{responseKind:"turbo-stream",body:new FormData(r.element)});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class V extends e{visit(e){try{const r=this;e.preventDefault();const i=new t(r.element.dataset.turboMethod||"GET",r.element.href,{responseKind:"turbo-stream"});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class P extends e{filter(e){const t=e.currentTarget.value.toLowerCase(),r=new Set;this.listItemTargets.forEach(e=>{e.dataset.listItemValue.toLowerCase().includes(t)?(e.hidden=!1,r.add(e.dataset.category)):e.hidden=!0}),this.categoryTargets.forEach(e=>{e.hidden=!r.has(e.innerHTML)})}}P.targets=["listItem","category"];class E extends u{initialize(){this.updateBlueprint=l((e,t,r)=>{this.value(e,t,r)},500)}refinedFilter(e){const{criterionIdValue:t,state:r}=this;r.updateInput(t,{id:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}clause(e){const{criterionIdValue:t,state:r}=this;r.updateInput(t,{clause:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}selected(e){const{target:t}=e,r=Array.prototype.slice.call(t.options).filter(e=>e.selected).map(e=>e.value);this.value(e,r,"selected")}value(e,t,r){const{criterionIdValue:i,state:n}=this,s=e.target.dataset;n.updateInput(i,{[r=r||s.inputKey||"value"]:t=t||e.target.value},s.inputId)}condition(e){const{criterionIdValue:t,state:r}=this,i=e.target;let n=i.value;n||(n=i.querySelector("select").value);const s=this.state.conditionConfigFor(n);r.replaceCriterion(t,n,s)&&this.refreshFromServer()}cancelEnter(e){"Enter"===e.code&&(e.preventDefault(),e.stopPropagation())}}E.values={criterionId:Number},require("daterangepicker/daterangepicker.css");class F extends e{connect(){this.initPluginInstance()}disconnect(){this.teardownPluginInstance()}clearDate(e){e.preventDefault(),window.$(this.fieldTarget).val(""),this.dispatch("value-cleared")}applyDateToField(e,t){const r=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,i=t?o(t.startDate.toISOString()):o(this.fieldTarget.value,"YYYY-MM-DDTHH:mm").format("YYYY-MM-DDTHH:mm"),n=i.format(r),s=this.includeTimeValue?i.toISOString(!0):i.format("YYYY-MM-DD");this.fieldTarget.value=n,this.hiddenFieldTarget.value=s,window.$(this.fieldTarget).trigger("change",t),this.hiddenFieldTarget.dispatchEvent(new Event("change",{detail:t,bubbles:!0}))}initPluginInstance(){const e=this.pickerLocaleValue,t=this.isAmPmValue;e.format=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,window.$(this.fieldTarget).daterangepicker({singleDatePicker:!0,timePicker:this.includeTimeValue,timePickerIncrement:5,autoUpdateInput:!1,autoApply:!0,minDate:!!this.futureOnlyValue&&new Date,locale:e,parentEl:a(this.element),drops:this.dropsValue?this.dropsValue:"down",timePicker24Hour:!t}),window.$(this.fieldTarget).on("apply.daterangepicker",this.applyDateToField.bind(this)),window.$(this.fieldTarget).on("cancel.daterangepicker",this.clearDate.bind(this)),window.$(this.fieldTarget).on("showCalendar.daterangepicker",this.showCalendar.bind(this)),this.pluginMainEl=this.fieldTarget,this.plugin=a(this.pluginMainEl).data("daterangepicker"),this.inlineValue&&this.element.classList.add("date-input--inline")}teardownPluginInstance(){void 0!==this.plugin&&(a(this.pluginMainEl).off("apply.daterangepicker"),a(this.pluginMainEl).off("cancel.daterangepicker"),a(this.pluginMainEl).off("showCalendar.daterangepicker"),this.plugin.remove())}showCalendar(){this.dispatch("show-calendar")}}F.targets=["field","hiddenField","clearButton"],F.values={includeTime:Boolean,futureOnly:Boolean,drops:String,inline:Boolean,dateFormat:String,timeFormat:String,isAmPm:Boolean,locale:{type:String,default:"en"},datetimeFormat:{type:String,default:"MM/DD/YYYY h:mm A"},pickerLocale:{type:Object,default:{}}};const j=[[c,"refine/add-controller.js"],[h,"refine/criterion-form-controller.js"],[p,"refine/defaults-controller.js"],[m,"refine/delete-controller.js"],[f,"refine/filter-pills-controller.js"],[g,"refine/popup-controller.js"],[b,"refine/search-filter-controller.js"],[u,"refine/server-refresh-controller.js"],[w,"refine/state-controller.js"],[I,"refine/stored-filter-controller.js"],[C,"refine/submit-form-controller.js"],[S,"refine/toggle-controller.js"],[T,"refine/turbo-stream-form-controller.js"],[V,"refine/turbo-stream-link-controller.js"],[P,"./refine/typeahead-list-controller.js"],[E,"refine/update-controller.js"],[F,"refine/date-controller.js"]].map(function(e){const t=e[0];return{identifier:d(e[1]),controllerConstructor:t}});export{c as AddController,h as CriterionFormController,F as DateController,p as DefaultsController,m as DeleteController,f as FilterPillsController,g as PopupController,b as SearchFilterController,u as ServerRefreshController,w as StateController,I as StoredFilterController,C as SubmitForm,S as ToggleController,T as TurboStreamFormController,V as TurboStreamLinkController,P as TypeaheadListController,E as UpdateController,j as controllerDefinitions};
2
2
  //# sourceMappingURL=refine-stimulus.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"refine-stimulus.esm.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/refine/server-refresh-controller.js","../../javascript/controllers/refine/add-controller.js","../../javascript/controllers/refine/inline-conditions-controller.js","../../javascript/controllers/refine/criterion-form-controller.js","../../javascript/controllers/refine/defaults-controller.js","../../javascript/controllers/refine/delete-controller.js","../../javascript/controllers/refine/filter-pills-controller.js","../../javascript/controllers/refine/popup-controller.js","../../javascript/controllers/refine/search-filter-controller.js","../../javascript/refine/helpers/index.js","../../javascript/controllers/refine/state-controller.js","../../javascript/controllers/refine/stored-filter-controller.js","../../javascript/controllers/refine/submit-form-controller.js","../../javascript/controllers/refine/toggle-controller.js","../../javascript/controllers/refine/turbo-stream-form-controller.js","../../javascript/controllers/refine/turbo-stream-link-controller.js","../../javascript/controllers/refine/update-controller.js","../../javascript/controllers/refine/date-controller.js","../../javascript/controllers/index.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\n// Base class for controllers that reload form content from the server\nexport default class extends Controller {\n connect() {\n this.state.finishUpdate()\n }\n\n get state() {\n let currentElement = this.element\n\n while(currentElement !== document.body) {\n if (currentElement.matches('[data-controller~=\"refine--state\"]'))\n return this.application.getControllerForElementAndIdentifier(currentElement, 'refine--state')\n else {\n currentElement = currentElement.parentNode\n }\n }\n\n return null\n }\n\n async refreshFromServer(options = {}) {\n const { includeErrors } = options\n this.state.startUpdate()\n const request = new FetchRequest(\n \"GET\",\n this.state.refreshUrlValue,\n {\n responseKind: \"turbo-stream\",\n query: {\n \"refine_filters_builder[filter_class]\": this.state.filterName,\n \"refine_filters_builder[blueprint_json]\": JSON.stringify(this.state.blueprint),\n \"refine_filters_builder[client_id]\": this.state.clientIdValue,\n include_errors: !!includeErrors\n }\n }\n )\n await request.perform()\n }\n}\n","import ServerRefreshController from './server-refresh-controller'\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends ServerRefreshController {\n static values = {\n previousCriterionId: Number,\n }\n\n async criterion() {\n const isValid = await this.validateBlueprint()\n if (isValid) {\n this.state.addCriterion(this.previousCriterionIdValue)\n }\n this.refreshFromServer({includeErrors: !isValid})\n }\n\n async group() {\n const isValid = await this.validateBlueprint()\n if (isValid) {\n this.state.addGroup()\n }\n this.refreshFromServer({includeErrors: !isValid})\n }\n\n async validateBlueprint(blueprint) {\n const { state } = this\n\n const request = new FetchRequest(\n \"GET\",\n this.state.validateBlueprintUrlValue,\n {\n query: {\n \"refine_filters_builder[filter_class]\": this.state.filterName,\n \"refine_filters_builder[blueprint_json]\": JSON.stringify(this.state.blueprint),\n \"refine_filters_builder[client_id]\": this.state.clientIdValue\n }\n }\n )\n const response = await request.perform()\n return response.ok\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n static targets = ['condition', 'category']\n\n filterConditions(event) {\n const query = event.currentTarget.value.toLowerCase()\n const visibleCategories = new Set()\n\n // hide / show condition links that match the query and note which\n // categories should be visible\n this.conditionTargets.forEach(conditionNode => {\n const conditionName = conditionNode.innerHTML.toLowerCase()\n if (conditionName.includes(query)) {\n conditionNode.hidden = false\n visibleCategories.add(conditionNode.dataset.category)\n } else {\n conditionNode.hidden = true\n }\n })\n\n // hide / show category headers that have\n this.categoryTargets.forEach(categoryNode => {\n const categoryName = categoryNode.innerHTML\n if (visibleCategories.has(categoryName)) {\n categoryNode.hidden = false\n } else {\n categoryNode.hidden = true\n }\n })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n This controller handles criteria forms\n (refine/inline/criteria/new|edit)\n*/\nexport default class extends Controller {\n static values = {\n url: String,\n turboFrame: String,\n method: { type: String, default: \"POST\" }\n }\n\n refresh(_event) {\n // update the url with params from the form\n const formData = new FormData(this.element)\n const url = new URL(this.urlValue)\n\n for (const [name, value] of formData.entries()) {\n console.log(name, value)\n url.searchParams.set(name, value)\n }\n\n // navigate the modal to refresh the form\n window.Turbo.visit(url.toString(), {frame: this.turboFrameValue})\n }\n\n\n\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n criterionId: Number,\n input: Object,\n };\n\n connect() {\n this.state = this.getStateController()\n\n this.state.updateInput(\n this.criterionIdValue,\n this.inputValue,\n );\n }\n\n getStateController() {\n let currentElement = this.element\n\n while(currentElement !== document.body) {\n const controller = this.application.getControllerForElementAndIdentifier(currentElement, 'refine--state')\n if (controller) {\n return controller\n } else {\n currentElement = currentElement.parentNode\n }\n }\n\n return null\n }\n}\n","import ServerRefreshController from './server-refresh-controller';\n\nexport default class extends ServerRefreshController {\n static values = {\n criterionId: Number,\n }\n\n criterion() {\n const { state, criterionIdValue } = this;\n state.deleteCriterion(criterionIdValue);\n this.refreshFromServer()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n static values = {\n submitUrl: String\n }\n\n connect() {\n const urlParams = new URLSearchParams(window.location.search)\n this.existingParams = urlParams\n this.existingParams.delete('stable_id')\n }\n\n delete(event) {\n const { criterionId } = event.currentTarget.dataset\n var index = parseInt(criterionId)\n this.stateController.deleteCriterion(index)\n this.reloadPage()\n }\n\n async reloadPage() {\n const {blueprint} = this.stateController\n const request = new FetchRequest(\n \"POST\",\n this.submitUrlValue,\n {\n responseKind: \"turbo-stream\",\n body: JSON.stringify({\n refine_filters_builder: {\n filter_class: this.stateController.filterName,\n blueprint_json: JSON.stringify(blueprint),\n client_id: this.stateController.clientIdValue\n }\n })\n }\n )\n await request.perform()\n }\n\n redirectToStableId(stableId) {\n const params = new URLSearchParams()\n if (stableId) {\n params.append('stable_id', stableId)\n }\n const allParams = new URLSearchParams({\n ...Object.fromEntries(this.existingParams),\n ...Object.fromEntries(params),\n }).toString()\n const url = `${window.location.pathname}?${allParams}`\n\n history.pushState({}, document.title, url)\n window.location.reload()\n }\n\n get stateController() {\n return this.element.refineStateController\n }\n\n get stabilizeFilterController() {\n return this.element.stabilizeFilterController\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { useClickOutside } from 'stimulus-use'\n\n// simple controller to hide/show the filter modal\nexport default class extends Controller {\n static targets = [\"frame\"]\n\n static values = {\n src: String,\n isOpen: {type: Boolean, default: false}\n }\n\n connect() {\n useClickOutside(this)\n this.boundHandleKeyUp = this.handleKeyUp.bind(this)\n document.addEventListener(\"keyup\", this.boundHandleKeyUp)\n }\n\n disconnect() {\n document.removeEventListener(\"keyup\", this.boundHandleKeyUp)\n }\n\n show(event) {\n event.preventDefault()\n this.frameTarget.src = this.srcValue;\n this.isOpenValue = true\n }\n\n hide(event) {\n if (this.isOpenValue) {\n event?.preventDefault()\n this.frameTarget.innerHTML = \"\";\n this.isOpenValue = false\n }\n }\n\n clickOutside(event) {\n this.hide(event)\n }\n\n handleKeyUp(event) {\n if (event.key === \"Escape\" || event.key === \"Esc\") {\n this.hide(event)\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n static values = {\n submitUrl: String\n }\n\n\n search(event) {\n event.preventDefault()\n this.submitFilter()\n document.activeElement.blur()\n }\n\n async submitFilter() {\n const {blueprint} = this.stateController\n const request = new FetchRequest(\n \"POST\",\n this.submitUrlValue,\n {\n responseKind: \"turbo-stream\",\n body: JSON.stringify({\n refine_filters_builder: {\n filter_class: this.stateController.filterName,\n blueprint_json: JSON.stringify(blueprint),\n client_id: this.stateController.clientIdValue\n }\n })\n }\n )\n await request.perform()\n }\n\n get stateController() {\n return this\n .element\n .querySelector('[data-controller~=\"refine--state\"]')\n .refineStateController\n }\n\n loadResults({detail: {url}}) {\n console.log(\"filter submit success\")\n if (window.Turbo) {\n window.Turbo.visit(url)\n } else {\n window.location.href = url\n }\n }\n}\n","// Polyfill for custom events in IE9-11\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#polyfill\n;(function () {\n if (typeof window.CustomEvent === 'function') return false\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined }\n var evt = document.createEvent('CustomEvent')\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n return evt\n }\n\n CustomEvent.prototype = window.Event.prototype\n\n window.CustomEvent = CustomEvent\n\n // eslint expects a return here\n return true\n})()\n\nexport const filterStabilizedEvent = (element, stableId, filterName) => {\n const event = new CustomEvent('filter-stabilized', {\n bubbles: true,\n cancelable: true,\n detail: {\n stableId,\n filterName,\n },\n })\n element.dispatchEvent(event)\n}\n\nexport const filterUnstableEvent = (blueprint) => {\n const event = new CustomEvent('filter-unstable', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const filterInvalidEvent = ({blueprint, errors}) => {\n const event = new CustomEvent('filter-invalid', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n errors,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const filterStoredEvent = (storedFilterId) => {\n const event = new CustomEvent('filter-stored', {\n bubbles: true,\n cancelable: true,\n detail: {\n storedFilterId,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const blueprintUpdatedEvent = (element, {blueprint, formId}) => {\n const event = new CustomEvent('blueprint-updated', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n formId\n },\n })\n element.dispatchEvent(event)\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { delegate, abnegate } from 'jquery-events-to-dom-events'\nimport { blueprintUpdatedEvent } from '../../refine/helpers'\nimport { isEqual } from 'lodash'\n\nconst criterion = (id, depth, condition) => {\n const component = condition?.component\n const meta = condition?.meta || { clauses: [], options: {}}\n const refinements = condition?.refinements || []\n const { clauses, options } = meta\n let selected\n if (component === 'option-condition') {\n selected = options[0] ? [options[0].id] : []\n } else {\n selected = undefined\n }\n // Set newInput based on component\n\n let newInput = {\n clause: clauses[0]?.id,\n selected: selected,\n }\n\n // If refinements are present, add to input array\n refinements.forEach((refinement) => {\n const { meta, component } = refinement\n const { clauses, options } = meta\n let selected\n if (component === 'option-condition') {\n selected = options[0] ? [options[0].id] : []\n } else {\n selected = undefined\n }\n newInput[refinement.id] = {\n clause: clauses[0].id,\n selected: selected,\n }\n })\n\n return {\n depth,\n type: 'criterion',\n condition_id: id,\n input: newInput,\n }\n}\n\nconst or = function (depth) {\n depth = depth === undefined ? 0 : depth\n return {\n depth,\n type: 'conjunction',\n word: 'or',\n }\n}\n\nconst and = function (depth) {\n depth = depth === undefined ? 1 : depth\n return {\n depth,\n type: 'conjunction',\n word: 'and',\n }\n}\nexport default class extends Controller {\n static values = {\n blueprint: Array,\n conditions: Array,\n className: String,\n refreshUrl: String,\n clientId: String,\n validateBlueprintUrl: String,\n defaultConditionId: String\n }\n static targets = ['loading']\n\n\n connect() {\n // for select2 jquery events and datepicker\n this.element.refineStateController = this\n this.changeDelegate = delegate('change', ['event', 'picker'])\n this.blueprint = this.blueprintValue\n this.conditions = this.conditionsValue\n this.filterName = this.classNameValue\n this.conditionsLookup = this.conditions.reduce((lookup, condition) => {\n lookup[condition.id] = condition\n return lookup\n }, {})\n this.loadingTimeout = null\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n disconnect() {\n abnegate('change', this.changeDelegate)\n }\n\n startUpdate() {\n if (this.loadingTimeout) {\n window.clearTimeout(this.loadingTimeout)\n }\n // only show the loading overlay if it's taking a long time\n // to render the updates\n this.loadingTimeout = window.setTimeout(() => {\n this.loadingTarget.classList.remove('hidden')\n }, 1000)\n }\n\n finishUpdate() {\n if (this.loadingTimeout) {\n window.clearTimeout(this.loadingTimeout)\n }\n this.loadingTarget.classList.add('hidden')\n }\n\n conditionConfigFor(conditionId) {\n return this.conditionsLookup[conditionId]\n }\n\n addGroup() {\n const { blueprint, conditions } = this\n const condition = ( conditions.find(c => c.id == this.defaultConditionIdValue) || conditions[0] )\n const { meta } = condition\n\n if (this.blueprint.length > 0) {\n this.blueprint.push(or())\n }\n this.blueprint.push(criterion(condition.id, 1, condition))\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n addCriterion(previousCriterionId) {\n const { blueprint, conditions } = this\n const condition = ( conditions.find(c => c.id == this.defaultConditionIdValue) || conditions[0] )\n const { meta } = condition\n blueprint.splice(previousCriterionId + 1, 0, and(), criterion(condition.id, 1, condition))\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n deleteCriterion(criterionId) {\n /**\n To support 'groups' there is some complicated logic for deleting criterion.\n\n Imagine this simplified blueprint: [eq, and, sw, or, eq]\n\n User clicks to delete the last eq. We also have to delete the preceding or\n otherwise we're left with a hanging empty group\n\n What if the user deletes the sw? We have to clean up the preceding and.\n\n Imagine another scenario: [eq or sw and ew]\n Now we delete the first eq but this time we need to clean up the or.\n\n These conditionals cover these cases.\n **/\n const { blueprint } = this\n const previous = blueprint[criterionId - 1]\n const next = blueprint[criterionId + 1]\n\n const nextIsOr = next && next.word === 'or'\n const previousIsOr = previous && previous.word === 'or'\n\n const nextIsRightParen = nextIsOr || !next\n const previousIsLeftParen = previousIsOr || !previous\n\n const isFirstInGroup = previousIsLeftParen && !nextIsRightParen\n const isLastInGroup = previousIsLeftParen && nextIsRightParen\n const isLastCriterion = !previous && !next\n\n if (isLastCriterion) {\n this.blueprint = []\n } else if (isLastInGroup && previousIsOr) {\n blueprint.splice(criterionId - 1, 2)\n } else if (isLastInGroup && !previous) {\n blueprint.splice(criterionId, 2)\n } else if (isFirstInGroup) {\n blueprint.splice(criterionId, 2)\n } else {\n blueprint.splice(criterionId - 1, 2)\n }\n\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n /*\n Updates a criterion in the blueprint\n Returns true if an update was actually performed, or false if no-op\n */\n replaceCriterion(criterionId, conditionId, condition) {\n const criterionRow = this.blueprint[criterionId]\n if (criterionRow.type !== 'criterion') {\n throw new Error(\n `You can't call updateConditionId on a non-criterion type. Trying to update ${JSON.stringify(criterion)}`\n )\n }\n const existingCriterion = this.blueprint[criterionId]\n const newCriterion = criterion(conditionId, criterionRow.depth, condition)\n if (isEqual(existingCriterion, newCriterion)) {\n return false\n } else {\n this.blueprint[criterionId] = newCriterion\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n return true\n }\n }\n\n updateInput(criterionId, input, inputId) {\n // Input id is an array of hash keys that define the path for this input such as [\"input\", \"date_refinement\"]\n const { blueprint } = this\n const criterion = blueprint[criterionId]\n inputId = inputId || 'input'\n const blueprintPath = inputId.split(', ')\n // If the inputId contains more than one element, add input at appropriate depth\n if (blueprintPath.length > 1) {\n criterion[blueprintPath[0]][blueprintPath[1]] = { ...criterion[blueprintPath[0]][blueprintPath[1]], ...input }\n } else {\n criterion[inputId] = { ...criterion[inputId], ...input }\n }\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { filterStoredEvent } from '../../refine/helpers'\n\nexport default class extends Controller {\n static targets = ['blueprintField']\n static values = { formId: String, stateDomId: String }\n\n connect() {\n const stateController = document\n .getElementById(this.stateDomIdValue)\n .refineStateController\n this.blueprintFieldTarget.value = JSON.stringify(stateController.blueprint)\n console.log(\"connect\", this.blueprintFieldTarget.value)\n }\n\n updateBlueprintField(event) {\n if (event.detail.formId != this.formIdValue) { return null }\n const { detail } = event\n const { blueprint } = detail\n this.blueprintFieldTarget.value = JSON.stringify(blueprint)\n console.log(\"update blueprint\", this.blueprintFieldTarget.value)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n submit(event) {\n event.preventDefault()\n this.element.submit()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// simple controller to hide/show the filter modal\nexport default class extends Controller {\n static targets = [\"content\"]\n\n toggle(_event) {\n this.contentTargets.forEach(node => {\n node.toggleAttribute(\"hidden\")\n })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n attach to a form element to have it submit to a turbo-stream endpoint\n\n <form action=\"/contacts\" data-controller=\"refine--turbo-stream-form\" data-action=\"submit->refine--turbo-stream-form#submit\">\n\n Turbo is supposed to handle this natively but we're seeing issues when the form is inside an iframe\n*/\nexport default class extends Controller {\n async submit(event) {\n event.preventDefault()\n const request = new FetchRequest(\n (this.element.method || \"POST\"),\n this.element.action,\n {\n responseKind: \"turbo-stream\",\n body: new FormData(this.element)\n }\n )\n await request.perform()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n attach to a link element to have it request turbo stream responses\n\n <a href=\"/contacts\" data-controller=\"refine--turbo-stream-link\" data-action=\"refine--turbo-stream-link#get\">Click me</a>\n\n Turbo is supposed to handle this natively with data-turbo-stream but we're\n seeing issues using that attribute inside iframes\n*/\nexport default class extends Controller {\n async visit(event) {\n event.preventDefault()\n const request = new FetchRequest(\n (this.element.dataset.turboMethod || \"GET\"),\n this.element.href,\n {\n responseKind: \"turbo-stream\",\n }\n )\n await request.perform()\n }\n}\n","import ServerRefreshController from './server-refresh-controller'\nimport { debounce } from 'lodash'\n\nexport default class extends ServerRefreshController {\n static values = {\n criterionId: Number,\n }\n\n initialize() {\n this.updateBlueprint = debounce((event, value, inputKey) => {\n this.value(event, value, inputKey)\n }, 500)\n }\n\n refinedFilter(event) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n\n state.updateInput(\n criterionIdValue,\n {\n id: event.target.value,\n },\n inputId\n )\n this.refreshFromServer()\n }\n\n clause(event) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n state.updateInput(\n criterionIdValue,\n {\n clause: event.target.value,\n },\n inputId\n )\n this.refreshFromServer()\n }\n\n selected(event) {\n const { target: select } = event\n const options = Array.prototype.slice.call(select.options)\n const selectedOptions = options.filter((option) => option.selected)\n const selected = selectedOptions.map((option) => option.value)\n this.value(event, selected, 'selected')\n }\n\n value(event, value, inputKey) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n inputKey = inputKey || dataset.inputKey || 'value'\n value = value || event.target.value\n state.updateInput(\n criterionIdValue,\n {\n [inputKey]: value,\n },\n inputId\n )\n }\n\n condition(event) {\n const { criterionIdValue, state } = this\n const element = event.target\n let newConditionId = element.value\n if (!newConditionId) newConditionId = element.querySelector('select').value \n const config = this.state.conditionConfigFor(newConditionId)\n const updatePerformed = state.replaceCriterion(criterionIdValue, newConditionId, config)\n if (updatePerformed) {\n this.refreshFromServer()\n }\n }\n\n // Prevent form submission when hitting enter in a text box\n cancelEnter(event) {\n if (event.code === \"Enter\") {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport moment from 'moment'\nrequire('daterangepicker/daterangepicker.css')\n\n// requires jQuery, moment, might want to consider a vanilla JS alternative\nimport $ from 'jquery' // ensure jquery is loaded before daterangepicker\nimport 'daterangepicker'\n\nexport default class extends Controller {\n static targets = [\n 'field',\n 'hiddenField',\n 'clearButton',\n ]\n\n static values = {\n includeTime: Boolean,\n futureOnly: Boolean,\n drops: String,\n inline: Boolean,\n dateFormat: String,\n timeFormat: String,\n isAmPm: Boolean,\n locale: { type: String, default: 'en' },\n datetimeFormat: { type: String, default: 'MM/DD/YYYY h:mm A' },\n pickerLocale: { type: Object, default: {} },\n }\n\n connect() {\n this.initPluginInstance()\n }\n\n disconnect() {\n this.teardownPluginInstance()\n }\n\n clearDate(event) {\n // don't submit the form, unless it originated from the cancel/clear button\n event.preventDefault()\n\n window.$(this.fieldTarget).val('')\n\n this.dispatch('value-cleared')\n }\n\n applyDateToField(event, picker) {\n const format = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue\n\n const momentVal = picker\n ? moment(picker.startDate.toISOString())\n : moment(this.fieldTarget.value, 'YYYY-MM-DDTHH:mm').format('YYYY-MM-DDTHH:mm')\n const displayVal = momentVal.format(format)\n const dataVal = this.includeTimeValue ? momentVal.toISOString(true) : momentVal.format('YYYY-MM-DD')\n\n this.fieldTarget.value = displayVal\n this.hiddenFieldTarget.value = dataVal\n // bubble up a change event when the input is updated for other listeners\n window.$(this.fieldTarget).trigger('change', picker)\n\n // emit native change event\n this.hiddenFieldTarget.dispatchEvent(new Event('change', { detail: picker, bubbles: true }))\n }\n\n initPluginInstance() {\n const localeValues = this.pickerLocaleValue\n const isAmPm = this.isAmPmValue\n localeValues['format'] = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue\n\n window.$(this.fieldTarget).daterangepicker({\n singleDatePicker: true,\n timePicker: this.includeTimeValue,\n timePickerIncrement: 5,\n autoUpdateInput: false,\n autoApply: true,\n minDate: this.futureOnlyValue ? new Date() : false,\n locale: localeValues,\n parentEl: $(this.element),\n drops: this.dropsValue ? this.dropsValue : 'down',\n timePicker24Hour: !isAmPm,\n })\n\n window.$(this.fieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))\n window.$(this.fieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))\n window.$(this.fieldTarget).on('showCalendar.daterangepicker', this.showCalendar.bind(this))\n\n this.pluginMainEl = this.fieldTarget\n this.plugin = $(this.pluginMainEl).data('daterangepicker') // weird\n\n if (this.inlineValue) {\n this.element.classList.add('date-input--inline')\n }\n\n }\n \n teardownPluginInstance() {\n if (this.plugin === undefined) {\n return\n }\n\n $(this.pluginMainEl).off('apply.daterangepicker')\n $(this.pluginMainEl).off('cancel.daterangepicker')\n $(this.pluginMainEl).off('showCalendar.daterangepicker')\n\n // revert to original markup, remove any event listeners\n this.plugin.remove()\n\n }\n\n showCalendar() {\n this.dispatch('show-calendar')\n }\n\n}\n","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport AddController from './refine/add-controller'\nimport InlineConditionsController from './refine/inline-conditions-controller'\nimport CriterionFormController from './refine/criterion-form-controller'\nimport DefaultsController from './refine/defaults-controller'\nimport DeleteController from './refine/delete-controller'\nimport FilterPillsController from './refine/filter-pills-controller'\nimport PopupController from './refine/popup-controller'\nimport SearchFilterController from './refine/search-filter-controller'\nimport ServerRefreshController from './refine/server-refresh-controller'\nimport StateController from './refine/state-controller'\nimport StoredFilterController from './refine/stored-filter-controller'\nimport SubmitForm from './refine/submit-form-controller'\nimport ToggleController from './refine/toggle-controller'\nimport TurboStreamFormController from './refine/turbo-stream-form-controller'\nimport TurboStreamLinkController from './refine/turbo-stream-link-controller'\nimport UpdateController from './refine/update-controller'\nimport DateController from './refine/date-controller'\n\nexport const controllerDefinitions = [\n [AddController, 'refine/add-controller.js'],\n [InlineConditionsController, './refine/inline-conditions-controller.js'],\n [CriterionFormController, 'refine/criterion-form-controller.js'],\n [DefaultsController, 'refine/defaults-controller.js'],\n [DeleteController, 'refine/delete-controller.js'],\n [FilterPillsController, 'refine/filter-pills-controller.js'],\n [PopupController, 'refine/popup-controller.js'],\n [SearchFilterController, 'refine/search-filter-controller.js'],\n [ServerRefreshController, 'refine/server-refresh-controller.js'],\n [StateController, 'refine/state-controller.js'],\n [StoredFilterController, 'refine/stored-filter-controller.js'],\n [SubmitForm, 'refine/submit-form-controller.js'],\n [ToggleController, 'refine/toggle-controller.js'],\n [TurboStreamFormController, 'refine/turbo-stream-form-controller.js'],\n [TurboStreamLinkController, 'refine/turbo-stream-link-controller.js'],\n [UpdateController, 'refine/update-controller.js'],\n [DateController, 'refine/date-controller.js']\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n AddController,\n InlineConditionsController,\n CriterionFormController,\n DefaultsController,\n DeleteController,\n FilterPillsController,\n PopupController,\n SearchFilterController,\n ServerRefreshController,\n StateController,\n StoredFilterController,\n SubmitForm,\n ToggleController,\n TurboStreamFormController,\n TurboStreamLinkController,\n UpdateController,\n DateController\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","Controller","connect","this","state","finishUpdate","currentElement","element","document","body","matches","application","getControllerForElementAndIdentifier","parentNode","refreshFromServer","options","_this","includeErrors","startUpdate","request","FetchRequest","refreshUrlValue","responseKind","query","filterName","JSON","stringify","blueprint","clientIdValue","include_errors","perform","then","e","Promise","reject","ServerRefreshController","criterion","resolve","validateBlueprint","isValid","addCriterion","previousCriterionIdValue","group","_this2","addGroup","_this3","validateBlueprintUrlValue","response","ok","values","previousCriterionId","Number","filterConditions","event","currentTarget","value","toLowerCase","visibleCategories","Set","conditionTargets","forEach","conditionNode","innerHTML","includes","hidden","add","dataset","category","categoryTargets","categoryNode","has","targets","_class","refresh","_event","formData","FormData","url","URL","urlValue","name","entries","console","log","searchParams","set","window","Turbo","visit","toString","frame","turboFrameValue","String","turboFrame","method","type","default","getStateController","updateInput","criterionIdValue","inputValue","controller","criterionId","input","Object","deleteCriterion","urlParams","URLSearchParams","location","search","existingParams","delete","index","parseInt","stateController","reloadPage","submitUrlValue","refine_filters_builder","filter_class","blueprint_json","client_id","redirectToStableId","stableId","params","append","allParams","fromEntries","pathname","history","pushState","title","reload","refineStateController","stabilizeFilterController","submitUrl","useClickOutside","boundHandleKeyUp","handleKeyUp","bind","addEventListener","disconnect","removeEventListener","show","preventDefault","frameTarget","src","srcValue","isOpenValue","hide","clickOutside","isOpen","Boolean","submitFilter","activeElement","blur","querySelector","loadResults","_ref","detail","href","CustomEvent","bubbles","cancelable","undefined","evt","createEvent","initCustomEvent","prototype","Event","blueprintUpdatedEvent","formId","_ref2","dispatchEvent","id","depth","condition","_clauses$","component","meta","clauses","refinements","selected","newInput","clause","refinement","condition_id","changeDelegate","delegate","blueprintValue","conditions","conditionsValue","classNameValue","conditionsLookup","reduce","lookup","loadingTimeout","formIdValue","abnegate","clearTimeout","setTimeout","loadingTarget","classList","remove","conditionConfigFor","conditionId","find","c","defaultConditionIdValue","length","push","word","splice","previous","next","previousIsOr","nextIsRightParen","previousIsLeftParen","isLastInGroup","replaceCriterion","criterionRow","Error","existingCriterion","newCriterion","isEqual","inputId","blueprintPath","split","Array","className","refreshUrl","clientId","validateBlueprintUrl","defaultConditionId","getElementById","stateDomIdValue","blueprintFieldTarget","updateBlueprintField","stateDomId","submit","toggle","contentTargets","node","toggleAttribute","TurboStreamFormController","action","turboMethod","initialize","updateBlueprint","debounce","inputKey","refinedFilter","target","select","slice","call","filter","option","map","newConditionId","config","cancelEnter","code","stopPropagation","require","initPluginInstance","teardownPluginInstance","clearDate","$","fieldTarget","val","dispatch","applyDateToField","picker","format","includeTimeValue","timeFormatValue","dateFormatValue","momentVal","moment","startDate","toISOString","displayVal","dataVal","hiddenFieldTarget","trigger","localeValues","pickerLocaleValue","isAmPm","isAmPmValue","daterangepicker","singleDatePicker","timePicker","timePickerIncrement","autoUpdateInput","autoApply","minDate","futureOnlyValue","Date","locale","parentEl","drops","dropsValue","timePicker24Hour","on","showCalendar","pluginMainEl","plugin","data","inlineValue","off","includeTime","futureOnly","inline","dateFormat","timeFormat","datetimeFormat","pickerLocale","controllerDefinitions","AddController","InlineConditionsController","CriterionFormController","DefaultsController","DeleteController","FilterPillsController","PopupController","SearchFilterController","StateController","StoredFilterController","SubmitForm","ToggleController","TurboStreamLinkController","UpdateController","DateController","d","identifier","controllerConstructor"],"mappings":"wUAqBA,SAASA,EAAwBC,GAC7B,MAAMC,GAAeD,EAAIE,MAAM,2CAA6C,IAAI,GAChF,GAAID,EACA,OAAOA,EAAYE,QAAQ,KAAM,KAAKA,QAAQ,MAAO,sBCnBhCC,EAC3BC,UACEC,KAAKC,MAAMC,eAGTD,YACF,IAAIE,EAAiBH,KAAKI,QAE1B,KAAMD,IAAmBE,SAASC,MAAM,CACtC,GAAIH,EAAeI,QAAQ,sCACzB,OAAYC,KAAAA,YAAYC,qCAAqCN,EAAgB,iBAE7EA,EAAiBA,EAAeO,WAIpC,OACD,KAEKC,kBAAkBC,QAAD,IAACA,IAAAA,EAAU,IAAI,IAAA,MAAAC,EAEpCb,MADMc,cAAEA,GAAkBF,EAC1BC,EAAKZ,MAAMc,cACX,MAAMC,EAAU,IAAIC,EAClB,MACAJ,EAAKZ,MAAMiB,gBACX,CACEC,aAAc,eACdC,MAAO,CACL,uCAAwCP,EAAKZ,MAAMoB,WACnD,yCAA0CC,KAAKC,UAAUV,EAAKZ,MAAMuB,WACpE,oCAAqCX,EAAKZ,MAAMwB,cAChDC,iBAAkBZ,KAZY,uBAgB9BE,EAAQW,WAhBsBC,KAAA,cAAf,MAnBeC,GAAA,OAAAC,QAAAC,OAAAF,KCFXG,MAAAA,UAAAA,EAKrBC,gBACkB,MAAApB,EAAAb,KAAA,OAAA8B,QAAAI,QAAArB,EAAKsB,qBADXP,KAAA,SACVQ,GACFA,GACFvB,EAAKZ,MAAMoC,aAAaxB,EAAKyB,0BAE/BzB,EAAKF,kBAAkB,CAACG,eAAgBsB,MAL3B,MAAAP,GAAA,OAAAC,QAAAC,OAAAF,IAQTU,QAAQ,IAAA,MAAAC,EACUxC,KAAA,OAAA8B,QAAAI,QAAAM,EAAKL,qBADfP,KAAA,SACNQ,GACFA,GACFI,EAAKvC,MAAMwC,WAEbD,EAAK7B,kBAAkB,CAACG,eAAgBsB,MAL/B,mCAQLD,kBAAkBX,GAAD,YACHxB,KAEZgB,EAAU,IAAIC,EAClB,MACAyB,EAAKzC,MAAM0C,0BACX,CACEvB,MAAO,CACL,uCAAwCsB,EAAKzC,MAAMoB,WACnD,yCAA0CC,KAAKC,UAAUmB,EAAKzC,MAAMuB,WACpE,oCAAqCkB,EAAKzC,MAAMwB,iBAVrB,OAAAK,QAAAI,QAcVlB,EAAQW,WAdEC,KAAA,SAc3BgB,GACN,OAAOA,EAASC,KAfK,MArB4BhB,GAAA,OAAAC,QAAAC,OAAAF,OAC5CiB,OAAS,CACdC,oBAAqBC,QCHIlD,MAAAA,UAAAA,EAI3BmD,iBAAiBC,GACf,MAAM9B,EAAQ8B,EAAMC,cAAcC,MAAMC,cAClCC,EAAoB,IAAIC,IAI9BvD,KAAKwD,iBAAiBC,QAAQC,IACNA,EAAcC,UAAUN,cAC5BO,SAASxC,IACzBsC,EAAcG,QAAS,EACvBP,EAAkBQ,IAAIJ,EAAcK,QAAQC,WAE5CN,EAAcG,QAAS,IAK3B7D,KAAKiE,gBAAgBR,QAAQS,IAGzBA,EAAaL,QADXP,EAAkBa,IADDD,EAAaP,gBApB/BS,QAAU,CAAC,YAAa,YCGlB,MAAAC,UAAcvE,EAO3BwE,QAAQC,GAEN,MAAMC,EAAW,IAAIC,SAASzE,KAAKI,SAC7BsE,EAAM,IAAIC,IAAI3E,KAAK4E,UAEzB,IAAK,MAAOC,EAAMzB,KAAUoB,EAASM,UACnCC,QAAQC,IAAIH,EAAMzB,GAClBsB,EAAIO,aAAaC,IAAIL,EAAMzB,GAI7B+B,OAAOC,MAAMC,MAAMX,EAAIY,WAAY,CAACC,MAAOvF,KAAKwF,qBAjB3C1C,OAAS,CACd4B,IAAKe,OACLC,WAAYD,OACZE,OAAQ,CAAEC,KAAMH,OAAQI,QAAS,SCTR/F,MAAAA,UAAAA,EAM3BC,UACEC,KAAKC,MAAQD,KAAK8F,qBAElB9F,KAAKC,MAAM8F,YACT/F,KAAKgG,iBACLhG,KAAKiG,YAITH,qBACE,IAAI3F,EAAiBH,KAAKI,QAE1B,KAAMD,IAAmBE,SAASC,MAAM,CACtC,MAAM4F,EAAalG,KAAKQ,YAAYC,qCAAqCN,EAAgB,iBACzF,GAAI+F,EACF,OAAOA,EAEP/F,EAAiBA,EAAeO,WAIpC,eA1BKoC,OAAS,CACdqD,YAAanD,OACboD,MAAOC,QCHkBrE,MAAAA,UAAAA,EAK3BC,YACE,MAAMhC,MAAEA,EAAF+F,iBAASA,GAAqBhG,KACpCC,EAAMqG,gBAAgBN,GACtBhG,KAAKW,uBAPAmC,OAAS,CACdqD,YAAanD,QCDYlD,MAAAA,UAAAA,EAK3BC,UACE,MAAMwG,EAAY,IAAIC,gBAAgBrB,OAAOsB,SAASC,QACtD1G,KAAK2G,eAAiBJ,EACtBvG,KAAK2G,eAAeC,OAAO,aAG7BA,OAAO1D,GACL,MAAMiD,YAAEA,GAAgBjD,EAAMC,cAAcY,QAC5C,IAAI8C,EAAQC,SAASX,GACrBnG,KAAK+G,gBAAgBT,gBAAgBO,GACrC7G,KAAKgH,aAGDA,iBACgB,MAAAnG,EAAAb,MAAdwB,UAACA,GAAaX,EAAKkG,gBACnB/F,EAAU,IAAIC,EAClB,OACAJ,EAAKoG,eACL,CACE9F,aAAc,eACdb,KAAMgB,KAAKC,UAAU,CACnB2F,uBAAwB,CACtBC,aAActG,EAAKkG,gBAAgB1F,WACnC+F,eAAgB9F,KAAKC,UAAUC,GAC/B6F,UAAWxG,EAAKkG,gBAAgBtF,mBAXvB,OAgBXT,QAAAA,QAAAA,EAAQW,WACfC,KAAA,cAjBe,MAmBhB0F,GAAAA,OAAAA,QAAAA,OAAAA,IAAAA,mBAAmBC,GACjB,MAAMC,EAAS,IAAIhB,gBACfe,GACFC,EAAOC,OAAO,YAAaF,GAE7B,MAAMG,EAAY,IAAIlB,gBAAgB,IACjCH,OAAOsB,YAAY3H,KAAK2G,mBACxBN,OAAOsB,YAAYH,KACrBlC,WACGZ,EAASS,OAAOsB,SAASmB,SAAtB,IAAkCF,EAE3CG,QAAQC,UAAU,GAAIzH,SAAS0H,MAAOrD,GACtCS,OAAOsB,SAASuB,SAGdjB,sBACF,OAAO/G,KAAKI,QAAQ6H,sBAGlBC,gCACF,OAAOlI,KAAKI,QAAQ8H,6BAxDfpF,OAAS,CACdqF,UAAW1C,wBCDc3F,EAQ3BC,UACEqI,EAAgBpI,MAChBA,KAAKqI,iBAAmBrI,KAAKsI,YAAYC,KAAKvI,MAC9CK,SAASmI,iBAAiB,QAASxI,KAAKqI,kBAG1CI,aACEpI,SAASqI,oBAAoB,QAAS1I,KAAKqI,kBAG7CM,KAAKzF,GACHA,EAAM0F,iBACN5I,KAAK6I,YAAYC,IAAM9I,KAAK+I,SAC5B/I,KAAKgJ,aAAc,EAGrBC,KAAK/F,GACClD,KAAKgJ,cACF,MAAL9F,GAAAA,EAAO0F,iBACP5I,KAAK6I,YAAYlF,UAAY,GAC7B3D,KAAKgJ,aAAc,GAIvBE,aAAahG,GACXlD,KAAKiJ,KAAK/F,GAGZoF,YAAYpF,GACQ,WAAdA,EAAMxD,KAAkC,QAAdwD,EAAMxD,KAClCM,KAAKiJ,KAAK/F,MArCPkB,QAAU,CAAC,WAEXtB,OAAS,CACdgG,IAAKrD,OACL0D,OAAQ,CAACvD,KAAMwD,QAASvD,SAAS,ICNtB,MAAAxB,UAAcvE,EAM3B4G,OAAOxD,GACLA,EAAM0F,iBACN5I,KAAKqJ,eACLhJ,SAASiJ,cAAcC,OAGnBF,eAAe,IAAA,MAAAxI,EACCb,MAAdwB,UAACA,GAAaX,EAAKkG,gBACnB/F,EAAU,IAAIC,EAClB,OACAJ,EAAKoG,eACL,CACE9F,aAAc,eACdb,KAAMgB,KAAKC,UAAU,CACnB2F,uBAAwB,CACtBC,aAActG,EAAKkG,gBAAgB1F,WACnC+F,eAAgB9F,KAAKC,UAAUC,GAC/B6F,UAAWxG,EAAKkG,gBAAgBtF,mBAXrB,OAgBbT,QAAAA,QAAAA,EAAQW,8BAhBE,MAAAE,GAAA,OAAAC,QAAAC,OAAAF,IAmBdkF,sBACF,OACG3G,KAAAA,QACAoJ,cAAc,sCACdvB,sBAGLwB,YAAWC,OAAEC,QAAQjF,IAACA,MACpBK,QAAQC,IAAI,yBACRG,OAAOC,MACTD,OAAOC,MAAMC,MAAMX,GAEnBS,OAAOsB,SAASmD,KAAOlF,KA1CpB5B,OAAS,CACdqF,UAAW1C,QCHd,WACC,GAAkC,mBAAvBN,OAAO0E,YAA4B,OAAA,EAE9C,SAASA,EAAY3G,EAAOsE,GAC1BA,EAASA,GAAU,CAAEsC,SAAS,EAAOC,YAAY,EAAOJ,YAAQK,GAChE,IAAIC,EAAM5J,SAAS6J,YAAY,eAE/B,OADAD,EAAIE,gBAAgBjH,EAAOsE,EAAOsC,QAAStC,EAAOuC,WAAYvC,EAAOmC,QAC9DM,EAGTJ,EAAYO,UAAYjF,OAAOkF,MAAMD,UAErCjF,OAAO0E,YAAcA,EAZtB,SAgEYS,EAAwB,CAAClK,OAAS,IAAAoB,UAACA,EAAD+I,OAAYA,GAAYC,EACrE,MAAMtH,EAAQ,IAAI2G,YAAY,oBAAqB,CACjDC,SAAS,EACTC,YAAY,EACZJ,OAAQ,CACNnI,UAAAA,EACA+I,OAAAA,KAGJnK,EAAQqK,cAAcvH,ICtElBjB,EAAY,CAACyI,EAAIC,EAAOC,KAAc,IAAAC,EAC1C,MAAMC,EAAS,MAAGF,OAAH,EAAGA,EAAWE,UACvBC,GAAgB,MAATH,OAAAA,EAAAA,EAAWG,OAAQ,CAAEC,QAAS,GAAIpK,QAAS,IAClDqK,GAAuB,MAATL,OAAAA,EAAAA,EAAWK,cAAe,IACxCD,QAAEA,EAAFpK,QAAWA,GAAYmK,EAC7B,IAAIG,EAEFA,EADgB,qBAAdJ,EACSlK,EAAQ,GAAK,CAACA,EAAQ,GAAG8J,IAAM,QAE/BV,EAIb,IAAImB,EAAW,CACbC,OAAM,OAAEJ,EAAAA,EAAQ,SAAV,EAAEH,EAAYH,GACpBQ,SAAUA,GAmBZ,OAfAD,EAAYxH,QAAS4H,IACnB,MAAMN,KAAEA,EAAFD,UAAQA,GAAcO,GACtBL,QAAEA,EAAFpK,QAAWA,GAAYmK,EAC7B,IAAIG,EAEFA,EADgB,qBAAdJ,EACSlK,EAAQ,GAAK,CAACA,EAAQ,GAAG8J,IAAM,QAE/BV,EAEbmB,EAASE,EAAWX,IAAM,CACxBU,OAAQJ,EAAQ,GAAGN,GACnBQ,SAAUA,KAIP,CACLP,MAAAA,EACA/E,KAAM,YACN0F,aAAcZ,EACdtE,MAAO+E,IAqBI,MAAA9G,UAAcvE,EAa3BC,UAEEC,KAAKI,QAAQ6H,sBAAwBjI,KACrCA,KAAKuL,eAAiBC,EAAS,SAAU,CAAC,QAAS,WACnDxL,KAAKwB,UAAYxB,KAAKyL,eACtBzL,KAAK0L,WAAa1L,KAAK2L,gBACvB3L,KAAKqB,WAAarB,KAAK4L,eACvB5L,KAAK6L,iBAAmB7L,KAAK0L,WAAWI,OAAO,CAACC,EAAQnB,KACtDmB,EAAOnB,EAAUF,IAAME,EAChBmB,GACN,IACH/L,KAAKgM,eAAiB,KACtB1B,EAAsBtK,KAAKI,QAAS,CAACoB,UAAWxB,KAAKwB,UAAW+I,OAAQvK,KAAKiM,cAG/ExD,aACEyD,EAAS,SAAUlM,KAAKuL,gBAG1BxK,cACMf,KAAKgM,gBACP7G,OAAOgH,aAAanM,KAAKgM,gBAI3BhM,KAAKgM,eAAiB7G,OAAOiH,WAAW,KACtCpM,KAAKqM,cAAcC,UAAUC,OAAO,WACnC,KAGLrM,eACMF,KAAKgM,gBACP7G,OAAOgH,aAAanM,KAAKgM,gBAE3BhM,KAAKqM,cAAcC,UAAUxI,IAAI,UAGnC0I,mBAAmBC,GACjB,YAAYZ,iBAAiBY,GAG/BhK,WACE,MAAMiJ,WAAaA,GAAe1L,KAC5B4K,EAAcc,EAAWgB,KAAKC,GAAKA,EAAEjC,IAAM1K,KAAK4M,0BAA4BlB,EAAW,GAzEtF,IAAUf,EA4Eb3K,KAAKwB,UAAUqL,OAAS,GAC1B7M,KAAKwB,UAAUsL,KA3EZ,CACLnC,MAFFA,OAAkBX,IAAVW,EAAsB,EAAIA,EAGhC/E,KAAM,cACNmH,KAAM,OA0EN/M,KAAKwB,UAAUsL,KAAK7K,EAAU2I,EAAUF,GAAI,EAAGE,IAC/CN,EAAsBtK,KAAKI,QAAS,CAACoB,UAAWxB,KAAKwB,UAAW+I,OAAQvK,KAAKiM,cAG/E5J,aAAaU,GACX,MAAMvB,UAAEA,EAAFkK,WAAaA,GAAe1L,KAC5B4K,EAAcc,EAAWgB,KAAKC,GAAKA,EAAEjC,IAAM1K,KAAK4M,0BAA4BlB,EAAW,GA5ErF,IAAUf,EA8ElBnJ,EAAUwL,OAAOjK,EAAsB,EAAG,EA5ErC,CACL4H,MAFFA,OAAkBX,IAAVW,EAAsB,EAAIA,EAGhC/E,KAAM,cACNmH,KAAM,OAyE8C9K,EAAU2I,EAAUF,GAAI,EAAGE,IAC/EN,EAAsBtK,KAAKI,QAAS,CAACoB,UAAWxB,KAAKwB,UAAW+I,OAAQvK,KAAKiM,cAG/E3F,gBAAgBH,GAgBd,MAAM3E,UAAEA,GAAcxB,KAChBiN,EAAWzL,EAAU2E,EAAc,GACnC+G,EAAO1L,EAAU2E,EAAc,GAG/BgH,EAAeF,GAA8B,OAAlBA,EAASF,KAEpCK,EAHWF,GAAsB,OAAdA,EAAKH,OAGQG,EAChCG,EAAsBF,IAAiBF,EAGvCK,EAAgBD,GAAuBD,EACpBH,GAAaC,EAKpC1L,EAAUwL,OADDM,GAAiBH,EACThH,EAAc,EACtBmH,IAAkBL,GARNI,IAAwBD,EAS5BjH,EAIAA,EAAc,EANG,GAFlCnG,KAAKwB,UAAY,GAWnB8I,EAAsBtK,KAAKI,QAAS,CAACoB,UAAWxB,KAAKwB,UAAW+I,OAAQvK,KAAKiM,cAO/EsB,iBAAiBpH,EAAasG,EAAa7B,GACzC,MAAM4C,EAAexN,KAAKwB,UAAU2E,GACpC,GAA0B,cAAtBqH,EAAa5H,KACf,MAAM,IAAI6H,MACsEnM,8EAAAA,KAAKC,UAAUU,IAGjG,MAAMyL,EAAoB1N,KAAKwB,UAAU2E,GACnCwH,EAAe1L,EAAUwK,EAAae,EAAa7C,MAAOC,GAChE,OAAIgD,EAAQF,EAAmBC,KAG7B3N,KAAKwB,UAAU2E,GAAewH,EAC9BrD,EAAsBtK,KAAKI,QAAS,CAACoB,UAAWxB,KAAKwB,UAAW+I,OAAQvK,KAAKiM,eAE9E,GAGHlG,YAAYI,EAAaC,EAAOyH,GAE9B,MAAMrM,UAAEA,GAAcxB,KAChBiC,EAAYT,EAAU2E,GAEtB2H,GADND,EAAUA,GAAW,SACSE,MAAM,MAEhCD,EAAcjB,OAAS,EACzB5K,EAAU6L,EAAc,IAAIA,EAAc,IAAM,IAAK7L,EAAU6L,EAAc,IAAIA,EAAc,OAAQ1H,GAEvGnE,EAAU4L,GAAW,IAAK5L,EAAU4L,MAAazH,GAEnDkE,EAAsBtK,KAAKI,QAAS,CAACoB,UAAWxB,KAAKwB,UAAW+I,OAAQvK,KAAKiM,iBAxJxEnJ,OAAS,CACdtB,UAAWwM,MACXtC,WAAYsC,MACZC,UAAWxI,OACXyI,WAAYzI,OACZ0I,SAAU1I,OACV2I,qBAAsB3I,OACtB4I,mBAAoB5I,QAEfrB,EAAAA,QAAU,CAAC,WCvEStE,MAAAA,UAAAA,EAI3BC,UACE,MAAMgH,EAAkB1G,SACrBiO,eAAetO,KAAKuO,iBACpBtG,sBACHjI,KAAKwO,qBAAqBpL,MAAQ9B,KAAKC,UAAUwF,EAAgBvF,WACjEuD,QAAQC,IAAI,UAAWhF,KAAKwO,qBAAqBpL,OAGnDqL,qBAAqBvL,GACnB,GAAIA,EAAMyG,OAAOY,QAAUvK,KAAKiM,YAAe,OAAO,KACtD,MAAMtC,OAAEA,GAAWzG,GACb1B,UAAEA,GAAcmI,EACtB3J,KAAKwO,qBAAqBpL,MAAQ9B,KAAKC,UAAUC,GACjDuD,QAAQC,IAAI,mBAAoBhF,KAAKwO,qBAAqBpL,UAhBrDgB,QAAU,CAAC,kBACXtB,EAAAA,OAAS,CAAEyH,OAAQ9E,OAAQiJ,WAAYjJ,QCHnB3F,MAAAA,UAAAA,EAC3B6O,OAAOzL,GACLA,EAAM0F,iBACN5I,KAAKI,QAAQuO,0BCFY7O,EAG3B8O,OAAOrK,GACLvE,KAAK6O,eAAepL,QAAQqL,IAC1BA,EAAKC,gBAAgB,eAJlB3K,QAAU,CAAC,WCML,MAAA4K,UAAclP,EACrB6O,OAAOzL,GAAD,IAGP,MAAArC,EAAAb,KAFHkD,EAAM0F,iBACN,MAAM5H,EAAU,IAAIC,EACjBJ,EAAKT,QAAQuF,QAAU,OACxB9E,EAAKT,QAAQ6O,OACb,CACE9N,aAAc,eACdb,KAAM,IAAImE,SAAS5D,EAAKT,WAPV,OAAA0B,QAAAI,QAUZlB,EAAQW,WAVIC,KAAA,cAAR,MAD0BC,GAAA,OAAAC,QAAAC,OAAAF,KCCX/B,MAAAA,UAAAA,EACrBuF,MAAMnC,GAAD,IAGN,MAAArC,EAAAb,KAFHkD,EAAM0F,iBACN,MAAM5H,EAAU,IAAIC,EACjBJ,EAAKT,QAAQ2D,QAAQmL,aAAe,MACrCrO,EAAKT,QAAQwJ,KACb,CACEzI,aAAc,iBAND,OASXH,QAAAA,QAAAA,EAAQW,WATGC,KAAA,cAAR,MAD2BC,GAAA,OAAAC,QAAAC,OAAAF,KCRXG,MAAAA,UAAAA,EAK3BmN,aACEnP,KAAKoP,gBAAkBC,EAAS,CAACnM,EAAOE,EAAOkM,KAC7CtP,KAAKoD,MAAMF,EAAOE,EAAOkM,IACxB,KAGLC,cAAcrM,GACZ,MAAM8C,iBAAEA,EAAF/F,MAAoBA,GAAUD,KAIpCC,EAAM8F,YACJC,EACA,CACE0E,GAAIxH,EAAMsM,OAAOpM,OANLF,EAAMsM,OAAOzL,QACL8J,SASxB7N,KAAKW,oBAGPyK,OAAOlI,GACL,MAAM8C,iBAAEA,EAAF/F,MAAoBA,GAAUD,KAGpCC,EAAM8F,YACJC,EACA,CACEoF,OAAQlI,EAAMsM,OAAOpM,OALTF,EAAMsM,OAAOzL,QACL8J,SAQxB7N,KAAKW,oBAGPuK,SAAShI,GACP,MAAQsM,OAAQC,GAAWvM,EAGrBgI,EAFU8C,MAAM5D,UAAUsF,MAAMC,KAAKF,EAAO7O,SAClBgP,OAAQC,GAAWA,EAAO3E,UACzB4E,IAAKD,GAAWA,EAAOzM,OACxDpD,KAAKoD,MAAMF,EAAOgI,EAAU,YAG9B9H,MAAMF,EAAOE,EAAOkM,GAClB,MAAMtJ,iBAAEA,EAAF/F,MAAoBA,GAAUD,KAC9B+D,EAAUb,EAAMsM,OAAOzL,QAI7B9D,EAAM8F,YACJC,EACA,CACE,CALJsJ,EAAWA,GAAYvL,EAAQuL,UAAY,SAC3ClM,EAAQA,GAASF,EAAMsM,OAAOpM,OAFdW,EAAQ8J,SAY1BjD,UAAU1H,GACR,MAAM8C,iBAAEA,EAAF/F,MAAoBA,GAAUD,KAC9BI,EAAU8C,EAAMsM,OACtB,IAAIO,EAAiB3P,EAAQgD,MACxB2M,IAAgBA,EAAiB3P,EAAQoJ,cAAc,UAAUpG,OACtE,MAAM4M,EAAShQ,KAAKC,MAAMuM,mBAAmBuD,GACrB9P,EAAMsN,iBAAiBvH,EAAkB+J,EAAgBC,IAE/EhQ,KAAKW,oBAKTsP,YAAY/M,GACS,UAAfA,EAAMgN,OACRhN,EAAM0F,iBACN1F,EAAMiN,sBA9EHrN,OAAS,CACdqD,YAAanD,QCHjBoN,QAAQ,uCAMO,MAAA/L,UAAcvE,EAoB3BC,UACEC,KAAKqQ,qBAGP5H,aACEzI,KAAKsQ,yBAGPC,UAAUrN,GAERA,EAAM0F,iBAENzD,OAAOqL,EAAExQ,KAAKyQ,aAAaC,IAAI,IAE/B1Q,KAAK2Q,SAAS,iBAGhBC,iBAAiB1N,EAAO2N,GACtB,MAAMC,EAAS9Q,KAAK+Q,iBAAmB/Q,KAAKgR,gBAAkBhR,KAAKiR,gBAE7DC,EAAYL,EACdM,EAAON,EAAOO,UAAUC,eACxBF,EAAOnR,KAAKyQ,YAAYrN,MAAO,oBAAoB0N,OAAO,oBACxDQ,EAAaJ,EAAUJ,OAAOA,GAC9BS,EAAUvR,KAAK+Q,iBAAmBG,EAAUG,aAAY,GAAQH,EAAUJ,OAAO,cAEvF9Q,KAAKyQ,YAAYrN,MAAQkO,EACzBtR,KAAKwR,kBAAkBpO,MAAQmO,EAE/BpM,OAAOqL,EAAExQ,KAAKyQ,aAAagB,QAAQ,SAAUZ,GAG7C7Q,KAAKwR,kBAAkB/G,cAAc,IAAIJ,MAAM,SAAU,CAAEV,OAAQkH,EAAQ/G,SAAS,KAGtFuG,qBACE,MAAMqB,EAAe1R,KAAK2R,kBACpBC,EAAS5R,KAAK6R,YACpBH,EAAY,OAAa1R,KAAK+Q,iBAAmB/Q,KAAKgR,gBAAkBhR,KAAKiR,gBAE7E9L,OAAOqL,EAAExQ,KAAKyQ,aAAaqB,gBAAgB,CACzCC,kBAAkB,EAClBC,WAAYhS,KAAK+Q,iBACjBkB,oBAAqB,EACrBC,iBAAiB,EACjBC,WAAW,EACXC,UAASpS,KAAKqS,iBAAkB,IAAIC,KACpCC,OAAQb,EACRc,SAAUhC,EAAExQ,KAAKI,SACjBqS,MAAOzS,KAAK0S,WAAa1S,KAAK0S,WAAa,OAC3CC,kBAAmBf,IAGrBzM,OAAOqL,EAAExQ,KAAKyQ,aAAamC,GAAG,wBAAyB5S,KAAK4Q,iBAAiBrI,KAAKvI,OAClFmF,OAAOqL,EAAExQ,KAAKyQ,aAAamC,GAAG,yBAA0B5S,KAAKuQ,UAAUhI,KAAKvI,OAC5EmF,OAAOqL,EAAExQ,KAAKyQ,aAAamC,GAAG,+BAAgC5S,KAAK6S,aAAatK,KAAKvI,OAErFA,KAAK8S,aAAe9S,KAAKyQ,YACzBzQ,KAAK+S,OAASvC,EAAExQ,KAAK8S,cAAcE,KAAK,mBAEpChT,KAAKiT,aACPjT,KAAKI,QAAQkM,UAAUxI,IAAI,sBAK/BwM,8BACsBtG,IAAhBhK,KAAK+S,SAITvC,EAAExQ,KAAK8S,cAAcI,IAAI,yBACzB1C,EAAExQ,KAAK8S,cAAcI,IAAI,0BACzB1C,EAAExQ,KAAK8S,cAAcI,IAAI,gCAGzBlT,KAAK+S,OAAOxG,UAIdsG,eACE7S,KAAK2Q,SAAS,oBApGTvM,QAAU,CACf,QACA,cACA,eAGKtB,EAAAA,OAAS,CACdqQ,YAAa/J,QACbgK,WAAYhK,QACZqJ,MAAOhN,OACP4N,OAAQjK,QACRkK,WAAY7N,OACZ8N,WAAY9N,OACZmM,OAAQxI,QACRmJ,OAAQ,CAAE3M,KAAMH,OAAQI,QAAS,MACjC2N,eAAgB,CAAE5N,KAAMH,OAAQI,QAAU,qBAC1C4N,aAAc,CAAE7N,KAAMS,OAAQR,QAAS,KCL9B6N,MAAAA,EAAwB,CACnC,CAACC,EAAe,4BAChB,CAACC,EAA4B,4CAC7B,CAACC,EAAyB,uCAC1B,CAACC,EAAoB,iCACrB,CAACC,EAAkB,+BACnB,CAACC,EAAuB,qCACxB,CAACC,EAAiB,8BAClB,CAACC,EAAwB,sCACzB,CAAClS,EAAyB,uCAC1B,CAACmS,EAAiB,8BAClB,CAACC,EAAwB,sCACzB,CAACC,EAAY,oCACb,CAACC,EAAkB,+BACnB,CAACtF,EAA2B,0CAC5B,CAACuF,EAA2B,0CAC5B,CAACC,EAAkB,+BACnB,CAACC,EAAgB,8BACjB3E,IAAI,SAAS4E,GACb,MACMxO,EAAawO,EAAE,GACrB,MAAO,CACLC,WAAYlV,EAHFiV,EAAE,IAIZE,sBAAuB1O"}
1
+ {"version":3,"file":"refine-stimulus.esm.js","sources":["../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","../../javascript/controllers/refine/server-refresh-controller.js","../../javascript/controllers/refine/add-controller.js","../../javascript/controllers/refine/criterion-form-controller.js","../../javascript/controllers/refine/defaults-controller.js","../../javascript/controllers/refine/delete-controller.js","../../javascript/controllers/refine/filter-pills-controller.js","../../javascript/controllers/refine/popup-controller.js","../../javascript/controllers/refine/search-filter-controller.js","../../javascript/refine/helpers/index.js","../../javascript/controllers/refine/state-controller.js","../../javascript/controllers/refine/stored-filter-controller.js","../../javascript/controllers/refine/submit-form-controller.js","../../javascript/controllers/refine/toggle-controller.js","../../javascript/controllers/refine/turbo-stream-form-controller.js","../../javascript/controllers/refine/turbo-stream-link-controller.js","../../javascript/controllers/refine/typeahead-list-controller.js","../../javascript/controllers/refine/update-controller.js","../../javascript/controllers/refine/date-controller.js","../../javascript/controllers/index.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\n// Base class for controllers that reload form content from the server\nexport default class extends Controller {\n connect() {\n this.state.finishUpdate()\n }\n\n get state() {\n let currentElement = this.element\n\n while(currentElement !== document.body) {\n if (currentElement.matches('[data-controller~=\"refine--state\"]'))\n return this.application.getControllerForElementAndIdentifier(currentElement, 'refine--state')\n else {\n currentElement = currentElement.parentNode\n }\n }\n\n return null\n }\n\n async refreshFromServer(options = {}) {\n const { includeErrors } = options\n this.state.startUpdate()\n const request = new FetchRequest(\n \"GET\",\n this.state.refreshUrlValue,\n {\n responseKind: \"turbo-stream\",\n query: {\n \"refine_filters_builder[filter_class]\": this.state.filterName,\n \"refine_filters_builder[blueprint_json]\": JSON.stringify(this.state.blueprint),\n \"refine_filters_builder[client_id]\": this.state.clientIdValue,\n include_errors: !!includeErrors\n }\n }\n )\n await request.perform()\n }\n}\n","import ServerRefreshController from './server-refresh-controller'\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends ServerRefreshController {\n static values = {\n previousCriterionId: Number,\n }\n\n async criterion() {\n const isValid = await this.validateBlueprint()\n if (isValid) {\n this.state.addCriterion(this.previousCriterionIdValue)\n }\n this.refreshFromServer({includeErrors: !isValid})\n }\n\n async group() {\n const isValid = await this.validateBlueprint()\n if (isValid) {\n this.state.addGroup()\n }\n this.refreshFromServer({includeErrors: !isValid})\n }\n\n async validateBlueprint(blueprint) {\n const { state } = this\n\n const request = new FetchRequest(\n \"GET\",\n this.state.validateBlueprintUrlValue,\n {\n query: {\n \"refine_filters_builder[filter_class]\": this.state.filterName,\n \"refine_filters_builder[blueprint_json]\": JSON.stringify(this.state.blueprint),\n \"refine_filters_builder[client_id]\": this.state.clientIdValue\n }\n }\n )\n const response = await request.perform()\n return response.ok\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n This controller handles criteria forms\n (refine/inline/criteria/new|edit)\n*/\nexport default class extends Controller {\n static values = {\n url: String,\n formId: String\n }\n\n async refresh(_event) {\n // update the url with params from the form\n const formElement = document.getElementById(this.formIdValue)\n const formData = new FormData(formElement)\n\n const request = new FetchRequest(\n \"GET\",\n this.urlValue,\n {\n query: formData,\n responseKind: \"turbo-stream\"\n }\n )\n const response = await request.perform()\n }\n\n\n\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n criterionId: Number,\n input: Object,\n };\n\n connect() {\n this.state = this.getStateController()\n\n this.state.updateInput(\n this.criterionIdValue,\n this.inputValue,\n );\n }\n\n getStateController() {\n let currentElement = this.element\n\n while(currentElement !== document.body) {\n const controller = this.application.getControllerForElementAndIdentifier(currentElement, 'refine--state')\n if (controller) {\n return controller\n } else {\n currentElement = currentElement.parentNode\n }\n }\n\n return null\n }\n}\n","import ServerRefreshController from './server-refresh-controller';\n\nexport default class extends ServerRefreshController {\n static values = {\n criterionId: Number,\n }\n\n criterion() {\n const { state, criterionIdValue } = this;\n state.deleteCriterion(criterionIdValue);\n this.refreshFromServer()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n static values = {\n submitUrl: String\n }\n\n connect() {\n const urlParams = new URLSearchParams(window.location.search)\n this.existingParams = urlParams\n this.existingParams.delete('stable_id')\n }\n\n delete(event) {\n const { criterionId } = event.currentTarget.dataset\n var index = parseInt(criterionId)\n this.stateController.deleteCriterion(index)\n this.reloadPage()\n }\n\n async reloadPage() {\n const {blueprint} = this.stateController\n const request = new FetchRequest(\n \"POST\",\n this.submitUrlValue,\n {\n responseKind: \"turbo-stream\",\n body: JSON.stringify({\n refine_filters_builder: {\n filter_class: this.stateController.filterName,\n blueprint_json: JSON.stringify(blueprint),\n client_id: this.stateController.clientIdValue\n }\n })\n }\n )\n await request.perform()\n }\n\n redirectToStableId(stableId) {\n const params = new URLSearchParams()\n if (stableId) {\n params.append('stable_id', stableId)\n }\n const allParams = new URLSearchParams({\n ...Object.fromEntries(this.existingParams),\n ...Object.fromEntries(params),\n }).toString()\n const url = `${window.location.pathname}?${allParams}`\n\n history.pushState({}, document.title, url)\n window.location.reload()\n }\n\n get stateController() {\n return this.element.refineStateController\n }\n\n get stabilizeFilterController() {\n return this.element.stabilizeFilterController\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { useClickOutside } from 'stimulus-use'\n\n// simple controller to hide/show the filter modal\nexport default class extends Controller {\n static targets = [\"frame\"]\n\n static values = {\n src: String,\n isOpen: {type: Boolean, default: false}\n }\n\n connect() {\n useClickOutside(this)\n this.boundHandleKeyUp = this.handleKeyUp.bind(this)\n document.addEventListener(\"keyup\", this.boundHandleKeyUp)\n }\n\n disconnect() {\n document.removeEventListener(\"keyup\", this.boundHandleKeyUp)\n }\n\n show(event) {\n event.preventDefault()\n this.frameTarget.src = this.srcValue;\n this.isOpenValue = true\n }\n\n hide(event) {\n if (this.isOpenValue) {\n event?.preventDefault()\n this.frameTarget.innerHTML = \"\";\n this.isOpenValue = false\n }\n }\n\n clickOutside(event) {\n this.hide(event)\n }\n\n handleKeyUp(event) {\n if (event.key === \"Escape\" || event.key === \"Esc\") {\n this.hide(event)\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n static values = {\n submitUrl: String\n }\n\n\n search(event) {\n event.preventDefault()\n this.submitFilter()\n document.activeElement.blur()\n }\n\n async submitFilter() {\n const {blueprint} = this.stateController\n const request = new FetchRequest(\n \"POST\",\n this.submitUrlValue,\n {\n responseKind: \"turbo-stream\",\n body: JSON.stringify({\n refine_filters_builder: {\n filter_class: this.stateController.filterName,\n blueprint_json: JSON.stringify(blueprint),\n client_id: this.stateController.clientIdValue\n }\n })\n }\n )\n await request.perform()\n }\n\n get stateController() {\n return this\n .element\n .querySelector('[data-controller~=\"refine--state\"]')\n .refineStateController\n }\n\n loadResults({detail: {url}}) {\n console.log(\"filter submit success\")\n if (window.Turbo) {\n window.Turbo.visit(url)\n } else {\n window.location.href = url\n }\n }\n}\n","// Polyfill for custom events in IE9-11\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#polyfill\n;(function () {\n if (typeof window.CustomEvent === 'function') return false\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined }\n var evt = document.createEvent('CustomEvent')\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n return evt\n }\n\n CustomEvent.prototype = window.Event.prototype\n\n window.CustomEvent = CustomEvent\n\n // eslint expects a return here\n return true\n})()\n\nexport const filterStabilizedEvent = (element, stableId, filterName) => {\n const event = new CustomEvent('filter-stabilized', {\n bubbles: true,\n cancelable: true,\n detail: {\n stableId,\n filterName,\n },\n })\n element.dispatchEvent(event)\n}\n\nexport const filterUnstableEvent = (blueprint) => {\n const event = new CustomEvent('filter-unstable', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const filterInvalidEvent = ({blueprint, errors}) => {\n const event = new CustomEvent('filter-invalid', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n errors,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const filterStoredEvent = (storedFilterId) => {\n const event = new CustomEvent('filter-stored', {\n bubbles: true,\n cancelable: true,\n detail: {\n storedFilterId,\n },\n })\n window.dispatchEvent(event)\n}\n\nexport const blueprintUpdatedEvent = (element, {blueprint, formId}) => {\n const event = new CustomEvent('blueprint-updated', {\n bubbles: true,\n cancelable: true,\n detail: {\n blueprint,\n formId\n },\n })\n element.dispatchEvent(event)\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { delegate, abnegate } from 'jquery-events-to-dom-events'\nimport { blueprintUpdatedEvent } from '../../refine/helpers'\nimport { isEqual } from 'lodash'\n\nconst criterion = (id, depth, condition) => {\n const component = condition?.component\n const meta = condition?.meta || { clauses: [], options: {}}\n const refinements = condition?.refinements || []\n const { clauses, options } = meta\n let selected\n if (component === 'option-condition') {\n selected = options[0] ? [options[0].id] : []\n } else {\n selected = undefined\n }\n // Set newInput based on component\n\n let newInput = {\n clause: clauses[0]?.id,\n selected: selected,\n }\n\n // If refinements are present, add to input array\n refinements.forEach((refinement) => {\n const { meta, component } = refinement\n const { clauses, options } = meta\n let selected\n if (component === 'option-condition') {\n selected = options[0] ? [options[0].id] : []\n } else {\n selected = undefined\n }\n newInput[refinement.id] = {\n clause: clauses[0].id,\n selected: selected,\n }\n })\n\n return {\n depth,\n type: 'criterion',\n condition_id: id,\n input: newInput,\n }\n}\n\nconst or = function (depth) {\n depth = depth === undefined ? 0 : depth\n return {\n depth,\n type: 'conjunction',\n word: 'or',\n }\n}\n\nconst and = function (depth) {\n depth = depth === undefined ? 1 : depth\n return {\n depth,\n type: 'conjunction',\n word: 'and',\n }\n}\nexport default class extends Controller {\n static values = {\n blueprint: Array,\n conditions: Array,\n className: String,\n refreshUrl: String,\n clientId: String,\n validateBlueprintUrl: String,\n defaultConditionId: String\n }\n static targets = ['loading']\n\n\n connect() {\n // for select2 jquery events and datepicker\n this.element.refineStateController = this\n this.changeDelegate = delegate('change', ['event', 'picker'])\n this.blueprint = this.blueprintValue\n this.conditions = this.conditionsValue\n this.filterName = this.classNameValue\n this.conditionsLookup = this.conditions.reduce((lookup, condition) => {\n lookup[condition.id] = condition\n return lookup\n }, {})\n this.loadingTimeout = null\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n disconnect() {\n abnegate('change', this.changeDelegate)\n }\n\n startUpdate() {\n if (this.loadingTimeout) {\n window.clearTimeout(this.loadingTimeout)\n }\n // only show the loading overlay if it's taking a long time\n // to render the updates\n this.loadingTimeout = window.setTimeout(() => {\n this.loadingTarget.classList.remove('hidden')\n }, 1000)\n }\n\n finishUpdate() {\n if (this.loadingTimeout) {\n window.clearTimeout(this.loadingTimeout)\n }\n this.loadingTarget.classList.add('hidden')\n }\n\n conditionConfigFor(conditionId) {\n return this.conditionsLookup[conditionId]\n }\n\n addGroup() {\n const { blueprint, conditions } = this\n const condition = ( conditions.find(c => c.id == this.defaultConditionIdValue) || conditions[0] )\n const { meta } = condition\n\n if (this.blueprint.length > 0) {\n this.blueprint.push(or())\n }\n this.blueprint.push(criterion(condition.id, 1, condition))\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n addCriterion(previousCriterionId) {\n const { blueprint, conditions } = this\n const condition = ( conditions.find(c => c.id == this.defaultConditionIdValue) || conditions[0] )\n const { meta } = condition\n blueprint.splice(previousCriterionId + 1, 0, and(), criterion(condition.id, 1, condition))\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n deleteCriterion(criterionId) {\n /**\n To support 'groups' there is some complicated logic for deleting criterion.\n\n Imagine this simplified blueprint: [eq, and, sw, or, eq]\n\n User clicks to delete the last eq. We also have to delete the preceding or\n otherwise we're left with a hanging empty group\n\n What if the user deletes the sw? We have to clean up the preceding and.\n\n Imagine another scenario: [eq or sw and ew]\n Now we delete the first eq but this time we need to clean up the or.\n\n These conditionals cover these cases.\n **/\n const { blueprint } = this\n const previous = blueprint[criterionId - 1]\n const next = blueprint[criterionId + 1]\n\n const nextIsOr = next && next.word === 'or'\n const previousIsOr = previous && previous.word === 'or'\n\n const nextIsRightParen = nextIsOr || !next\n const previousIsLeftParen = previousIsOr || !previous\n\n const isFirstInGroup = previousIsLeftParen && !nextIsRightParen\n const isLastInGroup = previousIsLeftParen && nextIsRightParen\n const isLastCriterion = !previous && !next\n\n if (isLastCriterion) {\n this.blueprint = []\n } else if (isLastInGroup && previousIsOr) {\n blueprint.splice(criterionId - 1, 2)\n } else if (isLastInGroup && !previous) {\n blueprint.splice(criterionId, 2)\n } else if (isFirstInGroup) {\n blueprint.splice(criterionId, 2)\n } else {\n blueprint.splice(criterionId - 1, 2)\n }\n\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n\n /*\n Updates a criterion in the blueprint\n Returns true if an update was actually performed, or false if no-op\n */\n replaceCriterion(criterionId, conditionId, condition) {\n const criterionRow = this.blueprint[criterionId]\n if (criterionRow.type !== 'criterion') {\n throw new Error(\n `You can't call updateConditionId on a non-criterion type. Trying to update ${JSON.stringify(criterion)}`\n )\n }\n const existingCriterion = this.blueprint[criterionId]\n const newCriterion = criterion(conditionId, criterionRow.depth, condition)\n if (isEqual(existingCriterion, newCriterion)) {\n return false\n } else {\n this.blueprint[criterionId] = newCriterion\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n return true\n }\n }\n\n updateInput(criterionId, input, inputId) {\n // Input id is an array of hash keys that define the path for this input such as [\"input\", \"date_refinement\"]\n const { blueprint } = this\n const criterion = blueprint[criterionId]\n inputId = inputId || 'input'\n const blueprintPath = inputId.split(', ')\n // If the inputId contains more than one element, add input at appropriate depth\n if (blueprintPath.length > 1) {\n criterion[blueprintPath[0]][blueprintPath[1]] = { ...criterion[blueprintPath[0]][blueprintPath[1]], ...input }\n } else {\n criterion[inputId] = { ...criterion[inputId], ...input }\n }\n blueprintUpdatedEvent(this.element, {blueprint: this.blueprint, formId: this.formIdValue})\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { filterStoredEvent } from '../../refine/helpers'\n\nexport default class extends Controller {\n static targets = ['blueprintField']\n static values = { formId: String, stateDomId: String }\n\n connect() {\n const stateController = document\n .getElementById(this.stateDomIdValue)\n .refineStateController\n this.blueprintFieldTarget.value = JSON.stringify(stateController.blueprint)\n console.log(\"connect\", this.blueprintFieldTarget.value)\n }\n\n updateBlueprintField(event) {\n if (event.detail.formId != this.formIdValue) { return null }\n const { detail } = event\n const { blueprint } = detail\n this.blueprintFieldTarget.value = JSON.stringify(blueprint)\n console.log(\"update blueprint\", this.blueprintFieldTarget.value)\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n submit(event) {\n event.preventDefault()\n this.element.submit()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\n// simple controller to hide/show the filter modal\nexport default class extends Controller {\n static targets = [\"content\"]\n\n toggle(_event) {\n this.contentTargets.forEach(node => {\n node.toggleAttribute(\"hidden\")\n })\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n attach to a form element to have it submit to a turbo-stream endpoint\n\n <form action=\"/contacts\" data-controller=\"refine--turbo-stream-form\" data-action=\"submit->refine--turbo-stream-form#submit\">\n\n Turbo is supposed to handle this natively but we're seeing issues when the form is inside an iframe\n*/\nexport default class extends Controller {\n async submit(event) {\n event.preventDefault()\n const request = new FetchRequest(\n (this.element.method || \"POST\"),\n this.element.action,\n {\n responseKind: \"turbo-stream\",\n body: new FormData(this.element)\n }\n )\n await request.perform()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n/*\n attach to a link element to have it request turbo stream responses\n\n <a href=\"/contacts\" data-controller=\"refine--turbo-stream-link\" data-action=\"refine--turbo-stream-link#get\">Click me</a>\n\n Turbo is supposed to handle this natively with data-turbo-stream but we're\n seeing issues using that attribute inside iframes\n*/\nexport default class extends Controller {\n async visit(event) {\n event.preventDefault()\n const request = new FetchRequest(\n (this.element.dataset.turboMethod || \"GET\"),\n this.element.href,\n {\n responseKind: \"turbo-stream\",\n }\n )\n await request.perform()\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n static targets = ['listItem', 'category']\n\n filter(event) {\n const query = event.currentTarget.value.toLowerCase()\n const visibleCategories = new Set()\n\n // hide / show listItem links that match the query and note which\n // categories should be visible\n this.listItemTargets.forEach(listItemNode => {\n const listItemName = listItemNode.dataset.listItemValue.toLowerCase()\n if (listItemName.includes(query)) {\n listItemNode.hidden = false\n visibleCategories.add(listItemNode.dataset.category)\n } else {\n listItemNode.hidden = true\n }\n })\n\n // hide / show category headers that have\n this.categoryTargets.forEach(categoryNode => {\n const categoryName = categoryNode.innerHTML\n if (visibleCategories.has(categoryName)) {\n categoryNode.hidden = false\n } else {\n categoryNode.hidden = true\n }\n })\n }\n}\n","import ServerRefreshController from './server-refresh-controller'\nimport { debounce } from 'lodash'\n\nexport default class extends ServerRefreshController {\n static values = {\n criterionId: Number,\n }\n\n initialize() {\n this.updateBlueprint = debounce((event, value, inputKey) => {\n this.value(event, value, inputKey)\n }, 500)\n }\n\n refinedFilter(event) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n\n state.updateInput(\n criterionIdValue,\n {\n id: event.target.value,\n },\n inputId\n )\n this.refreshFromServer()\n }\n\n clause(event) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n state.updateInput(\n criterionIdValue,\n {\n clause: event.target.value,\n },\n inputId\n )\n this.refreshFromServer()\n }\n\n selected(event) {\n const { target: select } = event\n const options = Array.prototype.slice.call(select.options)\n const selectedOptions = options.filter((option) => option.selected)\n const selected = selectedOptions.map((option) => option.value)\n this.value(event, selected, 'selected')\n }\n\n value(event, value, inputKey) {\n const { criterionIdValue, state } = this\n const dataset = event.target.dataset\n const inputId = dataset.inputId\n inputKey = inputKey || dataset.inputKey || 'value'\n value = value || event.target.value\n state.updateInput(\n criterionIdValue,\n {\n [inputKey]: value,\n },\n inputId\n )\n }\n\n condition(event) {\n const { criterionIdValue, state } = this\n const element = event.target\n let newConditionId = element.value\n if (!newConditionId) newConditionId = element.querySelector('select').value \n const config = this.state.conditionConfigFor(newConditionId)\n const updatePerformed = state.replaceCriterion(criterionIdValue, newConditionId, config)\n if (updatePerformed) {\n this.refreshFromServer()\n }\n }\n\n // Prevent form submission when hitting enter in a text box\n cancelEnter(event) {\n if (event.code === \"Enter\") {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport moment from 'moment'\nrequire('daterangepicker/daterangepicker.css')\n\n// requires jQuery, moment, might want to consider a vanilla JS alternative\nimport $ from 'jquery' // ensure jquery is loaded before daterangepicker\nimport 'daterangepicker'\n\nexport default class extends Controller {\n static targets = [\n 'field',\n 'hiddenField',\n 'clearButton',\n ]\n\n static values = {\n includeTime: Boolean,\n futureOnly: Boolean,\n drops: String,\n inline: Boolean,\n dateFormat: String,\n timeFormat: String,\n isAmPm: Boolean,\n locale: { type: String, default: 'en' },\n datetimeFormat: { type: String, default: 'MM/DD/YYYY h:mm A' },\n pickerLocale: { type: Object, default: {} },\n }\n\n connect() {\n this.initPluginInstance()\n }\n\n disconnect() {\n this.teardownPluginInstance()\n }\n\n clearDate(event) {\n // don't submit the form, unless it originated from the cancel/clear button\n event.preventDefault()\n\n window.$(this.fieldTarget).val('')\n\n this.dispatch('value-cleared')\n }\n\n applyDateToField(event, picker) {\n const format = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue\n\n const momentVal = picker\n ? moment(picker.startDate.toISOString())\n : moment(this.fieldTarget.value, 'YYYY-MM-DDTHH:mm').format('YYYY-MM-DDTHH:mm')\n const displayVal = momentVal.format(format)\n const dataVal = this.includeTimeValue ? momentVal.toISOString(true) : momentVal.format('YYYY-MM-DD')\n\n this.fieldTarget.value = displayVal\n this.hiddenFieldTarget.value = dataVal\n // bubble up a change event when the input is updated for other listeners\n window.$(this.fieldTarget).trigger('change', picker)\n\n // emit native change event\n this.hiddenFieldTarget.dispatchEvent(new Event('change', { detail: picker, bubbles: true }))\n }\n\n initPluginInstance() {\n const localeValues = this.pickerLocaleValue\n const isAmPm = this.isAmPmValue\n localeValues['format'] = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue\n\n window.$(this.fieldTarget).daterangepicker({\n singleDatePicker: true,\n timePicker: this.includeTimeValue,\n timePickerIncrement: 5,\n autoUpdateInput: false,\n autoApply: true,\n minDate: this.futureOnlyValue ? new Date() : false,\n locale: localeValues,\n parentEl: $(this.element),\n drops: this.dropsValue ? this.dropsValue : 'down',\n timePicker24Hour: !isAmPm,\n })\n\n window.$(this.fieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))\n window.$(this.fieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))\n window.$(this.fieldTarget).on('showCalendar.daterangepicker', this.showCalendar.bind(this))\n\n this.pluginMainEl = this.fieldTarget\n this.plugin = $(this.pluginMainEl).data('daterangepicker') // weird\n\n if (this.inlineValue) {\n this.element.classList.add('date-input--inline')\n }\n\n }\n \n teardownPluginInstance() {\n if (this.plugin === undefined) {\n return\n }\n\n $(this.pluginMainEl).off('apply.daterangepicker')\n $(this.pluginMainEl).off('cancel.daterangepicker')\n $(this.pluginMainEl).off('showCalendar.daterangepicker')\n\n // revert to original markup, remove any event listeners\n this.plugin.remove()\n\n }\n\n showCalendar() {\n this.dispatch('show-calendar')\n }\n\n}\n","import { identifierForContextKey } from \"@hotwired/stimulus-webpack-helpers\"\n\nimport AddController from './refine/add-controller'\nimport CriterionFormController from './refine/criterion-form-controller'\nimport DefaultsController from './refine/defaults-controller'\nimport DeleteController from './refine/delete-controller'\nimport FilterPillsController from './refine/filter-pills-controller'\nimport PopupController from './refine/popup-controller'\nimport SearchFilterController from './refine/search-filter-controller'\nimport ServerRefreshController from './refine/server-refresh-controller'\nimport StateController from './refine/state-controller'\nimport StoredFilterController from './refine/stored-filter-controller'\nimport SubmitForm from './refine/submit-form-controller'\nimport ToggleController from './refine/toggle-controller'\nimport TurboStreamFormController from './refine/turbo-stream-form-controller'\nimport TurboStreamLinkController from './refine/turbo-stream-link-controller'\nimport TypeaheadListController from './refine/typeahead-list-controller'\nimport UpdateController from './refine/update-controller'\nimport DateController from './refine/date-controller'\n\nexport const controllerDefinitions = [\n [AddController, 'refine/add-controller.js'],\n [CriterionFormController, 'refine/criterion-form-controller.js'],\n [DefaultsController, 'refine/defaults-controller.js'],\n [DeleteController, 'refine/delete-controller.js'],\n [FilterPillsController, 'refine/filter-pills-controller.js'],\n [PopupController, 'refine/popup-controller.js'],\n [SearchFilterController, 'refine/search-filter-controller.js'],\n [ServerRefreshController, 'refine/server-refresh-controller.js'],\n [StateController, 'refine/state-controller.js'],\n [StoredFilterController, 'refine/stored-filter-controller.js'],\n [SubmitForm, 'refine/submit-form-controller.js'],\n [ToggleController, 'refine/toggle-controller.js'],\n [TurboStreamFormController, 'refine/turbo-stream-form-controller.js'],\n [TurboStreamLinkController, 'refine/turbo-stream-link-controller.js'],\n [TypeaheadListController, './refine/typeahead-list-controller.js'],\n [UpdateController, 'refine/update-controller.js'],\n [DateController, 'refine/date-controller.js']\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n\nexport {\n AddController,\n CriterionFormController,\n DefaultsController,\n DeleteController,\n FilterPillsController,\n PopupController,\n SearchFilterController,\n ServerRefreshController,\n StateController,\n StoredFilterController,\n SubmitForm,\n ToggleController,\n TurboStreamFormController,\n TurboStreamLinkController,\n TypeaheadListController,\n UpdateController,\n DateController\n}\n"],"names":["identifierForContextKey","key","logicalName","match","replace","Controller","connect","this","state","finishUpdate","currentElement","element","document","body","matches","application","getControllerForElementAndIdentifier","parentNode","refreshFromServer","options","_this","includeErrors","startUpdate","request","FetchRequest","refreshUrlValue","responseKind","query","filterName","JSON","stringify","blueprint","clientIdValue","include_errors","perform","then","e","Promise","reject","ServerRefreshController","criterion","resolve","validateBlueprint","isValid","addCriterion","previousCriterionIdValue","group","_this2","addGroup","_this3","validateBlueprintUrlValue","response","ok","values","previousCriterionId","Number","refresh","_event","formElement","getElementById","formIdValue","formData","FormData","urlValue","url","String","formId","getStateController","updateInput","criterionIdValue","inputValue","controller","criterionId","input","Object","deleteCriterion","urlParams","URLSearchParams","window","location","search","existingParams","delete","event","currentTarget","dataset","index","parseInt","stateController","reloadPage","submitUrlValue","refine_filters_builder","filter_class","blueprint_json","client_id","redirectToStableId","stableId","params","append","allParams","fromEntries","toString","pathname","history","pushState","title","reload","refineStateController","stabilizeFilterController","submitUrl","useClickOutside","boundHandleKeyUp","handleKeyUp","bind","addEventListener","disconnect","removeEventListener","show","preventDefault","frameTarget","src","srcValue","isOpenValue","hide","innerHTML","clickOutside","targets","isOpen","type","Boolean","default","_class","submitFilter","activeElement","blur","querySelector","loadResults","_ref","detail","console","log","Turbo","visit","href","CustomEvent","bubbles","cancelable","undefined","evt","createEvent","initCustomEvent","prototype","Event","blueprintUpdatedEvent","_ref2","dispatchEvent","id","depth","condition","_clauses$","component","meta","clauses","refinements","selected","newInput","clause","forEach","refinement","condition_id","changeDelegate","delegate","blueprintValue","conditions","conditionsValue","classNameValue","conditionsLookup","reduce","lookup","loadingTimeout","abnegate","clearTimeout","setTimeout","loadingTarget","classList","remove","add","conditionConfigFor","conditionId","find","c","defaultConditionIdValue","length","push","word","splice","previous","next","previousIsOr","nextIsRightParen","previousIsLeftParen","isLastInGroup","replaceCriterion","criterionRow","Error","existingCriterion","newCriterion","isEqual","inputId","blueprintPath","split","Array","className","refreshUrl","clientId","validateBlueprintUrl","defaultConditionId","stateDomIdValue","blueprintFieldTarget","value","updateBlueprintField","stateDomId","submit","toggle","contentTargets","node","toggleAttribute","TurboStreamFormController","method","action","turboMethod","filter","toLowerCase","visibleCategories","Set","listItemTargets","listItemNode","listItemValue","includes","hidden","category","categoryTargets","categoryNode","has","initialize","updateBlueprint","debounce","inputKey","refinedFilter","target","select","slice","call","option","map","newConditionId","config","cancelEnter","code","stopPropagation","require","initPluginInstance","teardownPluginInstance","clearDate","$","fieldTarget","val","dispatch","applyDateToField","picker","format","includeTimeValue","timeFormatValue","dateFormatValue","momentVal","moment","startDate","toISOString","displayVal","dataVal","hiddenFieldTarget","trigger","localeValues","pickerLocaleValue","isAmPm","isAmPmValue","daterangepicker","singleDatePicker","timePicker","timePickerIncrement","autoUpdateInput","autoApply","minDate","futureOnlyValue","Date","locale","parentEl","drops","dropsValue","timePicker24Hour","on","showCalendar","pluginMainEl","plugin","data","inlineValue","off","includeTime","futureOnly","inline","dateFormat","timeFormat","datetimeFormat","pickerLocale","controllerDefinitions","AddController","CriterionFormController","DefaultsController","DeleteController","FilterPillsController","PopupController","SearchFilterController","StateController","StoredFilterController","SubmitForm","ToggleController","TurboStreamLinkController","TypeaheadListController","UpdateController","DateController","d","identifier","controllerConstructor"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e=require("@hotwired/stimulus"),t=require("@rails/request.js"),r=require("stimulus-use"),i=require("jquery-events-to-dom-events"),n=require("lodash"),o=require("moment"),l=require("jquery");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("daterangepicker");var a=s(o),u=s(l);function d(e){const t=(e.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(t)return t.replace(/_/g,"-").replace(/\//g,"--")}class c extends e.Controller{connect(){this.state.finishUpdate()}get state(){let e=this.element;for(;e!==document.body;){if(e.matches('[data-controller~="refine--state"]'))return this.application.getControllerForElementAndIdentifier(e,"refine--state");e=e.parentNode}return null}refreshFromServer(e){void 0===e&&(e={});try{const r=this,{includeErrors:i}=e;r.state.startUpdate();const n=new t.FetchRequest("GET",r.state.refreshUrlValue,{responseKind:"turbo-stream",query:{"refine_filters_builder[filter_class]":r.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(r.state.blueprint),"refine_filters_builder[client_id]":r.state.clientIdValue,include_errors:!!i}});return Promise.resolve(n.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class h extends c{criterion(){try{const e=this;return Promise.resolve(e.validateBlueprint()).then(function(t){t&&e.state.addCriterion(e.previousCriterionIdValue),e.refreshFromServer({includeErrors:!t})})}catch(e){return Promise.reject(e)}}group(){try{const e=this;return Promise.resolve(e.validateBlueprint()).then(function(t){t&&e.state.addGroup(),e.refreshFromServer({includeErrors:!t})})}catch(e){return Promise.reject(e)}}validateBlueprint(e){try{const e=this,r=new t.FetchRequest("GET",e.state.validateBlueprintUrlValue,{query:{"refine_filters_builder[filter_class]":e.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(e.state.blueprint),"refine_filters_builder[client_id]":e.state.clientIdValue}});return Promise.resolve(r.perform()).then(function(e){return e.ok})}catch(e){return Promise.reject(e)}}}h.values={previousCriterionId:Number};class p extends e.Controller{filterConditions(e){const t=e.currentTarget.value.toLowerCase(),r=new Set;this.conditionTargets.forEach(e=>{e.innerHTML.toLowerCase().includes(t)?(e.hidden=!1,r.add(e.dataset.category)):e.hidden=!0}),this.categoryTargets.forEach(e=>{e.hidden=!r.has(e.innerHTML)})}}p.targets=["condition","category"];class m extends e.Controller{refresh(e){const t=new FormData(this.element),r=new URL(this.urlValue);for(const[e,i]of t.entries())console.log(e,i),r.searchParams.set(e,i);window.Turbo.visit(r.toString(),{frame:this.turboFrameValue})}}m.values={url:String,turboFrame:String,method:{type:String,default:"POST"}};class f extends e.Controller{connect(){this.state=this.getStateController(),this.state.updateInput(this.criterionIdValue,this.inputValue)}getStateController(){let e=this.element;for(;e!==document.body;){const t=this.application.getControllerForElementAndIdentifier(e,"refine--state");if(t)return t;e=e.parentNode}return null}}f.values={criterionId:Number,input:Object};class g extends c{criterion(){const{state:e,criterionIdValue:t}=this;e.deleteCriterion(t),this.refreshFromServer()}}g.values={criterionId:Number};class b extends e.Controller{connect(){const e=new URLSearchParams(window.location.search);this.existingParams=e,this.existingParams.delete("stable_id")}delete(e){const{criterionId:t}=e.currentTarget.dataset;var r=parseInt(t);this.stateController.deleteCriterion(r),this.reloadPage()}reloadPage(){try{const e=this,{blueprint:r}=e.stateController,i=new t.FetchRequest("POST",e.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:e.stateController.filterName,blueprint_json:JSON.stringify(r),client_id:e.stateController.clientIdValue}})});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}redirectToStableId(e){const t=new URLSearchParams;e&&t.append("stable_id",e);const r=new URLSearchParams({...Object.fromEntries(this.existingParams),...Object.fromEntries(t)}).toString(),i=window.location.pathname+"?"+r;history.pushState({},document.title,i),window.location.reload()}get stateController(){return this.element.refineStateController}get stabilizeFilterController(){return this.element.stabilizeFilterController}}b.values={submitUrl:String};class v extends e.Controller{connect(){r.useClickOutside(this),this.boundHandleKeyUp=this.handleKeyUp.bind(this),document.addEventListener("keyup",this.boundHandleKeyUp)}disconnect(){document.removeEventListener("keyup",this.boundHandleKeyUp)}show(e){e.preventDefault(),this.frameTarget.src=this.srcValue,this.isOpenValue=!0}hide(e){this.isOpenValue&&(null==e||e.preventDefault(),this.frameTarget.innerHTML="",this.isOpenValue=!1)}clickOutside(e){this.hide(e)}handleKeyUp(e){"Escape"!==e.key&&"Esc"!==e.key||this.hide(e)}}v.targets=["frame"],v.values={src:String,isOpen:{type:Boolean,default:!1}};class C extends e.Controller{search(e){e.preventDefault(),this.submitFilter(),document.activeElement.blur()}submitFilter(){try{const e=this,{blueprint:r}=e.stateController,i=new t.FetchRequest("POST",e.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:e.stateController.filterName,blueprint_json:JSON.stringify(r),client_id:e.stateController.clientIdValue}})});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}get stateController(){return this.element.querySelector('[data-controller~="refine--state"]').refineStateController}loadResults(e){let{detail:{url:t}}=e;console.log("filter submit success"),window.Turbo?window.Turbo.visit(t):window.location.href=t}}C.values={submitUrl:String},function(){if("function"==typeof window.CustomEvent)return!1;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var r=document.createEvent("CustomEvent");return r.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r}e.prototype=window.Event.prototype,window.CustomEvent=e}();const w=(e,t)=>{let{blueprint:r,formId:i}=t;const n=new CustomEvent("blueprint-updated",{bubbles:!0,cancelable:!0,detail:{blueprint:r,formId:i}});e.dispatchEvent(n)},y=(e,t,r)=>{var i;const n=null==r?void 0:r.component,o=(null==r?void 0:r.meta)||{clauses:[],options:{}},l=(null==r?void 0:r.refinements)||[],{clauses:s,options:a}=o;let u;u="option-condition"===n?a[0]?[a[0].id]:[]:void 0;let d={clause:null==(i=s[0])?void 0:i.id,selected:u};return l.forEach(e=>{const{meta:t,component:r}=e,{clauses:i,options:n}=t;let o;o="option-condition"===r?n[0]?[n[0].id]:[]:void 0,d[e.id]={clause:i[0].id,selected:o}}),{depth:t,type:"criterion",condition_id:e,input:d}};class S extends e.Controller{connect(){this.element.refineStateController=this,this.changeDelegate=i.delegate("change",["event","picker"]),this.blueprint=this.blueprintValue,this.conditions=this.conditionsValue,this.filterName=this.classNameValue,this.conditionsLookup=this.conditions.reduce((e,t)=>(e[t.id]=t,e),{}),this.loadingTimeout=null,w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}disconnect(){i.abnegate("change",this.changeDelegate)}startUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTimeout=window.setTimeout(()=>{this.loadingTarget.classList.remove("hidden")},1e3)}finishUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTarget.classList.add("hidden")}conditionConfigFor(e){return this.conditionsLookup[e]}addGroup(){const{conditions:e}=this,t=e.find(e=>e.id==this.defaultConditionIdValue)||e[0];var r;this.blueprint.length>0&&this.blueprint.push({depth:r=void 0===r?0:r,type:"conjunction",word:"or"}),this.blueprint.push(y(t.id,1,t)),w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}addCriterion(e){const{blueprint:t,conditions:r}=this,i=r.find(e=>e.id==this.defaultConditionIdValue)||r[0];var n;t.splice(e+1,0,{depth:n=void 0===n?1:n,type:"conjunction",word:"and"},y(i.id,1,i)),w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}deleteCriterion(e){const{blueprint:t}=this,r=t[e-1],i=t[e+1],n=r&&"or"===r.word,o=i&&"or"===i.word||!i,l=n||!r,s=l&&o;r||i?t.splice(s&&n?e-1:s&&!r||l&&!o?e:e-1,2):this.blueprint=[],w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}replaceCriterion(e,t,r){const i=this.blueprint[e];if("criterion"!==i.type)throw new Error("You can't call updateConditionId on a non-criterion type. Trying to update "+JSON.stringify(y));const o=this.blueprint[e],l=y(t,i.depth,r);return!n.isEqual(o,l)&&(this.blueprint[e]=l,w(this.element,{blueprint:this.blueprint,formId:this.formIdValue}),!0)}updateInput(e,t,r){const{blueprint:i}=this,n=i[e],o=(r=r||"input").split(", ");o.length>1?n[o[0]][o[1]]={...n[o[0]][o[1]],...t}:n[r]={...n[r],...t},w(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}}S.values={blueprint:Array,conditions:Array,className:String,refreshUrl:String,clientId:String,validateBlueprintUrl:String,defaultConditionId:String},S.targets=["loading"];class I extends e.Controller{connect(){const e=document.getElementById(this.stateDomIdValue).refineStateController;this.blueprintFieldTarget.value=JSON.stringify(e.blueprint),console.log("connect",this.blueprintFieldTarget.value)}updateBlueprintField(e){if(e.detail.formId!=this.formIdValue)return null;const{detail:t}=e,{blueprint:r}=t;this.blueprintFieldTarget.value=JSON.stringify(r),console.log("update blueprint",this.blueprintFieldTarget.value)}}I.targets=["blueprintField"],I.values={formId:String,stateDomId:String};class T extends e.Controller{submit(e){e.preventDefault(),this.element.submit()}}class F extends e.Controller{toggle(e){this.contentTargets.forEach(e=>{e.toggleAttribute("hidden")})}}F.targets=["content"];class V extends e.Controller{submit(e){try{const r=this;e.preventDefault();const i=new t.FetchRequest(r.element.method||"POST",r.element.action,{responseKind:"turbo-stream",body:new FormData(r.element)});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class P extends e.Controller{visit(e){try{const r=this;e.preventDefault();const i=new t.FetchRequest(r.element.dataset.turboMethod||"GET",r.element.href,{responseKind:"turbo-stream"});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class E extends c{initialize(){this.updateBlueprint=n.debounce((e,t,r)=>{this.value(e,t,r)},500)}refinedFilter(e){const{criterionIdValue:t,state:r}=this;r.updateInput(t,{id:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}clause(e){const{criterionIdValue:t,state:r}=this;r.updateInput(t,{clause:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}selected(e){const{target:t}=e,r=Array.prototype.slice.call(t.options).filter(e=>e.selected).map(e=>e.value);this.value(e,r,"selected")}value(e,t,r){const{criterionIdValue:i,state:n}=this,o=e.target.dataset;n.updateInput(i,{[r=r||o.inputKey||"value"]:t=t||e.target.value},o.inputId)}condition(e){const{criterionIdValue:t,state:r}=this,i=e.target;let n=i.value;n||(n=i.querySelector("select").value);const o=this.state.conditionConfigFor(n);r.replaceCriterion(t,n,o)&&this.refreshFromServer()}cancelEnter(e){"Enter"===e.code&&(e.preventDefault(),e.stopPropagation())}}E.values={criterionId:Number},require("daterangepicker/daterangepicker.css");class j extends e.Controller{connect(){this.initPluginInstance()}disconnect(){this.teardownPluginInstance()}clearDate(e){e.preventDefault(),window.$(this.fieldTarget).val(""),this.dispatch("value-cleared")}applyDateToField(e,t){const r=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,i=t?a.default(t.startDate.toISOString()):a.default(this.fieldTarget.value,"YYYY-MM-DDTHH:mm").format("YYYY-MM-DDTHH:mm"),n=i.format(r),o=this.includeTimeValue?i.toISOString(!0):i.format("YYYY-MM-DD");this.fieldTarget.value=n,this.hiddenFieldTarget.value=o,window.$(this.fieldTarget).trigger("change",t),this.hiddenFieldTarget.dispatchEvent(new Event("change",{detail:t,bubbles:!0}))}initPluginInstance(){const e=this.pickerLocaleValue,t=this.isAmPmValue;e.format=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,window.$(this.fieldTarget).daterangepicker({singleDatePicker:!0,timePicker:this.includeTimeValue,timePickerIncrement:5,autoUpdateInput:!1,autoApply:!0,minDate:!!this.futureOnlyValue&&new Date,locale:e,parentEl:u.default(this.element),drops:this.dropsValue?this.dropsValue:"down",timePicker24Hour:!t}),window.$(this.fieldTarget).on("apply.daterangepicker",this.applyDateToField.bind(this)),window.$(this.fieldTarget).on("cancel.daterangepicker",this.clearDate.bind(this)),window.$(this.fieldTarget).on("showCalendar.daterangepicker",this.showCalendar.bind(this)),this.pluginMainEl=this.fieldTarget,this.plugin=u.default(this.pluginMainEl).data("daterangepicker"),this.inlineValue&&this.element.classList.add("date-input--inline")}teardownPluginInstance(){void 0!==this.plugin&&(u.default(this.pluginMainEl).off("apply.daterangepicker"),u.default(this.pluginMainEl).off("cancel.daterangepicker"),u.default(this.pluginMainEl).off("showCalendar.daterangepicker"),this.plugin.remove())}showCalendar(){this.dispatch("show-calendar")}}j.targets=["field","hiddenField","clearButton"],j.values={includeTime:Boolean,futureOnly:Boolean,drops:String,inline:Boolean,dateFormat:String,timeFormat:String,isAmPm:Boolean,locale:{type:String,default:"en"},datetimeFormat:{type:String,default:"MM/DD/YYYY h:mm A"},pickerLocale:{type:Object,default:{}}};const x=[[h,"refine/add-controller.js"],[p,"./refine/inline-conditions-controller.js"],[m,"refine/criterion-form-controller.js"],[f,"refine/defaults-controller.js"],[g,"refine/delete-controller.js"],[b,"refine/filter-pills-controller.js"],[v,"refine/popup-controller.js"],[C,"refine/search-filter-controller.js"],[c,"refine/server-refresh-controller.js"],[S,"refine/state-controller.js"],[I,"refine/stored-filter-controller.js"],[T,"refine/submit-form-controller.js"],[F,"refine/toggle-controller.js"],[V,"refine/turbo-stream-form-controller.js"],[P,"refine/turbo-stream-link-controller.js"],[E,"refine/update-controller.js"],[j,"refine/date-controller.js"]].map(function(e){const t=e[0];return{identifier:d(e[1]),controllerConstructor:t}});exports.AddController=h,exports.CriterionFormController=m,exports.DateController=j,exports.DefaultsController=f,exports.DeleteController=g,exports.FilterPillsController=b,exports.InlineConditionsController=p,exports.PopupController=v,exports.SearchFilterController=C,exports.ServerRefreshController=c,exports.StateController=S,exports.StoredFilterController=I,exports.SubmitForm=T,exports.ToggleController=F,exports.TurboStreamFormController=V,exports.TurboStreamLinkController=P,exports.UpdateController=E,exports.controllerDefinitions=x;
1
+ var e=require("@hotwired/stimulus"),t=require("@rails/request.js"),r=require("stimulus-use"),i=require("jquery-events-to-dom-events"),n=require("lodash"),l=require("moment"),o=require("jquery");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("daterangepicker");var a=s(l),u=s(o);function d(e){const t=(e.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(t)return t.replace(/_/g,"-").replace(/\//g,"--")}class c extends e.Controller{connect(){this.state.finishUpdate()}get state(){let e=this.element;for(;e!==document.body;){if(e.matches('[data-controller~="refine--state"]'))return this.application.getControllerForElementAndIdentifier(e,"refine--state");e=e.parentNode}return null}refreshFromServer(e){void 0===e&&(e={});try{const r=this,{includeErrors:i}=e;r.state.startUpdate();const n=new t.FetchRequest("GET",r.state.refreshUrlValue,{responseKind:"turbo-stream",query:{"refine_filters_builder[filter_class]":r.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(r.state.blueprint),"refine_filters_builder[client_id]":r.state.clientIdValue,include_errors:!!i}});return Promise.resolve(n.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class h extends c{criterion(){try{const e=this;return Promise.resolve(e.validateBlueprint()).then(function(t){t&&e.state.addCriterion(e.previousCriterionIdValue),e.refreshFromServer({includeErrors:!t})})}catch(e){return Promise.reject(e)}}group(){try{const e=this;return Promise.resolve(e.validateBlueprint()).then(function(t){t&&e.state.addGroup(),e.refreshFromServer({includeErrors:!t})})}catch(e){return Promise.reject(e)}}validateBlueprint(e){try{const e=this,r=new t.FetchRequest("GET",e.state.validateBlueprintUrlValue,{query:{"refine_filters_builder[filter_class]":e.state.filterName,"refine_filters_builder[blueprint_json]":JSON.stringify(e.state.blueprint),"refine_filters_builder[client_id]":e.state.clientIdValue}});return Promise.resolve(r.perform()).then(function(e){return e.ok})}catch(e){return Promise.reject(e)}}}h.values={previousCriterionId:Number};class p extends e.Controller{refresh(e){try{const e=this,r=document.getElementById(e.formIdValue),i=new FormData(r),n=new t.FetchRequest("GET",e.urlValue,{query:i,responseKind:"turbo-stream"});return Promise.resolve(n.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}p.values={url:String,formId:String};class m extends e.Controller{connect(){this.state=this.getStateController(),this.state.updateInput(this.criterionIdValue,this.inputValue)}getStateController(){let e=this.element;for(;e!==document.body;){const t=this.application.getControllerForElementAndIdentifier(e,"refine--state");if(t)return t;e=e.parentNode}return null}}m.values={criterionId:Number,input:Object};class f extends c{criterion(){const{state:e,criterionIdValue:t}=this;e.deleteCriterion(t),this.refreshFromServer()}}f.values={criterionId:Number};class g extends e.Controller{connect(){const e=new URLSearchParams(window.location.search);this.existingParams=e,this.existingParams.delete("stable_id")}delete(e){const{criterionId:t}=e.currentTarget.dataset;var r=parseInt(t);this.stateController.deleteCriterion(r),this.reloadPage()}reloadPage(){try{const e=this,{blueprint:r}=e.stateController,i=new t.FetchRequest("POST",e.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:e.stateController.filterName,blueprint_json:JSON.stringify(r),client_id:e.stateController.clientIdValue}})});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}redirectToStableId(e){const t=new URLSearchParams;e&&t.append("stable_id",e);const r=new URLSearchParams({...Object.fromEntries(this.existingParams),...Object.fromEntries(t)}).toString(),i=window.location.pathname+"?"+r;history.pushState({},document.title,i),window.location.reload()}get stateController(){return this.element.refineStateController}get stabilizeFilterController(){return this.element.stabilizeFilterController}}g.values={submitUrl:String};class b extends e.Controller{connect(){r.useClickOutside(this),this.boundHandleKeyUp=this.handleKeyUp.bind(this),document.addEventListener("keyup",this.boundHandleKeyUp)}disconnect(){document.removeEventListener("keyup",this.boundHandleKeyUp)}show(e){e.preventDefault(),this.frameTarget.src=this.srcValue,this.isOpenValue=!0}hide(e){this.isOpenValue&&(null==e||e.preventDefault(),this.frameTarget.innerHTML="",this.isOpenValue=!1)}clickOutside(e){this.hide(e)}handleKeyUp(e){"Escape"!==e.key&&"Esc"!==e.key||this.hide(e)}}b.targets=["frame"],b.values={src:String,isOpen:{type:Boolean,default:!1}};class v extends e.Controller{search(e){e.preventDefault(),this.submitFilter(),document.activeElement.blur()}submitFilter(){try{const e=this,{blueprint:r}=e.stateController,i=new t.FetchRequest("POST",e.submitUrlValue,{responseKind:"turbo-stream",body:JSON.stringify({refine_filters_builder:{filter_class:e.stateController.filterName,blueprint_json:JSON.stringify(r),client_id:e.stateController.clientIdValue}})});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}get stateController(){return this.element.querySelector('[data-controller~="refine--state"]').refineStateController}loadResults(e){let{detail:{url:t}}=e;console.log("filter submit success"),window.Turbo?window.Turbo.visit(t):window.location.href=t}}v.values={submitUrl:String},function(){if("function"==typeof window.CustomEvent)return!1;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var r=document.createEvent("CustomEvent");return r.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r}e.prototype=window.Event.prototype,window.CustomEvent=e}();const C=(e,t)=>{let{blueprint:r,formId:i}=t;const n=new CustomEvent("blueprint-updated",{bubbles:!0,cancelable:!0,detail:{blueprint:r,formId:i}});e.dispatchEvent(n)},y=(e,t,r)=>{var i;const n=null==r?void 0:r.component,l=(null==r?void 0:r.meta)||{clauses:[],options:{}},o=(null==r?void 0:r.refinements)||[],{clauses:s,options:a}=l;let u;u="option-condition"===n?a[0]?[a[0].id]:[]:void 0;let d={clause:null==(i=s[0])?void 0:i.id,selected:u};return o.forEach(e=>{const{meta:t,component:r}=e,{clauses:i,options:n}=t;let l;l="option-condition"===r?n[0]?[n[0].id]:[]:void 0,d[e.id]={clause:i[0].id,selected:l}}),{depth:t,type:"criterion",condition_id:e,input:d}};class w extends e.Controller{connect(){this.element.refineStateController=this,this.changeDelegate=i.delegate("change",["event","picker"]),this.blueprint=this.blueprintValue,this.conditions=this.conditionsValue,this.filterName=this.classNameValue,this.conditionsLookup=this.conditions.reduce((e,t)=>(e[t.id]=t,e),{}),this.loadingTimeout=null,C(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}disconnect(){i.abnegate("change",this.changeDelegate)}startUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTimeout=window.setTimeout(()=>{this.loadingTarget.classList.remove("hidden")},1e3)}finishUpdate(){this.loadingTimeout&&window.clearTimeout(this.loadingTimeout),this.loadingTarget.classList.add("hidden")}conditionConfigFor(e){return this.conditionsLookup[e]}addGroup(){const{conditions:e}=this,t=e.find(e=>e.id==this.defaultConditionIdValue)||e[0];var r;this.blueprint.length>0&&this.blueprint.push({depth:r=void 0===r?0:r,type:"conjunction",word:"or"}),this.blueprint.push(y(t.id,1,t)),C(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}addCriterion(e){const{blueprint:t,conditions:r}=this,i=r.find(e=>e.id==this.defaultConditionIdValue)||r[0];var n;t.splice(e+1,0,{depth:n=void 0===n?1:n,type:"conjunction",word:"and"},y(i.id,1,i)),C(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}deleteCriterion(e){const{blueprint:t}=this,r=t[e-1],i=t[e+1],n=r&&"or"===r.word,l=i&&"or"===i.word||!i,o=n||!r,s=o&&l;r||i?t.splice(s&&n?e-1:s&&!r||o&&!l?e:e-1,2):this.blueprint=[],C(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}replaceCriterion(e,t,r){const i=this.blueprint[e];if("criterion"!==i.type)throw new Error("You can't call updateConditionId on a non-criterion type. Trying to update "+JSON.stringify(y));const l=this.blueprint[e],o=y(t,i.depth,r);return!n.isEqual(l,o)&&(this.blueprint[e]=o,C(this.element,{blueprint:this.blueprint,formId:this.formIdValue}),!0)}updateInput(e,t,r){const{blueprint:i}=this,n=i[e],l=(r=r||"input").split(", ");l.length>1?n[l[0]][l[1]]={...n[l[0]][l[1]],...t}:n[r]={...n[r],...t},C(this.element,{blueprint:this.blueprint,formId:this.formIdValue})}}w.values={blueprint:Array,conditions:Array,className:String,refreshUrl:String,clientId:String,validateBlueprintUrl:String,defaultConditionId:String},w.targets=["loading"];class I extends e.Controller{connect(){const e=document.getElementById(this.stateDomIdValue).refineStateController;this.blueprintFieldTarget.value=JSON.stringify(e.blueprint),console.log("connect",this.blueprintFieldTarget.value)}updateBlueprintField(e){if(e.detail.formId!=this.formIdValue)return null;const{detail:t}=e,{blueprint:r}=t;this.blueprintFieldTarget.value=JSON.stringify(r),console.log("update blueprint",this.blueprintFieldTarget.value)}}I.targets=["blueprintField"],I.values={formId:String,stateDomId:String};class S extends e.Controller{submit(e){e.preventDefault(),this.element.submit()}}class T extends e.Controller{toggle(e){this.contentTargets.forEach(e=>{e.toggleAttribute("hidden")})}}T.targets=["content"];class V extends e.Controller{submit(e){try{const r=this;e.preventDefault();const i=new t.FetchRequest(r.element.method||"POST",r.element.action,{responseKind:"turbo-stream",body:new FormData(r.element)});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class F extends e.Controller{visit(e){try{const r=this;e.preventDefault();const i=new t.FetchRequest(r.element.dataset.turboMethod||"GET",r.element.href,{responseKind:"turbo-stream"});return Promise.resolve(i.perform()).then(function(){})}catch(e){return Promise.reject(e)}}}class E extends e.Controller{filter(e){const t=e.currentTarget.value.toLowerCase(),r=new Set;this.listItemTargets.forEach(e=>{e.dataset.listItemValue.toLowerCase().includes(t)?(e.hidden=!1,r.add(e.dataset.category)):e.hidden=!0}),this.categoryTargets.forEach(e=>{e.hidden=!r.has(e.innerHTML)})}}E.targets=["listItem","category"];class P extends c{initialize(){this.updateBlueprint=n.debounce((e,t,r)=>{this.value(e,t,r)},500)}refinedFilter(e){const{criterionIdValue:t,state:r}=this;r.updateInput(t,{id:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}clause(e){const{criterionIdValue:t,state:r}=this;r.updateInput(t,{clause:e.target.value},e.target.dataset.inputId),this.refreshFromServer()}selected(e){const{target:t}=e,r=Array.prototype.slice.call(t.options).filter(e=>e.selected).map(e=>e.value);this.value(e,r,"selected")}value(e,t,r){const{criterionIdValue:i,state:n}=this,l=e.target.dataset;n.updateInput(i,{[r=r||l.inputKey||"value"]:t=t||e.target.value},l.inputId)}condition(e){const{criterionIdValue:t,state:r}=this,i=e.target;let n=i.value;n||(n=i.querySelector("select").value);const l=this.state.conditionConfigFor(n);r.replaceCriterion(t,n,l)&&this.refreshFromServer()}cancelEnter(e){"Enter"===e.code&&(e.preventDefault(),e.stopPropagation())}}P.values={criterionId:Number},require("daterangepicker/daterangepicker.css");class j extends e.Controller{connect(){this.initPluginInstance()}disconnect(){this.teardownPluginInstance()}clearDate(e){e.preventDefault(),window.$(this.fieldTarget).val(""),this.dispatch("value-cleared")}applyDateToField(e,t){const r=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,i=t?a.default(t.startDate.toISOString()):a.default(this.fieldTarget.value,"YYYY-MM-DDTHH:mm").format("YYYY-MM-DDTHH:mm"),n=i.format(r),l=this.includeTimeValue?i.toISOString(!0):i.format("YYYY-MM-DD");this.fieldTarget.value=n,this.hiddenFieldTarget.value=l,window.$(this.fieldTarget).trigger("change",t),this.hiddenFieldTarget.dispatchEvent(new Event("change",{detail:t,bubbles:!0}))}initPluginInstance(){const e=this.pickerLocaleValue,t=this.isAmPmValue;e.format=this.includeTimeValue?this.timeFormatValue:this.dateFormatValue,window.$(this.fieldTarget).daterangepicker({singleDatePicker:!0,timePicker:this.includeTimeValue,timePickerIncrement:5,autoUpdateInput:!1,autoApply:!0,minDate:!!this.futureOnlyValue&&new Date,locale:e,parentEl:u.default(this.element),drops:this.dropsValue?this.dropsValue:"down",timePicker24Hour:!t}),window.$(this.fieldTarget).on("apply.daterangepicker",this.applyDateToField.bind(this)),window.$(this.fieldTarget).on("cancel.daterangepicker",this.clearDate.bind(this)),window.$(this.fieldTarget).on("showCalendar.daterangepicker",this.showCalendar.bind(this)),this.pluginMainEl=this.fieldTarget,this.plugin=u.default(this.pluginMainEl).data("daterangepicker"),this.inlineValue&&this.element.classList.add("date-input--inline")}teardownPluginInstance(){void 0!==this.plugin&&(u.default(this.pluginMainEl).off("apply.daterangepicker"),u.default(this.pluginMainEl).off("cancel.daterangepicker"),u.default(this.pluginMainEl).off("showCalendar.daterangepicker"),this.plugin.remove())}showCalendar(){this.dispatch("show-calendar")}}j.targets=["field","hiddenField","clearButton"],j.values={includeTime:Boolean,futureOnly:Boolean,drops:String,inline:Boolean,dateFormat:String,timeFormat:String,isAmPm:Boolean,locale:{type:String,default:"en"},datetimeFormat:{type:String,default:"MM/DD/YYYY h:mm A"},pickerLocale:{type:Object,default:{}}};const x=[[h,"refine/add-controller.js"],[p,"refine/criterion-form-controller.js"],[m,"refine/defaults-controller.js"],[f,"refine/delete-controller.js"],[g,"refine/filter-pills-controller.js"],[b,"refine/popup-controller.js"],[v,"refine/search-filter-controller.js"],[c,"refine/server-refresh-controller.js"],[w,"refine/state-controller.js"],[I,"refine/stored-filter-controller.js"],[S,"refine/submit-form-controller.js"],[T,"refine/toggle-controller.js"],[V,"refine/turbo-stream-form-controller.js"],[F,"refine/turbo-stream-link-controller.js"],[E,"./refine/typeahead-list-controller.js"],[P,"refine/update-controller.js"],[j,"refine/date-controller.js"]].map(function(e){const t=e[0];return{identifier:d(e[1]),controllerConstructor:t}});exports.AddController=h,exports.CriterionFormController=p,exports.DateController=j,exports.DefaultsController=m,exports.DeleteController=f,exports.FilterPillsController=g,exports.PopupController=b,exports.SearchFilterController=v,exports.ServerRefreshController=c,exports.StateController=w,exports.StoredFilterController=I,exports.SubmitForm=S,exports.ToggleController=T,exports.TurboStreamFormController=V,exports.TurboStreamLinkController=F,exports.TypeaheadListController=E,exports.UpdateController=P,exports.controllerDefinitions=x;
2
2
  //# sourceMappingURL=refine-stimulus.js.map