refine-rails 2.9.6 → 2.9.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 444ce8c4a4612f03fe24fed0577947e470d8bd3a4f7308fa98d7c28e0f92c0b4
4
- data.tar.gz: 4c0fa55803ba7324feeead926d4e1a7c76552ec892a1d0c7c6cd41adca9d82dc
3
+ metadata.gz: '039df341fd264ac47f7b96bd75982670ec8de4c8c4ceb8b834531e32b0951719'
4
+ data.tar.gz: 9e66ddc7e19e999393deaddba297aeda5cbb6ae34f60caa5b3b30cbd12ea87c6
5
5
  SHA512:
6
- metadata.gz: 47758e1e13e8fb41c51dc9daad898699286923737bc46429ef47953ce8d749819ce5e09c1dcbc2d4befbf8ffa23ff1f1d2f4b7ad708496910aeb5f83f6e3f209
7
- data.tar.gz: cb161353a2a7a408fba0d64c98094ba330a6f9c6c3d8e440dffcc179cf0fc93441cb2defe8990f6f03b7df078a5ee8b91c5fd616fe01e738f15281ceda242dc5
6
+ metadata.gz: 4a61c48ceab2212cf91edbff09763337f33b3202bb0a1c53a385f6aa1884e427e45d8140bcc3f13981c52d1190b532f2969b549090567440292a9183d49b89c9
7
+ data.tar.gz: b30741654641737ed1d2137f471772a66ff1ee9d1206c5817eeab23a6a99093aee9e9364fb4e016d3e28bea7a253ae57071d381b3a5d2f1cb08e3d3ed9e16228
data/README.md CHANGED
@@ -19,15 +19,15 @@ Instead of importing the plain `index.css`, include the raw tailwind file in you
19
19
 
20
20
  ```css
21
21
  /* in application.css */
22
- @import '@hammerstone/refine-stimulus/app/assets/stylesheets/index.tailwind.css';
22
+ @import '@clickfunnels/refine-stimulus/app/assets/stylesheets/index.tailwind.css';
23
23
  ```
24
24
 
25
25
  ### Errors
26
26
  You may have to restart your server if you encounter the error:
27
27
  ```
28
- NameError (uninitialized constant ApplicationController::Hammerstone
28
+ NameError (uninitialized constant ApplicationController::Refine
29
29
  web |
30
- web | include Hammerstone::FilterApplicationController
30
+ web | include Refine::FilterApplicationController
31
31
  ```
32
32
 
33
33
  ## Custom configuration
@@ -91,7 +91,7 @@ event.detail includes the following properties:
91
91
 
92
92
  #### filter-stored: This event is emitted when the filter has been saved to the database (i.e. the user clicked "Save Filter").
93
93
  event.detail includes the following properties
94
- storedFilterId: the primary key of the associated record in the hammerstone_refine_stored_filters_table
94
+ storedFilterId: the primary key of the associated record in the refine_stored_filters_table
95
95
 
96
96
  ## Forcing validations
97
97
  To force validations, make a POST request to /refine/blueprints with the following JSON payload:
@@ -120,7 +120,7 @@ const response = await fetch('/refine/blueprints', {
120
120
  ```
121
121
 
122
122
  #### Fetching a stable_id from the server
123
- If you need to get a URL-encoded stable_id for a filter without relying on the filter-stabilized event, you can make a PUT request to /hammerstone/update_stable_id with the following JSON payload:
123
+ If you need to get a URL-encoded stable_id for a filter without relying on the filter-stabilized event, you can make a PUT request to /refine/update_stable_id with the following JSON payload:
124
124
  - filter: the ruby class name of the filter
125
125
  - blueprint: JSON stringified version of the current blueprint
126
126
 
@@ -144,52 +144,6 @@ const response = await fetch(this.updateStableIdUrlValue, {
144
144
  If the filter is valid, the server responds 200 OK with the stable_id in the JSON response
145
145
  If the filter is not valid, the server responds 422 Unprocessable Entity with an errors array in the JSON response
146
146
 
147
- ## Customizing the datepicker
148
- By default date filters use [flatpickr](https://flatpickr.js.org/getting-started/). End users can specify an alternative datepicker in their application javascript. Here's an example using the daterangepicker that ships with Bullet Train:
149
-
150
- ```javascript
151
- import $ from 'jquery' // ensure jquery is loaded before daterangepicker
152
- import 'daterangepicker'
153
- import 'daterangepicker/daterangepicker.css'
154
-
155
- window.HammerstoneRefine ||= {}
156
- window.HammerstoneRefine.datePicker = {
157
- connect: function() {
158
- $(this.fieldTarget).daterangepicker({
159
- singleDatePicker: true,
160
- autoUpdateInput: false,
161
- minDate: this.futureOnlyValue ? new Date() : false,
162
- locale: {
163
- cancelLabel: "Cancel",
164
- applyLabel: "Apply",
165
- format: 'MM/DD/YYYY',
166
- },
167
- parentEl: $(this.element),
168
- drops: this.dropsValue ? this.dropsValue : 'down',
169
- })
170
-
171
- $(this.fieldTarget).on('apply.daterangepicker', (event, picker) => {
172
- const format =
173
- $(this.fieldTarget).val(picker.startDate.format('MM/DD/YYYY'))
174
- $(this.hiddenFieldTarget).val(picker.startDate.format('YYYY-MM-DD'))
175
- this.hiddenFieldTarget.dispatchEvent(new Event('change', {bubbles: true}))
176
- })
177
-
178
- this.plugin = $(this.fieldTarget).data('daterangepicker')
179
- },
180
- disconnect: function() {
181
- if (this.plugin === undefined) {
182
- return
183
- }
184
-
185
- $(this.fieldTarget).off('apply.daterangepicker')
186
-
187
- // revert to original markup, remove any event listeners
188
- this.plugin.remove()
189
- }
190
- }
191
- ````
192
-
193
147
  ## Customizing Available Stored Filters
194
148
 
195
149
  By default the list of available stored filters is scoped to the type of the current filter. You can add additional scoping by assigning a Proc to `Refine::Rails.configuration.stored_filter_scope` in an initializer.
@@ -247,14 +201,14 @@ yarn build --watch # leave this running to automatically rebuild when you change
247
201
  2. From your application's folder run:
248
202
 
249
203
  ```sh
250
- yarn link "@hammerstone/refine-stimulus"
204
+ yarn link "@clickfunnels/refine-stimulus"
251
205
  ```
252
206
 
253
207
  3. Restart your asset build server (webpacker/esbuild/etc)
254
208
 
255
209
  When you're ready to switch back to the published npm package, run:
256
210
  ```sh
257
- yarn unlink "@hammerstone/refine-stimulus"
211
+ yarn unlink "@clickfunnels/refine-stimulus"
258
212
  ```
259
213
 
260
214
  #### Troubleshooting yarn link
@@ -267,7 +221,7 @@ Note that theoretically, any changes you make to the javascript and css assets s
267
221
  5. Run `bin/rails assets:clean` from your app's directory and restart servers
268
222
 
269
223
  If none of the above steps work, try tearing down the package link and setting it up again:
270
- 1. Run `yarn link "@hammerstone-stimulus"` from your app's directory and shut down all servers.
224
+ 1. Run `yarn link "@clickfunnels-stimulus"` from your app's directory and shut down all servers.
271
225
  2. Run `yarn unlink` from the gem directory.
272
226
  3. Redo the steps listed in this section for setting up the linked package
273
227
  4. Start up your web and asset servers
@@ -293,7 +247,7 @@ From the directory of the project including this package:
293
247
 
294
248
  ```bash
295
249
 
296
- yalc link @hammerstone/refine-stimulus
250
+ yalc link @clickfunnels/refine-stimulus
297
251
  ```
298
252
 
299
253
  When you make local updates to the package:
@@ -312,30 +266,34 @@ Running `yarn` again from your project's directory will revert back to the publi
312
266
  3. in `refine-rails` repo follow all yalc steps below -> you should see this message if successful
313
267
 
314
268
  ```
269
+ <<<<<<< HEAD
315
270
  @hammerstone/refine-stimulus@2.4.2 published in store.
316
- Pushing @hammerstone/refine-stimulus@2.4.2 in /Users/colleenschnettler/Documents/Documents/Developer/Hammerstone/berry-refine-demo-clean
317
- Package @hammerstone/refine-stimulus@2.4.2 linked ==> /Users/colleenschnettler/Documents/Documents/Developer/Hammerstone/berry-refine-demo-clean/node_modules/@hammerstone/refine-stimulus
271
+ Pushing @hammerstone/refine-stimulus@2.4.2 in [path]
272
+ Package @hammerstone/refine-stimulus@2.4.2 linked ==> [path]
273
+ =======
274
+ @clickfunnels/refine-stimulus@2.4.2 published in store.
275
+ Pushing @clickfunnels/refine-stimulus@2.4.2 in /Users/colleenschnettler/Documents/Documents/Developer/Hammerstone/berry-refine-demo-clean
276
+ Package @clickfunnels/refine-stimulus@2.4.2 linked ==> /Users/colleenschnettler/Documents/Documents/Developer/Hammerstone/berry-refine-demo-clean/node_modules/@clickfunnels/refine-stimulus
277
+ >>>>>>> c30f86b (readme updates)
318
278
  ```
319
279
  4. Restart server
320
280
 
321
281
  ## Bullet Train Installation
322
282
  Add ruby gem
323
283
  ```
324
- source "https://yourAPIKey@gem.fury.io/hammerstonedev" do
325
- gem "refine-rails"
326
- end
284
+ gem "refine-rails"
327
285
  ```
328
286
 
329
287
  Installing the JavaScript package:
330
288
 
331
289
  ```bash
332
- $ yarn add @hammerstone/refine-stimulus
290
+ $ yarn add @clickfunnels/refine-stimulus
333
291
  ```
334
292
 
335
293
  In `app/javascript/controllers/index.js` add
336
294
 
337
295
  ```js
338
- import { controllerDefinitions as refineControllers } from "@hammerstone/refine-stimulus"
296
+ import { controllerDefinitions as refineControllers } from "@clickfunnels/refine-stimulus"
339
297
  application.load(refineControllers)
340
298
  ```
341
299
 
@@ -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/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
+ {"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}\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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"}