{ "version": 3, "sources": ["../../javascript/controllers/accordion-controller.js", "../../javascript/controllers/accordion2-controller.js", "../../javascript/controllers/admin-beer-controller.js", "../../javascript/controllers/admin-merge-controller.js", "../../javascript/controllers/auto-save-controller.js", "../../javascript/controllers/auto-textfield-height-controller.js", "../../javascript/controllers/autocomplete-controller.js", "../../javascript/controllers/availability-promo-controller.js", "../../javascript/controllers/beacon-controller.js", "../../javascript/controllers/product-autocomplete-controller.js", "../../javascript/controllers/beer-autocomplete-controller.js", "../../javascript/controllers/beer-info-controller.js", "../../javascript/controllers/beer-suggestions-controller.js", "../../javascript/controllers/beers-added-modal-controller.js", "../../javascript/controllers/block-modal-controller.js", "../../javascript/controllers/brewery-autocomplete-controller.js", "../../javascript/controllers/brewery-multi-select-controller.js", "../../javascript/controllers/bulk-move-controller.js", "../../javascript/controllers/calculator-controller.js", "../../javascript/controllers/calendly-controller.js", "../../javascript/controllers/charts-controller.js", "../../javascript/controllers/checkbox-counter-controller.js", "../../javascript/controllers/checkbox-submit-controller.js", "../../javascript/controllers/checkbox-toggle-controller.js", "../../javascript/controllers/checklist-accordion-controller.js", "../../javascript/controllers/checklists-controller.js", "../../javascript/controllers/choose-saved-card-controller.js", "../../javascript/controllers/clipboard_controller.js", "../../javascript/controllers/closeable-controller.js", "../../javascript/controllers/codemirror-controller.js", "../../javascript/controllers/collapsible-controller.js", "../../javascript/controllers/collapsible-simple-controller.js", "../../javascript/controllers/condition-ids-controller.js", "../../javascript/controllers/conditional-input-controller.js", "../../javascript/controllers/custom-product-autocomplete-controller.js", "../../javascript/controllers/date-input-controller.js", "../../javascript/controllers/digital-display-controller.js", "../../../node_modules/ev-emitter/ev-emitter.js", "../../../node_modules/get-size/get-size.js", "../../../node_modules/desandro-matches-selector/matches-selector.js", "../../../node_modules/fizzy-ui-utils/utils.js", "../../../node_modules/outlayer/item.js", "../../../node_modules/outlayer/outlayer.js", "../../../node_modules/masonry-layout/masonry.js", "../../../node_modules/imagesloaded/imagesloaded.js", "../../javascript/controllers/filter-templates-controller.js", "../../javascript/controllers/fonts-controller.js", "../../javascript/controllers/google-autocomplete-controller.js", "../../javascript/controllers/hamburger-menu-controller.js", "../../javascript/models/debouncer.js", "../../javascript/controllers/hiding-header-controller.js", "../../javascript/controllers/honeybadger-controller.js", "../../javascript/controllers/image-background-remover-controller.js", "../../javascript/lib/load-styles.js", "../../javascript/controllers/image-editor-controller.js", "../../javascript/controllers/location-autocomplete-controller.js", "../../javascript/controllers/masonry-grid-controller.js", "../../javascript/controllers/menu-controller.js", "../../javascript/controllers/menu-search-controller.js", "../../javascript/controllers/menu-section-controller.js", "../../javascript/controllers/menu-sections-controller.js", "../../javascript/controllers/modular-controller.js", "../../javascript/controllers/multi-select-controller.js", "../../javascript/controllers/order-search-controller.js", "../../javascript/controllers/orders-controller.js", "../../javascript/controllers/pickup-locations-controller.js", "../../javascript/controllers/place-lead-controller.js", "../../javascript/controllers/price-calculator-controller.js", "../../javascript/controllers/print-iframe-controller.js", "../../javascript/controllers/print-menu-landing-page-controller.js", "../../javascript/controllers/print-menus-controller.js", "../../javascript/controllers/print-preview-controller.js", "../../javascript/controllers/product-type-controller.js", "../../javascript/controllers/property-segments-controller.js", "../../javascript/controllers/purchase-limit-controller.js", "../../javascript/controllers/remote-file-form-controller.js", "../../javascript/controllers/scroll-to-top-controller.js", "../../javascript/controllers/segmented_field_controller.js", "../../javascript/controllers/segments-controller.js", "../../javascript/controllers/select-all-controller.js", "../../javascript/controllers/serving-controller.js", "../../javascript/controllers/servings-controller.js", "../../javascript/controllers/shoelace-controller.js", "../../javascript/controllers/show-more-controller.js", "../../javascript/controllers/simple-beer-autocomplete-controller.js", "../../javascript/controllers/simple-modular-controller.js", "../../javascript/controllers/smooth-scroller-controller.js", "../../javascript/controllers/sortable-controller.js", "../../javascript/controllers/sticky-controller.js", "../../javascript/controllers/streamlined-menu-controller.js", "../../javascript/controllers/stripe-controller.js", "../../javascript/controllers/structured-data-controller.js", "../../javascript/controllers/tabs-controller.js", "../../javascript/controllers/tabs2-controller.js", "../../javascript/controllers/textfit-controller.js", "../../javascript/controllers/tracked-clicks-controller.js", "../../javascript/controllers/trix-controller.js", "../../javascript/controllers/turnstile_controller.js", "../../javascript/controllers/tv-preview-controller.js", "../../javascript/controllers/user-preferences-controller.js", "../../javascript/controllers/video-modal-controller.js", "../../javascript/controllers/viewport-calculate-controller.js", "../../javascript/controllers/viewport-entrance-toggle-controller.js", "../../javascript/controllers/visible-anchor-controller.js", "../../javascript/controllers/visible-controller.js", "../../javascript/controllers/visible-from-radio-controller.js", "../../javascript/controllers/web-menu-preview-sizes-controller.js", "import-glob:./controllers/**/*.js", "../../../node_modules/@stimulus-components/dialog/dist/stimulus-dialog.mjs", "../../../node_modules/stimulus-use/dist/index.js", "../../../node_modules/@stimulus-components/dropdown/dist/stimulus-dropdown.mjs", "../../javascript/shared/beermenus.js", "../../javascript/shared/analytics.js"], "sourcesContent": ["import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"section\", \"expanded\", \"content\", \"collapse\"]\n\n async connect() {\n await Accordion.import()\n this.initializeAccordion()\n }\n\n collapse(event) {\n event.preventDefault()\n\n const index = this.collapseTargets.indexOf(event.currentTarget)\n this.$accordions[index].accordion(\"option\", \"active\", false)\n this.scrollTo(this.$accordions[index])\n }\n\n // private\n\n initializeAccordion() {\n this.$accordions = []\n\n this.sectionTargets.forEach((section, index) => {\n // 0 expands the first element, the only one in this case.\n const active = this.expandedTargets[index].value === \"true\" ? 0 : false\n\n const accordion = $(section).accordion({\n header: \".accordion-tab\",\n autoHeight: false,\n collapsible: true,\n heightStyle: \"content\",\n active: active,\n animate: this.animations,\n icons: this.icons,\n beforeActivate: this.beforeActivate.bind(this),\n activate: this.activate.bind(this)\n })\n this.$accordions[index] = accordion\n })\n\n this.contentTargets.forEach(el => el.classList.remove(\"hidden\"))\n }\n\n beforeActivate(event, ui) {\n BeerMenus.Checklists.closeDriver()\n\n if (ui.newHeader.length) {\n this.scrollTo(ui.newHeader)\n }\n }\n\n activate(event, ui) {\n const expandedIndex = this.contentTargets.indexOf(ui.newPanel[0])\n if (expandedIndex >= 0) {\n this.expandedTargets[expandedIndex].value = true\n }\n\n const collapsedIndex = this.contentTargets.indexOf(ui.oldPanel[0])\n if (collapsedIndex >= 0) {\n this.expandedTargets[collapsedIndex].value = false\n }\n }\n\n scrollTo(header) {\n const scrollTop = header.offset().top +\n ($(\".accordion-scroll-window\").scrollTop() || 0)\n const offset = parseInt(this.data.get(\"offset\")) || 0\n\n if ($(this.element).hasClass('no-body-scroll')){\n $(\".accordion-scroll-window\").animate(\n { scrollTop: scrollTop - offset },\n this.animationDuration,\n \"easeOutQuad\"\n )\n }\n\n else {\n $(\".accordion-scroll-window,html,body\").animate(\n { scrollTop: scrollTop - offset },\n this.animationDuration,\n \"easeOutQuad\"\n )\n }\n }\n\n get animations() {\n return {\n easing: \"easeInOutQuint\",\n duration: this.animationDuration,\n down: {\n easing: \"easeInOutQuart\",\n duration: this.animationDuration\n }\n }\n }\n\n get icons() {\n if (this.data.has(\"icon\") && this.data.has(\"iconActive\")){\n return {\n \"header\": this.data.get(\"icon\"),\n \"activeHeader\": this.data.get(\"iconActive\")\n }\n }\n\n else {\n return {\n \"header\": \"pure-icon pure-icon-angle-down\",\n \"activeHeader\": \"pure-icon pure-icon-angle-up\"\n }\n }\n }\n\n get animationDuration() {\n return 850\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n connect() {\n this.element.addEventListener(\"sl-show\", (event) => {\n setTimeout(\n () => event.target.scrollIntoView({ behavior: \"smooth\" }),\n 300\n );\n if (event.target.localName === \"sl-details\") {\n [...this.element.querySelectorAll(\"sl-details\")].map(\n (details) => (details.open = event.target === details)\n );\n }\n });\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"beer\", \"producer\", \"styleSelect\", \"actions\", \"warning\", \"error\"]\n\n connect() {\n $(this.element).on(\"ajax:beforeSend\", this.beforeSend.bind(this))\n $(this.element).on(\"ajax:success\", this.success.bind(this))\n $(this.element).on(\"ajax:error\", this.error.bind(this))\n }\n\n changeProductType(event) {\n const type = event.currentTarget.value\n\n this.styleSelectTargets.forEach(select => {\n const disabled = select.dataset.type != type\n select.classList.toggle(\"hidden\", disabled)\n select.disabled = disabled\n })\n\n this.producerTargets.forEach(target => {\n const disabled = target.dataset.type != type\n target.classList.toggle(\"hidden\", disabled)\n\n const producerIDInput = target.querySelector(\"input[type=hidden]\")\n if (producerIDInput) {\n producerIDInput.disabled = disabled\n }\n })\n }\n\n // private\n\n beforeSend() {\n this.beerTarget.classList.remove(\"box-shadow-left-green\")\n this.actionsTarget.classList.remove(\"box-shadow-right-green\")\n\n this.beerTarget.classList.remove(\"box-shadow-left-red\")\n this.actionsTarget.classList.remove(\"box-shadow-right-red\")\n\n this.errorTarget.classList.add(\"hidden\")\n }\n\n success(event, data, status, xhr) {\n if (xhr.getResponseHeader(\"SUCCESS\") == \"true\") {\n this.replaceHTML(data)\n this.noteRemovedDuplicates(xhr.getResponseHeader(\"DUPLICATE_IDS\"))\n } else {\n this.scrollToElement()\n this.replaceHTML(data)\n }\n }\n\n error() {\n this.scrollToElement()\n\n this.beerTarget.classList.add(\"box-shadow-left-red\")\n this.actionsTarget.classList.add(\"box-shadow-right-red\")\n this.errorTarget.classList.remove(\"hidden\")\n }\n\n replaceHTML(html) {\n this.element.outerHTML = html\n }\n\n noteRemovedDuplicates(duplicateIDsJSON) {\n if (duplicateIDsJSON) {\n JSON.parse(duplicateIDsJSON).forEach(id => {\n const form = document.querySelector(`[data-id='${id}']`)\n if (form) {\n const inputs = form.elements\n for (var i = 0; i < inputs.length; i++) {\n inputs[i].disabled = true\n }\n\n form.querySelector(\"[data-admin-beer-target='warning']\")\n .classList.remove(\"hidden\")\n form.querySelector(\"[data-admin-beer-target='beer']\")\n .classList.add(\"box-shadow-left-yellow\")\n form.querySelector(\"[data-admin-beer-target='actions']\")\n .classList.add(\"box-shadow-right-yellow\")\n }\n })\n }\n }\n\n scrollToElement() {\n $(\"html, body\").animate({\n scrollTop: $(this.element).offset().top\n }, \"normal\");\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"keeperID\"]\n\n keep(event) {\n event.preventDefault()\n\n this.keeperIDTarget.value = event.currentTarget.dataset.id\n\n const keeper = document.querySelector(`.${this.keeperClass}`)\n if (keeper) {\n keeper.classList.remove(this.keeperClass)\n }\n event.currentTarget.classList.add(this.keeperClass)\n }\n\n // private\n\n get keeperClass() {\n return \"keeper\"\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"form\" ]\n\n connect() {\n this.submitOnChange()\n this.submitOnEvent()\n\n $(this.formTarget).on(\"ajax:success\", this.success.bind(this))\n $(this.formTarget).on(\"ajax:error\", this.error.bind(this))\n }\n\n submitForm(event) {\n if (this.formTarget.dataset.turbo === \"true\") {\n this.formTarget.requestSubmit(this.formTarget.querySelector(\"button[type='submit']\"))\n } else {\n $.rails.fire($(this.formTarget), \"submit\")\n }\n }\n\n // private\n\n submitOnChange() {\n [...this.formTarget.elements].forEach(element => {\n if (!element.dataset.ignore) {\n element.addEventListener(\"change\", this.submitForm.bind(this))\n }\n })\n }\n\n submitOnEvent() {\n document.body.addEventListener(\"sortable:didSort\",\n this.submitForm.bind(this))\n\n document.body.addEventListener(\"customFont:selected\",\n this.submitForm.bind(this))\n\n document.body.addEventListener(\"sl-change\",\n this.submitForm.bind(this))\n\n document.body.addEventListener(\"cme-blur\",\n this.submitForm.bind(this))\n }\n\n success(event, data, status, xhr) {\n this.submitOnChange()\n }\n\n error(event, xhr) {\n console.log(\"ERROR, status: \", xhr.status)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"textfield\"]\n\n connect() {\n if (!Browser.isIE()) {\n this.textfieldTarget.style.resize = \"none\"\n this.defaultRows = this.textfieldTarget.rows\n this.textChanged()\n } else {\n this.textfieldTarget.rows = 3\n }\n }\n\n textChanged() {\n if (!Browser.isIE()) {\n this.textfieldTarget.rows = this.defaultRows\n const rows = Math.ceil(this.textfieldTarget.scrollHeight / this.lineHeight)\n this.textfieldTarget.rows = Math.min(rows, this.maxRows)\n }\n }\n\n // private\n\n get lineHeight() {\n return 25\n }\n\n get maxRows() {\n return 6\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"search\", \"field1\", \"field2\" ]\n\n async connect() {\n let libraries = await AlgoliaSource.importLibraries()\n this.source = new AlgoliaSource(libraries[0], this.data.get(\"index\")).source\n\n $(this.searchTarget).autocomplete({ autoselect: true }, [{\n source: this.source,\n displayKey: (obj) => { return obj.name },\n templates: { suggestion: this.suggestion },\n }]).on(\"autocomplete:selected\", this.selected.bind(this))\n }\n\n // private\n\n suggestion(hit) {\n return `

${hit.name}

`\n }\n\n selected(event, suggestion, dataset, context) {\n if (this.hasField1Target && this.field1 && suggestion[this.field1]) {\n this.field1Target.value = suggestion[this.field1]\n }\n\n if (this.hasField2Target && this.field2 && suggestion[this.field2]) {\n this.field2Target.value = suggestion[this.field2]\n }\n }\n\n get field1() {\n return this.data.get(\"field1\")\n }\n\n get field2() {\n return this.data.get(\"field2\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"availableCheckbox\"]\n\n clickedComingSoon(event) {\n event.preventDefault()\n this.availableCheckboxTarget.checked = true\n\n $(\"#coming-soon-promo\").modal()\n BeerMenus.Analytics.track(\"Viewed coming soon um modal\", {\n \"pro promo page\": \"Edit menu\",\n \"Pro promo feature\": \"Coming Soon\"\n })\n }\n\n clickedPrivate(event) {\n event.preventDefault()\n this.availableCheckboxTarget.checked = true\n\n $(\"#private-promo\").modal()\n BeerMenus.Analytics.track(\"Viewed private um modal\", {\n \"pro promo page\": \"Edit menu\",\n \"Pro promo feature\": \"Private\"\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { messageId: String }\n\n open(event) {\n event.preventDefault()\n\n this.target.Beacon(\"open\")\n this.target.Beacon(\"navigate\", \"/ask\")\n }\n\n prefill(event) {\n event.preventDefault()\n\n this.target.Beacon(\"open\")\n this.target.Beacon(\"navigate\", \"/ask/message/\")\n this.target.Beacon(\"prefill\", {\n name: this.data.get(\"name\"),\n email: this.data.get(\"email\"),\n subject: this.data.get(\"subject\"),\n text: this.data.get(\"text\")\n })\n }\n\n showMessage(event) {\n event.preventDefault()\n this.target.Beacon(\"show-message\", this.messageIdValue, { delay: 1, force: true })\n }\n\n // private\n\n get target() {\n return parent ? parent : window\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n this.state = \"closed\"\n\n document.addEventListener(\"tab:changed\", (event) => {\n this.tabChanged(event.detail)\n })\n }\n\n // private\n\n tabChanged(tab) {\n if (tab == this.productName.toLowerCase()) {\n this.searchTarget.nextSibling.focus()\n }\n }\n\n get limit() {\n return parseInt(this.data.get(\"limit\")) || 10\n }\n\n get barID() {\n return this.data.get(\"bar-id\")\n }\n\n get productType() {\n return this.data.get(\"product-type\")\n }\n\n get productName() {\n return this.data.get(\"product-name\")\n }\n}\n", "import ProductAutocompleteController from \"./product-autocomplete-controller\"\n\nexport default class extends ProductAutocompleteController {\n static targets = [\"beerID\", \"beerName\", \"container\", \"description\", \"beerStyle\", \"beerAbv\",\n \"metaDataContainer\", \"descriptionContainer\", \"descriptionRevert\", \"styleRevert\", \"abvRevert\",\n \"modal\", \"search\", \"submit\", \"suggestions\", \"template\"]\n\n static values = {\n hasGlobalDescription: Boolean,\n styleId: Number,\n abv: Number,\n skipFocus: Boolean\n }\n\n async connect() {\n let libraries = await AlgoliaSource.importLibraries()\n const filter = `product_type = ${this.productType}`\n this.algolia = new AlgoliaSource(libraries[0], \"Beer\", filter)\n this.showDescriptionRevertTarget = this.hasGlobalDescriptionValue != \"false\"\n this.connected()\n }\n\n populate(id, name, style_id, abv) {\n this.beerIDTarget.value = id\n this.search.val(name)\n\n this.descriptionTarget.value = \"\"\n this.fetchDescription(id, true)\n\n const data = {\n beer_style_id: style_id,\n abv: abv\n }\n this.setStyleAndAbv(data)\n\n if (this.validateSelection()) {\n this.containerTarget.focus()\n }\n }\n\n showNewBeerModal(event) {\n event && event.preventDefault()\n this.algolia.index.clearCache()\n\n $.ajax({\n url: \"/beers/new.js\",\n context: this,\n data: {\n name: this.search.val(),\n product_type: this.productType,\n bar_id: this.barID,\n edit: this.edit,\n modal: true\n }\n })\n .fail((jqXHR, status, error) => console.error(error))\n }\n\n suggestionsModalClosed() {\n this.validateSelection()\n }\n\n revertDescription(event) {\n event.preventDefault()\n\n $.ajax({\n url: this.descriptionURL(this.beerIDTarget.value),\n data: {\n default: true\n },\n dataType: \"json\"\n }).done(data => {\n this.descriptionTarget.value = data.description || \"\"\n this.descriptionRevertTarget.classList.add(\"hidden\")\n this.triggerInputEvent()\n })\n }\n\n revertStyle(event) {\n event.preventDefault()\n this.beerStyleTarget.value = this.styleIdValue\n $(this.beerStyleTarget).trigger('change')\n this.styleRevertTarget.classList.add(\"hidden\")\n }\n\n revertAbv(event) {\n event.preventDefault()\n this.beerAbvTarget.value = this.abvValue\n this.abvRevertTarget.classList.add(\"hidden\")\n }\n\n get skipEmptySuggestionsModal() {\n return this.data.get(\"skip-empty-suggestions-modal\") == \"true\"\n }\n\n // private\n\n connected() {\n this.initializeSearch()\n\n this.search.focus(event => this.searchQuery = event.currentTarget.value)\n\n if (!this.skipFocusValue) {\n this.searchTarget.nextSibling.focus()\n }\n\n this.suggestions = []\n\n document.body.addEventListener(\"skip-empty-suggestions-modal-change\", (event) => {\n this.data.set(\"skip-empty-suggestions-modal\", event.detail)\n })\n\n this.addRevertListener(\"keyup\", this.descriptionTarget, this.descriptionRevertTarget, this.showDescriptionRevertTarget)\n this.addRevertListener(\"input\", this.beerAbvTarget, this.abvRevertTarget, true)\n\n $(this.beerStyleTarget).on('select2:select', (e) => {\n if (this.beerStyleTarget.value != this.styleIdValue) {\n this.styleRevertTarget.classList.remove(\"hidden\")\n }\n })\n\n this.firstNoResultsKeystroke = true\n\n super.connect()\n }\n\n addRevertListener(listener, target, revertTarget, showMethod) {\n target.addEventListener(listener, () => {\n if (showMethod) {\n revertTarget.classList.remove(\"hidden\")\n }\n })\n }\n\n initializeSearch() {\n this.search = $(this.searchTarget).autocomplete(this.options, this.dataset)\n\n this.search\n .on(\"autocomplete:selected autocomplete:autocompleted\", (event, data) => {\n this.state = data.cssClass == this.addNewBeerClass ? \"new\" : \"existing\"\n this.containerTarget.focus()\n\n if (data.objectID) {\n this.setHiddenField(data.objectID)\n this.fetchDescription(data.objectID)\n this.setStyleAndAbv(data)\n }\n })\n .on(\"autocomplete:updated\", event => {\n if (event.currentTarget.value != this.searchQuery) {\n this.clearJavaScriptMessages()\n }\n })\n .on(\"autocomplete:closed\", () => {\n // \"Delay\" so modal:willShow event fires after any other clicks.\n setTimeout(() => { this.state = \"closed\" }, 1)\n })\n }\n\n setHiddenField(id) {\n if (this.hasBeerIDTarget && this.state != \"new\") {\n this.beerIDTarget.value = id\n }\n }\n\n setStyleAndAbv(data) {\n if (this.hasBeerStyleTarget) {\n this.beerStyleTarget.value = data.beer_style_id\n // Trigger change event to update the select2 dropdown\n $(this.beerStyleTarget).trigger('change')\n this.styleIdValue = data.beer_style_id\n this.metaDataContainerTarget.classList.remove(\"hidden\")\n }\n if (this.hasBeerAbvTarget) {\n this.beerAbvTarget.value = data.abv\n this.abvValue = data.abv\n }\n }\n\n validateSelection() {\n if (this.search.val() && !this.beerIDTarget.value) {\n new Servings(this.productType, this.edit).showMissingBeerError()\n return false\n }\n return true\n }\n\n clearJavaScriptMessages() {\n new Servings(this.productType, this.edit).clearJavaScriptMessages()\n }\n\n clearAndHideDescription() {\n this.descriptionTarget.value = \"\"\n this.descriptionContainerTarget.classList.add(\"hidden\")\n }\n\n clearAndHideMetaData() {\n this.beerStyleTarget.value = \"\"\n this.styleIdValue = \"\"\n this.beerAbvTarget.value = \"\"\n this.abvValue = \"\"\n this.metaDataContainerTarget.classList.add(\"hidden\")\n }\n\n source(query, callback, isBeerIndex) {\n this.clearAndHideDescription()\n this.clearAndHideMetaData()\n\n this.algolia.source(query, (suggestions) => {\n suggestions = suggestions.slice(0, this.limit)\n this.suggestions = suggestions\n\n if (suggestions.length === 0 && this.firstNoResultsKeystroke) {\n BeerMenus.Analytics.track(\"Viewed add item to menu no results\", { \"item type\": `${this.productName}` })\n this.firstNoResultsKeystroke = false\n }\n\n suggestions.push({\n name: `${this.productName} not listed? Add it to the database`,\n cssClass: this.addNewBeerClass,\n query: query\n })\n return callback(suggestions)\n })\n }\n\n displayKey(obj) {\n return obj.cssClass == this.addNewBeerClass ? obj.query : obj.name\n }\n\n suggestion(hit) {\n return new BeerAutocompleteSuggestion(this.templateTarget).build(hit)\n }\n\n showSuggestionsModal() {\n const event = new CustomEvent(\"modal:willShow\", {\n bubbles: true,\n cancelable: true,\n })\n\n if (this.element.dispatchEvent(event)) {\n const beerSuggestionsController = this.application\n .getControllerForElementAndIdentifier(this.suggestionsTarget, \"beer-suggestions\")\n beerSuggestionsController.fetch(this.search.val(), this, this.productType)\n BeerMenus.Analytics.track(\"Viewed not in database modal\", { \"item type\": `${this.productName}` })\n }\n }\n\n tabChanged(tab) {\n if (tab == this.productName.toLowerCase()) {\n this.searchTarget.nextSibling.focus()\n }\n }\n\n fetchDescription(beerID, fullDescription = false) {\n this.submitTarget.disabled = true\n\n $.ajax({\n url: this.descriptionURL(beerID),\n data: {\n full: fullDescription\n },\n dataType: \"json\"\n }).done(data => {\n this.descriptionTarget.value = data.description || \"\"\n this.showDescriptionRevertTarget = data.default_exists\n this.descriptionRevertTarget.classList\n .toggle(\"hidden\", !(data.customized && this.showDescriptionRevertTarget))\n\n this.descriptionContainerTarget.classList.remove(\"hidden\")\n this.triggerInputEvent()\n }).always(() => this.submitTarget.disabled = false )\n }\n\n descriptionURL(beerID) {\n return `/places/${this.barID}/beer_descriptions/${beerID}`\n }\n\n triggerInputEvent() {\n if (this.showDescriptionRevertTarget && !Browser.isIE()) {\n const inputEvent = new Event(\"input\", { bubbles: true })\n this.descriptionTarget.dispatchEvent(inputEvent)\n }\n }\n\n get addNewBeerClass() {\n return \"x-add-new-beer\"\n }\n\n get dataset() {\n return {\n source: (query, callback) => { this.source(query, callback) },\n name: \"beers\",\n displayKey: this.displayKey.bind(this),\n templates: { suggestion: this.suggestion.bind(this) },\n }\n }\n\n set state(val) {\n if (val == \"closed\" && this._state) {\n if (this._state == \"new\") {\n this.beerIDTarget.value = null\n this.clearAndHideDescription()\n this.clearAndHideMetaData()\n this.showNewBeerModal()\n } else if (this._state != \"existing\") {\n this.beerIDTarget.value = null\n this.clearAndHideDescription()\n this.clearAndHideMetaData()\n\n if (this.search.val()) {\n const matchedSuggestion = this.matchedSuggestion\n if (matchedSuggestion) {\n this.search.val(matchedSuggestion.name)\n this.beerIDTarget.value = matchedSuggestion.objectID\n } else {\n this.showSuggestionsModal()\n }\n }\n }\n }\n this._state = val\n }\n\n get matchedSuggestion() {\n const query = this.search.val().toLowerCase()\n return this.suggestions.find(suggestion => {\n return suggestion.name.toLowerCase() === query\n })\n }\n\n get barID() {\n return this.data.get(\"bar-id\")\n }\n\n get edit() {\n return this.data.get(\"edit\") === \"true\"\n }\n\n get options() {\n return {\n autoselect: true\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"description\" ]\n\n connect() {\n this.element.addEventListener(\"copy\", this.copy.bind(this))\n }\n\n copyDescription() {\n const text = this.descriptionTargets.map(el => el.textContent.trim()).join(\" \")\n this.copyTextToClipboard(text)\n this.copy()\n }\n\n // private\n\n copy(event) {\n BeerMenus.Analytics.track(\"Copied beer meta data on desktop\")\n\n const modal = $(\"#print-menu\")\n if (modal.length) {\n modal.modal()\n BeerMenus.Analytics.track(\"Viewed copied beer info print menu promo\")\n }\n }\n\n copyTextToClipboard(text) {\n const textarea = document.createElement(\"textarea\")\n textarea.value = text\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand(\"copy\")\n document.body.removeChild(textarea)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"suggestions\", \"template\", \"withSuggestions\", \"noSuggestions\"]\n\n async connect() {\n let libraries = await AlgoliaSource.importLibraries()\n this.algolia = new AlgoliaSource(libraries[0], \"Beer\")\n }\n\n fetch(query, controller, productType) {\n this.beerAutocompleteController = controller\n this.reset()\n\n const searchQuery = {\n query: query,\n filters: `product_type = ${productType}`,\n hitsPerPage: this.limit\n }\n this.algolia.index.search(searchQuery).then(result => {\n if (result && result.hits && result.hits.length) {\n this.populateSuggestions(result.hits)\n $(this.element).modal()\n } else if (controller.skipEmptySuggestionsModal) {\n controller.showNewBeerModal()\n } else {\n this.noSuggestionsTargets.forEach(t => t.classList.remove(\"hidden\"))\n $(this.element).modal()\n }\n\n $(this.element).one(\"hidden.bs.modal\", this.modalHidden.bind(this))\n })\n }\n\n select(event) {\n event.preventDefault()\n\n const id = event.currentTarget.dataset[\"id\"]\n const name = event.currentTarget.dataset[\"name\"]\n this.beerAutocompleteController.populate(id, name)\n\n $(this.element).modal(\"hide\")\n }\n\n addNewBeer(event) {\n event.preventDefault()\n\n $(this.element).modal(\"hide\")\n this.beerAutocompleteController.showNewBeerModal()\n }\n\n // private\n\n suggestion(hit) {\n const suggestion = this.templateTarget.cloneNode(true)\n suggestion.classList.remove(\"hidden\")\n suggestion.classList.add(hit.cssClass)\n\n const anchor = suggestion.querySelector(\"[data-ref='anchor']\")\n anchor.dataset[\"id\"] = hit.objectID\n anchor.dataset[\"name\"] = hit.name\n anchor.dataset[\"action\"] = \"beer-suggestions#select\"\n\n suggestion.querySelector(\"[data-ref='name']\").textContent = hit.name\n\n const meta = new BeerMetadata(hit).toString()\n suggestion.querySelector(\"[data-ref='meta']\").textContent = meta\n\n return suggestion\n }\n\n reset() {\n this.suggestionsTarget.innerHTML = \"\"\n this.withSuggestionsTargets.forEach(t => t.classList.add(\"hidden\"))\n this.noSuggestionsTargets.forEach(t => t.classList.add(\"hidden\"))\n }\n\n populateSuggestions(hits) {\n hits.forEach(hit => {\n this.suggestionsTarget.appendChild(this.suggestion(hit))\n })\n this.withSuggestionsTargets.forEach(t => t.classList.remove(\"hidden\"))\n }\n\n modalHidden() {\n this.beerAutocompleteController.suggestionsModalClosed()\n }\n\n get limit() {\n return parseInt(this.data.get(\"limit\")) || 10\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n closeAndFocusServingForm(event) {\n event.preventDefault()\n $(this.element).modal(\"hide\")\n $(\".aa-input\").first().focus()\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"footer\", \"loadingOverlay\" ]\n\n async connect() {\n this.element.controller = this\n await import(\"../models/state-manager.js\")\n }\n\n disconnect() {\n clearTimeout(this.autosaveTimer)\n }\n\n get stateManager() {\n return this.element.querySelector(\"bmu-state-manager\")\n }\n\n get $modal() {\n return $(this.element.querySelector(\":scope > .modal\"))\n }\n\n set loading(isLoading) {\n this.loadingOverlayTarget.classList.toggle(\"is-shown\", isLoading)\n }\n\n set nonImageElementsHidden(isHidden) {\n const section = this.stateManager.querySelector(\".modal-body\")\n\n this.footerTarget.hidden = isHidden\n Array.from(section.children).forEach(el => {\n if (el.dataset.controller != \"image-editor\") el.hidden = isHidden\n })\n }\n\n async openModal(profileId, region, position = \"center\") {\n clearTimeout(this.autosaveTimer)\n\n const src = `${this.data.get(\"src\")}?region=${region}&position=${position}`\n\n const response = await fetch(src)\n const partial = await response.text()\n\n if (this.$modal.get(0) && this.$modal.get(0).style.display == \"block\") {\n this.$modal.removeClass(\"fade\")\n this.$modal.modal(\"hide\")\n this.element.innerHTML = partial\n this.$modal.removeClass(\"fade\") // remove it again with the new partial\n } else {\n this.element.innerHTML = partial\n }\n\n this.stateManager.stateData.profileId = profileId\n this.stateManager.stateData.region = region\n this.stateManager.stateData.position = position\n \n this.stateManager.stateData.minimalSaveOperation = true\n this.$modal.modal(\"show\")\n\n this.$modal.one(\"hidden.bs.modal\", this.hideCallback.bind(this))\n\n setTimeout(() => this.$modal.addClass(\"fade\"), 500)\n\n this.autosaveTimer = setInterval(() => {\n this.autosave()\n }, 2000)\n }\n\n handleStateChange() {\n // not currently used\n }\n\n get isEditingTab() {\n return this.stateManager.current == \"text\" || this.stateManager.current == \"edit_image\"\n }\n\n hideCallback() {\n (iframe => iframe.src = iframe.src)(document.querySelector(\"[data-tv-preview-target='preview']\"))\n }\n\n autosave() {\n if (this.stateManager.current == \"text\") {\n const newContent = this.element.querySelector(\"#tv_menu_block_content\").value\n if (newContent != this.stateManager.currentData.content) {\n this.element.querySelector(\"[data-form-submit]\").click()\n }\n this.stateManager.currentData.content = newContent\n }\n }\n\n startWithText() {\n this.stateManager.current = \"text\"\n this.stateManager.stateData.minimalSaveOperation = true\n }\n\n startWithImage() {\n this.element.querySelector(\"input[type='file']\").click()\n this.stateManager.stateData.minimalSaveOperation = false\n }\n\n saveUploadedImage() {\n this.element.querySelector(\"[data-image-submit]\").click()\n }\n\n saveForm(event) {\n event.preventDefault()\n const form = new FormData(event.target)\n\n form.append(\"profile_id\", this.stateManager.stateData.profileId)\n form.append(\"tv_menu_block[region]\", this.stateManager.stateData.region)\n form.append(\"tv_menu_block[position]\", this.stateManager.stateData.position)\n\n if (!this.stateManager.stateData.minimalSaveOperation) this.loading = true\n\n fetch(event.target.action, { method: event.target.method, body: form })\n .then(res => res.json())\n .then(json => {\n this.loading = false\n\n if (this.stateManager.stateData.minimalSaveOperation) {\n ;(iframe => iframe.src = iframe.src)(this.element.querySelector(\"iframe\"))\n\n if (!event.target.querySelector(\"[name='_method']\")) {\n this.element.querySelectorAll(\"form\").forEach(formEl => {\n const patchMethod = document.createElement(\"input\")\n patchMethod.type = \"hidden\"\n patchMethod.name = \"_method\"\n patchMethod.value = \"patch\"\n formEl.append(patchMethod)\n formEl.action = formEl.action + `/${json.id}`\n })\n this.stateManager.dataset.blockId = json.id\n }\n } else {\n this.openModal(this.stateManager.stateData.profileId, this.stateManager.stateData.region, this.stateManager.stateData.position)\n }\n })\n .catch(err => {\n console.error(err)\n this.loading = false\n })\n }\n\n async deleteBlock(id) {\n this.stateManager.stateData.minimalSaveOperation = false\n this.loading = true\n \n const baseUrl = this.stateManager.dataset.blocksUrl\n const url = `${baseUrl}/${id}`\n const authenticityToken = $(\"meta[name=csrf-token]\").prop(\"content\")\n const form = new FormData()\n form.append(\"authenticity_token\", authenticityToken)\n await fetch(url, { method: \"DELETE\", body: form })\n\n await this.openModal(this.stateManager.stateData.profileId, this.stateManager.stateData.region, this.stateManager.stateData.position)\n }\n\n async graphicToText(event) {\n await this.deleteBlock(this.stateManager.dataset.blockId)\n this.startWithText()\n }\n\n switchLeft(event) {\n event && event.preventDefault()\n this.openModal(this.stateManager.stateData.profileId, this.stateManager.stateData.region, \"left\")\n }\n\n switchCenter(event) {\n event && event.preventDefault()\n this.openModal(this.stateManager.stateData.profileId, this.stateManager.stateData.region, \"center\")\n }\n\n switchRight(event) {\n event && event.preventDefault()\n this.openModal(this.stateManager.stateData.profileId, this.stateManager.stateData.region, \"right\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"search\", \"breweryID\", \"error\", \"beerName\"]\n\n async connect() {\n let libraries = await AlgoliaSource.importLibraries()\n const producer = `producer_type = ${this.producerType}`\n this.algolia = new AlgoliaSource(libraries[0], \"Brewery\", producer)\n this.connected()\n }\n\n populate(id, name) {\n this.breweryIDTarget.value = id\n this.search.val(name)\n }\n\n showNewBreweryModal(eventOrShowMessage) {\n var showMessage = false\n if (eventOrShowMessage == true) {\n showMessage = true\n } else if (eventOrShowMessage) {\n eventOrShowMessage.preventDefault()\n }\n\n window.BeerMenus.controllers.breweryAutocompleteController = this\n this.algolia.index.clearCache()\n this.breweryIDTarget.value = null\n\n $(\"#new-beer\").modal(\"hide\")\n\n $.ajax(\"/breweries/new.js\", {\n data: {\n name: this.search.val(),\n producer_type: this.producerType,\n source: this.data.get(\"source\"),\n show_message: showMessage,\n },\n dataType: \"text\" // Don't evaluate response script, handle in showModal().\n }).done(this.showModal.bind(this))\n }\n\n // private\n\n connected() {\n this.suggestions = []\n this.search = $(this.searchTarget).autocomplete(this.options, this.dataset)\n .on(\"autocomplete:selected autocomplete:autocompleted\", this.selected.bind(this))\n .on(\"autocomplete:updated\", this.hideError.bind(this))\n .on(\"autocomplete:closed\", () => this.state = \"closed\")\n }\n\n selected(event, data) {\n if(data.cssClass == this.addNewBreweryClass) {\n this.state = \"new\"\n this.breweryIDTarget.value = null\n this.showNewBreweryModal()\n } else {\n this.state = \"existing\"\n this.breweryIDTarget.value = data.objectID\n\n // Check if short name is at the start of beer name and remove it if it is\n if (this.beerNameTarget.value.startsWith(data.short_name)) {\n this.beerNameTarget.value = this.beerNameTarget.value.replace(data.short_name, '').trim()\n }\n }\n }\n\n showModal(html) {\n BeerMenus.Modals.insert(html, \"#new-brewery\")\n BeerMenus.InputFocuser.focus(\"#new-brewery #brewery_name\")\n\n $(\"#new-brewery\").one(\"hidden.bs.modal\", () => {\n $(\"#new-beer\").modal()\n this.validateSelection()\n })\n }\n\n hideError() {\n if (this.hasErrorTarget) {\n this.errorTarget.classList.add(\"hidden\")\n }\n }\n\n validateSelection() {\n if (this.search.val() && !this.breweryIDTarget.value) {\n this.errorTarget.classList.remove(\"hidden\")\n }\n }\n\n source(query, callback) {\n this.algolia.source(query, (suggestions) => {\n this.suggestions = suggestions\n suggestions.push({\n name: `${this.producerName} not listed? Add it here`,\n cssClass: this.addNewBreweryClass,\n query: query\n })\n return callback(suggestions)\n })\n }\n\n displayKey(obj) {\n return obj.cssClass == this.addNewBreweryClass ? obj.query : obj.name\n }\n\n suggestion(hit) {\n return `

${hit.name}

`\n }\n\n get addNewBreweryClass() {\n return \"x-add-new-brewery\"\n }\n\n get options() {\n return {\n autoselect: true\n }\n }\n\n get dataset() {\n return {\n name: \"breweries\",\n source: this.source.bind(this),\n displayKey: this.displayKey.bind(this),\n templates: { suggestion: this.suggestion }\n }\n }\n\n get producerType() {\n return this.data.get(\"producer-type\")\n }\n\n get producerName() {\n return this.data.get(\"producer-name\")\n }\n\n set state(val) {\n if (val == \"closed\" && this._state != \"new\" && this._state != \"existing\") {\n if (this.search.val()) {\n const matchedSuggestion = this.matchedSuggestion\n if (matchedSuggestion) {\n this.search.val(matchedSuggestion.name)\n this.breweryIDTarget.value = matchedSuggestion.objectID\n } else {\n this.showNewBreweryModal(true)\n }\n }\n }\n this._state = val\n }\n\n get matchedSuggestion() {\n const query = this.search.val().toLowerCase()\n return this.suggestions.find(suggestion => {\n return suggestion.name.toLowerCase() === query\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"input\", \"result\", \"selection\"]\n\n async connect() {\n await this._importLibraries()\n\n let libraries = await AlgoliaSource.importLibraries()\n this.algolia = new AlgoliaSource(libraries[0], \"Brewery\", \"brewery\")\n this._initializeSelect2()\n this._selectBreweries()\n }\n\n async _importLibraries() {\n (await import(\"select2/dist/js/select2.full.js\")).default() // init the plugin\n }\n\n _initializeSelect2() {\n $(this.inputTarget).select2({\n ajax: {\n transport: this._transport.bind(this),\n data: this._data,\n processResults: this._processResults\n },\n escapeMarkup: this._escapeMarkup,\n minimumInputLength: 0,\n cache: false,\n templateResult: this._templateResult.bind(this),\n templateSelection: this._templateSelection.bind(this),\n multiple: true,\n language: this._language()\n })\n }\n\n _selectBreweries() {\n const input = $(this.inputTarget)\n\n if (this.data.get(\"breweries\")) {\n const breweries = JSON.parse(this.data.get(\"breweries\"))\n\n breweries.forEach(brewery => {\n const option = new Option(brewery.name, brewery.id, true, true)\n input.append(option).trigger(\"change\")\n })\n }\n\n input.trigger({type: \"select2:select\"})\n }\n\n _transport(params, success, failure) {\n let queryParams = params.data\n let query = queryParams.query\n delete queryParams.query\n this.algolia.index.search(query, queryParams).then(success, failure)\n }\n\n _data(params) {\n return {\n query: params.term,\n hitsPerPage: 10,\n page: (params.page || 1) - 1\n }\n }\n\n _processResults(data) {\n return {\n results: data.hits.map(hit => ({\n id: hit.objectID,\n text: hit.name\n })),\n pagination: {\n more: data.page + 1 < data.nbPages\n }\n }\n }\n\n _escapeMarkup(markup) {\n return markup\n }\n\n _templateResult(brewery) {\n const result = this.resultTarget.cloneNode(true)\n result.classList.remove(\"hidden\")\n result.querySelector(\".brewery-name\").textContent = brewery.text\n return result\n }\n\n _templateSelection(brewery) {\n const result = this.selectionTarget.cloneNode(true)\n result.classList.remove(\"hidden\")\n result.querySelector(\".brewery-name\").textContent = brewery.text\n return result\n }\n\n // https://github.com/select2/select2/blob/master/src/js/select2/i18n/en.js\n _language() {\n return {\n inputTooShort: function () {\n return \"Start typing brewery name...\";\n }\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"intersection\", \"container\", \"section\"]\n\n connect() {\n if (this.hasContainerTarget) {\n const observer = new IntersectionObserver(this.toggleBulkMove.bind(this))\n observer.observe(this.intersectionTarget)\n }\n }\n\n toggleBulkMove(entries) {\n const onScreen = entries[0].isIntersecting\n const scrolledPast = entries[0].boundingClientRect.y < 0\n const hide = !onScreen && !scrolledPast\n this.containerTarget.classList.toggle(\"hidden\", hide)\n }\n\n moveTo(event) {\n event.preventDefault()\n\n const servingIDs = this.servingIDs\n if (servingIDs.length) {\n const params = `ids[]=${servingIDs.join(\"&ids[]=\")}`\n $.ajax(`${event.currentTarget.href}?${params}`)\n .done(html => BeerMenus.Modals.insert(html))\n } else {\n alert(\"Oops, you didn't select anything.\")\n }\n }\n\n // private\n\n get servingIDs() {\n var servingIDs = []\n this.sectionTargets.forEach(section => {\n this.application\n .getControllerForElementAndIdentifier(section, \"select-all\")\n .checkboxTargets.forEach(checkbox => {\n if (checkbox.checked) {\n servingIDs.push(...checkbox.value.split(\",\"))\n }\n })\n })\n return servingIDs\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"input\", \"output\", \"views\", \"roi\" ]\n\n connect() {\n this.calculate()\n }\n\n calculate(event) {\n if (event && isNaN(parseInt(event.currentTarget.value))) {\n event.currentTarget.value = null\n return window.alert(\"Enter a number.\")\n }\n\n var output = this.conversion\n this.inputTargets.forEach(el => { output *= parseInt(el.value) })\n this.outputTarget.innerText = output.toFixed(2)\n\n this.viewsTargets.forEach((el, index) => {\n const views = parseInt(el.innerText)\n const roi = output * views\n this.roiTargets[index].innerText = `$${roi.toFixed(0)}`\n })\n }\n\n get conversion() {\n return parseFloat(this.data.get(\"conversion\"))\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n this._insertCss()\n this._insertScript()\n }\n\n _insertCss() {\n const calendlyCss = document.getElementById(\"calendly-css\")\n if (calendlyCss) {\n } else {\n const tag = document.createElement(\"link\")\n tag.id = \"calendly-css\"\n tag.rel = \"stylesheet\"\n tag.media = \"screen\"\n tag.href = \"https://assets.calendly.com/assets/external/widget.css\"\n document.head.appendChild(tag)\n }\n }\n\n _insertScript() {\n const calendlyScript = document.getElementById(\"calendly-js\")\n if (calendlyScript) {\n } else {\n const script = document.createElement(\"script\")\n script.src = \"https://assets.calendly.com/assets/external/widget.js\"\n script.id = \"calendly-js\"\n document.head.appendChild(script)\n }\n }\n\n click() {\n BeerMenus.Analytics.track(\"Clicked Schedule Call\", {\n \"Platform\": this.data.get(\"platform\"),\n \"Logged In\": this.data.get(\"loggedIn\"),\n \"Schedule Call Campaign\": this.data.get(\"campaign\"),\n })\n\n Calendly.showPopupWidget(this.data.get(\"url\"))\n\n $(\"#next-button\").text(\"Continue\")\n }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n async connect() {\n await Promise.all([\n import(\"chartkick\"),\n import(\"chart.js\")\n ])\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"primaryDisplay\", \"secondaryDisplay\", \"primary\", \"secondary\"]\n\n connect() {\n this.checkboxChanged()\n }\n\n checkboxChanged() {\n const primaryCount = this.primaryTargets.filter(cb => cb.checked).length\n this.primaryDisplayTarget.textContent = primaryCount\n\n // Only update secondary if it exists\n if (this.hasSecondaryDisplayTarget) {\n const secondaryCount = this.secondaryTargets.filter(cb => cb.checked).length\n this.secondaryDisplayTarget.textContent = secondaryCount\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"checkbox\", \"form\"]\n\n change(event) {\n this.formTarget.submit()\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"source\", \"hidden\" ]\n\n toggle(event) {\n this.hiddenTargets.forEach(target => {\n if (target.classList.contains(\"hidden\")) {\n target.classList.remove(\"hidden\")\n } else {\n target.classList.add(\"hidden\")\n }\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n async connect() {\n await Accordion.import()\n this.initializeAccordion()\n }\n\n // private\n\n initializeAccordion() {\n $(this.element).accordion({\n active: this.activeChecklistIndex,\n heightStyle: \"content\",\n collapsible: true,\n icons: {\n header: \"pure-icon pure-icon-angle-down\",\n activeHeader: \"pure-icon pure-icon-angle-up\"\n },\n beforeActivate: this.beforeActivate.bind(this),\n })\n }\n\n beforeActivate(event, ui) {\n const expandedIdentifier = ui.newHeader.data(\"identifier\")\n if (expandedIdentifier) { // don't update if closing the only expanded\n $.ajax({\n url: `/places/${this.barID}/menu/preferences/active_checklist`,\n method: \"POST\",\n data: {\n identifier: expandedIdentifier,\n },\n })\n }\n }\n\n get activeChecklistIndex() {\n return parseInt(this.data.get(\"active-checklist-index\")) || 0\n }\n\n get barID() {\n return this.data.get(\"bar-id\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"loading\", \"error\" ]\n\n connect() {\n this.fetchChecklists()\n }\n\n reload() {\n this.fetchChecklists()\n }\n\n // private\n\n fetchChecklists() {\n this.showError(false)\n\n $.ajax({\n url: `/places/${this.barID}/checklists/lists.js`,\n error: () => { this.showError(true) },\n })\n }\n\n showError(visible) {\n if (visible) {\n this.loadingTarget.classList.add(\"hidden\")\n this.errorTarget.classList.remove(\"hidden\")\n } else {\n this.loadingTarget.classList.remove(\"hidden\")\n this.errorTarget.classList.add(\"hidden\")\n }\n }\n\n get barID() {\n return this.data.get(\"bar-id\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"trigger\", \"card\", \"show\" ]\n\n expand(event) {\n event.preventDefault()\n\n if (this.cardTargets.length > 0) {\n this.cardTargets.forEach(t => {\n t.classList.remove(\"hidden\")\n t.classList.remove(\"collapsed-cards\")\n })\n }\n\n if (this.showTargets.length > 0) {\n this.showTargets.forEach(t => t.classList.remove(\"hidden\"))\n }\n\n if (this.triggerTargets.length > 0) {\n this.triggerTargets.forEach(t => t.classList.toggle(\"hidden\"))\n }\n }\n\n collapse(event) {\n if (this.showTargets.length > 0) {\n this.showTargets.forEach(t => t.classList.add(\"hidden\"))\n }\n\n if (this.triggerTargets.length > 0) {\n this.triggerTargets.forEach(t => t.classList.toggle(\"hidden\"))\n }\n\n if (this.cardTargets.length > 0) {\n this.cardTargets.forEach(target => {\n if (target.querySelector('input[type=radio]:checked')) {\n target.classList.add(\"collapsed-cards\")\n } else {\n target.classList.add(\"hidden\")\n }\n })\n }\n\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"source\", \"successMessage\"]\n static values = { source: String }\n\n copy(event) {\n event.preventDefault()\n navigator.clipboard.writeText(this.sourceValue).then(() => {\n this.showSuccessMessage()\n })\n }\n\n copyValue(event) {\n event.preventDefault()\n navigator.clipboard.writeText(this.sourceTarget.value).then(() => {\n this.showSuccessMessage()\n })\n }\n\n copyText(event) {\n event.preventDefault()\n navigator.clipboard.writeText(this.sourceTarget.innerText).then(() => {\n this.showSuccessMessage()\n })\n }\n\n showSuccessMessage() {\n if (this.hasSuccessMessageTarget) {\n // Remove the 'fade-out' class if it exists to reset the animation\n this.successMessageTarget.classList.remove(\"fade-out\");\n\n // Force a reflow to reset the animation (by accessing offsetWidth)\n void this.successMessageTarget.offsetWidth;\n\n // Add the 'fade-out' class to start the animation again\n this.successMessageTarget.classList.remove(\"hidden\");\n this.successMessageTarget.classList.add(\"fade-out\");\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n // technique pulled from Stimulus Dialog\n close() {\n this.element.setAttribute(\"closing\", \"\")\n\n Promise.all(this.element.getAnimations().map((animation) => animation.finished)).then(() => {\n this.element.remove()\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"editor\", \"field\", \"defaultCSS\", \"alternateCSS\" ]\n\n async connect() {\n await import(\"../models/codemirror-editor.js\")\n\n this.editorTarget.addEventListener(\"cme-change\", (event) => {\n this.fieldTarget.value = event.detail\n })\n }\n\n reset(event) {\n event.preventDefault()\n this.editorTarget.value = this.defaultCSSTarget.innerText\n }\n\n resetAlternate(event) {\n event.preventDefault()\n this.editorTarget.value = this.alternateCSSTarget.innerText\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"collapsed\", \"expanded\", \"arrowToggle\" ]\n\n toggle(event) {\n event.preventDefault()\n this.collapsedTarget.classList.toggle(\"hidden\")\n this.expandedTarget.classList.toggle(\"hidden\")\n this.isExpanded = this.collapsedTarget.classList.contains(\"hidden\")\n this.setLocationHash(event.currentTarget.href)\n\n if (this.hasArrowToggleTarget) {\n this.arrowToggleTarget.classList.toggle(\"pure-icon-angle-down\")\n this.arrowToggleTarget.classList.toggle(\"pure-icon-angle-right\")\n }\n }\n\n expand(event) {\n event.preventDefault()\n this.collapsedTarget.classList.toggle(\"hidden\", true)\n this.expandedTarget.classList.toggle(\"hidden\", false)\n this.isExpanded = true\n this.setLocationHash(event.currentTarget.href)\n this.scrollToElement(this.expandedTarget)\n }\n\n setLocationHash(href) {\n if (href) {\n const [hash] = href.split(\"#\").slice(-1)\n if (hash != \"\") {\n window.location.hash = hash\n }\n }\n }\n\n scrollToElement(element) {\n $(\"html, body\").animate({ scrollTop: element.offsetTop - 16 }, \"slow\")\n }\n\n set isExpanded(expanded) {\n var data = {}\n data[this.data.get(\"key\")] = expanded\n\n $.ajax({\n url: `/places/${this.barID}/menu/preferences`,\n method: \"PATCH\",\n data: { expanded_collapsibles: data },\n })\n }\n\n get key() {\n return this.data.get(\"key\")\n }\n\n get barID() {\n return this.data.get(\"bar-id\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"content\", \"arrow\" ]\n\n connect() {\n this.arrowTarget.addEventListener(\"click\", (e) => {\n e.preventDefault()\n this.toggleContent()\n })\n }\n\n // private\n\n toggleContent() {\n this.contentTarget.classList.toggle(\"closed\")\n this.arrowTarget.classList.toggle(\"rotate-90\")\n }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"selectedItems\", \"modal\", \"item\", \"itemName\" ]\n\n connect() {\n this.toggle()\n }\n\n showModal() {\n $(this.modalTarget).modal()\n }\n\n toggle() {\n const itemNames = this.itemNameTargets.map(target => target.innerText)\n const selectedItems = itemNames.filter((name, index) => {\n return this.itemTargets[index].checked\n })\n\n if (selectedItems.length == 0) {\n this.selectedItemsTarget.innerHTML = \"(nothing selected)\"\n } else {\n this.selectedItemsTarget.innerHTML = selectedItems.join(\"
\")\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"source\", \"receiver\" ]\n\n toggle(event) {\n if (this.receiverTargets.length > 0) {\n var sourceID = event.currentTarget.value\n\n this.receiverTargets.forEach(t => {\n if (sourceID == t.dataset.sourceid) {\n t.classList.remove(\"hidden\")\n t.disabled = false\n } else {\n t.classList.add(\"hidden\")\n t.disabled = true\n }\n })\n }\n\n }\n}\n", "import ProductAutocompleteController from \"./product-autocomplete-controller\"\n\nexport default class extends ProductAutocompleteController {\n static targets = [\"search\", \"beerID\", \"description\", \"price\", \"template\", \"submit\"]\n\n async connect() {\n let libraries = await AlgoliaSource.importLibraries()\n const bar = `bar_id = ${this.barID}`\n const product = `product_type = ${this.productType}`\n this.algolia = new AlgoliaSource(libraries[0], \"Beer\", `${bar} AND ${product}`)\n this.connected()\n }\n\n // private\n\n connected() {\n this.initializeSearch()\n this.searchTarget.nextSibling.focus()\n\n super.connect()\n }\n\n initializeSearch() {\n this.search = $(this.searchTarget).autocomplete(this.options, this.dataset)\n\n this.search\n .on(\"autocomplete:selected autocomplete:autocompleted\", (event, data) => {\n this.state = \"existing\"\n this.setHiddenField(data.objectID)\n this.fetchDescription(data.objectID)\n this.priceTarget.focus()\n })\n .on(\"autocomplete:closed\", () => { this.state = \"closed\" })\n }\n\n setHiddenField(id) {\n if (this.hasBeerIDTarget && id) {\n this.beerIDTarget.value = id\n }\n }\n\n fetchDescription(id) {\n this.submitTarget.disabled = true\n\n $.ajax(`/places/${this.barID}/beer_descriptions/${id}`)\n .done((data) => { this.descriptionTarget.value = data })\n .always(() => this.submitTarget.disabled = false )\n }\n\n source(query, callback) {\n return this.algolia.source({ query: query, hitsPerPage: this.limit })\n }\n\n suggestion(hit) {\n return new BeerAutocompleteSuggestion(this.templateTarget).build(hit)\n }\n\n set state(val) {\n this._state = val\n }\n\n get dataset() {\n return {\n source: this.algolia.source.bind(this),\n name: \"beers\",\n displayKey: (suggestion) => { return suggestion.name },\n templates: { suggestion: this.suggestion.bind(this) },\n }\n }\n\n get options() {\n return {\n autoselect: true,\n cache: false\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"date\", \"time\" ]\n\n async connect() {\n let libraries = await Promise.all([\n import(\"jquery-ui/ui/widgets/datepicker\"),\n import(\"timepicker\")\n ])\n\n this.initializeDate()\n this.initializeTime()\n }\n\n // private\n\n initializeDate() {\n if (this.hasDateTarget) {\n let options = { dateFormat: \"yy-mm-dd\" }\n if (this.data.has(\"min-date\")) {\n options.minDate = this.data.get(\"min-date\")\n }\n $(this.dateTarget).datepicker(options)\n }\n }\n\n initializeTime() {\n if (this.hasTimeTarget) {\n $(this.timeTarget).timepicker({\n timeFormat: \"h:i A\",\n })\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n import(\"actioncable\").then(ActionCable => {\n window.App || (window.App = {})\n window.App.cable = ActionCable.default.createConsumer()\n\n window.App.cable.subscriptions.create(\"DigitalDisplayChannel\", {\n connected: function() {},\n disconnected: function() {},\n rejected: function() {},\n received: function(data) {\n window.tvMenuLoader && window.tvMenuLoader.clearScreens()\n }\n })\n })\n }\n}\n", "/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n", "/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n", "/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n", "/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n", "/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n", "/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n", "/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n\n}));\n", "/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n // universal module definition\n\n /*global define: false, module: false, require: false */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.imagesLoaded = factory(\n window,\n window.EvEmitter\n );\n }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// -------------------------- factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n'use strict';\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n var queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = extend( {}, this.options );\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n extend( this.options, options );\n }\n\n if ( onAlways ) {\n this.on( 'always', onAlways );\n }\n\n this.getImages();\n\n if ( $ ) {\n // add jQuery Deferred object\n this.jqDeferred = new $.Deferred();\n }\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName == 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n var nodeType = elem.nodeType;\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n return;\n }\n var childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( var i=0; i < childImgs.length; i++ ) {\n var img = childImgs[i];\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n var children = elem.querySelectorAll( this.options.background );\n for ( i=0; i < children.length; i++ ) {\n var child = children[i];\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nvar elementNodeTypes = {\n 1: true,\n 9: true,\n 11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n return;\n }\n // get url inside url(\"...\")\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n var matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n var url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n var loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n var background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n var _this = this;\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n function onProgress( image, elem, message ) {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( function() {\n _this.progress( image, elem, message );\n });\n }\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount == this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( 'progress: ' + message, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n var isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) {\n return;\n }\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, callback ) {\n var instance = new ImagesLoaded( this, options, callback );\n return instance.jqDeferred.promise( $(this) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"theme\", \"color\", \"setting\", \"filterable\" ]\n\n async connect() {\n\n var Masonry = require('masonry-layout')\n var imagesLoaded = require('imagesloaded')\n\n self.msnry = new Masonry( '.grid', {\n itemSelector: '.grid-item',\n columnWidth: '.grid-sizer',\n percentPosition: true\n })\n\n $('.grid').imagesLoaded().progress( function() {\n self.msnry.layout()\n })\n }\n\n change(event) {\n var activeThemes = []\n var activeSettings = []\n var colorSetting = \"\"\n\n this.themeTargets.forEach((el, i) => {\n if (el.checked) { activeThemes.push(el.value) }\n })\n\n this.settingTargets.forEach((el, i) => {\n if (el.checked) { activeSettings.push(el.value) }\n })\n\n this.colorTargets.forEach((el, i) => {\n if (el.checked) { colorSetting = el.value }\n })\n\n this.filterableTargets.forEach((el, i) => {\n let filterValues = el.getAttribute(\"data-filter-values\")\n\n let activeTheme = activeThemes.length == 0 || activeThemes.some(r=> filterValues.includes(r))\n let activeSetting = activeSettings.length == 0 || activeSettings.some(r=> filterValues.includes(r))\n let activeColor = colorSetting == el.getAttribute(\"data-has-color\")\n\n if (activeTheme && activeSetting && activeColor) {\n el.classList.remove(\"hidden\")\n } else {\n el.classList.add(\"hidden\")\n }\n })\n self.msnry.layout()\n }\n\n layout(event) {\n self.msnry.layout()\n }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n async connect() {\n if (!window.Browser.isIE()) {\n (await import(\"select2/dist/js/select2.full.js\")).default() // init the plugin\n this.initializeSelect2()\n }\n }\n\n // private\n\n initializeSelect2() {\n $(this.element).select2({\n minimumResultsForSearch: Infinity,\n templateResult: (data, container) => {\n container.style.fontFamily = data.text\n return data.text\n },\n templateSelection: (state) => {\n return $(`${state.text}`)\n }\n }).on(\"select2:select\", () => {\n const event = new CustomEvent(\"customFont:selected\", { bubbles: true })\n this.element.dispatchEvent(event)\n }).on(\"select2:open\", () => {\n // We need this for when the user selects the same exact option\n setTimeout(() => {\n document.querySelector(\".select2-results__option[aria-selected=true]\").addEventListener(\"mouseup\", () => {\n const event = new CustomEvent(\"customFont:selected\", { bubbles: true })\n this.element.dispatchEvent(event)\n })\n })\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"name\", \"googlePlaceID\", \"website\", \"phoneNumber\", \"types\", \"template\", \"footer\" ]\n\n async initializedGoogleMaps(event) {\n if (event) {\n (await import(\"../vendor/autocomplete.jquery.js\")).default\n\n const emptyDiv = document.createElement(\"div\")\n this.placeService = new google.maps.places.PlacesService(emptyDiv)\n\n const sessionToken = new google.maps.places.AutocompleteSessionToken();\n this.autocompleteService = new google.maps.places.AutocompleteService()\n\n $(this.nameTarget).autocomplete({ autoselect: true }, {\n source: this.source.bind(this),\n displayKey: this.displayKey.bind(this),\n templates: {\n suggestion: this.suggestion.bind(this),\n footer: this.footer.bind(this),\n },\n })\n .on(\"autocomplete:selected autocomplete:autocompleted\",\n this.autocompleted.bind(this))\n .focus()\n }\n\n // ignore 'enter' key presses\n document.onkeypress = (e) => { return e.keyCode != 13 }\n }\n\n // private\n\n source(query, callback) {\n const options = {\n input: query,\n types: [\"establishment\"],\n sessionToken: this.sessionToken,\n }\n this.autocompleteService.getPlacePredictions(options, (predictions, status) => {\n callback(predictions)\n })\n }\n\n displayKey(hit) {\n return hit.structured_formatting.main_text\n }\n\n suggestion(hit) {\n const template = this.templateTarget.cloneNode(true)\n template.classList.remove(\"hidden\")\n\n const info = hit.structured_formatting\n template.querySelector(\"[data-ref='name']\").textContent = info.main_text\n template.querySelector(\"[data-ref='details']\").textContent = info.secondary_text\n\n return template\n }\n\n footer() {\n const footer = this.footerTarget.cloneNode(true)\n footer.classList.remove(\"hidden\")\n return footer\n }\n\n autocompleted(event, data) {\n const request = {\n placeId: data.place_id,\n fields: this.fields,\n sessionToken: this.sessionToken,\n }\n this.placeService.getDetails(request, (place, status) => {\n this.populateForm(place)\n this.resetSessionToken()\n })\n }\n\n populateForm(place) {\n this.googlePlaceIDTarget.value = place.place_id\n this.websiteTarget.value = place.website || \"\"\n this.phoneNumberTarget.value = place.international_phone_number || \"\"\n this.typesTarget.value = place.types || \"\"\n\n const addressService = new window.AddressService()\n addressService.populateFormFields(place, true)\n }\n\n resetSessionToken() {\n this._sessionToken = undefined\n }\n\n get sessionToken() {\n if (this._sessionToken === undefined) {\n this._sessionToken = new google.maps.places.AutocompleteSessionToken()\n }\n return this._sessionToken\n }\n\n get fields() {\n return [\n \"name\",\n \"place_id\",\n \"geometry\",\n \"address_components\",\n \"formatted_address\",\n \"type\",\n \"website\",\n \"international_phone_number\",\n ]\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"button\", \"menu\", \"links\"]\n\n connect() {\n this.buttonTarget.addEventListener(\"click\", (e) => {\n e.preventDefault()\n this.toggleMenu()\n })\n\n this.linksTarget.querySelectorAll(\"a\").forEach(link => {\n link.addEventListener(\"click\", this.toggleMenu.bind(this))\n })\n }\n\n // private\n\n toggleMenu() {\n this.buttonTarget.classList.toggle(\"lp-burger-open\")\n this.menuTarget.classList.toggle(\"lp-burger-open\")\n }\n}\n", "// https://css-tricks.com/styling-based-on-scroll-position/\nexport default class Debouncer {\n static debounce(fn) {\n let frame\n\n return (...params) => {\n if (frame) {\n cancelAnimationFrame(frame)\n }\n\n frame = requestAnimationFrame(() => {\n fn(...params)\n })\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Debouncer from \"../models/debouncer\"\n\nexport default class extends Controller {\n connect() {\n this.lastScrollTop = window.pageYOffset\n this.headerHeight = this.element.offsetHeight\n\n document.addEventListener(\"scroll\",\n Debouncer.debounce(this.hasScrolled.bind(this)),\n { passive: true }\n )\n }\n\n // private\n\n hasScrolled() {\n const scrollTop = window.pageYOffset\n\n if (Math.abs(this.lastScrollTop - scrollTop) > this.delta) {\n if (scrollTop > this.lastScrollTop && scrollTop > this.headerHeight) {\n this.element.classList.remove(\"nav-down\")\n this.element.classList.add(\"nav-up\")\n } else {\n if (scrollTop + window.innerHeight < document.documentElement.scrollHeight) {\n this.element.classList.remove(\"nav-up\")\n this.element.classList.add(\"nav-down\")\n }\n }\n\n this.lastScrollTop = scrollTop\n }\n }\n\n get delta() {\n return 5\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n if (process.env.JAVASCRIPT_ERROR_REPORTING == \"1\") {\n this.initializeHoneybadger()\n }\n }\n\n // private\n\n initializeHoneybadger() {\n import(\"honeybadger-js\").then(Honeybadger => {\n Honeybadger.default.configure({\n apiKey: process.env.HONEYBADGER_API_KEY,\n environment: process.env.NODE_ENV,\n revision: __COMMIT_HASH__\n })\n\n if (this.data.get(\"user-id\")) {\n Honeybadger.default.setContext({\n user_id: this.data.get(\"user-id\"),\n user_email: this.data.get(\"user-email\")\n })\n }\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n get modalController() {\n return this.element.closest(\"[data-controller='block-modal']\").controller\n }\n\n process() {\n this.modalController.loading = true\n\n const form = new FormData()\n form.append('authenticity_token', $(\"meta[name=csrf-token]\").prop(\"content\"))\n\n fetch(this.data.get(\"endpoint\"), { method: \"POST\", body: form })\n .then(res => res.json())\n .then(json => {\n this.modalController.loading = false\n\n ;(iframe => iframe.src = iframe.src)(this.element.closest(\"bmu-state-manager\").querySelector(\"iframe\"))\n ;(iframe => iframe.src = iframe.src)(document.querySelector(\"[data-tv-preview-target='preview']\"))\n })\n .catch(err => {\n this.modalController.loading = false\n console.error(err)\n })\n }\n}\n", "/**\n * Creates a `` tag with a blob based on incoming CSS code,\n * then injects into ``.\n * \n * @param {string} css\n */\nexport default function(css) {\n var blob = new Blob([css], {type: \"text/css\"})\n var link = document.createElement(\"link\")\n link.rel = \"stylesheet\"\n link.href = URL.createObjectURL(blob)\n document.head.appendChild(link)\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nimport loadStyles from \"../lib/load-styles.js\"\n\nexport default class extends Controller {\n static targets = [ \"editor\", \"activationButtons\", \"editingButtons\" ]\n\n async connect() {\n const pintura = await import(\"../vendor/pintura/pintura.js\")\n const pinturaStyles = (await import(\"../../styles/vendor/pintura.css.js\")).default\n loadStyles(pinturaStyles)\n\n this.pintura = pintura\n }\n\n get modalController() {\n return this.element.closest(\"[data-controller='block-modal']\").controller\n }\n\n activate(event) {\n this.modalController.nonImageElementsHidden = true\n this.editorTarget.classList.add(\"opened\")\n this.pintura.setPlugins(this.pintura.plugin_crop, this.pintura.plugin_finetune, this.pintura.plugin_filter)\n this.editor = this.pintura.appendEditor(this.editorTarget, {\n src: this.data.get(\"imageUrl\"),\n imageReader: this.pintura.createDefaultImageReader(),\n imageWriter: this.pintura.createDefaultImageWriter(),\n filterFunctions: {\n invert: this.pintura.filterInvert,\n ...this.pintura.plugin_filter_defaults.filterFunctions\n },\n filterOptions: [\n ['Default', [[undefined, (locale) => locale.labelDefault]]],\n ['Invert', [[\"invert\", \"Invert\"]]],\n [\n 'Classic',\n [\n ['chrome', (locale) => locale.filterLabelChrome],\n ['fade', (locale) => locale.filterLabelFade],\n ['cold', (locale) => locale.filterLabelCold],\n ['warm', (locale) => locale.filterLabelWarm],\n ['pastel', (locale) => locale.filterLabelPastel],\n ],\n ],\n [\n 'Monochrome',\n [\n ['monoDefault', (locale) => locale.filterLabelMonoDefault],\n ['monoNoir', (locale) => locale.filterLabelMonoNoir],\n ['monoStark', (locale) => locale.filterLabelMonoStark],\n ['monoWash', (locale) => locale.filterLabelMonoWash],\n ],\n ],\n [\n 'Sepia',\n [\n ['sepiaDefault', (locale) => locale.filterLabelSepiaDefault],\n ['sepiaRust', (locale) => locale.filterLabelSepiaRust],\n ['sepiaBlues', (locale) => locale.filterLabelSepiaBlues],\n ['sepiaColor', (locale) => locale.filterLabelSepiaColor],\n ],\n ],\n ],\n ...this.pintura.plugin_finetune_defaults,\n locale: {\n ...this.pintura.locale_en_gb,\n ...this.pintura.plugin_crop_locale_en_gb,\n ...this.pintura.plugin_finetune_locale_en_gb,\n ...this.pintura.plugin_filter_locale_en_gb,\n },\n\n enableButtonExport: false\n })\n\n this.activationButtonsTarget.style.display = \"none\"\n this.editingButtonsTarget.style.display = \"block\"\n }\n\n async finish() {\n this.modalController.loading = true\n\n const result = await this.editor.processImage()\n\n const form = new FormData()\n form.append('uploaded_image', result.dest);\n form.append('authenticity_token', $(\"meta[name=csrf-token]\").prop(\"content\"))\n\n fetch(this.data.get(\"endpoint\"), { method: \"PUT\", body: form })\n .then(res => res.json())\n .then(json => {\n this.modalController.loading = false\n\n ;(iframe => iframe.src = iframe.src)(this.element.closest(\"bmu-state-manager\").querySelector(\"iframe\"))\n ;(iframe => iframe.src = iframe.src)(document.querySelector(\"[data-tv-preview-target='preview']\"))\n })\n .catch(err => {\n this.modalController.loading = false\n console.error(err)\n })\n\n this.editorTarget.classList.remove(\"opened\")\n this.editor.destroy()\n\n this.modalController.nonImageElementsHidden = false\n this.activationButtonsTarget.style.display = \"block\"\n this.editingButtonsTarget.style.display = \"none\"\n }\n\n cancel(event) {\n event.preventDefault()\n\n this.editorTarget.classList.remove(\"opened\")\n this.editor.destroy()\n\n this.modalController.nonImageElementsHidden = false\n this.activationButtonsTarget.style.display = \"block\"\n this.editingButtonsTarget.style.display = \"none\"\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"form\", \"latitude\", \"longitude\", \"name\", \"input\" ]\n\n connect() {\n if (!document.getElementById(\"mapkit-script\")) {\n new Promise(resolve => {\n const element = document.createElement(\"script\")\n element.id = \"mapkit-script\"\n element.addEventListener(\"load\", resolve, { once : true })\n element.src = \"https://cdn.apple-mapkit.com/mk/5.0.x/mapkit.js\"\n document.head.appendChild(element)\n }).then(() => {\n mapkit.init({\n language: \"en\",\n authorizationCallback: this.authorizationCallback,\n })\n \n mapkit.addEventListener(\"error\", this.mapkitError.bind(this))\n\n this.initializeAutocomplete()\n })\n } else {\n this.initializeAutocomplete()\n }\n }\n\n reset() {\n this.latitudeTarget.value = \"\"\n this.longitudeTarget.value = \"\"\n this.nameTarget.value = \"\"\n }\n\n submit(event) {\n event.preventDefault()\n\n if (this.nameTarget.value || this.error) {\n $.rails.disableFormElement($(event.currentTarget))\n $.rails.fire($(this.formTarget), \"submit\")\n } else {\n $(this.inputTargets).autocomplete(\"open\")\n BeerMenus.Messages.setError(\"Whoops, please select a suggested location.\")\n }\n }\n\n // private\n\n async initializeAutocomplete() {\n (await import(\"../vendor/autocomplete.jquery.js\")).default // init the plugin\n\n $(this.inputTarget).autocomplete({ autoselect: true }, [{\n source: this.source.bind(this),\n templates: { suggestion: this.suggestion.bind(this) },\n displayKey: this.displayKey.bind(this),\n debounce: 200,\n }]).on(\"autocomplete:selected autocomplete:autocompleted\", (event, data) => {\n this.populateForm(data)\n }).on(\"autocomplete:opened\", () => {\n this.reset()\n })\n }\n\n authorizationCallback(done) {\n $.ajax({ url: \"/api/internal/tokens\",\n type: \"POST\",\n success: (response) => {\n done(response)\n },\n })\n }\n\n source(query, callback) {\n this.search.autocomplete(query, (error, data) => {\n if (error) {\n if (!this.error) {\n BeerMenus.Analytics.track(\"Over MapKit API Limit\")\n }\n this.error = error\n } else {\n const results = data.results.filter(result => {\n const lines = result.displayLines.join(\" \").toLowerCase()\n return !lines.includes(\"search nearby\")\n })\n callback(results)\n }\n })\n }\n\n suggestion(hit) {\n return `

${this.displayKey(hit)}

`\n }\n\n displayKey(obj) {\n return obj.displayLines.join(\", \")\n }\n\n populateForm(result) {\n this.latitudeTarget.value = result.coordinate.latitude\n this.longitudeTarget.value = result.coordinate.longitude\n this.nameTarget.value = result.displayLines.join(\", \")\n }\n\n mapkitError(event) {\n var message = null\n switch (event.status) {\n case \"Unauthorized\":\n message = \"MapKit JS unauthorized.\"\n break\n case \"Too Many Requests\":\n message = \"MapKit JS over daily request limit.\"\n break\n }\n\n if (message != null) {\n $.ajax({\n method: \"POST\",\n url: \"/api/internal/logs\",\n data: { message: `[MapKit] ${message}` },\n })\n }\n }\n\n get search() {\n if (this._search == undefined) {\n this._search = new mapkit.Search\n }\n return this._search\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"container\"]\n\n async connect() {\n\n var Masonry = require('masonry-layout')\n var imagesLoaded = require('imagesloaded')\n var container = this.containerTarget\n\n self.msnry = new Masonry(container, {\n itemSelector: '.grid-item',\n columnWidth: '.grid-sizer',\n percentPosition: true\n })\n\n $(container).imagesLoaded().progress( function() {\n self.msnry.layout()\n })\n\n }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"loading\", \"content\", \"error\"]\n\n connect() {\n window.BeerMenus.controllers.menuController = this\n this.loadMenu()\n }\n\n refresh() {\n this.loadMenu()\n }\n\n // private\n\n loadMenu() {\n this.show(this.loadingTarget)\n\n $.ajax(`/places/${this.data.get(\"bar-id\")}/menu`)\n .done((html) => {\n this.show(this.contentTarget)\n this.contentTarget.innerHTML = html\n })\n .fail(() => this.show(this.errorTarget))\n }\n\n show(target) {\n [this.loadingTarget, this.contentTarget, this.errorTarget]\n .forEach((t) => t.classList.add(\"hidden\"))\n target.classList.remove(\"hidden\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"search\", \"beerTemplate\", \"servingTemplate\", \"modal\" ]\n\n connect() {\n if (this.searchTarget.getAttribute(\"aria-hidden\") == \"true\") { return }\n\n $(this.searchTarget).one(\"focus\",\n this.fetchServingsAndInitializeSearch.bind(this))\n }\n\n teardown() {\n this.search.autocomplete(\"destroy\")\n }\n\n showModal() {\n if (this.hasModalTarget) {\n $(this.modalTarget).modal()\n window.scrollTo(0, 0)\n $(this.searchTargets).focus()\n }\n }\n\n closeModal() {\n $(this.searchTargets).autocomplete(\"val\", \"\")\n\n if (this.hasModalTarget) {\n $(this.modalTarget).modal(\"hide\")\n }\n }\n\n // private\n\n fetchServingsAndInitializeSearch() {\n Promise.all([\n $.ajax(`/places/${this.barID}/menu/search.json?buy=${this.buyingEnabled}&edit=${this.isEdit}`),\n AlgoliaSource.importLibraries()\n ]).then(promises => {\n this.servings = promises[0]\n this.initializeAlgolia(promises[1][0])\n this.initializeSearch()\n $(this.searchTargets).focus()\n })\n }\n\n initializeAlgolia(algoliasearch) {\n const filters = Object.keys(this.servings)\n .map(id => `objectID:${id}`).join(\" OR \")\n this.baseSource = new AlgoliaSource(algoliasearch, \"Beer\", filters).source\n }\n\n initializeSearch() {\n this.search = $(this.searchTarget).autocomplete(this.options, this.dataset)\n .on(\"autocomplete:opened\", this.opened.bind(this))\n .on(\"autocomplete:selected autocomplete:autocompleted\", this.selected.bind(this))\n }\n\n opened(event) {\n if (!isNaN(this.scrollOffset)) {\n const offset = $(event.currentTarget).offset().top - this.scrollOffset\n $(\"html, body\").animate({ scrollTop: offset }, \"slow\")\n }\n }\n\n selected(event, suggestion) {\n this.closeModal()\n\n if (this.buyingEnabled) {\n $.ajax(this.buyPath(suggestion))\n } else if (this.isEdit) {\n Turbo.visit(this.editPath(suggestion), { frame: `serving_${suggestion.servings[0].id}` })\n } else {\n if (typeof(Turbolinks) == \"object\") {\n Turbolinks.visit(suggestion.path)\n } else {\n location.href = suggestion.path\n }\n }\n }\n\n source(query, callback) {\n this.baseSource(query, (suggestions) => {\n const servings = suggestions.map(suggestion => {\n const servings = this.servings[suggestion.objectID]\n suggestion.servings = servings\n return suggestion\n })\n return callback(servings)\n })\n }\n\n suggestion(hit) {\n const beerTemplate = this.beerTemplateTarget.cloneNode(true)\n beerTemplate.classList.remove(\"hidden\")\n beerTemplate.querySelector(\"[data-ref='name']\").textContent = hit.name\n\n const meta = new BeerMetadata(hit).toString()\n beerTemplate.querySelector(\"[data-ref='meta']\").textContent = meta\n\n hit.servings.forEach(serving => {\n const servingTemplate = this.servingTemplateTarget.cloneNode(true)\n servingTemplate.classList.remove(\"hidden\")\n servingTemplate.querySelector(\"[data-ref='availability']\").classList.add(serving.availability)\n servingTemplate.querySelector(\"[data-ref='details']\").textContent = serving.details\n beerTemplate.querySelector(\"[data-ref='servings']\").appendChild(servingTemplate)\n })\n\n const editButton = beerTemplate.querySelector(\"[data-ref='edit']\")\n if (editButton) {\n editButton.addEventListener(\"click\", (e) => e.preventDefault())\n }\n\n return beerTemplate\n }\n\n editPath(hit) {\n const servingID = hit.servings[0].id\n return `/servings/${servingID}/choose?bar_id=${this.barID}`\n }\n\n buyPath(hit) {\n const beerID = hit.objectID\n return `/places/${this.barID}/buy/?beer_id=${beerID}&cart_id=${this.cartID}&edit_order=${this.editOrder}`\n }\n\n get options() {\n return {\n autoselect: true,\n openOnFocus: true,\n clearOnSelected: true,\n debug: false,\n cssClasses: {\n prefix: \"menu-search\",\n cursor: \"cursor\",\n },\n }\n }\n\n get dataset() {\n return {\n source: this.source.bind(this),\n name: \"beers\",\n displayKey: (suggestion) => { return suggestion.name },\n templates: { suggestion: this.suggestion.bind(this) },\n }\n }\n\n get barID() {\n return this.data.get(\"bar-id\")\n }\n\n get cartID() {\n return this.data.get(\"cart-id\")\n }\n\n get scrollOffset() {\n return parseInt(this.data.get(\"scroll-offset\"))\n }\n\n get buyingEnabled() {\n return this.data.get(\"buying-enabled\") == \"true\"\n }\n\n get editOrder() {\n return this.data.get(\"edit-order\") == \"true\"\n }\n\n get isEdit() {\n return this.data.get(\"is-edit\") == \"true\"\n }\n\n get editMenuVersion() {\n return this.data.get(\"edit-menu-version\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n showNewSectionModal(event) {\n event.preventDefault()\n\n $(\"#menu-sections\").modal(\"hide\")\n MenuSections.showNewSectionModal(this.data.get(\"product-type\"))\n }\n}\n", "import { Controller} from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"menuSection\", \"servingType\", \"error\"]\n\n sectionChanged(event) {\n let selectedOption = null\n if (event.currentTarget.selectedOptions) {\n selectedOption = event.currentTarget.selectedOptions[0]\n } else {\n // IE 11\n selectedOption = event.currentTarget.options[event.currentTarget.selectedIndex]\n }\n\n if (selectedOption.dataset[\"type\"] == \"create\") {\n this.showNewSectionModal()\n }\n\n this.clearError()\n }\n\n servingTypeChanged(event) {\n this.selectMenuSection(event.currentTarget.value)\n }\n\n newSection(event) {\n event.preventDefault()\n this.showNewSectionModal()\n }\n\n // private\n\n showNewSectionModal() {\n MenuSections.showNewSectionModal(this.data.get(\"product-type\"))\n\n document.querySelector(\"#new-menu-section button\")\n .addEventListener(\"click\", (e) => {\n this.selectMenuSection(this.servingTypeTarget.value)\n })\n }\n\n selectMenuSection(servingType) {\n if (this.globalMenuSectionSelected) {\n const servingTypeInt = parseInt(servingType)\n for (let [sectionID, servingTypes] of Object.entries(this.sectionIDs)) {\n if (servingTypes.includes(servingTypeInt)) {\n this.menuSectionTarget.value = sectionID\n }\n }\n }\n }\n\n clearError() {\n if (this.hasErrorTarget) {\n this.errorTarget.remove()\n }\n }\n\n get globalMenuSectionSelected() {\n const selectedMenuSectionID = parseInt(this.menuSectionTarget.value)\n return this.globalSectionIDs.includes(selectedMenuSectionID)\n }\n\n get sectionIDs() {\n if (this._sectionIDs === undefined) {\n this._sectionIDs = JSON.parse(this.data.get(\"section-ids\"))\n }\n return this._sectionIDs\n }\n\n get globalSectionIDs() {\n if (this._globalSectionIDs === undefined) {\n this._globalSectionIDs = JSON.parse(this.data.get(\"global-section-ids\"))\n }\n return this._globalSectionIDs\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport const MAX_MONTHLY_PRICE = 99\nexport const MAX_ANNUAL_PRICE = 599\nexport const MAX_ANNUAL_SAVINGS = 589\n\nexport default class extends Controller {\n static targets = [ \"option\", \"monthly\", \"annual\", \"plans\", \"names\",\n \"monthlyPrice\", \"annualPrice\", \"annualSavings\", \"modalPlanNames\",\n \"modalPrice\", \"modalSavings\", \"modalAllInclusivePrice\", \"mobile\",\n ]\n\n connect() {\n this.allInclusiveOption = this.optionTargets.shift()\n this.updateContent()\n }\n\n toggle(event) {\n $(event.target).closest(\".modular-checkbox\").toggleClass(\"checked\")\n\n if (event.target == this.allInclusiveOption && event.target.checked) {\n this.selectOnlyAllInclusive(false)\n } else if (event.target != this.monthlyTarget && event.target != this.annualTarget) {\n this.updateContent(event.target)\n }\n\n var atAnnualMaxPrice = this.annualPriceTarget.innerText == MAX_ANNUAL_PRICE\n if (event.target == this.annualTarget && atAnnualMaxPrice) {\n this.selectOnlyAllInclusive(!this.allInclusiveOption.checked)\n }\n }\n\n updateContent(checkbox) {\n var planNames = []\n var monthlyPlans = []\n var annualPlans = []\n var monthlyPrice = 0\n var annualPrice = 0\n var annualSavings = 0\n\n var selectedPlans = this.optionTargets.filter(checkbox => checkbox.checked)\n selectedPlans.forEach(plan => {\n planNames.push(plan.dataset.name)\n monthlyPlans.push(plan.dataset.monthly)\n annualPlans.push(plan.dataset.annual)\n monthlyPrice += parseFloat(plan.dataset.monthlyPrice)\n annualPrice += parseFloat(plan.dataset.annualPrice)\n annualSavings += parseFloat(plan.dataset.annualSavings)\n })\n\n if (checkbox != null && checkbox.checked && this.allInclusiveOption.checked) {\n this.allInclusiveOption.checked = false\n $(this.allInclusiveOption).closest(\".modular-checkbox\").removeClass(\"checked\")\n this.updateContent()\n } else if (this.shouldSelectAllInclusive(monthlyPrice, annualPrice)) {\n this.selectOnlyAllInclusive(true, planNames, monthlyPrice, annualPrice)\n } else {\n this.populateHtml(planNames, monthlyPlans, monthlyPrice, annualPlans, annualPrice, annualSavings)\n }\n }\n\n shouldSelectAllInclusive(monthlyPrice, annualPrice) {\n var shouldSelectMonthly = this.monthlyTarget.checked && monthlyPrice > MAX_MONTHLY_PRICE\n var shouldSelectAnnual = this.annualTarget.checked && annualPrice > MAX_ANNUAL_PRICE\n return shouldSelectMonthly || shouldSelectAnnual\n }\n\n selectOnlyAllInclusive(showModal, planNames, monthlyPrice, annualPrice) {\n this.optionTargets.forEach(checkbox => {\n checkbox.checked = false\n $(checkbox.closest(\".modular-checkbox\")).removeClass(\"checked\");\n })\n this.allInclusiveOption.checked = true\n $(this.allInclusiveOption).closest(\".modular-checkbox\").addClass(\"checked\")\n this.updateContent()\n\n if (showModal) {\n this.modalPlanNamesTarget.innerHTML = planNames.joinSentence(true)\n\n if (this.monthlyTarget.checked) {\n this.modalPriceTarget.innerHTML = `$${monthlyPrice}/month`\n this.modalSavingsTarget.innerHTML = `$${(monthlyPrice - MAX_MONTHLY_PRICE) * 12}/year`\n this.modalAllInclusivePriceTarget.innerHTML = `$${MAX_MONTHLY_PRICE}/month`\n } else {\n this.modalPriceTarget.innerHTML = `$${annualPrice}/year`\n this.modalSavingsTarget.innerHTML = `$${annualPrice - MAX_ANNUAL_PRICE}/year`\n this.modalAllInclusivePriceTarget.innerHTML = `$${MAX_ANNUAL_PRICE}/year`\n }\n\n $(\"#all-inclusive\").modal()\n if (this.mobile) {\n setTimeout(() => $(\"#payment-form\")[0].scrollIntoView(false), 1)\n }\n }\n }\n\n populateHtml(planNames, monthlyPlans, monthlyPrice, annualPlans, annualPrice, annualSavings) {\n this.plansTarget.innerHTML = \"Plan\"\n\n if (planNames.length == 0) {\n this.namesTarget.innerHTML = \"Choose tools\"\n } else {\n this.namesTarget.innerHTML = planNames.joinSentence(true)\n }\n\n this.monthlyTarget.value = monthlyPlans\n this.monthlyPriceTarget.innerHTML = Math.min(monthlyPrice, MAX_MONTHLY_PRICE)\n this.annualTarget.value = annualPlans\n\n if (annualPrice >= MAX_ANNUAL_PRICE) {\n this.annualPriceTarget.innerHTML = MAX_ANNUAL_PRICE\n this.annualSavingsTarget.innerHTML = MAX_ANNUAL_SAVINGS\n } else {\n this.annualPriceTarget.innerHTML = annualPrice\n this.annualSavingsTarget.innerHTML = annualSavings\n }\n }\n\n get mobile() {\n return this.hasMobileTarget\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"parent\"]\n\n async connect() {\n if (!window.Browser.isIE()) {\n (await import(\"select2/dist/js/select2.full.js\")).default() // init the plugin\n this.initializeSelect2()\n }\n }\n\n // private\n\n initializeSelect2() {\n const containerClass = this.data.get(\"container\")\n const dropdownClass = this.data.get(\"dropdown\")\n\n if (this.hasParentTarget) {\n $(this.element).select2({\n dropdownParent: $(this.parentTarget.dataset.parent),\n containerCssClass: containerClass,\n dropdownCssClass: dropdownClass\n })\n }\n else {\n $(this.element).select2({\n containerCssClass: containerClass,\n dropdownCssClass: dropdownClass\n })\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n initialize() {\n this.timeout = null\n this.url = this.data.get(\"url\")\n this.pickup = this.data.get(\"pickup\")\n }\n\n search(event) {\n clearTimeout(this.timeout)\n\n this.timeout = setTimeout(() => {\n $.ajax({\n url: this.url,\n data: {\n query: event.target.value,\n pickup: this.pickup,\n },\n dataType: \"script\",\n })\n }, 500)\n };\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n change(event) {\n var url = new URL(window.location)\n\n var pickupId = event.currentTarget.value\n if (pickupId === \"all\") {\n url.searchParams.delete(\"pickup\")\n } else {\n url.searchParams.set(\"pickup\", pickupId)\n }\n\n window.location = url\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"location\", \"name\", \"remove\", \"destroy\", \"add\" ]\n\n connect() {\n this.nameTargets.forEach((target, index) => {\n const hide = target.attributes[\"value\"] === undefined && index != 0\n this.locationTargets[index].classList.toggle(\"hidden\", hide)\n\n if (!hide && index === this.max - 1) {\n this.addTarget.classList.toggle(\"hidden\", true)\n }\n })\n\n this.removeTargets.forEach((target, index) => {\n const hide = index == 0 || target.dataset[\"neverShow\"] === \"true\"\n target.classList.toggle(\"hidden\", hide)\n })\n }\n\n add(event) {\n event.preventDefault()\n\n var showedALocation = false\n this.locationTargets.forEach((target, index) => {\n if (!showedALocation && target.classList.contains(\"hidden\")) {\n target.classList.toggle(\"hidden\", false)\n this.destroyTargets[index].value = \"0\"\n showedALocation = true\n\n if (index === this.locationTargets.length - 1) {\n event.currentTarget.classList.toggle(\"hidden\", true)\n }\n }\n })\n }\n\n remove(event) {\n event.preventDefault()\n\n const index = this.removeTargets.indexOf(event.currentTarget)\n this.locationTargets[index].classList.toggle(\"hidden\", true)\n this.destroyTargets[index].value = \"1\"\n\n this.addTarget.classList.toggle(\"hidden\", false)\n }\n\n get max() {\n return parseInt(this.data.get(\"max\"))\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n qualify(event) {\n this.updateLead(true)\n }\n\n disqualify(event) {\n this.updateLead(false)\n }\n\n // private\n\n updateLead(qualified) {\n $.ajax({\n type: \"PUT\",\n url: this.data.get(\"url\"),\n dataType: \"json\",\n data: {\n \"authenticity_token\": this.authenticityToken,\n \"place_lead[qualified]\": qualified,\n },\n success: (response) => {\n if (!response.success) {\n this.errorAlert()\n }\n },\n error: () => this.errorAlert()\n })\n }\n\n get authenticityToken() {\n return document.querySelector(\"meta[name='csrf-token']\").content\n }\n\n get errorAlert() {\n alert(\"Error saving. Please reload the page and try again.\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"retailerPrice\", \"buyerPrice\", \"validPrice\", \"invalidPrice\" ]\n\n connect() {\n this.calculateBuyerPrice()\n }\n\n calculateBuyerPrice() {\n if (this.retailerPrice == 0) {\n this.validPriceTarget.classList.add(\"hidden\")\n this.invalidPriceTarget.classList.remove(\"hidden\")\n } else {\n this.invalidPriceTarget.classList.add(\"hidden\")\n this.validPriceTarget.classList.remove(\"hidden\")\n\n this.buyerPriceTarget.textContent = `$${this.buyerPrice}`\n }\n }\n\n // private\n\n get retailerPrice() {\n return parseFloat(this.retailerPriceTarget.value) || 0\n }\n\n get buyerPrice() {\n return (this.retailerPrice + this.fee).toFixed(2)\n }\n\n get fee() {\n if (this.retailerPrice < 14) {\n return 0.5\n } else if (this.retailerPrice <= 25) {\n return 1\n } else {\n return this.retailerPrice * 0.05\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"iframe\" ]\n\n print() {\n this.iframeTarget.contentWindow.print()\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"header\", \"hero\", \"stickySlide\"]\n\n connect() {\n this.$window = $(window)\n\n this.startWatchingIntersection()\n\n if (window.innerWidth >= 812) {\n this.startWatchingScroll()\n this.fadeOutStickySlides()\n }\n }\n\n // private\n\n startWatchingIntersection() {\n const observer = new IntersectionObserver(this.toggleScrolledOnHeader.bind(this))\n observer.observe(this.heroTarget)\n }\n\n toggleScrolledOnHeader(entries) {\n if (entries[0].isIntersecting) {\n this.headerTarget.classList.remove(\"scrolled\")\n } else {\n this.headerTarget.classList.add(\"scrolled\")\n }\n }\n\n startWatchingScroll() {\n document.addEventListener(\"scroll\",\n Debouncer.debounce(this.fadeOutStickySlides.bind(this)),\n { passive: true }\n )\n }\n\n fadeOutStickySlides() {\n this.stickySlideTargets.forEach(target => {\n const position = $(target).offset().top - this.$window.scrollTop()\n\n if (position < this.windowHeight * this.startPosition) {\n target.style.opacity = position / (this.windowHeight * this.startPosition)\n } else {\n target.style.opacity = 1\n }\n })\n }\n\n get startPosition() {\n return 0.1\n }\n\n get windowHeight() {\n return this.$window.height()\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"form\", \"overlay\", \"groupByStyle\", \"sectionBreakOption\",\n \"beer_descriptionFont\", \"submit\", \"modal\", \"disablePdfReload\"]\n\n connect() {\n this.formTarget.dataset.remote = this.data.get(\"auto-save\") == \"true\"\n\n this.submitOnChange()\n this.submitOnEvent()\n\n $(this.formTarget).on(\"ajax:success\", this.success.bind(this))\n $(this.formTarget).on(\"ajax:error\", this.error.bind(this))\n }\n\n showStyleOptions() {\n this.groupByStyleTargets.forEach(t => t.classList.remove(\"hidden\"))\n }\n\n hideStyleOptions() {\n this.groupByStyleTargets.forEach(t => t.classList.add(\"hidden\"))\n }\n\n showSectionBreakOption() {\n this.sectionBreakOptionTarget.classList.remove(\"hidden\")\n }\n\n hideSectionBreakOption() {\n this.sectionBreakOptionTarget.classList.add(\"hidden\")\n }\n\n toggleBeerDescriptionFont(event) {\n const checked = event.currentTarget.checked\n this.beer_descriptionFontTarget.classList.toggle(\"hidden\", !checked)\n }\n\n toggleAutoSave(event) {\n this.data.set(\"auto-save\", !event.currentTarget.checked)\n this.formTarget.dataset.remote = !event.currentTarget.checked\n this.submitTarget.classList.toggle(\"hidden\", !event.currentTarget.checked)\n }\n\n submitForm(event) {\n if (this.data.get(\"auto-save\") == \"true\") {\n this.overlayTarget.classList.remove(\"hidden\")\n\n if (event.currentTarget.dataset.disablePdfReload == \"true\") {\n this.disablePdfReloadTarget.value = true\n $.rails.fire($(this.formTarget), \"submit\")\n this.disablePdfReloadTarget.value = false\n } else {\n window.BeerMenus.controllers.printPreviewController.showLoading()\n $.rails.fire($(this.formTarget), \"submit\")\n }\n }\n }\n\n // private\n\n submitOnChange() {\n [...this.formTarget.elements].forEach(element => {\n if (!element.dataset.ignore) {\n element.addEventListener(\"change\", this.submitForm.bind(this))\n }\n })\n }\n\n submitOnEvent() {\n document.body.addEventListener(\"sortable:didSort\",\n this.submitForm.bind(this))\n\n document.body.addEventListener(\"customFont:selected\",\n this.submitForm.bind(this))\n\n document.body.addEventListener(\"cme-blur\",\n this.submitForm.bind(this))\n }\n\n success(event, data, status, xhr) {\n this.overlayTarget.classList.add(\"hidden\")\n this.submitOnChange()\n }\n\n error(event, xhr) {\n window.BeerMenus.controllers.printPreviewController.showServerError()\n this.overlayTarget.classList.add(\"hidden\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"loading\", \"loadingText\", \"pdf\", \"error\"]\n\n connect() {\n this.pdfTarget.onload = this.validatePDF.bind(this)\n window.BeerMenus.controllers.printPreviewController = this\n }\n\n showLoading() {\n if (Browser.isIE()) {\n this.pdfTarget.src = \"about:blank\"\n } else {\n this.loadingTextTarget.innerText = \"Updating\"\n this.loadingTarget.classList.remove(\"hidden\")\n this.errorTarget.classList.add(\"hidden\")\n }\n }\n\n showValidationError(html) {\n this.errorTarget.innerHTML = html\n this.loadingTarget.classList.add(\"hidden\")\n this.errorTarget.classList.remove(\"hidden\")\n }\n\n showServerError() {\n $.ajax({ url: this.errorURL, success: this.populateErrorHTML.bind(this) })\n }\n\n // private\n\n validatePDF() {\n if (Browser.isIE()) {\n return\n } else if (this.isFirefox || this.isIpad || this.isPDFValid) {\n this.loadingTarget.classList.add(\"hidden\")\n this.errorTarget.classList.add(\"hidden\")\n } else if (this.errorPresent) {\n this.loadingTarget.classList.add(\"hidden\")\n this.errorTarget.classList.add(\"hidden\")\n this.bindReload()\n } else {\n this.showServerError()\n }\n }\n\n populateErrorHTML(html) {\n this.iframe.body.innerHTML = html\n this.loadingTarget.classList.add(\"hidden\")\n this.bindReload()\n this.bindHelp()\n }\n\n bindReload() {\n this.iframe.getElementById(\"reload-button\").addEventListener(\"click\", (event) => {\n event.preventDefault()\n this.loadingTarget.classList.remove(\"hidden\")\n this.pdfTarget.contentWindow.location.reload()\n })\n }\n\n bindHelp() {\n this.iframe.getElementById(\"help-link\").addEventListener(\"click\", (event) => {\n event.preventDefault()\n const target = parent ? parent : window\n target.Beacon(\"open\")\n target.Beacon(\"navigate\", \"/ask\")\n })\n }\n\n get isFirefox() {\n return navigator.userAgent.toLowerCase().indexOf('firefox') > -1\n }\n\n get isIpad() {\n return this.data.get(\"is-ipad\") == \"true\"\n }\n\n get isPDFValid() {\n const embed = this.iframe.getElementsByTagName(\"embed\")[0]\n return embed && embed.getAttribute(\"type\") == \"application/pdf\"\n }\n\n get errorPresent() {\n return this.iframe.getElementById(\"pdf-error\") != null\n }\n\n get iframe() {\n return this.pdfTarget.contentDocument\n }\n\n get url() {\n return this.data.get(\"url\")\n }\n\n get errorURL() {\n return this.data.get(\"error-url\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"save\", \"error\"]\n\n enableForm() {\n this.saveTarget.classList.remove(\"hidden\")\n this.errorTarget.classList.add(\"hidden\")\n }\n\n disableForm() {\n this.errorTarget.classList.remove(\"hidden\")\n this.saveTarget.classList.add(\"hidden\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"dayvariables\", \"day\", \"nearvariables\", \"near\" ]\n\n propertyChanged(event) {\n if (event.currentTarget.value == \"days_since_last_update\") {\n this.dayvariablesTarget.classList.toggle(\"hidden\", false)\n } else if (event.currentTarget.value == \"near_city\") {\n this.nearvariablesTarget.classList.toggle(\"hidden\", false)\n } else {\n this.dayvariablesTarget.classList.toggle(\"hidden\", true)\n this.dayTargets.forEach(t => t.value = \"\")\n this.nearvariablesTarget.classList.toggle(\"hidden\", true)\n this.nearTargets.forEach(t => t.value = \"\")\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"select\", \"field\" ]\n\n connect() {\n this.showHideField()\n }\n\n change() {\n this.showHideField()\n }\n\n showHideField() {\n const hide = this.selectTarget.value == \"false\"\n this.fieldTarget.classList.toggle(\"hidden\", hide)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n // Only get involved if a file upload is present.\n $(this.element).bind(\"ajax:aborted:file\", () => {\n this.disableForm()\n this.manuallyPOST()\n\n // Tell jquery-ujs to not submit the form; we got this.\n return false\n })\n }\n\n // private\n\n disableForm() {\n // Wait for jquery-ujs to \"finish\" before disabling.\n setTimeout(() => {\n $.rails.disableFormElements($(this.element))\n }, 20)\n }\n\n // https://makandracards.com/makandra/39225-manually-uploading-files-via-ajax\n manuallyPOST() {\n $.ajax({\n url: `${this.element.action}.js`,\n type: \"POST\",\n data: new FormData(this.element),\n contentType: false,\n processData: false,\n complete: () => $.rails.enableFormElements($(this.element))\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n this.element.addEventListener(\"click\", () => window.scrollTo(0, 0))\n }\n}\n", "// Handles interaction between radio buttons and text inputs in segmented fields\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"radio\", \"textInput\"]\n\n connect() {\n // Initialize radio value if text input has a value\n if (this.hasTextInputTarget && this.textInputTarget.value) {\n this.syncRadioValue()\n }\n }\n\n focusInput() {\n if (this.hasTextInputTarget) {\n this.textInputTarget.focus()\n }\n }\n\n selectRadio() {\n if (this.hasRadioTarget) {\n this.radioTarget.checked = true\n this.syncRadioValue()\n }\n }\n\n // Called when text input changes\n handleTextInput() {\n if (this.hasRadioTarget) {\n this.radioTarget.checked = true\n this.syncRadioValue()\n }\n }\n\n // Sync radio value with text input value\n syncRadioValue() {\n if (this.hasRadioTarget && this.hasTextInputTarget) {\n this.radioTarget.value = this.textInputTarget.value\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"type\", \"event\", \"property\" ]\n\n async connect() {\n (await import(\"cocoon-js\")).default\n }\n\n toggle(event) {\n const index = this.typeTargets.indexOf(event.currentTarget)\n this.eventTargets[index].classList.toggle(\"hidden\")\n this.propertyTargets[index].classList.toggle(\"hidden\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"checkbox\"]\n\n connect() {\n window.BeerMenus.controllers.selectAllControllers =\n window.BeerMenus.controllers.selectAllControllers || []\n window.BeerMenus.controllers.selectAllControllers.push(this)\n }\n\n toggle(event) {\n const checked = event.currentTarget.checked\n this.checkboxTargets.forEach(el => el.checked = checked)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"destroy\"]\n\n remove(event) {\n event.preventDefault()\n this.element.remove()\n }\n\n destroy(event) {\n event.preventDefault()\n\n this.element.classList.add(\"hidden\")\n this.destroyTarget.value = 1\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"servings\", \"serving\", \"type\", \"unit\", \"sell\"]\n\n add(event) {\n event.preventDefault()\n\n $.ajax(\"/servings/add_size\", { data: this.params })\n .done((html) => BeerMenus.DOM.insertHTML(html, this.servingsTarget))\n .fail((jqXHR, status, error) => console.error(error))\n }\n\n reset(event) {\n event.preventDefault()\n\n Servings.hideEditForm()\n Servings.scrollToTopOfForm()\n }\n\n // private\n\n get params() {\n const lastIndex = this.servingTargets.length - 1\n const index = parseInt(this.servingTargets[lastIndex].dataset[\"index\"])\n\n if (this.hasTypeTarget) {\n var serving_type_id = this.typeTargets[lastIndex].value\n var serving_unit_id = this.unitTargets[lastIndex].value\n } else {\n var serving_type_id = \"\"\n var serving_unit_id = \"\"\n }\n\n return {\n bar_id: this.barID,\n new_index: index + 1,\n serving_type_id: serving_type_id,\n serving_unit_id: serving_unit_id,\n product_type: this.productType,\n sell: this.sellTarget.checked\n }\n }\n\n get barID() {\n return this.data.get(\"bar-id\")\n }\n\n get productType() {\n return this.data.get(\"product-type\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nclass FormDataEventPolyfill extends Event {\n constructor(formData) {\n super('formdata');\n this.formData = formData;\n }\n}\n\nclass WorkingFormDataPolyfill extends FormData {\n constructor(form=null) {\n if (form) {\n super(form)\n this.form = form\n form.dispatchEvent(new FormDataEventPolyfill(this))\n } else {\n super()\n }\n }\n\n append(name, value) {\n if (!this.form) {\n return super.append(name, value)\n }\n\n let input = this.form.elements[name]\n\n if (!input) {\n input = document.createElement('input');\n input.type = 'hidden';\n input.name = name;\n this.form.appendChild(input);\n }\n\n if (this.has(name)) {\n const entries = this.getAll(name);\n const index = entries.indexOf(input.value);\n\n if (index !== -1) {\n entries.splice(index, 1);\n }\n\n entries.push(value);\n this.set(name, entries);\n } else {\n super.append(name, value);\n }\n\n input.value = value;\n }\n}\n\nwindow.WorkingFormDataPolyfill = WorkingFormDataPolyfill\n\nexport default class extends Controller {\n async connect() {\n await import(\"../app/shoelace\")\n\n // TODO: once we're using Shoelace within the design system, we don't need this\n await import(\"@shoelace-style/shoelace/dist/themes/light.css\")\n\n await customElements.whenDefined(\"sl-color-picker\")\n\n this.element.querySelectorAll(\"sl-color-picker\").forEach((picker) => {\n picker.swatches = [\n \"#cd2020\",\n \"#fba820\",\n \"#f8e71c\",\n \"#7d5f4b\",\n \"#9CE2B6\",\n \"#f470fc\",\n \"#ae65ee\",\n \"#287DDB\",\n \"#50e3c2\",\n \"#DFEEFD\",\n \"#000000\",\n \"#444444\",\n \"#cdcdcd\",\n \"#ddd\",\n \"#fff\",\n ]\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"truncated\", \"full\", \"showMore\", \"showLess\" ]\n\n toggle(event) {\n event.preventDefault()\n\n if (this.hasTruncatedTarget) {\n this.truncatedTarget.classList.toggle(\"hidden\")\n }\n this.fullTarget.classList.toggle(\"hidden\")\n\n this.showMoreTarget.classList.toggle(\"hidden\")\n this.showLessTarget.classList.toggle(\"hidden\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"search\", \"beerID\", \"template\"]\n\n async connect() {\n let libraries = await AlgoliaSource.importLibraries()\n const filters = `product_type = 0 OR product_type = 1 OR product_type = 3`\n this.algolia = new AlgoliaSource(libraries[0], \"Beer\", filters)\n this.connected()\n }\n\n // private\n\n connected() {\n this.search = $(this.searchTarget).autocomplete(this.options, this.dataset)\n this.search\n .on(\"autocomplete:selected autocomplete:autocompleted\", (event, data) => {\n this.setHiddenField(data.objectID)\n })\n }\n\n setHiddenField(id) {\n this.beerIDTarget.value = id\n }\n\n source(query, callback) {\n this.algolia.source(query, (suggestions) => {\n return callback(suggestions)\n })\n }\n\n displayKey(obj) {\n return obj.cssClass == this.addNewBeerClass ? obj.query : obj.name\n }\n\n suggestion(hit) {\n return new BeerAutocompleteSuggestion(this.templateTarget).build(hit)\n }\n\n get dataset() {\n return {\n source: (query, callback) => { this.source(query, callback) },\n name: \"beers\",\n displayKey: (obj) => { return obj.name },\n templates: { suggestion: this.suggestion.bind(this) },\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\n \"monthlyTerm\", \"monthlyPlan\", \"annualPlan\",\n \"plan\", \"tool\", \"paymentPlan\", \"effectiveMonthlyPrice\",\n \"monthlyPrice\", \"annualPrice\", \"annualSavings\",\n \"popularPlan\", \"potentialSavings\", \"realizedSavings\",\n \"mySubscription\", \"chooseTools\", \"button\", \"newSubscription\", \"switchToAnnual\",\n \"discountMessage\", \"discountDescription\", \"discountValue\", \"discountedTotal\", \"monthlyFullPrice\", \"annualFullPrice\",\n \"stripeCoupon\"\n ]\n\n connect() {\n this.setPlan()\n this.setPlanName()\n this.setPrices()\n }\n\n toggleTool(event) {\n this.setPlan()\n this.setPlanName()\n this.setPrices()\n }\n\n toggleTerm(event) {\n this.setPrices()\n this.setPlan()\n }\n\n // private\n\n setPrices() {\n const tools = this.enabledTools\n const pricing = this.pricing.find(p => p.tools == tools)\n\n if (pricing) {\n if (this.annual) {\n if (this.hasStripeCouponTarget) { this.discountMessageTargets.forEach(t => t.classList.remove(\"hidden\")) }\n var effectivePrice = pricing.annual_price_monthly\n var price = pricing.annual_price\n this.potentialSavingsTarget.classList.add(\"hidden\")\n this.realizedSavingsTarget.classList.remove(\"hidden\")\n if (this.hasCoupon) {\n this.stripeCouponTarget.value = this.data.get(\"coupon-annual\")\n this.discountDescriptionTargets.forEach(t => t.innerText = this.annualDiscountDescription)\n this.monthlyFullPriceTarget.classList.add(\"hidden\")\n this.annualFullPriceTarget.classList.remove(\"hidden\")\n this.discountValueTarget.innerText = pricing.annual_discount_value.toFixed(2)\n this.discountedTotalTarget.innerText = pricing.discounted_annual_price.toFixed(2)\n var price = pricing.discounted_annual_price.toFixed(2)\n }\n } else {\n var effectivePrice = pricing.price\n var price = pricing.price\n this.potentialSavingsTarget.classList.remove(\"hidden\")\n this.realizedSavingsTarget.classList.add(\"hidden\")\n if (this.hasCoupon) {\n if (pricing.discounted_monthly_price > 0) {\n this.stripeCouponTarget.value = this.data.get(\"coupon-monthly\")\n this.discountDescriptionTargets.forEach(t => t.innerText = this.monthlyDiscountDescription)\n this.monthlyFullPriceTarget.classList.remove(\"hidden\")\n this.annualFullPriceTarget.classList.add(\"hidden\")\n this.discountValueTarget.innerText = pricing.monthly_discount_value.toFixed(2)\n this.discountedTotalTarget.innerText = pricing.discounted_monthly_price.toFixed(2)\n var price = pricing.discounted_monthly_price.toFixed(2)\n } else {\n this.stripeCouponTarget.value = \"\"\n this.discountMessageTargets.forEach(t => t.classList.add(\"hidden\"))\n }\n }\n }\n\n this.effectiveMonthlyPriceTarget.innerText = effectivePrice\n\n if (this.hasNewSubscriptionTarget) {\n var buttonLabel = \"Subscribe and pay $\" + price\n this.buttonTarget.innerText = buttonLabel\n this.buttonTarget.dataset[\"disableWith\"] = buttonLabel\n this.buttonTarget.dataset[\"originalLabel\"] = buttonLabel\n } else if (this.hasSwitchToAnnualTarget) {\n if (this.annual) {\n var buttonLabel = \"Switch to annual billing\"\n } else {\n var buttonLabel = \"Update subscription\"\n }\n\n this.buttonTarget.innerText = buttonLabel\n this.buttonTarget.dataset[\"disableWith\"] = buttonLabel\n this.buttonTarget.dataset[\"originalLabel\"] = buttonLabel\n }\n\n this.monthlyPriceTargets.forEach(t => t.innerText = pricing.price)\n this.annualPriceTargets.forEach(t => t.innerText = pricing.annual_price)\n this.annualSavingsTargets.forEach(t => t.innerText = pricing.annual_savings)\n }\n }\n\n setPlanName() {\n this.paymentPlanTarget.innerText = this.planName\n }\n\n get planName() {\n return this.toolTargets.filter(t => t.checked).map(t => t.dataset[\"planName\"]).join(' + ')\n }\n\n setPlan() {\n this.planTarget.value = this.plan\n\n if (this.enabledTools == 0) {\n this.mySubscriptionTarget.classList.add(\"hidden\")\n this.chooseToolsTarget.classList.remove(\"hidden\")\n } else {\n this.mySubscriptionTarget.classList.remove(\"hidden\")\n this.chooseToolsTarget.classList.add(\"hidden\")\n }\n\n if (this.popularPlan) {\n this.popularPlanTarget.classList.remove(\"hidden\")\n } else {\n this.popularPlanTarget.classList.add(\"hidden\")\n }\n }\n\n get plan() {\n if (this.annual) {\n return this.annualPlan\n } else {\n return this.monthlyPlan\n }\n }\n\n get annualPlan() {\n const tools = this.toolTargets.filter(t => t.checked)\n switch(tools.length) {\n case 0:\n return null\n case 1:\n return tools[0].dataset[\"annualPlanId\"]\n default:\n return 63\n }\n }\n\n get monthlyPlan() {\n const tools = this.toolTargets.filter(t => t.checked)\n switch(tools.length) {\n case 0:\n return null\n case 1:\n return tools[0].dataset[\"monthlyPlanId\"]\n case 2:\n const tool1Plans = tools[0].dataset[\"monthly-2PlanIds\"].split(\" \")\n const tool2Plans = tools[1].dataset[\"monthly-2PlanIds\"].split(\" \")\n return tool1Plans.find(x => tool2Plans.includes(x))\n default:\n return 59\n }\n }\n\n get enabledTools() {\n return this.toolTargets.filter(t => t.checked).length\n }\n\n get monthly() {\n return this.monthlyTermTarget.checked\n }\n\n get annual() {\n return !this.monthly\n }\n\n get popularPlan() {\n const tvMenus = this.toolTargets.find(t => t.dataset[\"planSlug\"] == \"digital_beer_boards\")\n return this.enabledTools == 2 && !tvMenus.checked\n }\n\n get pricing() {\n return JSON.parse(this.data.get(\"pricing\"))\n }\n\n get hasCoupon() {\n return this.hasDiscountMessageTarget\n }\n\n get monthlyDiscountDescription() {\n return this.data.get(\"monthly-discount-description\")\n }\n\n get annualDiscountDescription() {\n return this.data.get(\"annual-discount-description\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n speed: { type: Number, default: 800 }\n }\n\n connect() {\n this.element.addEventListener(\"click\", (event) => {\n event.preventDefault()\n\n const anchor = event.currentTarget.href.split(\"#\").pop()\n const offset = parseInt(this.data.get(\"offset\")) || 0\n const target = document.getElementById(anchor)\n\n if (target) {\n this.smoothScroll(target, offset)\n }\n\n if (this.data.has(\"focus\")) {\n document.getElementById(this.data.get(\"focus\")).focus()\n }\n })\n }\n\n smoothScroll(target, offset) {\n const targetPosition = target.getBoundingClientRect().top + window.pageYOffset - offset\n const startPosition = window.pageYOffset\n const distance = targetPosition - startPosition\n const duration = this.speedValue\n let start = null\n\n const animation = (currentTime) => {\n if (start === null) start = currentTime\n const timeElapsed = currentTime - start\n const progress = Math.min(timeElapsed / duration, 1)\n\n // Easing function - easeInOutQuad\n const easing = progress => {\n return progress < 0.5\n ? 2 * progress * progress\n : 1 - Math.pow(-2 * progress + 2, 2) / 2\n }\n\n window.scrollTo(0, startPosition + (distance * easing(progress)))\n\n if (progress < 1) {\n requestAnimationFrame(animation)\n }\n }\n\n requestAnimationFrame(animation)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"container\", \"position\", \"itemNumber\", \"item\"]\n\n async connect() {\n const draggable = await import(\"@shopify/draggable/lib/draggable.bundle.legacy\")\n this.initializeDraggable(draggable.default)\n }\n\n savePositions(skipSave) {\n // \"Delay\" so Sortable can settle and remove the mirror.\n setTimeout(() => {\n this.itemTargets.forEach((_, index) => {\n if (index < this.positionTargets.length) {\n this.positionTargets[index].value = index + 1\n }\n\n if (index < this.itemNumberTargets.length) {\n this.itemNumberTargets[index].innerHTML = `${index + 1}.`\n }\n })\n\n this.dispatchCustomEvent()\n\n if (skipSave != true && this.data.get(\"skip-save\") != \"true\") {\n this.save()\n }\n })\n }\n\n // private\n\n initializeDraggable(draggable) {\n const sortable = new draggable.Sortable(this.containerTarget, {\n draggable: \"li:not([data-sortable-ignore])\",\n handle: this.data.has(\"no-handle\") ? null : \".sort-icon\",\n mirror: {\n appendTo: \"#sortable-mirror-wrapper\",\n constrainDimensions: true,\n xAxis: false\n }\n })\n\n sortable.on(\"drag:stop\", this.savePositions.bind(this))\n }\n\n dispatchCustomEvent() {\n const event = new CustomEvent(\"sortable:didSort\", { bubbles: true })\n this.element.dispatchEvent(event)\n }\n\n save() {\n const url = this.data.get(\"url\")\n if (url) {\n var data = {}\n data[this.data.get(\"data-key\")] = this.items\n\n $.ajax(url, { method: \"PUT\", data: data })\n .fail(() => alert(this.errorMessage))\n }\n }\n\n get items() {\n return this.itemTargets.map(item => {\n if (item.dataset.key) {\n return [item.dataset.key, item.dataset.value]\n } else {\n return item.dataset.value.split(\",\")\n }\n })\n }\n\n get placeholderClass() {\n return this.data.get(\"placeholder-class\") || \"\"\n }\n\n get errorMessage() {\n return this.data.get(\"error\") ||\n \"Something went wrong, please try again.\"\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n if ((document.body.classList.contains(\"web\")) || (this.element.classList.contains(\"msticky\")) ) {\n $(this.element).stick_in_parent()\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"streamlineable\", \"collapsible\" ]\n\n connect() {\n window.BeerMenus.controllers.streamlinedMenuController = this\n\n this.windowHashChanged(window.location.hash)\n $(window).on(\"hashchange\", (event) => {\n this.windowHashChanged(window.location.hash)\n })\n }\n\n showCollapsibleMenu() {\n this.showStreamlineableElements()\n this.showCollapsibleElements()\n }\n\n showStreamlineableElements() {\n this.streamlineableTargets.forEach(el => {\n el.classList.toggle(\"hidden\", false)\n })\n }\n\n showCollapsibleElements() {\n this.collapsibleTargets.forEach(el => {\n el.classList.toggle(\"hidden\", false)\n })\n }\n\n windowHashChanged(hash) {\n this.performAction(hash.replace(\"#\", \"\"))\n }\n\n performAction(hash) {\n $(\".modal\").modal(\"hide\") // Close any open modal.\n BeerMenus.Checklists.closeDriver()\n\n switch (hash) {\n case \"new-serving\":\n this.removeHash()\n BeerMenus.Checklists.highlightServingForm()\n break\n case \"update-address\":\n this.removeHash()\n BeerMenus.Checklists.showAddressModal(this.barID)\n break\n case \"connect-facebook\":\n this.removeHash()\n BeerMenus.Checklists.showFacebookModal()\n break\n case \"connect-twitter\":\n this.removeHash()\n BeerMenus.Checklists.showTwitterModal()\n break\n case \"new-print-menu\":\n this.removeHash()\n BeerMenus.Checklists.showPrintMenuModal(this.barID)\n break\n case \"add_beers\":\n case \"beers_added\":\n case \"print_welcome\":\n case \"tv_hardware\":\n case \"tv_setup\":\n case \"tv_welcome\":\n case \"not_open\":\n this.removeHash()\n BeerMenus.Checklists.showUpdateMenuMessageModal(hash)\n break\n case \"welcome\":\n this.removeHash()\n BeerMenus.Checklists.spotlight(hash)\n break\n }\n }\n\n removeHash() {\n const state = window.location.pathname + window.location.search\n history.pushState(\"\", document.title, state)\n }\n\n get barID() {\n return this.data.get(\"bar-id\")\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n this._insertMetaTag()\n this._insertScript()\n }\n\n _insertMetaTag() {\n let tag = document.querySelector(\"meta[name='stripe-key']\")\n if (!tag) {\n tag = document.createElement(\"meta\")\n tag.name = \"stripe-key\"\n document.head.appendChild(tag)\n }\n tag.content = this.data.get(\"key\")\n }\n\n _insertScript() {\n ScriptInserter.insert(\"stripe.js\", \"https://js.stripe.com/v3/\", () => {\n new StripeLoader().load()\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n $.ajax(this.data.get(\"path\"))\n .done(data => this.element.innerHTML = data)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"tab\", \"panel\"]\n static values = { smoothScrollerLink: String }\n\n connect() {\n this.setHashFromURLIfBlank()\n this.showTab()\n this.cancelModal = false\n\n $(window).on(\"hashchange\", (event) => {\n this.hash = window.location.hash.replace(\"#\", \"\")\n this.showTab()\n })\n\n document.body.addEventListener(\"modal:willShow\", (event) => {\n if (this.cancelModal) {\n event.preventDefault()\n this.cancelModal = false\n }\n })\n\n if (this.hasSmoothScrollerLinkValue) {\n this.observeSmoothScrollerLink()\n } else {\n return\n }\n\n }\n\n change(event) {\n event.preventDefault()\n\n this.cancelModal = true\n this.hash = event.currentTarget.dataset[\"hash\"]\n this.showTab()\n this.replaceHistoryState()\n this.updateSmoothScrollerFocus()\n\n const changedEvent = new CustomEvent(\"tab:changed\", {\n bubbles: true,\n detail: this.hash\n })\n this.element.dispatchEvent(changedEvent)\n }\n\n // private\n\n setHashFromURLIfBlank() {\n if (!this.hash && window.location.hash) {\n this.hash = window.location.hash.replace(\"#\", \"\")\n }\n }\n\n showTab() {\n this.tabTargets.forEach(tab => {\n const hash = tab.dataset[\"hash\"]\n tab.classList.toggle(\"pure-tabs-item-selected\", hash == this.hash)\n })\n\n this.panelTargets.forEach(panel => {\n const hash = panel.dataset[\"hash\"]\n panel.classList.toggle(\"hidden\", hash != this.hash)\n })\n\n this.showFirstPanelIfAllHidden()\n this.recalculateStickyHeaders()\n }\n\n showFirstPanelIfAllHidden() {\n const anyPanelVisible = this.panelTargets.some(panel => {\n return !panel.classList.contains(\"hidden\")\n })\n\n if (!anyPanelVisible) {\n this.hash = this.panelTarget.dataset[\"hash\"] // first tab\n this.showTab()\n }\n }\n\n recalculateStickyHeaders() {\n $(document.body).trigger(\"sticky_kit:recalc\")\n }\n\n replaceHistoryState() {\n window.history.replaceState(null, null, `#${this.hash}`)\n }\n\n updateSmoothScrollerFocus() {\n const activeTab = this.tabTargets.find(tab => tab.classList.contains(\"pure-tabs-item-selected\"))\n if (activeTab) {\n const focusId = activeTab.dataset[\"focus\"]\n if (!this.hasSmoothScrollerLinkValue) {\n return\n }\n const smoothScrollerLink = document.querySelector(this.smoothScrollerLinkValue)\n if (focusId && smoothScrollerLink) {\n smoothScrollerLink.setAttribute(\"data-smooth-scroller-focus\", focusId)\n } else {\n }\n }\n }\n\n observeSmoothScrollerLink() {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.addedNodes.length > 0) {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType == Node.ELEMENT_NODE && (node.id === this.smoothScrollerLinkValue.slice(1) || node.querySelector(this.smoothScrollerLinkValue))) {\n this.updateSmoothScrollerFocus()\n observer.disconnect()\n }\n })\n }\n })\n })\n\n observer.observe(document.querySelector(`div[data-observing=\"${this.smoothScrollerLinkValue}\"]`), { childList: true, subtree: true })\n }\n\n get hash() {\n return this.data.get(\"hash\")\n }\n\n set hash(hash) {\n this.data.set(\"hash\", hash)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n/**\n * This implementation was based on the W3C ARIA Guide:\n * https://www.w3.org/WAI/ARIA/apg/patterns/tabs/examples/tabs-automatic/\n */\nexport default class extends Controller {\n static targets = [ \"tab\", \"panel\" ]\n\n connect() {\n this.element.controller = this\n this.change({ currentTarget: this.tabTargets[0] }, false)\n }\n\n change(e, setFocus = true) {\n const tabToSelect = e.currentTarget\n\n // Set tab to selected and show the relevant panel\n tabToSelect.setAttribute(\"aria-selected\", \"true\")\n tabToSelect.removeAttribute(\"tabindex\")\n this.panelTargets.find((panel) => panel.getAttribute(\"aria-labelledby\") === tabToSelect.id).classList.remove(\"hidden\")\n\n // Deselect other tabs\n this.tabTargets.forEach(tab => {\n if (tab != e.currentTarget) {\n tab.setAttribute(\"aria-selected\", \"false\")\n tab.tabIndex = -1\n }\n })\n\n // Hide other panels\n this.panelTargets.forEach(panel => {\n if (panel.getAttribute(\"aria-labelledby\") !== tabToSelect.id) {\n panel.classList.add(\"hidden\")\n }\n })\n\n // Focus on the selected tab if necessary\n if (setFocus) {\n tabToSelect.focus()\n }\n }\n\n get currentTab() {\n return this.tabTargets.find(tab => tab.getAttribute(\"aria-selected\") === \"true\")\n }\n\n setSelectedTo(e) {\n let keyHandled = true\n if (e.key === \"ArrowLeft\") {\n this.setSelectedToPreviousTab()\n } else if (e.key === \"ArrowRight\") {\n this.setSelectedToNextTab()\n } else if (e.key === \"Home\") {\n this.change({ currentTarget: this.tabTargets[0] })\n } else if (e.key === \"End\") {\n this.change({ currentTarget: this.tabTargets[this.tabTargets.length - 1] })\n } else {\n keyHandled = false\n }\n\n if (!keyHandled) return\n\n e.stopPropagation()\n e.preventDefault()\n }\n\n setSelectedToPreviousTab() {\n let index = this.tabTargets.indexOf(this.currentTab)\n index--;\n\n if (index === -1) {\n index = this.tabTargets.length - 1\n }\n this.change({ currentTarget: this.tabTargets[index] })\n }\n\n setSelectedToNextTab() {\n let index = this.tabTargets.indexOf(this.currentTab)\n index++;\n\n if (index === this.tabTargets.length) {\n index = 0\n }\n this.change({ currentTarget: this.tabTargets[index] })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"wrapper\" ]\n\n stepValue = 0.05\n columnsSelector = \".columns\"\n lastItemSelector = \"li:last-of-type\"\n bodyVerticalClassName = \"vertical\"\n overflowWarningShown = false\n\n async connect() {\n this.minFontSize = this.data.has(\"minfontsize\") ? parseFloat(this.data.get(\"minfontsize\")) : 0.8\n this.maxFontSize = this.data.has(\"maxfontsize\") ? parseFloat(this.data.get(\"maxfontsize\")) : 2.0\n if (this.data.has(\"lastitem\")) this.lastItemSelector = this.data.get(\"lastitem\")\n\n this.determineCoordinates()\n\n this.resizeObserver = new ResizeObserver(this.fitContent.bind(this))\n this.resizeObserver.observe(this.element)\n\n // Ensure the content fit is attempted once webfonts have loaded, or\n // at least once 5 seconds have passed\n const fontsTimer = setTimeout(() => this.fitContent(), 5000)\n await document.fonts.ready\n clearTimeout(fontsTimer)\n this.fitContent()\n }\n\n disconnect() {\n this.resizeObserver.disconnect()\n }\n\n /**\n * Looks at the orientation of the \"screen\" (horizontal or vertical) and sets\n * up the coordinate property defaults\n */\n determineCoordinates() {\n const vertical = this.bodyVerticalClassName\n\n if (\n (document.body.classList.contains(vertical) && this.data.get(\"columns\") != \"1\") ||\n (!document.body.classList.contains(vertical) && this.data.get(\"columns\") == \"1\")\n ) {\n // The case where the screen is vertical and multi-column, or horizontal\n // with only one column\n this.coordinates = { pos: \"y\", size: \"height\" }\n } else {\n // The case where the screen is horiztonal and multi-column, or vertical\n // with only column\n this.coordinates = { pos: \"x\", size: \"width\" }\n\n // and in that latter case, the x coordinates are reversed\u2026aka x will be a\n // negative number for overflows instead of positive\n this.coordinates.invert = document.body.classList.contains(vertical)\n }\n }\n\n get normalOverflowing() {\n let lastItemPos = this.lastItem.getBoundingClientRect()\n let columnsRect = this.columns.getBoundingClientRect()\n\n if (this.coordinates.pos == \"y\") {\n // the last item will be positioned below the bottom edge of the\n // column if there's an overflow\n lastItemPos = lastItemPos[this.coordinates.pos] + lastItemPos[this.coordinates.size] - columnsRect[this.coordinates.pos]\n } else {\n // multicolumn: the last item will be offscreen if there's an overflow\n lastItemPos = lastItemPos[this.coordinates.pos]\n }\n\n return lastItemPos > columnsRect[this.coordinates.size]\n }\n\n get invertedOverflowing() {\n return this.lastItem.getBoundingClientRect()[this.coordinates.pos] <\n this.columns.getBoundingClientRect()[this.coordinates.pos]\n }\n\n get isOverflowing() {\n return (!this.coordinates.invert && this.normalOverflowing) ||\n (this.coordinates.invert && this.invertedOverflowing)\n }\n\n /**\n * Runs through an algorithm to start with a maximum font size like 1.7vw,\n * then decrement by 0.05 until all the items in the columns are visible,\n * or a minimum font size has been reached.\n */\n fitContent() {\n document.body.style.fontSize = `${this.maxFontSize}vw`\n let fontSize = this.maxFontSize\n\n this.columns = this.element.querySelector(this.columnsSelector)\n this.lastItem = this.element.querySelector(this.lastItemSelector)\n\n let complete = false\n while (!complete) {\n if (fontSize > this.minFontSize && this.isOverflowing) {\n fontSize = (fontSize - this.stepValue).toFixed(2)\n document.body.style.fontSize = `${fontSize}vw`\n } else if (fontSize <= this.minFontSize && this.isOverflowing) {\n this.overflowWarning = true\n complete = true\n } else {\n this.overflowWarning = false\n complete = true\n }\n }\n\n this.wrapperTarget.style.visibility = \"visible\"\n }\n\n set overflowWarning(shown) {\n if (document.body.dataset.previewing !== \"true\") return\n\n window.parent.document.querySelector(\"#overflow-warning\").hidden = !shown\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n click(event) {\n event.preventDefault()\n this.track().always(this.redirectTo(event.currentTarget.href))\n }\n\n // private\n\n track() {\n return $.ajax(\"/api/internal/redis\", {\n method: \"POST\",\n timeout: 5000,\n data: {\n key: this.data.get(\"key\"),\n id: this.data.get(\"id\"),\n },\n })\n }\n\n redirectTo(href) {\n window.location.href = href\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"extra\", \"editor\", \"fontsSelect\", \"fontSizesSelect\" ]\n\n async connect() {\n if (this.hasExtraTarget) {\n this.setupToolbar()\n }\n\n window.Trix = (await import(\"trix\")).default\n\n if (this.data.get(\"fonts\") && this.data.get(\"fonts\") != \"\") {\n this.fonts = JSON.parse(this.data.get(\"fonts\"))\n this.fonts.forEach(([fontId, fontName]) => {\n Trix.config.textAttributes[fontId] = {\n style: { fontFamily: fontName },\n parser: (element) => {\n return element.style.fontFamily.includes(fontName)\n },\n inheritable: true\n }\n })\n\n Trix.config.blockAttributes[\"align-left\"] = {\n tagName: \"text-align-left\",\n nestable: false,\n exclusive: true,\n }\n\n Trix.config.blockAttributes[\"align-center\"] = {\n tagName: \"text-align-center\",\n nestable: false,\n exclusive: true,\n }\n\n Trix.config.blockAttributes[\"align-right\"] = {\n tagName: \"text-align-right\",\n nestable: false,\n exclusive: true,\n }\n }\n\n if (this.data.get(\"fontSizes\") && this.data.get(\"fontSizes\") != \"\") {\n this.fontSizes = JSON.parse(this.data.get(\"fontSizes\"))\n this.fontSizes.forEach(([sizeId, sizeName]) => {\n Trix.config.textAttributes[sizeId] = {\n style: { fontSize: sizeName },\n parser: (element) => {\n return element.style.fontSize.includes(sizeName)\n },\n inheritable: true\n }\n })\n }\n\n if (this.hasEditorTarget) {\n const editor = this.editorTarget.content.cloneNode(true)\n this.element.append(editor)\n }\n }\n\n async setupToolbar() {\n (await import(\"select2/dist/js/select2.full.js\")).default() // init the plugin\n\n const extraTools = this.extraTarget.content.cloneNode(true)\n this.element.addEventListener(\"trix-initialize\", event => { \n event.target.toolbarElement.\n querySelector(\".trix-button-group--text-tools\").\n append(extraTools)\n\n $(this.fontSizesSelectTarget).select2({\n minimumResultsForSearch: Infinity,\n templateResult: (data, container) => {\n if (data.element) container.style.fontSize = data.element.dataset.size\n return data.text\n },\n }).on(\"select2:select\", () => {\n const event = new CustomEvent(\"customFontSize:selected\", { bubbles: true })\n this.fontSizesSelectTarget.dispatchEvent(event)\n }).on(\"select2:open\", () => {\n // We need this for when the user selects the same exact option\n setTimeout(() => {\n document.querySelector(\".select2-results__option[aria-selected=true]\").addEventListener(\"mouseup\", () => {\n const event = new CustomEvent(\"customFontSize:selected\", { bubbles: true })\n this.fontSizesSelectTarget.dispatchEvent(event)\n })\n })\n })\n })\n }\n\n changeFonts(event) {\n this.changeAttributes(event.target.value, this.fonts)\n }\n\n changeSizes(event) {\n this.changeAttributes(event.target.value, this.fontSizes)\n }\n\n sizesClick(event) {\n console.info(event)\n }\n\n changeAttributes(selection, options) {\n const element = this.element.querySelector(\"trix-editor\")\n const blankStart = element.editor.getDocument().toString() === \"\\n\"\n\n if (blankStart) element.editor.setSelectedRange([0, 0])\n\n options.forEach(([attrId, _attrName]) => {\n element.editor.deactivateAttribute(attrId)\n })\n\n if (!selection.startsWith(\"-\")) element.editor.activateAttribute(selection)\n if (blankStart) this.newSelection()\n }\n\n alignLeft() {\n const element = this.element.querySelector(\"trix-editor\")\n\n element.editor.deactivateAttribute(\"align-center\")\n element.editor.deactivateAttribute(\"align-right\")\n element.editor.activateAttribute(\"align-left\")\n }\n\n alignCenter() {\n const element = this.element.querySelector(\"trix-editor\")\n\n element.editor.deactivateAttribute(\"align-left\")\n element.editor.deactivateAttribute(\"align-right\")\n element.editor.activateAttribute(\"align-center\")\n }\n\n alignRight() {\n const element = this.element.querySelector(\"trix-editor\")\n\n element.editor.deactivateAttribute(\"align-left\")\n element.editor.deactivateAttribute(\"align-center\")\n element.editor.activateAttribute(\"align-right\")\n }\n\n newSelection(event) {\n const element = this.element.querySelector(\"trix-editor\")\n\n let fontFound = false\n let fontSizeFound = false\n let alignmentFound = false\n\n Object.keys(element.editor.composition.currentAttributes).forEach(key => {\n if (this.fontsSelectTarget.querySelector(`option[value=\"${key}\"]`)) {\n $(this.fontsSelectTarget).val(key).trigger(\"change\")\n fontFound = true\n } else if (this.fontSizesSelectTarget.querySelector(`option[value=\"${key}\"]`)) {\n $(this.fontSizesSelectTarget).val(key).trigger(\"change\")\n fontSizeFound = true\n }\n\n if (key.startsWith(\"align-\")) alignmentFound = true\n })\n\n if (!fontFound) $(this.fontsSelectTarget).val(\"-default-\").trigger(\"change\")\n if (!fontSizeFound) $(this.fontSizesSelectTarget).val(\"-default-\").trigger(\"change\")\n if (!alignmentFound) this.element.querySelector('[data-trix-attribute=\"align-left\"]').dataset.trixActive = true\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n siteKey: String,\n theme: String,\n size: String,\n appearance: String,\n action: String,\n buttonSelector: String,\n disableButton: Boolean\n }\n\n static targets = [\"tokenField\"]\n\n connect() {\n if (window.turnstile) {\n this.renderTurnstile()\n } else {\n if (!window.securityWidgetCallbacks) {\n window.securityWidgetCallbacks = []\n window.securityWidgetCb = () => {\n if (window.securityWidgetCallbacks && window.securityWidgetCallbacks.length > 0) {\n window.securityWidgetCallbacks.forEach(callback => callback())\n }\n }\n }\n window.securityWidgetCallbacks.push(() => this.renderTurnstile())\n }\n }\n\n renderTurnstile() {\n if (this.button && this.disableButtonValue) {\n this.button.disabled = true\n }\n\n const visibleClasses = ['visible']\n\n this.id = turnstile.render(`#${this.element.id}`, {\n sitekey: this.siteKeyValue,\n theme: this.themeValue,\n size: this.sizeValue,\n action: this.actionValue,\n appearance: this.appearanceValue,\n callback: (token) => {\n if (this.hasTokenFieldTarget) {\n this.tokenFieldTarget.value = token\n }\n if (this.button && this.disableButtonValue) {\n this.button.disabled = false\n }\n },\n \"before-interactive-callback\": () => this.element.classList.add(...visibleClasses)\n })\n }\n\n disconnect() {\n if (window.turnstile && this.id) {\n turnstile.remove(this.id)\n }\n\n if (window.securityWidgetCallbacks) {\n const callbackIndex = window.securityWidgetCallbacks.findIndex(\n callback => callback.toString().includes(this.element.id)\n )\n\n if (callbackIndex !== -1) {\n window.securityWidgetCallbacks.splice(callbackIndex, 1)\n }\n }\n }\n\n get form() {\n return this.element.closest(\"form\")\n }\n\n get button() {\n if (this.hasButtonSelectorValue) {\n return document.querySelector(this.buttonSelectorValue)\n }\n\n if (this.form) {\n return this.form.querySelector(\"input[type=submit], button[type=submit]\")\n }\n\n return null\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"url\", \"currentScreen\", \"previous\", \"next\", \"preview\" ]\n\n connect() {\n this.urls = this.urlTargets.map(el => el.innerText)\n\n var currentScreen = this.getCurrentScreen()\n this.previousTarget.setAttribute(\"href\", this.urls[currentScreen - 1])\n this.nextTarget.setAttribute(\"href\", this.urls[currentScreen + 1])\n\n this.updateDisabledState()\n }\n\n previous(event) {\n event.preventDefault()\n\n var url = event.target.getAttribute(\"href\")\n this.previewTarget.setAttribute(\"src\", url)\n\n var currentScreen = this.getCurrentScreen()\n this.setCurrentScreen(currentScreen - 1)\n\n this.previousTarget.setAttribute(\"href\", this.urls[currentScreen - 2])\n this.nextTarget.setAttribute(\"href\", this.urls[currentScreen])\n\n this.updateDisabledState()\n }\n\n next(event) {\n event.preventDefault()\n\n var url = event.target.getAttribute(\"href\")\n this.previewTarget.setAttribute(\"src\", url)\n\n var currentScreen = this.getCurrentScreen()\n this.setCurrentScreen(currentScreen + 1)\n\n this.previousTarget.setAttribute(\"href\", this.urls[currentScreen])\n this.nextTarget.setAttribute(\"href\", this.urls[currentScreen + 2])\n\n this.updateDisabledState()\n }\n\n updateDisabledState() {\n var currentScreen = this.getCurrentScreen()\n\n if (currentScreen <= 0) {\n this.previousTarget.classList.add(\"disabled\")\n } else {\n this.previousTarget.classList.remove(\"disabled\")\n }\n\n if (currentScreen >= this.urls.length - 1) {\n this.nextTarget.classList.add(\"disabled\")\n } else {\n this.nextTarget.classList.remove(\"disabled\")\n }\n }\n\n getCurrentScreen() {\n return parseInt(this.currentScreenTarget.innerText) - 1\n }\n\n setCurrentScreen(screen) {\n this.currentScreenTarget.innerText = screen + 1\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"confirmation\"]\n\n update(event) {\n this.confirmationTarget.classList.add(\"hidden\")\n const checked = event.currentTarget.checked\n\n $.ajax({\n url: `/users/${this.data.get(\"user-id\")}/preferences`,\n method: \"PATCH\",\n data: {\n preference: event.currentTarget.value,\n value: event.currentTarget.checked\n }\n }).done(() => {\n this.confirmationTarget.classList.remove(\"hidden\")\n\n const customEvent = new CustomEvent(\"skip-empty-suggestions-modal-change\", {\n bubbles: true,\n detail: checked,\n })\n document.body.dispatchEvent(customEvent)\n })\n }\n\n dismiss(event) {\n event.preventDefault()\n\n this.element.classList.add(\"hidden\")\n\n $.ajax({\n url: `/users/${this.data.get(\"user-id\")}/preferences`,\n method: \"PATCH\",\n data: {\n preference: this.data.get(\"preference\"),\n value: true\n }\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"video\"]\n\n connect() {\n\n const src = $(this.videoTarget).attr(\"src\")\n const origin = this.data.get(\"origin\")\n\n $(this.element).on('show.bs.modal', (event) => {\n if (origin == null) {\n $(this.videoTarget).attr('src', `${src}?autoplay=1`);\n }\n else {\n $(this.videoTarget).attr('src', `${src}?autoplay=1&origin=${origin}`);\n }\n })\n\n $(this.element).on('hide.bs.modal', (event) => {\n $(this.videoTarget).attr('src', ' ');\n })\n\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n this.calculate()\n }\n\n calculate(){\n const vh = window.innerHeight * 0.01\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\nexport default class extends Controller {\n initialize() {\n this.intersectionObserver = new IntersectionObserver(entries => this.processIntersectionEntries(entries))\n }\n connect() {\n this.intersectionObserver.observe(this.element)\n }\n disconnect() {\n this.intersectionObserver.unobserve(this.element)\n }\n\n // Private\n processIntersectionEntries(entries) {\n entries.forEach(entry => {\n this.element.classList.toggle(this.data.get(\"class\"), entry.isIntersecting)\n })\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"hidden\"]\n\n toggle(event) {\n event.preventDefault();\n\n const anchor = this.data.get(\"id\")\n const offset = parseInt(this.data.get(\"offset\")) || 0\n\n if (this.hiddenTarget.classList.contains('hidden')){\n $(\"html, body\").animate({\n scrollTop: $(`#${anchor}`).offset().top - offset}, 300)\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"content\", \"hidden\", \"required\" ]\n\n toggle(event) {\n event.preventDefault()\n\n if (this.contentTargets.length > 0) {\n this.contentTargets.forEach(t => t.classList.toggle(\"hidden\"))\n }\n\n if (this.hiddenTargets.length > 0) {\n this.hiddenTargets.forEach(t => t.classList.toggle(\"hidden\"))\n }\n\n if (this.requiredTargets.length > 0) {\n this.requiredTargets.forEach(t => t.classList.toggle(\"required\"))\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"source\", \"hidden\" ]\n\n toggle(event) {\n if (this.sourceTarget.checked) {\n this.hiddenTarget.classList.remove(\"hidden\")\n } else {\n this.hiddenTarget.classList.add(\"hidden\")\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n change(event) {\n const previewSize = event.target.value\n const menuPreview = this.locateMenuPreview()\n\n switch (previewSize) {\n case \"mobile\":\n menuPreview.style.width = \"var(--preview-mobile-width)\"\n menuPreview.style.height = \"var(--preview-mobile-height)\"\n break;\n case \"tablet\":\n menuPreview.style.width = \"var(--preview-tablet-width)\"\n menuPreview.style.height = \"var(--preview-tablet-height)\"\n break;\n case \"desktop\":\n menuPreview.style.width = \"var(--preview-desktop-width)\"\n menuPreview.style.height = \"var(--preview-desktop-height)\"\n }\n }\n\n locateMenuPreview() {\n return document.querySelector(\"beermenus-web\").closest(\".pm-menu-chrome\")\n }\n}\n", "\n import * as module0 from './controllers/accordion-controller.js';import * as module1 from './controllers/accordion2-controller.js';import * as module2 from './controllers/admin-beer-controller.js';import * as module3 from './controllers/admin-merge-controller.js';import * as module4 from './controllers/auto-save-controller.js';import * as module5 from './controllers/auto-textfield-height-controller.js';import * as module6 from './controllers/autocomplete-controller.js';import * as module7 from './controllers/availability-promo-controller.js';import * as module8 from './controllers/beacon-controller.js';import * as module9 from './controllers/beer-autocomplete-controller.js';import * as module10 from './controllers/beer-info-controller.js';import * as module11 from './controllers/beer-suggestions-controller.js';import * as module12 from './controllers/beers-added-modal-controller.js';import * as module13 from './controllers/block-modal-controller.js';import * as module14 from './controllers/brewery-autocomplete-controller.js';import * as module15 from './controllers/brewery-multi-select-controller.js';import * as module16 from './controllers/bulk-move-controller.js';import * as module17 from './controllers/calculator-controller.js';import * as module18 from './controllers/calendly-controller.js';import * as module19 from './controllers/charts-controller.js';import * as module20 from './controllers/checkbox-counter-controller.js';import * as module21 from './controllers/checkbox-submit-controller.js';import * as module22 from './controllers/checkbox-toggle-controller.js';import * as module23 from './controllers/checklist-accordion-controller.js';import * as module24 from './controllers/checklists-controller.js';import * as module25 from './controllers/choose-saved-card-controller.js';import * as module26 from './controllers/clipboard_controller.js';import * as module27 from './controllers/closeable-controller.js';import * as module28 from './controllers/codemirror-controller.js';import * as module29 from './controllers/collapsible-controller.js';import * as module30 from './controllers/collapsible-simple-controller.js';import * as module31 from './controllers/condition-ids-controller.js';import * as module32 from './controllers/conditional-input-controller.js';import * as module33 from './controllers/custom-product-autocomplete-controller.js';import * as module34 from './controllers/date-input-controller.js';import * as module35 from './controllers/digital-display-controller.js';import * as module36 from './controllers/filter-templates-controller.js';import * as module37 from './controllers/fonts-controller.js';import * as module38 from './controllers/google-autocomplete-controller.js';import * as module39 from './controllers/hamburger-menu-controller.js';import * as module40 from './controllers/hiding-header-controller.js';import * as module41 from './controllers/honeybadger-controller.js';import * as module42 from './controllers/image-background-remover-controller.js';import * as module43 from './controllers/image-editor-controller.js';import * as module44 from './controllers/location-autocomplete-controller.js';import * as module45 from './controllers/masonry-grid-controller.js';import * as module46 from './controllers/menu-controller.js';import * as module47 from './controllers/menu-search-controller.js';import * as module48 from './controllers/menu-section-controller.js';import * as module49 from './controllers/menu-sections-controller.js';import * as module50 from './controllers/modular-controller.js';import * as module51 from './controllers/multi-select-controller.js';import * as module52 from './controllers/order-search-controller.js';import * as module53 from './controllers/orders-controller.js';import * as module54 from './controllers/pickup-locations-controller.js';import * as module55 from './controllers/place-lead-controller.js';import * as module56 from './controllers/price-calculator-controller.js';import * as module57 from './controllers/print-iframe-controller.js';import * as module58 from './controllers/print-menu-landing-page-controller.js';import * as module59 from './controllers/print-menus-controller.js';import * as module60 from './controllers/print-preview-controller.js';import * as module61 from './controllers/product-autocomplete-controller.js';import * as module62 from './controllers/product-type-controller.js';import * as module63 from './controllers/property-segments-controller.js';import * as module64 from './controllers/purchase-limit-controller.js';import * as module65 from './controllers/region-preview-controller.js';import * as module66 from './controllers/remote-file-form-controller.js';import * as module67 from './controllers/scroll-to-top-controller.js';import * as module68 from './controllers/segmented_field_controller.js';import * as module69 from './controllers/segments-controller.js';import * as module70 from './controllers/select-all-controller.js';import * as module71 from './controllers/serving-controller.js';import * as module72 from './controllers/servings-controller.js';import * as module73 from './controllers/shoelace-controller.js';import * as module74 from './controllers/show-more-controller.js';import * as module75 from './controllers/simple-beer-autocomplete-controller.js';import * as module76 from './controllers/simple-modular-controller.js';import * as module77 from './controllers/smooth-scroller-controller.js';import * as module78 from './controllers/sortable-controller.js';import * as module79 from './controllers/sticky-controller.js';import * as module80 from './controllers/streamlined-menu-controller.js';import * as module81 from './controllers/stripe-controller.js';import * as module82 from './controllers/structured-data-controller.js';import * as module83 from './controllers/tabs-controller.js';import * as module84 from './controllers/tabs2-controller.js';import * as module85 from './controllers/textfit-controller.js';import * as module86 from './controllers/tracked-clicks-controller.js';import * as module87 from './controllers/trix-controller.js';import * as module88 from './controllers/turnstile_controller.js';import * as module89 from './controllers/tv-preview-controller.js';import * as module90 from './controllers/user-preferences-controller.js';import * as module91 from './controllers/video-modal-controller.js';import * as module92 from './controllers/viewport-calculate-controller.js';import * as module93 from './controllers/viewport-entrance-toggle-controller.js';import * as module94 from './controllers/visible-anchor-controller.js';import * as module95 from './controllers/visible-controller.js';import * as module96 from './controllers/visible-from-radio-controller.js';import * as module97 from './controllers/web-menu-preview-sizes-controller.js'\n const modules = {\"./controllers/accordion-controller.js\": module0,\"./controllers/accordion2-controller.js\": module1,\"./controllers/admin-beer-controller.js\": module2,\"./controllers/admin-merge-controller.js\": module3,\"./controllers/auto-save-controller.js\": module4,\"./controllers/auto-textfield-height-controller.js\": module5,\"./controllers/autocomplete-controller.js\": module6,\"./controllers/availability-promo-controller.js\": module7,\"./controllers/beacon-controller.js\": module8,\"./controllers/beer-autocomplete-controller.js\": module9,\"./controllers/beer-info-controller.js\": module10,\"./controllers/beer-suggestions-controller.js\": module11,\"./controllers/beers-added-modal-controller.js\": module12,\"./controllers/block-modal-controller.js\": module13,\"./controllers/brewery-autocomplete-controller.js\": module14,\"./controllers/brewery-multi-select-controller.js\": module15,\"./controllers/bulk-move-controller.js\": module16,\"./controllers/calculator-controller.js\": module17,\"./controllers/calendly-controller.js\": module18,\"./controllers/charts-controller.js\": module19,\"./controllers/checkbox-counter-controller.js\": module20,\"./controllers/checkbox-submit-controller.js\": module21,\"./controllers/checkbox-toggle-controller.js\": module22,\"./controllers/checklist-accordion-controller.js\": module23,\"./controllers/checklists-controller.js\": module24,\"./controllers/choose-saved-card-controller.js\": module25,\"./controllers/clipboard_controller.js\": module26,\"./controllers/closeable-controller.js\": module27,\"./controllers/codemirror-controller.js\": module28,\"./controllers/collapsible-controller.js\": module29,\"./controllers/collapsible-simple-controller.js\": module30,\"./controllers/condition-ids-controller.js\": module31,\"./controllers/conditional-input-controller.js\": module32,\"./controllers/custom-product-autocomplete-controller.js\": module33,\"./controllers/date-input-controller.js\": module34,\"./controllers/digital-display-controller.js\": module35,\"./controllers/filter-templates-controller.js\": module36,\"./controllers/fonts-controller.js\": module37,\"./controllers/google-autocomplete-controller.js\": module38,\"./controllers/hamburger-menu-controller.js\": module39,\"./controllers/hiding-header-controller.js\": module40,\"./controllers/honeybadger-controller.js\": module41,\"./controllers/image-background-remover-controller.js\": module42,\"./controllers/image-editor-controller.js\": module43,\"./controllers/location-autocomplete-controller.js\": module44,\"./controllers/masonry-grid-controller.js\": module45,\"./controllers/menu-controller.js\": module46,\"./controllers/menu-search-controller.js\": module47,\"./controllers/menu-section-controller.js\": module48,\"./controllers/menu-sections-controller.js\": module49,\"./controllers/modular-controller.js\": module50,\"./controllers/multi-select-controller.js\": module51,\"./controllers/order-search-controller.js\": module52,\"./controllers/orders-controller.js\": module53,\"./controllers/pickup-locations-controller.js\": module54,\"./controllers/place-lead-controller.js\": module55,\"./controllers/price-calculator-controller.js\": module56,\"./controllers/print-iframe-controller.js\": module57,\"./controllers/print-menu-landing-page-controller.js\": module58,\"./controllers/print-menus-controller.js\": module59,\"./controllers/print-preview-controller.js\": module60,\"./controllers/product-autocomplete-controller.js\": module61,\"./controllers/product-type-controller.js\": module62,\"./controllers/property-segments-controller.js\": module63,\"./controllers/purchase-limit-controller.js\": module64,\"./controllers/region-preview-controller.js\": module65,\"./controllers/remote-file-form-controller.js\": module66,\"./controllers/scroll-to-top-controller.js\": module67,\"./controllers/segmented_field_controller.js\": module68,\"./controllers/segments-controller.js\": module69,\"./controllers/select-all-controller.js\": module70,\"./controllers/serving-controller.js\": module71,\"./controllers/servings-controller.js\": module72,\"./controllers/shoelace-controller.js\": module73,\"./controllers/show-more-controller.js\": module74,\"./controllers/simple-beer-autocomplete-controller.js\": module75,\"./controllers/simple-modular-controller.js\": module76,\"./controllers/smooth-scroller-controller.js\": module77,\"./controllers/sortable-controller.js\": module78,\"./controllers/sticky-controller.js\": module79,\"./controllers/streamlined-menu-controller.js\": module80,\"./controllers/stripe-controller.js\": module81,\"./controllers/structured-data-controller.js\": module82,\"./controllers/tabs-controller.js\": module83,\"./controllers/tabs2-controller.js\": module84,\"./controllers/textfit-controller.js\": module85,\"./controllers/tracked-clicks-controller.js\": module86,\"./controllers/trix-controller.js\": module87,\"./controllers/turnstile_controller.js\": module88,\"./controllers/tv-preview-controller.js\": module89,\"./controllers/user-preferences-controller.js\": module90,\"./controllers/video-modal-controller.js\": module91,\"./controllers/viewport-calculate-controller.js\": module92,\"./controllers/viewport-entrance-toggle-controller.js\": module93,\"./controllers/visible-anchor-controller.js\": module94,\"./controllers/visible-controller.js\": module95,\"./controllers/visible-from-radio-controller.js\": module96,\"./controllers/web-menu-preview-sizes-controller.js\": module97,\n };\n export default modules;\n ", "import { Controller } from \"@hotwired/stimulus\";\nconst _Dialog = class _Dialog extends Controller {\n initialize() {\n this.forceClose = this.forceClose.bind(this);\n }\n connect() {\n this.openValue && this.open(), document.addEventListener(\"turbo:before-render\", this.forceClose);\n }\n disconnect() {\n document.removeEventListener(\"turbo:before-render\", this.forceClose);\n }\n open() {\n this.dialogTarget.showModal();\n }\n close() {\n this.dialogTarget.setAttribute(\"closing\", \"\"), Promise.all(this.dialogTarget.getAnimations().map((animation) => animation.finished)).then(() => {\n this.dialogTarget.removeAttribute(\"closing\"), this.dialogTarget.close();\n });\n }\n backdropClose(event) {\n event.target === this.dialogTarget && this.close();\n }\n forceClose() {\n this.dialogTarget.close();\n }\n};\n_Dialog.targets = [\"dialog\"], _Dialog.values = {\n open: {\n type: Boolean,\n default: !1\n }\n};\nlet Dialog = _Dialog;\nexport {\n Dialog as default\n};\n", "/*\n * stimulus-use 0.52.1\n */\nimport { Controller } from \"@hotwired/stimulus\";\n\nconst method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == \"function\") {\n return method;\n } else {\n return (...args) => {};\n }\n};\n\nconst composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n } else if (typeof eventPrefix === \"string\") {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\n\nconst extendedEvent = (type, event, detail) => {\n const {bubbles: bubbles, cancelable: cancelable, composed: composed} = event || {\n bubbles: true,\n cancelable: true,\n composed: true\n };\n if (event) {\n Object.assign(detail, {\n originalEvent: event\n });\n }\n const customEvent = new CustomEvent(type, {\n bubbles: bubbles,\n cancelable: cancelable,\n composed: composed,\n detail: detail\n });\n return customEvent;\n};\n\nfunction isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n const windowWidth = window.innerWidth || document.documentElement.clientWidth;\n const vertInView = rect.top <= windowHeight && rect.top + rect.height > 0;\n const horInView = rect.left <= windowWidth && rect.left + rect.width > 0;\n return vertInView && horInView;\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, ((_, char) => char.toUpperCase()));\n}\n\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise */ function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nconst defaultOptions$8 = {\n debug: false,\n logger: console,\n dispatchEvent: true,\n eventPrefix: true\n};\n\nclass StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug) return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n this.logger.log(Object.assign({\n controllerId: this.controllerId\n }, args));\n this.logger.groupEnd();\n };\n this.warn = message => {\n this.logger.warn(`%c${this.controller.identifier} %c${message}`, \"color: #3B82F6; font-weight: bold\", \"color: unset\");\n };\n this.dispatch = (eventName, details = {}) => {\n if (this.dispatchEvent) {\n const {event: event} = details, eventDetails = __rest(details, [ \"event\" ]);\n const customEvent = this.extendedEvent(eventName, event || null, eventDetails);\n this.targetElement.dispatchEvent(customEvent);\n this.log(\"dispatchEvent\", Object.assign({\n eventName: customEvent.type\n }, eventDetails));\n }\n };\n this.call = (methodName, args = {}) => {\n const method = this.controller[methodName];\n if (typeof method == \"function\") {\n return method.call(this.controller, args);\n }\n };\n this.extendedEvent = (name, event, detail) => {\n const {bubbles: bubbles, cancelable: cancelable, composed: composed} = event || {\n bubbles: true,\n cancelable: true,\n composed: true\n };\n if (event) {\n Object.assign(detail, {\n originalEvent: event\n });\n }\n const customEvent = new CustomEvent(this.composeEventName(name), {\n bubbles: bubbles,\n cancelable: cancelable,\n composed: composed,\n detail: detail\n });\n return customEvent;\n };\n this.composeEventName = name => {\n let composedName = name;\n if (this.eventPrefix === true) {\n composedName = `${this.controller.identifier}:${name}`;\n } else if (typeof this.eventPrefix === \"string\") {\n composedName = `${this.eventPrefix}:${name}`;\n }\n return composedName;\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions$8.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions$8.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$8, options);\n Object.assign(this, {\n dispatchEvent: dispatchEvent,\n eventPrefix: eventPrefix\n });\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n\nconst defaultOptions$7 = {\n eventPrefix: true,\n bubbles: true,\n cancelable: true\n};\n\nclass UseDispatch extends StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c, _d;\n super(controller, options);\n this.dispatch = (eventName, detail = {}) => {\n const {controller: controller, targetElement: targetElement, eventPrefix: eventPrefix, bubbles: bubbles, cancelable: cancelable, log: log, warn: warn} = this;\n Object.assign(detail, {\n controller: controller\n });\n const eventNameWithPrefix = composeEventName(eventName, this.controller, eventPrefix);\n const event = new CustomEvent(eventNameWithPrefix, {\n detail: detail,\n bubbles: bubbles,\n cancelable: cancelable\n });\n targetElement.dispatchEvent(event);\n warn(\"`useDispatch()` is deprecated. Please use the built-in `this.dispatch()` function from Stimulus. You can find more information on how to upgrade at: https://stimulus-use.github.io/stimulus-use/#/use-dispatch\");\n log(\"dispatch\", {\n eventName: eventNameWithPrefix,\n detail: detail,\n bubbles: bubbles,\n cancelable: cancelable\n });\n return event;\n };\n this.targetElement = (_a = options.element) !== null && _a !== void 0 ? _a : controller.element;\n this.eventPrefix = (_b = options.eventPrefix) !== null && _b !== void 0 ? _b : defaultOptions$7.eventPrefix;\n this.bubbles = (_c = options.bubbles) !== null && _c !== void 0 ? _c : defaultOptions$7.bubbles;\n this.cancelable = (_d = options.cancelable) !== null && _d !== void 0 ? _d : defaultOptions$7.cancelable;\n this.enhanceController();\n }\n enhanceController() {\n Object.assign(this.controller, {\n dispatch: this.dispatch\n });\n }\n}\n\nconst useDispatch = (controller, options = {}) => new UseDispatch(controller, options);\n\nconst defaultOptions$6 = {\n overwriteDispatch: true\n};\n\nconst useApplication = (controller, options = {}) => {\n const {overwriteDispatch: overwriteDispatch} = Object.assign({}, defaultOptions$6, options);\n Object.defineProperty(controller, \"isPreview\", {\n get() {\n return document.documentElement.hasAttribute(\"data-turbolinks-preview\") || document.documentElement.hasAttribute(\"data-turbo-preview\");\n }\n });\n Object.defineProperty(controller, \"isConnected\", {\n get() {\n return !!Array.from(this.context.module.connectedContexts).find((c => c === this.context));\n }\n });\n Object.defineProperty(controller, \"csrfToken\", {\n get() {\n return this.metaValue(\"csrf-token\");\n }\n });\n if (overwriteDispatch) {\n useDispatch(controller, options);\n }\n Object.assign(controller, {\n metaValue(name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n return element && element.getAttribute(\"content\");\n }\n });\n};\n\nclass ApplicationController extends Controller {\n constructor(context) {\n super(context);\n this.isPreview = false;\n this.isConnected = false;\n this.csrfToken = \"\";\n useApplication(this, this.options);\n }\n}\n\nconst defaultOptions$5 = {\n events: [ \"click\", \"touchend\" ],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true\n};\n\nconst useClickOutside = (composableController, options = {}) => {\n const controller = composableController;\n const {onlyVisible: onlyVisible, dispatchEvent: dispatchEvent, events: events, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$5, options);\n const onEvent = event => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || !isElementInViewport(targetElement) && onlyVisible) {\n return;\n }\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n if (dispatchEvent) {\n const eventName = composeEventName(\"click:outside\", controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, {\n controller: controller\n });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach((event => {\n window.addEventListener(event, onEvent, true);\n }));\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach((event => {\n window.removeEventListener(event, onEvent, true);\n }));\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass ClickOutsideComposableController extends Controller {}\n\nclass ClickOutsideController extends ClickOutsideComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useClickOutside(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nclass DebounceController extends Controller {}\n\nDebounceController.debounces = [];\n\nconst defaultWait$1 = 200;\n\nconst debounce = (fn, wait = defaultWait$1) => {\n let timeoutId = null;\n return function() {\n const args = Array.from(arguments);\n const context = this;\n const params = args.map((arg => arg.params));\n const callback = () => {\n args.forEach(((arg, index) => arg.params = params[index]));\n return fn.apply(context, args);\n };\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\n\nconst useDebounce = (composableController, options) => {\n const controller = composableController;\n const constructor = controller.constructor;\n constructor.debounces.forEach((func => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const {name: name, wait: wait} = func;\n if (!name) return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n }));\n};\n\nclass UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener(\"mouseenter\", this.onEnter);\n this.targetElement.addEventListener(\"mouseleave\", this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener(\"mouseenter\", this.onEnter);\n this.targetElement.removeEventListener(\"mouseleave\", this.onLeave);\n };\n this.onEnter = event => {\n this.call(\"mouseEnter\", event);\n this.log(\"mouseEnter\", {\n hover: true\n });\n this.dispatch(\"mouseEnter\", {\n hover: false\n });\n };\n this.onLeave = event => {\n this.call(\"mouseLeave\", event);\n this.log(\"mouseLeave\", {\n hover: false\n });\n this.dispatch(\"mouseLeave\", {\n hover: false\n });\n };\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useHover = (composableController, options = {}) => {\n const controller = composableController;\n const observer = new UseHover(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass HoverComposableController extends Controller {}\n\nclass HoverController extends HoverComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useHover(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst defaultEvents = [ \"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\" ];\n\nconst oneMinute = 6e4;\n\nconst defaultOptions$4 = {\n ms: oneMinute,\n initialState: false,\n events: defaultEvents,\n dispatchEvent: true,\n eventPrefix: true\n};\n\nconst useIdle = (composableController, options = {}) => {\n const controller = composableController;\n const {ms: ms, initialState: initialState, events: events, dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$4, options);\n let isIdle = initialState;\n let timeout = setTimeout((() => {\n isIdle = true;\n dispatchAway();\n }), ms);\n const dispatchAway = event => {\n const eventName = composeEventName(\"away\", controller, eventPrefix);\n controller.isIdle = true;\n method(controller, \"away\").call(controller, event);\n if (dispatchEvent) {\n const clickOutsideEvent = extendedEvent(eventName, event || null, {\n controller: controller\n });\n controller.element.dispatchEvent(clickOutsideEvent);\n }\n };\n const dispatchBack = event => {\n const eventName = composeEventName(\"back\", controller, eventPrefix);\n controller.isIdle = false;\n method(controller, \"back\").call(controller, event);\n if (dispatchEvent) {\n const clickOutsideEvent = extendedEvent(eventName, event || null, {\n controller: controller\n });\n controller.element.dispatchEvent(clickOutsideEvent);\n }\n };\n const onEvent = event => {\n if (isIdle) dispatchBack(event);\n isIdle = false;\n clearTimeout(timeout);\n timeout = setTimeout((() => {\n isIdle = true;\n dispatchAway(event);\n }), ms);\n };\n const onVisibility = event => {\n if (!document.hidden) onEvent(event);\n };\n if (isIdle) {\n dispatchAway();\n } else {\n dispatchBack();\n }\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n events.forEach((event => {\n window.addEventListener(event, onEvent);\n }));\n document.addEventListener(\"visibilitychange\", onVisibility);\n };\n const unobserve = () => {\n clearTimeout(timeout);\n events.forEach((event => {\n window.removeEventListener(event, onEvent);\n }));\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass IdleComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.isIdle = false;\n }\n}\n\nclass IdleController extends IdleComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useIdle(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst defaultOptions$3 = {\n dispatchEvent: true,\n eventPrefix: true,\n visibleAttribute: \"isVisible\"\n};\n\nconst useIntersection = (composableController, options = {}) => {\n const controller = composableController;\n const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix, visibleAttribute: visibleAttribute} = Object.assign({}, defaultOptions$3, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (!controller.intersectionElements) controller.intersectionElements = [];\n controller.intersectionElements.push(targetElement);\n const callback = entries => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n } else if (targetElement.hasAttribute(visibleAttribute)) {\n dispatchDisappear(entry);\n }\n };\n const observer = new IntersectionObserver(callback, options);\n const dispatchAppear = entry => {\n targetElement.setAttribute(visibleAttribute, \"true\");\n method(controller, \"appear\").call(controller, entry, observer);\n if (dispatchEvent) {\n const eventName = composeEventName(\"appear\", controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, {\n controller: controller,\n entry: entry,\n observer: observer\n });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = entry => {\n targetElement.removeAttribute(visibleAttribute);\n method(controller, \"disappear\").call(controller, entry, observer);\n if (dispatchEvent) {\n const eventName = composeEventName(\"disappear\", controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, {\n controller: controller,\n entry: entry,\n observer: observer\n });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const disconnect = () => {\n unobserve();\n controllerDisconnect();\n };\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n const noneVisible = () => controller.intersectionElements.filter((element => element.hasAttribute(visibleAttribute))).length === 0;\n const oneVisible = () => controller.intersectionElements.filter((element => element.hasAttribute(visibleAttribute))).length === 1;\n const atLeastOneVisible = () => controller.intersectionElements.some((element => element.hasAttribute(visibleAttribute)));\n const allVisible = () => controller.intersectionElements.every((element => element.hasAttribute(visibleAttribute)));\n const isVisible = allVisible;\n Object.assign(controller, {\n isVisible: isVisible,\n noneVisible: noneVisible,\n oneVisible: oneVisible,\n atLeastOneVisible: atLeastOneVisible,\n allVisible: allVisible,\n disconnect: disconnect\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass IntersectionComposableController extends Controller {}\n\nclass IntersectionController extends IntersectionComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useIntersection(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst useLazyLoad = (controller, options) => {\n const callback = entries => {\n const [entry] = entries;\n if (entry.isIntersecting && !controller.isLoaded) {\n handleAppear();\n }\n };\n const handleAppear = entry => {\n const src = controller.data.get(\"src\");\n if (!src) return;\n const imageElement = controller.element;\n controller.isLoading = true;\n method(controller, \"loading\").call(controller, src);\n imageElement.onload = () => {\n handleLoaded(src);\n };\n imageElement.src = src;\n };\n const handleLoaded = src => {\n controller.isLoading = false;\n controller.isLoaded = true;\n method(controller, \"loaded\").call(controller, src);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(controller.element);\n };\n const unobserve = () => {\n observer.unobserve(controller.element);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass LazyLoadComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.isLoading = false;\n this.isLoaded = false;\n }\n}\n\nclass LazyLoadController extends LazyLoadComposableController {\n constructor(context) {\n super(context);\n this.options = {\n rootMargin: \"10%\"\n };\n requestAnimationFrame((() => {\n const [observe, unobserve] = useLazyLoad(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst defaultOptions$2 = {\n mediaQueries: {},\n dispatchEvent: true,\n eventPrefix: true,\n debug: false\n};\n\nclass UseMatchMedia extends StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c, _d;\n super(controller, options);\n this.matches = [];\n this.callback = event => {\n const name = Object.keys(this.mediaQueries).find((name => this.mediaQueries[name] === event.media));\n if (!name) return;\n const {media: media, matches: matches} = event;\n this.changed({\n name: name,\n media: media,\n matches: matches,\n event: event\n });\n };\n this.changed = payload => {\n const {name: name} = payload;\n if (payload.event) {\n this.call(camelize(`${name}_changed`), payload);\n this.dispatch(`${name}:changed`, payload);\n this.log(`media query \"${name}\" changed`, payload);\n }\n if (payload.matches) {\n this.call(camelize(`is_${name}`), payload);\n this.dispatch(`is:${name}`, payload);\n } else {\n this.call(camelize(`not_${name}`), payload);\n this.dispatch(`not:${name}`, payload);\n }\n };\n this.observe = () => {\n Object.keys(this.mediaQueries).forEach((name => {\n const media = this.mediaQueries[name];\n const match = window.matchMedia(media);\n match.addListener(this.callback);\n this.matches.push(match);\n this.changed({\n name: name,\n media: media,\n matches: match.matches\n });\n }));\n };\n this.unobserve = () => {\n this.matches.forEach((match => match.removeListener(this.callback)));\n };\n this.controller = controller;\n this.mediaQueries = (_a = options.mediaQueries) !== null && _a !== void 0 ? _a : defaultOptions$2.mediaQueries;\n this.dispatchEvent = (_b = options.dispatchEvent) !== null && _b !== void 0 ? _b : defaultOptions$2.dispatchEvent;\n this.eventPrefix = (_c = options.eventPrefix) !== null && _c !== void 0 ? _c : defaultOptions$2.eventPrefix;\n this.debug = (_d = options.debug) !== null && _d !== void 0 ? _d : defaultOptions$2.debug;\n if (!window.matchMedia) {\n console.error(\"window.matchMedia() is not available\");\n return;\n }\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useMatchMedia = (controller, options = {}) => {\n const observer = new UseMatchMedia(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nconst memoize = (controller, name, value) => {\n Object.defineProperty(controller, name, {\n value: value\n });\n return value;\n};\n\nconst useMemo = controller => {\n var _a;\n (_a = controller.constructor.memos) === null || _a === void 0 ? void 0 : _a.forEach((getter => {\n memoize(controller, getter, controller[getter]);\n }));\n};\n\nconst defineMetaGetter = (controller, metaName, suffix) => {\n const getterName = suffix ? `${camelize(metaName)}Meta` : camelize(metaName);\n Object.defineProperty(controller, getterName, {\n get() {\n return typeCast(metaValue(metaName));\n }\n });\n};\n\nfunction metaValue(name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n return element && element.getAttribute(\"content\");\n}\n\nfunction typeCast(value) {\n try {\n return JSON.parse(value);\n } catch (o_O) {\n return value;\n }\n}\n\nconst useMeta = (controller, options = {\n suffix: true\n}) => {\n const metaNames = controller.constructor.metaNames;\n const suffix = options.suffix;\n metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName => {\n defineMetaGetter(controller, metaName, suffix);\n }));\n Object.defineProperty(controller, \"metas\", {\n get() {\n const result = {};\n metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName => {\n const value = typeCast(metaValue(metaName));\n if (value !== undefined && value !== null) {\n result[camelize(metaName)] = value;\n }\n }));\n return result;\n }\n });\n};\n\nclass UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n } catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = entries => {\n this.call(\"mutate\", entries);\n this.log(\"mutate\", {\n entries: entries\n });\n this.dispatch(\"mutate\", {\n entries: entries\n });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass MutationComposableController extends Controller {}\n\nclass MutationController extends MutationComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useMutation(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst defaultOptions$1 = {\n dispatchEvent: true,\n eventPrefix: true\n};\n\nconst useResize = (composableController, options = {}) => {\n const controller = composableController;\n const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$1, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = entries => {\n const [entry] = entries;\n method(controller, \"resize\").call(controller, entry.contentRect);\n if (dispatchEvent) {\n const eventName = composeEventName(\"resize\", controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, {\n controller: controller,\n entry: entry\n });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new ResizeObserver(callback);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass ResizeComposableController extends Controller {}\n\nclass ResizeController extends ResizeComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useResize(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nclass UseTargetMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.observer.observe(this.targetElement, {\n subtree: true,\n characterData: true,\n childList: true,\n attributes: true,\n attributeOldValue: true,\n attributeFilter: [ this.targetSelector, this.scopedTargetSelector ]\n });\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = entries => {\n for (const mutation of entries) {\n switch (mutation.type) {\n case \"attributes\":\n let newValue = mutation.target.getAttribute(mutation.attributeName);\n let oldValue = mutation.oldValue;\n if (mutation.attributeName === this.targetSelector || mutation.attributeName === this.scopedTargetSelector) {\n let oldTargets = this.targetsUsedByThisController(oldValue);\n let newTargets = this.targetsUsedByThisController(newValue);\n let removedTargets = oldTargets.filter((target => !newTargets.includes(target)));\n let addedTargets = newTargets.filter((target => !oldTargets.includes(target)));\n removedTargets.forEach((target => this.targetRemoved(this.stripIdentifierPrefix(target), mutation.target, \"attributeChange\")));\n addedTargets.forEach((target => this.targetAdded(this.stripIdentifierPrefix(target), mutation.target, \"attributeChange\")));\n }\n break;\n\n case \"characterData\":\n let nodule = this.findTargetInAncestry(mutation.target);\n if (nodule == null) {\n return;\n } else {\n let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n supportedTargets.forEach((target => {\n this.targetChanged(this.stripIdentifierPrefix(target), nodule, \"domMutation\");\n }));\n }\n break;\n\n case \"childList\":\n let {addedNodes: addedNodes, removedNodes: removedNodes} = mutation;\n addedNodes.forEach((node => this.processNodeDOMMutation(node, this.targetAdded)));\n removedNodes.forEach((node => this.processNodeDOMMutation(node, this.targetRemoved)));\n break;\n }\n }\n };\n this.controller = controller;\n this.options = options;\n this.targetElement = controller.element;\n this.identifier = controller.scope.identifier;\n this.identifierPrefix = `${this.identifier}.`;\n this.targetSelector = controller.scope.schema.targetAttribute;\n this.scopedTargetSelector = `data-${this.identifier}-target`;\n this.targets = options.targets || controller.constructor.targets;\n this.prefixedTargets = this.targets.map((target => `${this.identifierPrefix}${target}`));\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n processNodeDOMMutation(node, initialChangeModeAssumption) {\n let nodule = node;\n let change = initialChangeModeAssumption;\n let supportedTargets = [];\n if (nodule.nodeName == \"#text\" || this.targetsUsedByThisControllerFromNode(nodule).length == 0) {\n change = this.targetChanged;\n nodule = this.findTargetInAncestry(node);\n } else {\n supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n }\n if (nodule == null) {\n return;\n } else if (supportedTargets.length == 0) {\n supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n }\n supportedTargets.forEach((target => {\n change.call(this, this.stripIdentifierPrefix(target), nodule, \"domMutation\");\n }));\n }\n findTargetInAncestry(node) {\n let nodule = node;\n let supportedTargets = [];\n if (nodule.nodeName != \"#text\") {\n supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n }\n while (nodule.parentNode !== null && nodule.parentNode != this.targetElement && supportedTargets.length == 0) {\n nodule = nodule.parentNode;\n if (nodule.nodeName !== \"#text\") {\n let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n if (supportedTargets.length > 0) {\n return nodule;\n }\n }\n }\n if (nodule.nodeName == \"#text\") {\n return null;\n }\n if (nodule.parentNode == null) {\n return null;\n }\n if (nodule.parentNode == this.targetElement) {\n if (this.targetsUsedByThisControllerFromNode(nodule).length > 0) {\n return nodule;\n }\n return null;\n }\n return null;\n }\n targetAdded(name, node, trigger) {\n let targetCallback = `${name}TargetAdded`;\n this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n this.log(\"targetAdded\", {\n target: name,\n node: node,\n trigger: trigger\n });\n }\n targetRemoved(name, node, trigger) {\n let targetCallback = `${name}TargetRemoved`;\n this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n this.log(\"targetRemoved\", {\n target: name,\n node: node,\n trigger: trigger\n });\n }\n targetChanged(name, node, trigger) {\n let targetCallback = `${name}TargetChanged`;\n this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n this.log(\"targetChanged\", {\n target: name,\n node: node,\n trigger: trigger\n });\n }\n targetsUsedByThisControllerFromNode(node) {\n if (node.nodeName == \"#text\" || node.nodeName == \"#comment\") {\n return [];\n }\n let nodeElement = node;\n return this.targetsUsedByThisController(nodeElement.getAttribute(this.scopedTargetSelector) || nodeElement.getAttribute(this.targetSelector));\n }\n targetsUsedByThisController(targetStr) {\n targetStr = targetStr || \"\";\n let targetsToCheck = this.stripIdentifierPrefix(targetStr).split(\" \");\n return this.targets.filter((n => targetsToCheck.indexOf(n) !== -1));\n }\n stripIdentifierPrefix(target) {\n return target.replace(new RegExp(this.identifierPrefix, \"g\"), \"\");\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useTargetMutation = (composableController, options = {}) => {\n const controller = composableController;\n const observer = new UseTargetMutation(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass TargetMutationComposableController extends Controller {}\n\nclass TargetMutationController extends TargetMutationComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useTargetMutation(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nclass ThrottleController extends Controller {}\n\nThrottleController.throttles = [];\n\nconst defaultWait = 200;\n\nfunction throttle(func, wait = defaultWait) {\n let inThrottle;\n return function() {\n const args = arguments;\n const context = this;\n if (!inThrottle) {\n inThrottle = true;\n func.apply(context, args);\n setTimeout((() => inThrottle = false), wait);\n }\n };\n}\n\nconst useThrottle = (composableController, options = {}) => {\n var _a;\n const controller = composableController;\n const constructor = controller.constructor;\n (_a = constructor.throttles) === null || _a === void 0 ? void 0 : _a.forEach((func => {\n if (typeof func === \"string\") {\n controller[func] = throttle(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const {name: name, wait: wait} = func;\n if (!name) return;\n controller[name] = throttle(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n }));\n};\n\nconst alpineNames = {\n enterFromClass: \"enter\",\n enterActiveClass: \"enterStart\",\n enterToClass: \"enterEnd\",\n leaveFromClass: \"leave\",\n leaveActiveClass: \"leaveStart\",\n leaveToClass: \"leaveEnd\"\n};\n\nconst defaultOptions = {\n transitioned: false,\n hiddenClass: \"hidden\",\n preserveOriginalClass: true,\n removeToClasses: true\n};\n\nconst useTransition = (composableController, options = {}) => {\n var _a, _b, _c;\n const controller = composableController;\n const targetName = controller.element.dataset.transitionTarget;\n let targetFromAttribute;\n if (targetName) {\n targetFromAttribute = controller[`${targetName}Target`];\n }\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || targetFromAttribute || controller.element;\n if (!(targetElement instanceof HTMLElement || targetElement instanceof SVGElement)) return;\n const dataset = targetElement.dataset;\n const leaveAfter = parseInt(dataset.leaveAfter || \"\") || options.leaveAfter || 0;\n const {transitioned: transitioned, hiddenClass: hiddenClass, preserveOriginalClass: preserveOriginalClass, removeToClasses: removeToClasses} = Object.assign({}, defaultOptions, options);\n const controllerEnter = (_a = controller.enter) === null || _a === void 0 ? void 0 : _a.bind(controller);\n const controllerLeave = (_b = controller.leave) === null || _b === void 0 ? void 0 : _b.bind(controller);\n const controllerToggleTransition = (_c = controller.toggleTransition) === null || _c === void 0 ? void 0 : _c.bind(controller);\n async function enter(event) {\n if (controller.transitioned) return;\n controller.transitioned = true;\n controllerEnter && controllerEnter(event);\n const enterFromClasses = getAttribute(\"enterFrom\", options, dataset);\n const enterActiveClasses = getAttribute(\"enterActive\", options, dataset);\n const enterToClasses = getAttribute(\"enterTo\", options, dataset);\n const leaveToClasses = getAttribute(\"leaveTo\", options, dataset);\n if (!!hiddenClass) {\n targetElement.classList.remove(hiddenClass);\n }\n if (!removeToClasses) {\n removeClasses(targetElement, leaveToClasses);\n }\n await transition(targetElement, enterFromClasses, enterActiveClasses, enterToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n if (leaveAfter > 0) {\n setTimeout((() => {\n leave(event);\n }), leaveAfter);\n }\n }\n async function leave(event) {\n if (!controller.transitioned) return;\n controller.transitioned = false;\n controllerLeave && controllerLeave(event);\n const leaveFromClasses = getAttribute(\"leaveFrom\", options, dataset);\n const leaveActiveClasses = getAttribute(\"leaveActive\", options, dataset);\n const leaveToClasses = getAttribute(\"leaveTo\", options, dataset);\n const enterToClasses = getAttribute(\"enterTo\", options, dataset);\n if (!removeToClasses) {\n removeClasses(targetElement, enterToClasses);\n }\n await transition(targetElement, leaveFromClasses, leaveActiveClasses, leaveToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n if (!!hiddenClass) {\n targetElement.classList.add(hiddenClass);\n }\n }\n function toggleTransition(event) {\n controllerToggleTransition && controllerToggleTransition(event);\n if (controller.transitioned) {\n leave();\n } else {\n enter();\n }\n }\n async function transition(element, initialClasses, activeClasses, endClasses, hiddenClass, preserveOriginalClass, removeEndClasses) {\n const stashedClasses = [];\n if (preserveOriginalClass) {\n initialClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n activeClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n endClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n }\n addClasses(element, initialClasses);\n removeClasses(element, stashedClasses);\n addClasses(element, activeClasses);\n await nextAnimationFrame();\n removeClasses(element, initialClasses);\n addClasses(element, endClasses);\n await afterTransition(element);\n removeClasses(element, activeClasses);\n if (removeEndClasses) {\n removeClasses(element, endClasses);\n }\n addClasses(element, stashedClasses);\n }\n function initialState() {\n controller.transitioned = transitioned;\n if (transitioned) {\n if (!!hiddenClass) {\n targetElement.classList.remove(hiddenClass);\n }\n enter();\n } else {\n if (!!hiddenClass) {\n targetElement.classList.add(hiddenClass);\n }\n leave();\n }\n }\n function addClasses(element, classes) {\n if (classes.length > 0) {\n element.classList.add(...classes);\n }\n }\n function removeClasses(element, classes) {\n if (classes.length > 0) {\n element.classList.remove(...classes);\n }\n }\n initialState();\n Object.assign(controller, {\n enter: enter,\n leave: leave,\n toggleTransition: toggleTransition\n });\n return [ enter, leave, toggleTransition ];\n};\n\nfunction getAttribute(name, options, dataset) {\n const datasetName = `transition${name[0].toUpperCase()}${name.substr(1)}`;\n const datasetAlpineName = alpineNames[name];\n const classes = options[name] || dataset[datasetName] || dataset[datasetAlpineName] || \" \";\n return isEmpty(classes) ? [] : classes.split(\" \");\n}\n\nasync function afterTransition(element) {\n return new Promise((resolve => {\n const duration = Number(getComputedStyle(element).transitionDuration.split(\",\")[0].replace(\"s\", \"\")) * 1e3;\n setTimeout((() => {\n resolve(duration);\n }), duration);\n }));\n}\n\nasync function nextAnimationFrame() {\n return new Promise((resolve => {\n requestAnimationFrame((() => {\n requestAnimationFrame(resolve);\n }));\n }));\n}\n\nfunction isEmpty(str) {\n return str.length === 0 || !str.trim();\n}\n\nclass TransitionComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.transitioned = false;\n }\n}\n\nclass TransitionController extends TransitionComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n useTransition(this, this.options);\n }));\n }\n}\n\nclass UseVisibility extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.controller.isVisible = !document.hidden;\n document.addEventListener(\"visibilitychange\", this.handleVisibilityChange);\n this.handleVisibilityChange();\n };\n this.unobserve = () => {\n document.removeEventListener(\"visibilitychange\", this.handleVisibilityChange);\n };\n this.becomesInvisible = event => {\n this.controller.isVisible = false;\n this.call(\"invisible\", event);\n this.log(\"invisible\", {\n isVisible: false\n });\n this.dispatch(\"invisible\", {\n event: event,\n isVisible: false\n });\n };\n this.becomesVisible = event => {\n this.controller.isVisible = true;\n this.call(\"visible\", event);\n this.log(\"visible\", {\n isVisible: true\n });\n this.dispatch(\"visible\", {\n event: event,\n isVisible: true\n });\n };\n this.handleVisibilityChange = event => {\n if (document.hidden) {\n this.becomesInvisible(event);\n } else {\n this.becomesVisible(event);\n }\n };\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controllerDisconnect;\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useVisibility = (composableController, options = {}) => {\n const controller = composableController;\n const observer = new UseVisibility(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass VisibilityComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.isVisible = false;\n }\n}\n\nclass VisibilityController extends VisibilityComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useVisibility(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nclass UseWindowFocus extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n if (document.hasFocus()) {\n this.becomesFocused();\n } else {\n this.becomesUnfocused();\n }\n this.interval = setInterval((() => {\n this.handleWindowFocusChange();\n }), this.intervalDuration);\n };\n this.unobserve = () => {\n clearInterval(this.interval);\n };\n this.becomesUnfocused = event => {\n this.controller.hasFocus = false;\n this.call(\"unfocus\", event);\n this.log(\"unfocus\", {\n hasFocus: false\n });\n this.dispatch(\"unfocus\", {\n event: event,\n hasFocus: false\n });\n };\n this.becomesFocused = event => {\n this.controller.hasFocus = true;\n this.call(\"focus\", event);\n this.log(\"focus\", {\n hasFocus: true\n });\n this.dispatch(\"focus\", {\n event: event,\n hasFocus: true\n });\n };\n this.handleWindowFocusChange = event => {\n if (document.hasFocus() && !this.controller.hasFocus) {\n this.becomesFocused(event);\n } else if (!document.hasFocus() && this.controller.hasFocus) {\n this.becomesUnfocused(event);\n }\n };\n this.controller = controller;\n this.intervalDuration = options.interval || 200;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controllerDisconnect;\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, {\n disconnect: disconnect\n });\n }\n}\n\nconst useWindowFocus = (composableController, options = {}) => {\n const controller = composableController;\n const observer = new UseWindowFocus(controller, options);\n return [ observer.observe, observer.unobserve ];\n};\n\nclass WindowFocusComposableController extends Controller {\n constructor() {\n super(...arguments);\n this.hasFocus = false;\n }\n}\n\nclass WindowFocusController extends WindowFocusComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useWindowFocus(this, this.options);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nconst useWindowResize = composableController => {\n const controller = composableController;\n const callback = event => {\n const {innerWidth: innerWidth, innerHeight: innerHeight} = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event: event\n };\n method(controller, \"windowResize\").call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener(\"resize\", callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener(\"resize\", callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n }\n });\n observe();\n return [ observe, unobserve ];\n};\n\nclass WindowResizeComposableController extends Controller {}\n\nclass WindowResizeController extends WindowResizeComposableController {\n constructor(context) {\n super(context);\n requestAnimationFrame((() => {\n const [observe, unobserve] = useWindowResize(this);\n Object.assign(this, {\n observe: observe,\n unobserve: unobserve\n });\n }));\n }\n}\n\nfunction useHotkeys() {\n throw \"[stimulus-use] Notice: The import for `useHotkeys()` has been moved from `stimulus-use` to `stimulus-use/hotkeys`. \\nPlease change the import accordingly and add `hotkey-js` as a dependency to your project. \\n\\nFor more information see: https://stimulus-use.github.io/stimulus-use/#/use-hotkeys?id=importing-the-behavior\";\n}\n\nexport { ApplicationController, ClickOutsideController, HoverController, IdleController, IntersectionController, LazyLoadController, MutationController, ResizeController, TargetMutationController, TransitionController, UseHover, UseMutation, UseTargetMutation, UseVisibility, UseWindowFocus, VisibilityController, WindowFocusController, WindowResizeController, debounce, useApplication, useClickOutside, useDebounce, useDispatch, useHotkeys, useHover, useIdle, useIntersection, useLazyLoad, useMatchMedia, useMemo, useMeta, useMutation, useResize, useTargetMutation, useThrottle, useTransition, useVisibility, useWindowFocus, useWindowResize };\n", "import { Controller } from \"@hotwired/stimulus\";\nimport { useTransition } from \"stimulus-use\";\nconst _Dropdown = class _Dropdown extends Controller {\n connect() {\n useTransition(this, {\n element: this.menuTarget\n });\n }\n toggle() {\n this.toggleTransition();\n }\n hide(event) {\n !this.element.contains(event.target) && !this.menuTarget.classList.contains(\"hidden\") && this.leave();\n }\n};\n_Dropdown.targets = [\"menu\"];\nlet Dropdown = _Dropdown;\nexport {\n Dropdown as default\n};\n", "window.BeerMenus = window.BeerMenus || {};\nwindow.BeerMenus.controllers = window.BeerMenus.controllers || {};\n", "/**\n * @typedef { import(\"@amplitude/analytics-types\").BrowserClient } BrowserClient\n * @typedef { typeof import(\"@amplitude/analytics-browser\").Identify } Identify\n */\n\nBeerMenus.Analytics = class Analytics extends HTMLElement {\n /**\n * @type {BrowserClient}\n * @private\n */\n static _BrowserClient = null\n\n /**\n * @type {Identify}\n * @private\n */\n static _UserIdentify = null\n\n /**\n * @type {Array}\n * @private\n */\n static _loadPromises = []\n\n /**\n * Return a promise that will resolve when Amplitude is loaded\n * \n * @returns {Promise}\n */\n static get clientLoading() {\n if (this._BrowserClient) return Promise.resolve()\n\n return new Promise(resolve => this._loadPromises.push(resolve))\n }\n\n /**\n * Load in the Amplitude client\n * (requires `amplitude-key` meta tag to be added to ``)\n */\n static async importAmplitude() {\n if (this._BrowserClient || this._loadPromises.length > 0) return\n\n const { createInstance, Identify } = await import(\"@amplitude/analytics-browser\")\n\n const client = createInstance()\n const amplitudeKey = document.head.querySelector(\"meta[name='amplitude-key']\").content\n client.init(amplitudeKey)\n this._BrowserClient = client\n this._UserIdentify = Identify\n\n this._loadPromises.forEach(promise => promise())\n this._loadPromises = []\n }\n\n /**\n * Provides an instance of the Amplitude client, loading it if necessary\n * \n * @returns {BrowserClient}\n */\n static async client() {\n if (!this._BrowserClient) {\n this.importAmplitude()\n await this.clientLoading\n }\n\n return this._BrowserClient\n }\n\n /**\n * Send tracking information to Amplitude\n * \n * @param name {string}\n * @param options {Record}\n */\n static async track(name, options) {\n const client = await this.client()\n client.track(name, options)\n }\n\n /**\n * Identify the current user with properties\n * \n * @param options {Record} \n */\n static async identify(options) {\n const client = await this.client()\n client.setUserId(options.id)\n const identity = new this._UserIdentify()\n Object.entries(options).forEach(([key, value]) => {\n if (key != \"id\") {\n identity.set(key, value)\n }\n })\n client.identify(identity)\n }\n\n connectedCallback() {\n let options\n if (this.hasAttribute(\"options\")) options = JSON.parse(this.getAttribute(\"options\"))\n\n if (this.hasAttribute(\"track\")) {\n this.constructor.track(this.getAttribute(\"track\"), options)\n } else if (this.hasAttribute(\"identify\")) {\n this.constructor.identify(options)\n }\n }\n}\n\ncustomElements.define(\"bmu-analytics\", BeerMenus.Analytics)\n"], "mappings": "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", "names": ["accordion_controller_exports", "__export", "accordion_controller_default", "init_accordion_controller", "__esmMin", "init_stimulus", "Controller", "event", "index", "section", "active", "accordion", "el", "ui", "expandedIndex", "collapsedIndex", "header", "scrollTop", "offset", "__publicField", "accordion2_controller_exports", "__export", "accordion2_controller_default", "init_accordion2_controller", "__esmMin", "init_stimulus", "Controller", "event", "details", "admin_beer_controller_exports", "__export", "admin_beer_controller_default", "init_admin_beer_controller", "__esmMin", "init_stimulus", "Controller", "event", "type", "select", "disabled", "target", "producerIDInput", "data", "status", "xhr", "html", "duplicateIDsJSON", "id", "form", "inputs", "i", "__publicField", "admin_merge_controller_exports", "__export", "admin_merge_controller_default", "init_admin_merge_controller", "__esmMin", "init_stimulus", "Controller", "event", "keeper", "__publicField", "auto_save_controller_exports", "__export", "auto_save_controller_default", "init_auto_save_controller", "__esmMin", "init_stimulus", "Controller", "event", "element", "data", "status", "xhr", "__publicField", "auto_textfield_height_controller_exports", "__export", "auto_textfield_height_controller_default", "init_auto_textfield_height_controller", "__esmMin", "init_stimulus", "Controller", "rows", "__publicField", "autocomplete_controller_exports", "__export", "autocomplete_controller_default", "init_autocomplete_controller", "__esmMin", "init_stimulus", "Controller", "libraries", "obj", "hit", "event", "suggestion", "dataset", "context", "__publicField", "availability_promo_controller_exports", "__export", "availability_promo_controller_default", "init_availability_promo_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "beacon_controller_exports", "__export", "beacon_controller_default", "init_beacon_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "product_autocomplete_controller_exports", "__export", "product_autocomplete_controller_default", "init_product_autocomplete_controller", "__esmMin", "init_stimulus", "Controller", "event", "tab", "beer_autocomplete_controller_exports", "__export", "beer_autocomplete_controller_default", "init_beer_autocomplete_controller", "__esmMin", "init_product_autocomplete_controller", "product_autocomplete_controller_default", "libraries", "filter", "id", "name", "style_id", "abv", "data", "event", "jqXHR", "status", "error", "listener", "target", "revertTarget", "showMethod", "query", "callback", "isBeerIndex", "suggestions", "obj", "hit", "tab", "beerID", "fullDescription", "inputEvent", "val", "matchedSuggestion", "suggestion", "__publicField", "beer_info_controller_exports", "__export", "beer_info_controller_default", "init_beer_info_controller", "__esmMin", "init_stimulus", "Controller", "text", "el", "event", "modal", "textarea", "__publicField", "beer_suggestions_controller_exports", "__export", "beer_suggestions_controller_default", "init_beer_suggestions_controller", "__esmMin", "init_stimulus", "Controller", "libraries", "query", "controller", "productType", "searchQuery", "result", "t", "event", "id", "name", "hit", "suggestion", "anchor", "meta", "hits", "__publicField", "beers_added_modal_controller_exports", "__export", "beers_added_modal_controller_default", "init_beers_added_modal_controller", "__esmMin", "init_stimulus", "Controller", "event", "block_modal_controller_exports", "__export", "block_modal_controller_default", "init_block_modal_controller", "__esmMin", "init_stimulus", "Controller", "isLoading", "isHidden", "section", "el", "profileId", "region", "position", "src", "partial", "iframe", "newContent", "event", "form", "res", "json", "formEl", "patchMethod", "err", "id", "url", "authenticityToken", "__publicField", "brewery_autocomplete_controller_exports", "__export", "brewery_autocomplete_controller_default", "init_brewery_autocomplete_controller", "__esmMin", "init_stimulus", "Controller", "libraries", "producer", "id", "name", "eventOrShowMessage", "showMessage", "event", "data", "html", "query", "callback", "suggestions", "obj", "hit", "val", "matchedSuggestion", "suggestion", "__publicField", "brewery_multi_select_controller_exports", "__export", "brewery_multi_select_controller_default", "init_brewery_multi_select_controller", "__esmMin", "init_stimulus", "Controller", "libraries", "input", "brewery", "option", "params", "success", "failure", "queryParams", "query", "data", "hit", "markup", "result", "__publicField", "bulk_move_controller_exports", "__export", "bulk_move_controller_default", "init_bulk_move_controller", "__esmMin", "init_stimulus", "Controller", "entries", "onScreen", "scrolledPast", "hide", "event", "servingIDs", "params", "html", "section", "checkbox", "__publicField", "calculator_controller_exports", "__export", "calculator_controller_default", "init_calculator_controller", "__esmMin", "init_stimulus", "Controller", "event", "output", "el", "index", "views", "roi", "__publicField", "calendly_controller_exports", "__export", "calendly_controller_default", "init_calendly_controller", "__esmMin", "init_stimulus", "Controller", "tag", "script", "charts_controller_exports", "__export", "charts_controller_default", "init_charts_controller", "__esmMin", "init_stimulus", "Controller", "checkbox_counter_controller_exports", "__export", "checkbox_counter_controller_default", "init_checkbox_counter_controller", "__esmMin", "init_stimulus", "Controller", "primaryCount", "cb", "secondaryCount", "__publicField", "checkbox_submit_controller_exports", "__export", "checkbox_submit_controller_default", "init_checkbox_submit_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "checkbox_toggle_controller_exports", "__export", "checkbox_toggle_controller_default", "init_checkbox_toggle_controller", "__esmMin", "init_stimulus", "Controller", "event", "target", "__publicField", "checklist_accordion_controller_exports", "__export", "checklist_accordion_controller_default", "init_checklist_accordion_controller", "__esmMin", "init_stimulus", "Controller", "event", "ui", "expandedIdentifier", "checklists_controller_exports", "__export", "checklists_controller_default", "init_checklists_controller", "__esmMin", "init_stimulus", "Controller", "visible", "__publicField", "choose_saved_card_controller_exports", "__export", "choose_saved_card_controller_default", "init_choose_saved_card_controller", "__esmMin", "init_stimulus", "Controller", "event", "target", "__publicField", "clipboard_controller_exports", "__export", "clipboard_controller_default", "init_clipboard_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "closeable_controller_exports", "__export", "closeable_controller_default", "init_closeable_controller", "__esmMin", "init_stimulus", "Controller", "animation", "codemirror_controller_exports", "__export", "codemirror_controller_default", "init_codemirror_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "collapsible_controller_exports", "__export", "collapsible_controller_default", "init_collapsible_controller", "__esmMin", "init_stimulus", "Controller", "event", "href", "hash", "element", "expanded", "data", "__publicField", "collapsible_simple_controller_exports", "__export", "collapsible_simple_controller_default", "init_collapsible_simple_controller", "__esmMin", "init_stimulus", "Controller", "__publicField", "condition_ids_controller_exports", "__export", "condition_ids_controller_default", "init_condition_ids_controller", "__esmMin", "init_stimulus", "Controller", "selectedItems", "target", "name", "index", "__publicField", "conditional_input_controller_exports", "__export", "conditional_input_controller_default", "init_conditional_input_controller", "__esmMin", "init_stimulus", "Controller", "event", "sourceID", "t", "__publicField", "custom_product_autocomplete_controller_exports", "__export", "custom_product_autocomplete_controller_default", "init_custom_product_autocomplete_controller", "__esmMin", "init_product_autocomplete_controller", "product_autocomplete_controller_default", "libraries", "bar", "product", "event", "data", "id", "query", "callback", "hit", "val", "suggestion", "__publicField", "date_input_controller_exports", "__export", "date_input_controller_default", "init_date_input_controller", "__esmMin", "init_stimulus", "Controller", "libraries", "options", "__publicField", "digital_display_controller_exports", "__export", "digital_display_controller_default", "init_digital_display_controller", "__esmMin", "init_stimulus", "Controller", "ActionCable", "data", "require_ev_emitter", "__commonJSMin", "exports", "module", "global", "factory", "EvEmitter", "proto", "eventName", "listener", "events", "listeners", "onceEvents", "onceListeners", "index", "args", "i", "isOnce", "require_get_size", "__commonJSMin", "exports", "module", "window", "factory", "getStyleSize", "value", "num", "isValid", "noop", "logError", "message", "measurements", "measurementsLength", "getZeroSize", "size", "i", "measurement", "getStyle", "elem", "style", "isSetup", "isBoxSizeOuter", "setup", "div", "body", "getSize", "isBorderBox", "paddingWidth", "paddingHeight", "marginWidth", "marginHeight", "borderWidth", "borderHeight", "isBorderBoxSizeOuter", "styleWidth", "styleHeight", "require_matches_selector", "__commonJSMin", "exports", "module", "window", "factory", "matchesMethod", "ElemProto", "prefixes", "i", "prefix", "method", "elem", "selector", "require_utils", "__commonJSMin", "exports", "module", "window", "factory", "matchesSelector", "utils", "a", "b", "prop", "num", "div", "arraySlice", "obj", "isArrayLike", "ary", "index", "elem", "selector", "event", "method", "elems", "ffElems", "childElems", "i", "_class", "methodName", "threshold", "timeoutName", "timeout", "args", "_this", "callback", "readyState", "str", "match", "$1", "$2", "console", "WidgetClass", "namespace", "dashedNamespace", "dataAttr", "dataAttrElems", "jsDashElems", "dataOptionsAttr", "jQuery", "attr", "options", "error", "instance", "require_item", "__commonJSMin", "exports", "module", "window", "factory", "EvEmitter", "getSize", "isEmptyObj", "obj", "prop", "docElemStyle", "transitionProperty", "transformProperty", "transitionEndEvent", "vendorProperties", "Item", "element", "layout", "proto", "event", "method", "style", "elemStyle", "supportedProp", "isOriginLeft", "isOriginTop", "xValue", "yValue", "x", "y", "layoutSize", "xPadding", "xProperty", "xResetProperty", "yPadding", "yProperty", "yResetProperty", "isHorizontal", "curX", "curY", "didNotMove", "transX", "transY", "transitionStyle", "args", "_transition", "h", "toDashedAll", "str", "$1", "transitionProps", "duration", "dashedVendorProperties", "propertyName", "onTransitionEnd", "cleanStyle", "cleanTransitionStyle", "delay", "options", "transitionEndProperty", "styleProperty", "optionStyle", "require_outlayer", "__commonJSMin", "exports", "module", "window", "factory", "EvEmitter", "getSize", "utils", "Item", "console", "jQuery", "noop", "GUID", "instances", "Outlayer", "element", "options", "queryElement", "id", "isInitLayout", "proto", "opts", "option", "oldOption", "canBindResize", "elems", "itemElems", "items", "i", "elem", "item", "layoutInstant", "isInstant", "measurement", "size", "queue", "position", "obj", "stagger", "getMilliseconds", "x", "y", "isResizingContainer", "measure", "isWidth", "elemSize", "eventName", "_this", "onComplete", "count", "doneCount", "tick", "type", "event", "args", "emitArgs", "$event", "boundingRect", "thisRect", "offset", "hasSizes", "previousItems", "removeItems", "style", "namespace", "Layout", "subclass", "Parent", "SubClass", "msUnits", "time", "matches", "num", "unit", "mult", "require_masonry", "__commonJSMin", "exports", "module", "window", "factory", "Outlayer", "getSize", "Masonry", "proto", "i", "firstItem", "firstItemElem", "columnWidth", "containerWidth", "cols", "excess", "mathMethod", "isFitWidth", "container", "size", "item", "remainder", "colSpan", "colPosMethod", "colPosition", "position", "setHeight", "setMax", "colGroup", "minimumY", "groupCount", "col", "groupColYs", "isOver", "hasSize", "stamp", "stampSize", "offset", "isOriginLeft", "firstX", "lastX", "firstCol", "lastCol", "isOriginTop", "stampMaxY", "unusedCols", "previousWidth", "require_imagesloaded", "__commonJSMin", "exports", "module", "window", "factory", "EvEmitter", "$", "console", "extend", "a", "b", "prop", "arraySlice", "makeArray", "obj", "isArrayLike", "ImagesLoaded", "elem", "options", "onAlways", "queryElem", "nodeType", "elementNodeTypes", "childImgs", "i", "img", "children", "child", "style", "reURL", "matches", "url", "loadingImage", "LoadingImage", "background", "Background", "_this", "onProgress", "image", "message", "eventName", "jqMethod", "isComplete", "isLoaded", "event", "method", "element", "jQuery", "callback", "instance", "filter_templates_controller_exports", "__export", "filter_templates_controller_default", "init_filter_templates_controller", "__esmMin", "init_stimulus", "Controller", "Masonry", "imagesLoaded", "event", "activeThemes", "activeSettings", "colorSetting", "el", "i", "filterValues", "activeTheme", "r", "activeSetting", "activeColor", "__publicField", "fonts_controller_exports", "__export", "fonts_controller_default", "init_fonts_controller", "__esmMin", "init_stimulus", "Controller", "data", "container", "state", "event", "google_autocomplete_controller_exports", "__export", "google_autocomplete_controller_default", "init_google_autocomplete_controller", "__esmMin", "init_stimulus", "Controller", "event", "emptyDiv", "sessionToken", "e", "query", "callback", "options", "predictions", "status", "hit", "template", "info", "footer", "data", "request", "place", "__publicField", "hamburger_menu_controller_exports", "__export", "hamburger_menu_controller_default", "init_hamburger_menu_controller", "__esmMin", "init_stimulus", "Controller", "link", "__publicField", "Debouncer", "init_debouncer", "__esmMin", "fn", "frame", "params", "hiding_header_controller_exports", "__export", "hiding_header_controller_default", "init_hiding_header_controller", "__esmMin", "init_stimulus", "init_debouncer", "Controller", "Debouncer", "scrollTop", "honeybadger_controller_exports", "__export", "honeybadger_controller_default", "init_honeybadger_controller", "__esmMin", "init_stimulus", "Controller", "Honeybadger", "image_background_remover_controller_exports", "__export", "image_background_remover_controller_default", "init_image_background_remover_controller", "__esmMin", "init_stimulus", "Controller", "form", "res", "json", "iframe", "err", "load_styles_default", "css", "blob", "link", "init_load_styles", "__esmMin", "image_editor_controller_exports", "__export", "image_editor_controller_default", "init_image_editor_controller", "__esmMin", "init_stimulus", "init_load_styles", "Controller", "pintura", "pinturaStyles", "load_styles_default", "event", "__spreadProps", "__spreadValues", "locale", "result", "form", "res", "json", "iframe", "err", "__publicField", "location_autocomplete_controller_exports", "__export", "location_autocomplete_controller_default", "init_location_autocomplete_controller", "__esmMin", "init_stimulus", "Controller", "resolve", "element", "event", "data", "done", "response", "query", "callback", "error", "results", "result", "hit", "obj", "message", "__publicField", "masonry_grid_controller_exports", "__export", "masonry_grid_controller_default", "init_masonry_grid_controller", "__esmMin", "init_stimulus", "Controller", "Masonry", "imagesLoaded", "container", "__publicField", "menu_controller_exports", "__export", "menu_controller_default", "init_menu_controller", "__esmMin", "init_stimulus", "Controller", "html", "target", "__publicField", "menu_search_controller_exports", "__export", "menu_search_controller_default", "init_menu_search_controller", "__esmMin", "init_stimulus", "Controller", "promises", "algoliasearch", "filters", "id", "event", "offset", "suggestion", "query", "callback", "suggestions", "servings", "hit", "beerTemplate", "meta", "serving", "servingTemplate", "editButton", "e", "beerID", "__publicField", "menu_section_controller_exports", "__export", "menu_section_controller_default", "init_menu_section_controller", "__esmMin", "init_stimulus", "Controller", "event", "menu_sections_controller_exports", "__export", "menu_sections_controller_default", "init_menu_sections_controller", "__esmMin", "init_stimulus", "Controller", "event", "selectedOption", "servingType", "servingTypeInt", "sectionID", "servingTypes", "selectedMenuSectionID", "__publicField", "modular_controller_exports", "__export", "MAX_ANNUAL_PRICE", "MAX_ANNUAL_SAVINGS", "MAX_MONTHLY_PRICE", "modular_controller_default", "init_modular_controller", "__esmMin", "init_stimulus", "Controller", "event", "atAnnualMaxPrice", "checkbox", "planNames", "monthlyPlans", "annualPlans", "monthlyPrice", "annualPrice", "annualSavings", "selectedPlans", "plan", "shouldSelectMonthly", "shouldSelectAnnual", "showModal", "__publicField", "multi_select_controller_exports", "__export", "multi_select_controller_default", "init_multi_select_controller", "__esmMin", "init_stimulus", "Controller", "containerClass", "dropdownClass", "__publicField", "order_search_controller_exports", "__export", "order_search_controller_default", "init_order_search_controller", "__esmMin", "init_stimulus", "Controller", "event", "orders_controller_exports", "__export", "orders_controller_default", "init_orders_controller", "__esmMin", "init_stimulus", "Controller", "event", "url", "pickupId", "pickup_locations_controller_exports", "__export", "pickup_locations_controller_default", "init_pickup_locations_controller", "__esmMin", "init_stimulus", "Controller", "target", "index", "hide", "event", "showedALocation", "__publicField", "place_lead_controller_exports", "__export", "place_lead_controller_default", "init_place_lead_controller", "__esmMin", "init_stimulus", "Controller", "event", "qualified", "response", "price_calculator_controller_exports", "__export", "price_calculator_controller_default", "init_price_calculator_controller", "__esmMin", "init_stimulus", "Controller", "__publicField", "print_iframe_controller_exports", "__export", "print_iframe_controller_default", "init_print_iframe_controller", "__esmMin", "init_stimulus", "Controller", "__publicField", "print_menu_landing_page_controller_exports", "__export", "print_menu_landing_page_controller_default", "init_print_menu_landing_page_controller", "__esmMin", "init_stimulus", "Controller", "entries", "target", "position", "__publicField", "print_menus_controller_exports", "__export", "print_menus_controller_default", "init_print_menus_controller", "__esmMin", "init_stimulus", "Controller", "t", "event", "checked", "element", "data", "status", "xhr", "__publicField", "print_preview_controller_exports", "__export", "print_preview_controller_default", "init_print_preview_controller", "__esmMin", "init_stimulus", "Controller", "html", "event", "target", "embed", "__publicField", "product_type_controller_exports", "__export", "product_type_controller_default", "init_product_type_controller", "__esmMin", "init_stimulus", "Controller", "__publicField", "property_segments_controller_exports", "__export", "property_segments_controller_default", "init_property_segments_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "purchase_limit_controller_exports", "__export", "purchase_limit_controller_default", "init_purchase_limit_controller", "__esmMin", "init_stimulus", "Controller", "hide", "__publicField", "remote_file_form_controller_exports", "__export", "remote_file_form_controller_default", "init_remote_file_form_controller", "__esmMin", "init_stimulus", "Controller", "scroll_to_top_controller_exports", "__export", "scroll_to_top_controller_default", "init_scroll_to_top_controller", "__esmMin", "init_stimulus", "Controller", "segmented_field_controller_exports", "__export", "segmented_field_controller_default", "init_segmented_field_controller", "__esmMin", "init_stimulus", "Controller", "__publicField", "segments_controller_exports", "__export", "segments_controller_default", "init_segments_controller", "__esmMin", "init_stimulus", "Controller", "event", "index", "__publicField", "select_all_controller_exports", "__export", "select_all_controller_default", "init_select_all_controller", "__esmMin", "init_stimulus", "Controller", "event", "checked", "el", "__publicField", "serving_controller_exports", "__export", "serving_controller_default", "init_serving_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "servings_controller_exports", "__export", "servings_controller_default", "init_servings_controller", "__esmMin", "init_stimulus", "Controller", "event", "html", "jqXHR", "status", "error", "lastIndex", "index", "serving_type_id", "serving_unit_id", "__publicField", "shoelace_controller_exports", "__export", "shoelace_controller_default", "FormDataEventPolyfill", "WorkingFormDataPolyfill", "init_shoelace_controller", "__esmMin", "init_stimulus", "formData", "form", "name", "value", "input", "entries", "index", "Controller", "picker", "show_more_controller_exports", "__export", "show_more_controller_default", "init_show_more_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "simple_beer_autocomplete_controller_exports", "__export", "simple_beer_autocomplete_controller_default", "init_simple_beer_autocomplete_controller", "__esmMin", "init_stimulus", "Controller", "libraries", "filters", "event", "data", "id", "query", "callback", "suggestions", "obj", "hit", "__publicField", "simple_modular_controller_exports", "__export", "simple_modular_controller_default", "init_simple_modular_controller", "__esmMin", "init_stimulus", "Controller", "event", "tools", "pricing", "p", "t", "effectivePrice", "price", "buttonLabel", "tool1Plans", "tool2Plans", "x", "tvMenus", "__publicField", "smooth_scroller_controller_exports", "__export", "smooth_scroller_controller_default", "init_smooth_scroller_controller", "__esmMin", "init_stimulus", "Controller", "event", "anchor", "offset", "target", "targetPosition", "startPosition", "distance", "duration", "start", "animation", "currentTime", "timeElapsed", "progress", "easing", "__publicField", "sortable_controller_exports", "__export", "sortable_controller_default", "init_sortable_controller", "__esmMin", "init_stimulus", "Controller", "draggable", "skipSave", "_", "index", "event", "url", "data", "item", "__publicField", "sticky_controller_exports", "__export", "sticky_controller_default", "init_sticky_controller", "__esmMin", "init_stimulus", "Controller", "streamlined_menu_controller_exports", "__export", "streamlined_menu_controller_default", "init_streamlined_menu_controller", "__esmMin", "init_stimulus", "Controller", "event", "el", "hash", "state", "__publicField", "stripe_controller_exports", "__export", "stripe_controller_default", "init_stripe_controller", "__esmMin", "init_stimulus", "Controller", "tag", "structured_data_controller_exports", "__export", "structured_data_controller_default", "init_structured_data_controller", "__esmMin", "init_stimulus", "Controller", "data", "tabs_controller_exports", "__export", "tabs_controller_default", "init_tabs_controller", "__esmMin", "init_stimulus", "Controller", "event", "changedEvent", "tab", "hash", "panel", "activeTab", "focusId", "smoothScrollerLink", "observer", "mutations", "mutation", "node", "__publicField", "tabs2_controller_exports", "__export", "tabs2_controller_default", "init_tabs2_controller", "__esmMin", "init_stimulus", "Controller", "setFocus", "tabToSelect", "panel", "tab", "keyHandled", "index", "__publicField", "textfit_controller_exports", "__export", "textfit_controller_default", "init_textfit_controller", "__esmMin", "init_stimulus", "Controller", "__publicField", "fontsTimer", "vertical", "lastItemPos", "columnsRect", "fontSize", "complete", "shown", "tracked_clicks_controller_exports", "__export", "tracked_clicks_controller_default", "init_tracked_clicks_controller", "__esmMin", "init_stimulus", "Controller", "event", "href", "trix_controller_exports", "__export", "trix_controller_default", "init_trix_controller", "__esmMin", "init_stimulus", "Controller", "fontId", "fontName", "element", "sizeId", "sizeName", "editor", "extraTools", "event", "data", "container", "selection", "options", "blankStart", "attrId", "_attrName", "fontFound", "fontSizeFound", "alignmentFound", "key", "__publicField", "turnstile_controller_exports", "__export", "turnstile_controller_default", "init_turnstile_controller", "__esmMin", "init_stimulus", "Controller", "callback", "visibleClasses", "token", "callbackIndex", "__publicField", "tv_preview_controller_exports", "__export", "tv_preview_controller_default", "init_tv_preview_controller", "__esmMin", "init_stimulus", "Controller", "el", "currentScreen", "event", "url", "screen", "__publicField", "user_preferences_controller_exports", "__export", "user_preferences_controller_default", "init_user_preferences_controller", "__esmMin", "init_stimulus", "Controller", "event", "checked", "customEvent", "__publicField", "video_modal_controller_exports", "__export", "video_modal_controller_default", "init_video_modal_controller", "__esmMin", "init_stimulus", "Controller", "src", "origin", "event", "__publicField", "viewport_calculate_controller_exports", "__export", "viewport_calculate_controller_default", "init_viewport_calculate_controller", "__esmMin", "init_stimulus", "Controller", "vh", "viewport_entrance_toggle_controller_exports", "__export", "viewport_entrance_toggle_controller_default", "init_viewport_entrance_toggle_controller", "__esmMin", "init_stimulus", "Controller", "entries", "entry", "visible_anchor_controller_exports", "__export", "visible_anchor_controller_default", "init_visible_anchor_controller", "__esmMin", "init_stimulus", "Controller", "event", "anchor", "offset", "__publicField", "visible_controller_exports", "__export", "visible_controller_default", "init_visible_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "visible_from_radio_controller_exports", "__export", "visible_from_radio_controller_default", "init_visible_from_radio_controller", "__esmMin", "init_stimulus", "Controller", "event", "__publicField", "web_menu_preview_sizes_controller_exports", "__export", "web_menu_preview_sizes_controller_default", "init_web_menu_preview_sizes_controller", "__esmMin", "init_stimulus", "Controller", "event", "previewSize", "menuPreview", "modules", "__default", "init__", "__esmMin", "init_accordion_controller", "init_accordion2_controller", "init_admin_beer_controller", "init_admin_merge_controller", "init_auto_save_controller", "init_auto_textfield_height_controller", "init_autocomplete_controller", "init_availability_promo_controller", "init_beacon_controller", "init_beer_autocomplete_controller", "init_beer_info_controller", "init_beer_suggestions_controller", "init_beers_added_modal_controller", "init_block_modal_controller", "init_brewery_autocomplete_controller", "init_brewery_multi_select_controller", "init_bulk_move_controller", "init_calculator_controller", "init_calendly_controller", "init_charts_controller", "init_checkbox_counter_controller", "init_checkbox_submit_controller", "init_checkbox_toggle_controller", "init_checklist_accordion_controller", "init_checklists_controller", "init_choose_saved_card_controller", "init_clipboard_controller", "init_closeable_controller", "init_codemirror_controller", "init_collapsible_controller", "init_collapsible_simple_controller", "init_condition_ids_controller", "init_conditional_input_controller", "init_custom_product_autocomplete_controller", "init_date_input_controller", "init_digital_display_controller", "init_filter_templates_controller", "init_fonts_controller", "init_google_autocomplete_controller", "init_hamburger_menu_controller", "init_hiding_header_controller", "init_honeybadger_controller", "init_image_background_remover_controller", "init_image_editor_controller", "init_location_autocomplete_controller", "init_masonry_grid_controller", "init_menu_controller", "init_menu_search_controller", "init_menu_section_controller", "init_menu_sections_controller", "init_modular_controller", "init_multi_select_controller", "init_order_search_controller", "init_orders_controller", "init_pickup_locations_controller", "init_place_lead_controller", "init_price_calculator_controller", "init_print_iframe_controller", "init_print_menu_landing_page_controller", "init_print_menus_controller", "init_print_preview_controller", "init_product_autocomplete_controller", "init_product_type_controller", "init_property_segments_controller", "init_purchase_limit_controller", "init_region_preview_controller", "init_remote_file_form_controller", "init_scroll_to_top_controller", "init_segmented_field_controller", "init_segments_controller", "init_select_all_controller", "init_serving_controller", "init_servings_controller", "init_shoelace_controller", "init_show_more_controller", "init_simple_beer_autocomplete_controller", "init_simple_modular_controller", "init_smooth_scroller_controller", "init_sortable_controller", "init_sticky_controller", "init_streamlined_menu_controller", "init_stripe_controller", "init_structured_data_controller", "init_tabs_controller", "init_tabs2_controller", "init_textfit_controller", "init_tracked_clicks_controller", "init_trix_controller", "init_turnstile_controller", "init_tv_preview_controller", "init_user_preferences_controller", "init_video_modal_controller", "init_viewport_calculate_controller", "init_viewport_entrance_toggle_controller", "init_visible_anchor_controller", "init_visible_controller", "init_visible_from_radio_controller", "init_web_menu_preview_sizes_controller", "accordion_controller_exports", "accordion2_controller_exports", "admin_beer_controller_exports", "admin_merge_controller_exports", "auto_save_controller_exports", "auto_textfield_height_controller_exports", "autocomplete_controller_exports", "availability_promo_controller_exports", "beacon_controller_exports", "beer_autocomplete_controller_exports", "beer_info_controller_exports", "beer_suggestions_controller_exports", "beers_added_modal_controller_exports", "block_modal_controller_exports", "brewery_autocomplete_controller_exports", "brewery_multi_select_controller_exports", "bulk_move_controller_exports", "calculator_controller_exports", "calendly_controller_exports", "charts_controller_exports", "checkbox_counter_controller_exports", "checkbox_submit_controller_exports", "checkbox_toggle_controller_exports", "checklist_accordion_controller_exports", "checklists_controller_exports", "choose_saved_card_controller_exports", "clipboard_controller_exports", "closeable_controller_exports", "codemirror_controller_exports", "collapsible_controller_exports", "collapsible_simple_controller_exports", "condition_ids_controller_exports", "conditional_input_controller_exports", "custom_product_autocomplete_controller_exports", "date_input_controller_exports", "digital_display_controller_exports", "filter_templates_controller_exports", "fonts_controller_exports", "google_autocomplete_controller_exports", "hamburger_menu_controller_exports", "hiding_header_controller_exports", "honeybadger_controller_exports", "image_background_remover_controller_exports", "image_editor_controller_exports", "location_autocomplete_controller_exports", "masonry_grid_controller_exports", "menu_controller_exports", "menu_search_controller_exports", "menu_section_controller_exports", "menu_sections_controller_exports", "modular_controller_exports", "multi_select_controller_exports", "order_search_controller_exports", "orders_controller_exports", "pickup_locations_controller_exports", "place_lead_controller_exports", "price_calculator_controller_exports", "print_iframe_controller_exports", "print_menu_landing_page_controller_exports", "print_menus_controller_exports", "print_preview_controller_exports", "product_autocomplete_controller_exports", "product_type_controller_exports", "property_segments_controller_exports", "purchase_limit_controller_exports", "region_preview_controller_exports", "remote_file_form_controller_exports", "scroll_to_top_controller_exports", "segmented_field_controller_exports", "segments_controller_exports", "select_all_controller_exports", "serving_controller_exports", "servings_controller_exports", "shoelace_controller_exports", "show_more_controller_exports", "simple_beer_autocomplete_controller_exports", "simple_modular_controller_exports", "smooth_scroller_controller_exports", "sortable_controller_exports", "sticky_controller_exports", "streamlined_menu_controller_exports", "stripe_controller_exports", "structured_data_controller_exports", "tabs_controller_exports", "tabs2_controller_exports", "textfit_controller_exports", "tracked_clicks_controller_exports", "trix_controller_exports", "turnstile_controller_exports", "tv_preview_controller_exports", "user_preferences_controller_exports", "video_modal_controller_exports", "viewport_calculate_controller_exports", "viewport_entrance_toggle_controller_exports", "visible_anchor_controller_exports", "visible_controller_exports", "visible_from_radio_controller_exports", "web_menu_preview_sizes_controller_exports", "_Dialog", "Dialog", "init_stimulus_dialog", "__esmMin", "init_stimulus", "Controller", "animation", "event", "getAttribute", "name", "options", "dataset", "datasetName", "datasetAlpineName", "alpineNames", "classes", "isEmpty", "afterTransition", "element", "resolve", "duration", "nextAnimationFrame", "str", "DebounceController", "ThrottleController", "defaultOptions", "useTransition", "init_dist", "__esmMin", "init_stimulus", "Controller", "composableController", "_a", "_b", "_c", "controller", "targetName", "targetFromAttribute", "targetElement", "leaveAfter", "transitioned", "hiddenClass", "preserveOriginalClass", "removeToClasses", "controllerEnter", "controllerLeave", "controllerToggleTransition", "enter", "event", "enterFromClasses", "enterActiveClasses", "enterToClasses", "leaveToClasses", "removeClasses", "transition", "leave", "leaveFromClasses", "leaveActiveClasses", "toggleTransition", "initialClasses", "activeClasses", "endClasses", "removeEndClasses", "stashedClasses", "cls", "addClasses", "initialState", "_Dropdown", "Dropdown", "init_stimulus_dropdown", "__esmMin", "init_stimulus", "init_dist", "Controller", "useTransition", "event", "require_beermenus", "__commonJSMin", "require_analytics", "__commonJSMin", "_a", "resolve", "createInstance", "Identify", "client", "amplitudeKey", "promise", "name", "options", "identity", "key", "value", "__publicField"] }