{"version":3,"file":"js/application-7e04e7678b7db91836be.js","mappings":"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","sources":["webpack://app/./app/components/ sync _controller\\.jsx","webpack://app/./app/javascript/controllers/ sync \\.jsx","webpack://app/./app/javascript/images/ sync ^\\.\\/.*$","webpack://app/./app/javascript/src/global_listeners.js","webpack://app/./app/javascript/application.js","webpack://app/./app/javascript/controllers/application.js","webpack://app/./app/javascript/controllers/collapsible_controller.js","webpack://app/./app/javascript/controllers/color_picker_controller.jsx","webpack://app/./app/javascript/controllers/confirm_action_controller.js","webpack://app/./app/javascript/controllers/dispatch_controller.js","webpack://app/./app/javascript/controllers/element_order_controller.js","webpack://app/./app/javascript/controllers/image_preview_controller.js","webpack://app/./app/javascript/controllers/index.js","webpack://app/./app/javascript/controllers/input_maxlength_controller.jsx","webpack://app/./app/javascript/controllers/insert_text_controller.js","webpack://app/./app/javascript/controllers/money_field_controller.js","webpack://app/./app/javascript/controllers/nested_form_controller.js","webpack://app/./app/javascript/controllers/percentage_field_controller.js","webpack://app/./app/javascript/controllers/scroll_to_bottom_controller.js","webpack://app/./app/javascript/controllers/submit_on_input_controller.js","webpack://app/./app/javascript/controllers/toggle_visibility_on_connect_controller.js","webpack://app/./app/javascript/controllers/turbo_form_redirect_controller.js","webpack://app/./app/javascript/controllers/turbo_refresh_controller.js","webpack://app/./app/javascript/controllers/turbo_stream_fetch_controller.js","webpack://app/./app/components/action_component/action_component_controller.js","webpack://app/./app/components/breadcrumbs_component/breadcrumbs_component_controller.jsx","webpack://app/./app/components/campaign_preview_component/campaign_preview_component_controller.js","webpack://app/./app/components/confirm_dialog_component/confirm_dialog_component_controller.js","webpack://app/./app/components/copy_to_clipboard_component/copy_to_clipboard_component_controller.js","webpack://app/./app/components/data_card_component/data_card_component_controller.js","webpack://app/./app/javascript/src/flatpickr-predefined-ranges.js","webpack://app/./app/components/date_range_picker_component/date_range_picker_component_controller.js","webpack://app/./app/components/date_time_picker_component/date_time_picker_component_controller.js","webpack://app/./app/components/dropzone_image_uploader_component/dropzone_image_uploader_component_controller.js","webpack://app/./app/components/gradient_builder_component/gradient_builder_component_controller.js","webpack://app/./app/components/icon_picker_component/icon_picker_component_controller.jsx","webpack://app/./app/components/modal_component/modal_component_controller.js","webpack://app/./app/components/tabs_component/tabs_component_controller.js","webpack://app/./app/javascript/src/helpers.js","webpack://app/./app/components/tags_field_component/tags_field_component_controller.jsx","webpack://app/./app/components/ui/bite_controller.js","webpack://app/./app/components/ui/breadcrumbs_controller.js","webpack://app/./app/components/ui/copy_to_clipboard_controller.js","webpack://app/./app/components/ui/forms/chatbox_controller.js","webpack://app/./app/components/ui/forms/date_picker_controller.js","webpack://app/./app/javascript/src/flatpickr-predefined-ranges-bulma.jsx","webpack://app/./app/components/ui/forms/date_range_filter_controller.js","webpack://app/./app/components/ui/forms/date_time_picker_controller.js","webpack://app/./app/components/ui/forms/file_field_with_preview_controller.js","webpack://app/./app/components/ui/forms/gradient_builder_controller.js","webpack://app/./app/components/ui/forms/taggings_controller.jsx","webpack://app/./app/components/ui/forms/use_default_values_controller.js","webpack://app/./app/components/ui/layout_with_collapsible_sidebar_controller.js","webpack://app/./app/components/ui/modal_controller.js","webpack://app/./app/components/ui/quick_view_controller.js","webpack://app/./app/components/ui/tabs_controller.js","webpack://app/./app/components/ui/time_ago_controller.js","webpack://app/./app/components/ui/toast_controller.js","webpack://app/./app/components/use_default_values_component/use_default_values_component_controller.js"],"sourcesContent":["var map = {\n\t\"./action_component/action_component_controller.js\": 8150,\n\t\"./breadcrumbs_component/breadcrumbs_component_controller.jsx\": 9367,\n\t\"./campaign_preview_component/campaign_preview_component_controller.js\": 3196,\n\t\"./confirm_dialog_component/confirm_dialog_component_controller.js\": 8543,\n\t\"./copy_to_clipboard_component/copy_to_clipboard_component_controller.js\": 2005,\n\t\"./data_card_component/data_card_component_controller.js\": 6559,\n\t\"./date_range_picker_component/date_range_picker_component_controller.js\": 4238,\n\t\"./date_time_picker_component/date_time_picker_component_controller.js\": 6,\n\t\"./dropzone_image_uploader_component/dropzone_image_uploader_component_controller.js\": 6640,\n\t\"./gradient_builder_component/gradient_builder_component_controller.js\": 6050,\n\t\"./icon_picker_component/icon_picker_component_controller.jsx\": 7863,\n\t\"./modal_component/modal_component_controller.js\": 2349,\n\t\"./tabs_component/tabs_component_controller.js\": 7931,\n\t\"./tags_field_component/tags_field_component_controller.jsx\": 4646,\n\t\"./ui/bite_controller.js\": 6575,\n\t\"./ui/breadcrumbs_controller.js\": 147,\n\t\"./ui/copy_to_clipboard_controller.js\": 1270,\n\t\"./ui/forms/chatbox_controller.js\": 4992,\n\t\"./ui/forms/date_picker_controller.js\": 1074,\n\t\"./ui/forms/date_range_filter_controller.js\": 2075,\n\t\"./ui/forms/date_time_picker_controller.js\": 6672,\n\t\"./ui/forms/file_field_with_preview_controller.js\": 5742,\n\t\"./ui/forms/gradient_builder_controller.js\": 9739,\n\t\"./ui/forms/taggings_controller.jsx\": 7533,\n\t\"./ui/forms/use_default_values_controller.js\": 5873,\n\t\"./ui/layout_with_collapsible_sidebar_controller.js\": 8607,\n\t\"./ui/modal_controller.js\": 3590,\n\t\"./ui/quick_view_controller.js\": 6882,\n\t\"./ui/tabs_controller.js\": 8995,\n\t\"./ui/time_ago_controller.js\": 5185,\n\t\"./ui/toast_controller.js\": 5164,\n\t\"./use_default_values_component/use_default_values_component_controller.js\": 740\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2809;","var map = {\n\t\"./application.js\": 5313,\n\t\"./collapsible_controller.js\": 6953,\n\t\"./color_picker_controller.jsx\": 5964,\n\t\"./confirm_action_controller.js\": 1207,\n\t\"./dispatch_controller.js\": 3831,\n\t\"./element_order_controller.js\": 2552,\n\t\"./image_preview_controller.js\": 4769,\n\t\"./index.js\": 9845,\n\t\"./input_maxlength_controller.jsx\": 644,\n\t\"./insert_text_controller.js\": 7763,\n\t\"./money_field_controller.js\": 7129,\n\t\"./nested_form_controller.js\": 9587,\n\t\"./percentage_field_controller.js\": 8852,\n\t\"./scroll_to_bottom_controller.js\": 6590,\n\t\"./submit_on_input_controller.js\": 5635,\n\t\"./toggle_visibility_on_connect_controller.js\": 4762,\n\t\"./turbo_form_redirect_controller.js\": 14,\n\t\"./turbo_refresh_controller.js\": 4861,\n\t\"./turbo_stream_fetch_controller.js\": 3343,\n\t\"controllers/application.js\": 5313,\n\t\"controllers/collapsible_controller.js\": 6953,\n\t\"controllers/color_picker_controller.jsx\": 5964,\n\t\"controllers/confirm_action_controller.js\": 1207,\n\t\"controllers/dispatch_controller.js\": 3831,\n\t\"controllers/element_order_controller.js\": 2552,\n\t\"controllers/image_preview_controller.js\": 4769,\n\t\"controllers/index.js\": 9845,\n\t\"controllers/input_maxlength_controller.jsx\": 644,\n\t\"controllers/insert_text_controller.js\": 7763,\n\t\"controllers/money_field_controller.js\": 7129,\n\t\"controllers/nested_form_controller.js\": 9587,\n\t\"controllers/percentage_field_controller.js\": 8852,\n\t\"controllers/scroll_to_bottom_controller.js\": 6590,\n\t\"controllers/submit_on_input_controller.js\": 5635,\n\t\"controllers/toggle_visibility_on_connect_controller.js\": 4762,\n\t\"controllers/turbo_form_redirect_controller.js\": 14,\n\t\"controllers/turbo_refresh_controller.js\": 4861,\n\t\"controllers/turbo_stream_fetch_controller.js\": 3343\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 9012;","var map = {\n\t\"./background-left.png\": 8323,\n\t\"./background-right.png\": 3290,\n\t\"./bite_image_could_not_be_loaded.de.png\": 2196,\n\t\"./favicon.png\": 292,\n\t\"./icon-default-settings.svg\": 2183,\n\t\"./new-media-item.png\": 9796,\n\t\"./np_default-settings_230262_000000.svg\": 3419\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4550;","import { Popover } from 'bootstrap'\n\n/**\n * Automatically hide open popovers if the user clicks outside one.\n */\ndocument.querySelector('body').addEventListener('click', e => {\n if (!e.target.closest('.popover') && !e.target.closest('.popover-trigger')) {\n document.querySelectorAll('.popover').forEach(elem => {\n Popover.getInstance(elem).hide()\n })\n }\n})\n","import '@hotwired/turbo-rails'\nimport 'chartjs-adapter-date-fns'\nimport { de } from 'date-fns/locale'\nimport Chartkick from 'chartkick'\nimport 'chartkick/chart.js'\nimport 'controllers'\nimport 'channels'\nimport 'src/global_listeners'\nimport * as Sentry from '@sentry/browser'\nimport { BrowserTracing } from '@sentry/tracing'\n\nimport embed from 'vega-embed'\nimport './channels'\n\n// Initialize vega charts\nwindow.vegaEmbed = embed\nwindow.dispatchEvent(new Event('vega:load'))\n\nSentry.init({\n dsn: 'https://133becad8a744faf8e40fe440ea0de51@scharfe-ente.snaque.com/4',\n environment: process.env.RAILS_ENV,\n allowUrls: [/snaque\\.(com|de)/],\n\n integrations: [\n new BrowserTracing({\n tracingOrigins: ['*.snaque.com']\n })\n ],\n\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 0.05\n})\n\nChartkick.options = {\n download: true,\n library: {\n responsive: true,\n scales: {\n x: {\n adapters: {\n date: {\n locale: de\n }\n }\n }\n }\n }\n}\n\nrequire.context('images', true)\n","import { Application } from '@hotwired/stimulus'\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['container', 'trigger']\n static values = { collapsed: { type: Boolean, default: false } }\n\n connect () {\n this.element.classList.add('collapsible')\n this.triggerTarget.classList.add('collapsible-trigger')\n this.triggerTarget.addEventListener('click', (event) => { this.toggle(event) })\n this.containerTarget.classList.add('collapsible-container')\n this.perform()\n }\n\n toggle () {\n this.collapsedValue = !this.collapsedValue\n this.perform()\n }\n\n perform () {\n if (this.collapsedValue) {\n this.element.classList.add('collapsed')\n this.containerTargets.forEach(target => {\n target.style.display = 'none'\n })\n } else {\n this.element.classList.remove('collapsed')\n this.containerTargets.forEach(target => {\n target.style.display = 'block'\n })\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { CommonDOMRenderer } from 'render-jsx/dom'\nimport Picker from 'vanilla-picker'\n\nexport default class extends Controller {\n static targets = ['input']\n\n inputTargetConnected (element) {\n this.initializePicker(element)\n }\n\n generateTrigger = (input) => {\n const renderer = new CommonDOMRenderer()\n return renderer.render(\n
\n ).target\n }\n\n initializePicker (input) {\n const trigger = this.generateTrigger(input)\n input.insertAdjacentElement('afterend', trigger)\n\n const picker = new Picker({\n parent: trigger,\n alpha: false,\n color: input.value\n })\n\n /*\n You can do what you want with the chosen color using two callbacks: onChange and onDone.\n */\n picker.onChange = function (color) {\n trigger.style.background = color.rgbaString\n input.value = color.hex.substring(0, 7)\n input.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['template', 'trigger']\n\n connect () {\n this.triggerTarget.addEventListener('click', this.showConfirm)\n }\n\n disconnect () {\n this.triggerTarget.removeEventListener('click', this.showConfirm)\n }\n\n async confirm (content) {\n return new Promise((resolve, reject) => {\n resolve(window.confirm(content))\n })\n }\n\n showConfirm = async (event) => {\n if (await this.confirm(this.confirmText) === false) { event.preventDefault() }\n }\n\n get confirmText () {\n return this.templateTarget.content.textContent.trim()\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\n/**\n * Very simple controller that dispatches an event with window as target.\n * Useful if you'd like to communicate with a controller that's not a parent of the current one.\n */\nexport default class extends Controller {\n dispatchEvent = ({ params: { eventName, detail } }) => {\n this.dispatch(eventName, { target: window, detail, prefix: false })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Sortable } from 'sortablejs'\n\nexport default class extends Controller {\n static values = {\n handleSelector: { type: String, default: '.drag-handle' },\n itemSelector: { type: String, default: '.draggable-item' }\n }\n\n static targets = ['positionField']\n\n connect () {\n this.sortable = new Sortable(this.element, {\n animation: 150,\n draggable: this.itemSelectorValue,\n handle: this.handleSelectorValue,\n ghostClass: 'ghost',\n onUpdate: this.handleOrderUpdate\n })\n }\n\n handleOrderUpdate = (event) => {\n if (this.hasPositionFieldTarget) {\n this.positionFieldTargets.forEach((field, idx) => {\n field.value = idx\n })\n\n // If we changed positional field elements, we should also emit an input\n // event to make sure that e.g. a preview happens accordingly\n this.element.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n\n get items () {\n return this.element.querySelectorAll(this.itemSelectorValue)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['output', 'input']\n\n setImage () {\n const input = this.inputTarget\n const output = this.outputTarget\n\n if (input.files && input.files[0]) {\n const reader = new window.FileReader()\n\n reader.onload = () => {\n output.src = reader.result\n output.classList.remove('placeholder', 'placeholder-wave')\n }\n\n reader.readAsDataURL(input.files[0])\n }\n }\n}\n","// src/application.js\nimport { Application } from '@hotwired/stimulus'\nimport { definitionsFromContext } from '@hotwired/stimulus-webpack-helpers'\n\nconst application = Application.start()\nconst context = require.context('.', true, /\\.jsx?$/)\nconst contextComponents = require.context('../../components', true, /_controller\\.jsx?$/)\napplication.load(\n definitionsFromContext(context).concat(\n definitionsFromContext(contextComponents)\n )\n)\n","import { Controller } from '@hotwired/stimulus'\nimport { CommonDOMRenderer } from 'render-jsx/dom'\nimport { ref } from 'render-jsx/common'\n\n/**\n * Adds indicator elements to show the current and maximum allowed length in input elements.\n *\n * @example\n * \n */\nexport default class extends Controller {\n static targets = ['input']\n\n inputTargetConnected (element) {\n this.attachIndicatorElement(element)\n\n element.addEventListener('input', this.updateIndicatorElement)\n }\n\n inputTargetDisconnected (element) {\n element.removeEventListener('input', this.updateIndicatorElement)\n }\n\n attachIndicatorElement = (input) => {\n const renderer = new CommonDOMRenderer()\n\n input.maxLengthIndicator = ref()\n\n const indicator = renderer.render(\n
{`${input.value.length}/${input.maxLength}`}
\n ).target\n\n input.insertAdjacentElement('afterend', indicator)\n }\n\n updateIndicatorElement = (event) => {\n const input = event.target\n const indicator = input.maxLengthIndicator\n\n indicator.$.textContent = `${input.value.length}/${input.maxLength}`\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\n/**\n * Simple controller to insert text into an a text field or text area.\n * inputTarget is the field the text should be inserted into,\n * the text has to be specified as action param, e.g. data-insert-text-value-param=\"the text\"\n */\nexport default class extends Controller {\n static targets = ['input']\n\n insert (event) {\n this.inputTarget.setRangeText(event.params.value)\n this.inputTarget.dispatchEvent(new Event('input', { bubbles: true }))\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Cleave from 'cleave.js'\n\n/**\n * Attaches a cleave input for money values to an input\n */\nexport default class extends Controller {\n static targets = ['input']\n\n connect () {\n // We cannot simply use {swapHiddenInput: true} as it throws off Money parsing.\n // There might be a way to get Money to parse e.g. \"1.00\" correctly, currently it thinks that\n // \"00\" is a currency...\n this.dummyInput = this.#createDummyInput()\n this.inputTarget.type = 'hidden'\n this.inputTarget.id = ''\n this.element.appendChild(this.dummyInput)\n\n new Cleave(this.dummyInput, { // eslint-disable-line no-new\n numeral: true,\n numeralIntegerScale: 8,\n numeralDecimalScale: 4,\n numeralDecimalMark: ',',\n numeralPositiveOnly: true,\n delimiter: '.',\n onValueChanged: (e) => {\n this.inputTarget.value = e.target.rawValue.replace('.', ',')\n }\n })\n }\n\n #createDummyInput () {\n const dummy = this.inputTarget.cloneNode()\n dummy.name = ''\n\n return dummy\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['template', 'container', 'item', 'positionField', 'addItemTrigger']\n static values = {\n // The maximum amount of items per type, -1 means no restrictions\n maxAmountPerType: { type: Number, default: -1 },\n // The maximum total amount of nested items, -1 means no restrictions\n maxAmount: { type: Number, default: -1 }\n }\n\n add (event) {\n event.preventDefault()\n\n const template = this.template(event.params.type)\n const content = template.innerHTML.replace(/NEW_RECORD/g, new Date().getTime().toString())\n\n this.containerTarget.insertAdjacentHTML('afterbegin', content)\n\n this.updatePositionFields()\n\n this.element.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n remove (event) {\n event.preventDefault()\n\n const item = this.itemTargets.filter(i => i.contains(event.target))[0]\n\n if (item.dataset.newRecord === 'true') {\n item.remove()\n } else {\n item.querySelector('input[name*=\\'_destroy\\']').value = 'true'\n item.style.display = 'none'\n }\n\n this.updatePositionFields()\n this.adjustAddItemTriggers()\n\n this.element.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n updatePositionFields () {\n if (this.hasPositionFieldTarget) {\n this.positionFieldTargets.forEach((field, idx) => {\n field.value = idx\n })\n }\n }\n\n itemTargetConnected (item) {\n this.adjustAddItemTriggers()\n this.hideIfMarkedForDestruction(item)\n }\n\n /**\n * Initially hides an element if its _destroy field is already set to \"true\".\n * This is usually the case if a form is re-rendered due to validation errors.\n *\n * @param item\n */\n hideIfMarkedForDestruction (item) {\n if (this.isMarkedForDestruction(item)) { item.style.display = 'none' }\n }\n\n isMarkedForDestruction (item) {\n return item.querySelector('input[name*=\\'_destroy\\']')?.value === 'true'\n }\n\n /**\n * Adjusts the visibility of all addItemTrigger elements based\n * on whether it should be possible to add more items of the corresponding type.\n * This happens on initialization and whenever an item is added or removed\n */\n adjustAddItemTriggers () {\n this.addItemTriggerTargets.forEach(trigger => {\n const type = trigger.dataset.nestedFormTypeParam\n\n if (this.mayAddItemOfType(type)) { trigger.style.display = 'block' } else { trigger.style.display = 'none' }\n })\n }\n\n /**\n *\n * @param type\n * @returns {Boolean} +true+ if another item of the given type may be added\n */\n mayAddItemOfType (type) {\n const totalAmount = this.itemTargets.filter(item => !this.isMarkedForDestruction(item)).length\n const amountOfType = this.itemsOfType(type).filter(item => !this.isMarkedForDestruction(item)).length\n\n if (this.maxAmountValue !== -1 && (totalAmount + 1 > this.maxAmountValue)) { return false }\n if (this.maxAmountPerTypeValue !== -1 && (amountOfType + 1 > this.maxAmountPerTypeValue)) { return false }\n\n return true\n }\n\n /**\n *\n * @param type\n * @returns {*} The items matching the given type\n */\n itemsOfType (type) {\n return this.itemTargets.filter(i => i.dataset.nestedFormType === type)\n }\n\n /**\n *\n * @param type\n * @returns {*} The template for the given type\n */\n template (type) {\n return this.templateTargets.filter(target => target.dataset.type === type)[0]\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Cleave from 'cleave.js'\n\n/**\n * Attaches a cleave input for percentage values to an input\n */\nexport default class extends Controller {\n connect () {\n new Cleave(this.element.querySelector('input'), { // eslint-disable-line no-new\n numeral: true,\n numeralIntegerScale: 3,\n numeralDecimalScale: 2,\n numeralDecimalMark: ',',\n numeralPositiveOnly: true,\n delimiter: '.'\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n connect () {\n this.element.scrollIntoView({ behavior: 'smooth', block: 'end' })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { debounce } from 'lodash'\n\nexport default class extends Controller {\n static targets = ['submitButton']\n\n initialize () {\n this.handleInput = debounce(this.handleInput, 250).bind(this)\n }\n\n connect () {\n this.element.addEventListener('input', this.handleInput)\n }\n\n disconnect () {\n this.element.removeEventListener('input', this.handleInput)\n }\n\n handleInput () {\n if (this.hasSubmitButtonTarget) {\n this.submitButtonTarget.click()\n } else {\n this.element.requestSubmit()\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\n/**\n * Shows one of the element's ancestors when the controller is connected,\n * hides it when it's disconnected.\n * Accepts a selector to specify the ancestor to be shown/hidden\n */\nexport default class extends Controller {\n static values = { selector: { type: String, default: 'div' } }\n\n connect () {\n this.targetOnConnect = this.element.closest(this.selectorValue)\n this.targetOnConnect.style.display = 'block'\n }\n\n disconnect () {\n this.targetOnConnect.style.display = 'none'\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Turbo } from '@hotwired/turbo-rails'\n\n/**\n * Refreshes the turbo frame it is assigned to periodically\n */\nexport default class extends Controller {\n static values = { interval: { type: Number, default: 60 } }\n\n connect () {\n this.element.addEventListener('turbo:submit-end', this.handleSubmitEnd)\n document.addEventListener('turbo:frame-missing', this.handleMissingFrame)\n }\n\n disconnect () {\n this.element.removeEventListener('turbo:submit-end', this.handleSubmitEnd)\n this.element.removeEventListener('turbo:frame-missing', this.handleMissingFrame)\n }\n\n handleMissingFrame = (e) => {\n e.preventDefault()\n }\n\n handleSubmitEnd = (e) => {\n // For now, we assume that redirects will only happen on successful form submissions\n if (!e.detail.success) { return }\n\n // For some forms, there might be other submission targets, e.g. for the bite preview.\n // In that case, we never want to leave the page.\n if (e.detail.formSubmission.location.href !== e.target.action) { return }\n\n // Only redirect if the server actually expects us to\n if (e.detail.fetchResponse.response.redirected) {\n Turbo.visit(e.detail.fetchResponse.response.url)\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\n/**\n * Refreshes the turbo frame it is assigned to periodically\n */\nexport default class extends Controller {\n static values = { interval: { type: Number, default: 60 } }\n\n connect () {\n this.interval = setInterval(() => {\n this.element.reload()\n }, this.intervalValue * 1000)\n }\n\n disconnect () {\n clearInterval(this.interval)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Turbo } from '@hotwired/turbo-rails'\n\nexport default class extends Controller {\n static values = { src: String }\n\n connect () {\n console.log('fetching', this.srcValue)\n\n fetch(this.srcValue, {\n headers: {\n Accept: 'text/vnd.turbo-stream.html'\n }\n }).then(r => r.text())\n .then(html => Turbo.renderStreamMessage(html))\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { ref } from 'render-jsx/common'\nimport { CommonDOMRenderer } from 'render-jsx/dom'\n\nexport default class extends Controller {\n static targets = ['collapsedItem', 'showItemsLink']\n connect () {\n if (this.hasShowItemsLinkTarget) {\n this.showItemsLinkTarget.addEventListener('click', () => { this.showCollapsedItems() })\n }\n }\n\n disconnect () {\n if (this.hasShowItemsLinkTarget) {\n this.showItemsLinkTarget.removeEventListener('click', this.showCollapsedItems)\n }\n }\n\n showCollapsedItems () {\n this.collapsedItemTargets.forEach(elem => {\n elem.style.display = 'inline'\n })\n this.showItemsLinkTarget.style.display = 'none'\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['kiosk']\n static values = {\n project: { type: String, default: 'PREVIEW_PROJECT' },\n abortUrl: String,\n snaquebarId: String\n }\n\n connect () {\n this.kioskTarget.addEventListener('kioskFailure', console.error)\n\n this.kioskTarget.addEventListener('kioskAbort', event => {\n if (this.hasAbortUrlValue) {\n window.location.href = this.abortUrlValue\n }\n })\n this.kioskTarget.addEventListener('kioskSuccess', (event) => {\n const currentURL = new URL(window.location.href)\n currentURL.searchParams.delete('snaquebar_id')\n\n window.confirm('Freischaltung erfolgreich!')\n\n window.location.href = currentURL\n })\n\n this.kioskTarget.project = this.projectValue\n this.kioskTarget.resource = 'preview_resource'\n this.kioskTarget.meta = JSON.stringify({ snaquebar_id: this.snaquebarIdValue })\n this.kioskTarget.variant = 'preview'\n\n this.kioskTarget.showKiosk = true\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['template', 'trigger']\n\n connect () {\n this.triggerTarget.addEventListener('click', this.showConfirm)\n }\n\n disconnect () {\n this.triggerTarget.removeEventListener('click', this.showConfirm)\n }\n\n async confirm (content) {\n return new Promise((resolve, reject) => {\n resolve(window.confirm(content))\n })\n }\n\n showConfirm = async (event) => {\n if (await this.confirm(this.confirmText) === false) { event.preventDefault() }\n }\n\n get confirmText () {\n return this.templateTarget.content.textContent.trim()\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['source', 'icon']\n static values = {\n iconDefault: { type: String, default: 'content_paste' },\n iconCopied: { type: String, default: 'inventory' }\n }\n\n copy (event) {\n event.preventDefault()\n navigator.clipboard.writeText(this.sourceTarget.value).then(() => {\n this.#setCopiedIcon()\n setTimeout(() => {\n this.#setOriginalIcon()\n }, 3000)\n })\n }\n\n selectAll (event) {\n event.preventDefault()\n event.target.setSelectionRange(0, event.target.value.length)\n }\n\n #setCopiedIcon () {\n this.iconTarget.textContent = this.iconCopiedValue\n }\n\n #setOriginalIcon () {\n this.iconTarget.textContent = this.iconDefaultValue\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n connect () {\n console.log('Hello, Stimulus!', this.element)\n }\n}\n","import dayjs from 'dayjs'\n\nfunction FlatpickrPredefinedRanges () {\n return function (fp) {\n const rangesNav = document.createElement('ul')\n rangesNav.className = 'nav flex-column flatpickr-predefined-ranges'\n\n const pluginData = {\n ranges: typeof fp.config.ranges !== 'undefined' ? fp.config.ranges : {},\n rangesOnly: typeof fp.config.rangesOnly === 'undefined' || fp.config.rangesOnly,\n rangesAllowCustom: typeof fp.config.rangesAllowCustom === 'undefined' || fp.config.rangesAllowCustom,\n rangesCustomLabel: typeof fp.config.rangesCustomLabel !== 'undefined' ? fp.config.rangesCustomLabel : 'Custom Range',\n rangesNav,\n rangesButtons: {}\n }\n\n /**\n * @param {string} label\n * @returns HTML Element\n */\n const addRangeButton = function (label) {\n const button = document.createElement('button')\n button.type = 'button'\n button.className = 'nav-link btn btn-link'\n button.innerText = label\n\n pluginData.rangesButtons[label] = button\n\n const item = document.createElement('li')\n item.className = 'nav-item d-grid'\n\n item.appendChild(pluginData.rangesButtons[label])\n\n pluginData.rangesNav.appendChild(item)\n\n return pluginData.rangesButtons[label]\n }\n\n /**\n * Loop the ranges and check for one that matches the selected dates, adding\n * an active class to its corresponding button.\n *\n * If there are selected dates and a range is not matched, check for a custom\n * range button and set it to active.\n *\n * If there are no selected dates or a range is not matched, check if the\n * rangeOnly option is true and if so hide the calendar.\n *\n * @param {Array} selectedDates\n */\n const selectActiveRangeButton = function (selectedDates) {\n let isPredefinedRange = false\n const current = pluginData.rangesNav.querySelector('.active')\n\n if (current) {\n current.classList.remove('active')\n }\n\n if (selectedDates.length > 0) {\n const startDate = dayjs(selectedDates[0])\n const endDate = selectedDates.length > 1 ? dayjs(selectedDates[1]) : startDate\n for (const [label, range] of Object.entries(pluginData.ranges)) {\n if (startDate.isSame(dayjs(range[0]), 'day') && endDate.isSame(dayjs(range[1]), 'day')) {\n pluginData.rangesButtons[label].classList.add('active')\n isPredefinedRange = true\n break\n }\n }\n }\n\n if (selectedDates.length > 0 &&\n !isPredefinedRange &&\n Object.prototype.hasOwnProperty.call(pluginData.rangesButtons, pluginData.rangesCustomLabel)\n ) {\n pluginData.rangesButtons[pluginData.rangesCustomLabel].classList.add('active')\n fp.calendarContainer.classList.remove('flatpickr-predefined-ranges-only')\n } else if (pluginData.rangesOnly) {\n fp.calendarContainer.classList.add('flatpickr-predefined-ranges-only')\n }\n }\n\n return {\n onOpen () {\n const predefinedWidth = fp.calendarContainer.querySelector('ul.flatpickr-predefined-ranges').offsetWidth\n const calendarWidth = fp.calendarContainer.querySelector('.flatpickr-innerContainer').offsetWidth\n\n fp.calendarContainer.style.width = `${predefinedWidth + calendarWidth}px`\n },\n\n /**\n * Loop the ranges and add buttons for each range which a click handler to set the date.\n * Also adds a custom range button if the rangesAllowCustom option is set to true.\n */\n onReady (selectedDates) {\n for (const [label, range] of Object.entries(pluginData.ranges)) {\n addRangeButton(label).addEventListener('click', function () {\n const start = dayjs(range[0]).toDate()\n const end = dayjs(range[1]).toDate()\n\n if (!start) {\n fp.clear()\n } else {\n fp.setDate([start, end], true)\n }\n\n fp.close()\n })\n }\n\n if (pluginData.rangesNav.children.length > 0) {\n if (pluginData.rangesOnly && pluginData.rangesAllowCustom) {\n const customButton = addRangeButton(pluginData.rangesCustomLabel)\n customButton.addEventListener('click', function () {\n const current = pluginData.rangesNav.querySelector('.active')\n if (current) {\n current.classList.remove('active')\n }\n customButton.classList.add('active')\n fp.calendarContainer.classList.remove('flatpickr-predefined-ranges-only')\n })\n }\n\n fp.calendarContainer.prepend(pluginData.rangesNav)\n fp.calendarContainer.classList.add('flatpickr-has-predefined-ranges')\n // make sure the right range button is active for the default value\n selectActiveRangeButton(selectedDates)\n }\n },\n\n /**\n * Make sure the right range button is active when a value is manually entered\n *\n * @param {Array} selectedDates\n */\n onValueUpdate (selectedDates) {\n selectActiveRangeButton(selectedDates)\n }\n }\n }\n}\n\nexport default FlatpickrPredefinedRanges\n","import { Controller } from '@hotwired/stimulus'\nimport dayjs from 'dayjs'\nimport flatpickr from 'flatpickr'\nimport { German } from 'flatpickr/dist/l10n/de'\nimport FlatpickrPredefinedRanges from '../../javascript/src/flatpickr-predefined-ranges'\n\nexport default class extends Controller {\n static targets = ['outputField', 'startDate', 'endDate']\n\n static predefinedRanges = {\n Heute: [new Date(), new Date()],\n Gestern: [dayjs().subtract(1, 'days').toDate(), dayjs().subtract(1, 'days').toDate()],\n 'Letzte 30 Tage': [dayjs().subtract(29, 'days').toDate(), new Date()],\n 'Aktueller Monat': [dayjs().startOf('month').toDate(), dayjs().endOf('month').toDate()],\n 'Letzter Monat': [\n dayjs().subtract(1, 'month').startOf('month').toDate(),\n dayjs().subtract(1, 'month').endOf('month').toDate()\n ],\n 'Aktuelles Jahr': [\n dayjs().startOf('year').toDate(),\n new Date()\n ],\n 'Letztes Jahr': [\n dayjs().subtract(1, 'year').startOf('year').toDate(),\n dayjs().subtract(1, 'year').endOf('year').toDate()\n ]\n }\n\n connect () {\n this.startDate = new Date(this.startDateTarget.value)\n this.endDate = new Date(this.endDateTarget.value)\n\n this.picker = flatpickr(this.outputFieldTarget, {\n plugins: [new FlatpickrPredefinedRanges()],\n mode: 'range',\n onChange: this.datesChanged,\n locale: German,\n dateFormat: 'd.m.Y',\n defaultDate: [this.startDate, this.endDate],\n weekNumbers: true,\n ranges: this.constructor.predefinedRanges,\n rangesOnly: false,\n rangesAllowCustom: true,\n rangesCustomLabel: 'Custom Range'\n })\n }\n\n datesChanged = (dates, dateString, _instance) => {\n if (dates.length === 2) {\n this.startDate = dates[0]\n this.endDate = dates[1]\n this.setFieldValues()\n }\n }\n\n setFieldValues () {\n this.startDateTarget.value = this.startDate.toISOString()\n this.endDateTarget.value = this.endDate.toISOString()\n\n this.outputFieldTarget.disabled = true\n this.element.closest('form').requestSubmit()\n this.outputFieldTarget.disabled = false\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport flatpickr from 'flatpickr'\nimport { German } from 'flatpickr/dist/l10n/de'\n\nexport default class extends Controller {\n static targets = ['dateField']\n\n connect () {\n this.picker = flatpickr(this.dateFieldTarget, {\n altInput: true,\n mode: 'single',\n locale: German,\n enableTime: true,\n dateFormat: 'Z',\n minDate: this.dateFieldTarget.dataset.minimum,\n altFormat: 'd.m.Y - H:i'\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Dropzone } from 'dropzone'\nimport { Turbo } from '@hotwired/turbo-rails'\n\nexport default class extends Controller {\n static targets = ['fileField', 'preview', 'progressBar']\n\n connect () {\n Turbo.session.connectStreamSource(this.element)\n\n this.dropzone = new Dropzone(this.fileFieldTarget.closest('form'), {\n paramName: this.fileFieldTarget.name,\n createImageThumbnails: false,\n disablePreviews: true,\n autoProcessQueue: true,\n acceptedFiles: '.jpg,.jpeg,.png',\n totaluploadprogress: (percent, totalBytes, totalBytesSent) => {\n this.progressBarTarget.style.width = `${percent}%`\n this.progressBarTarget.textContent = `${percent}%`\n },\n headers: {\n Accept: 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n },\n success: (file) => {\n const event = new MessageEvent('message', { data: file.xhr.response })\n return this.element.dispatchEvent(event)\n },\n error: (file, errorMessage) => {\n if (!this.dropzone.options.acceptedFiles.includes(file.type)) {\n window.alert('Nicht unterstützter Dateityp. Bitte laden Sie nur jpg, jpeg oder png-Dateien hoch.')\n }\n this.dropzone.removeFile(file) // Die fehlerhafte Datei aus der Queue entfernen\n }\n\n })\n }\n\n disconnect () {\n Turbo.session.disconnectStreamSource(this.element)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['colorFieldTemplate', 'colorField', 'preview']\n static values = {\n fieldName: String,\n colors: Array\n }\n\n connect () {\n this.colorsValue.forEach(color => {\n const node = this.templateNode()\n node.value = color\n this.element.appendChild(node)\n })\n\n this.generatePreview()\n }\n\n updateColors () {\n this.colorsValue = this.colorFieldTargets.map(elem => elem.value)\n this.generatePreview()\n }\n\n generatePreview () {\n this.previewTarget.style.backgroundImage = `linear-gradient(-45deg,${this.colorsValue.join(',')})`\n }\n\n templateNode () {\n const node = this.colorFieldTemplateTarget.content.querySelector('input').cloneNode(true)\n node.id = node.id + this.colorFieldTargets.length.toString()\n return node\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Popover } from 'bootstrap'\nimport MaterialIconData from '@material-symbols/metadata/versions.json'\nimport { CommonDOMRenderer } from 'render-jsx/dom'\nimport { ref } from 'render-jsx/common'\nimport { debounce } from 'lodash'\n\nexport default class extends Controller {\n static targets = ['iconField', 'iconPreview', 'trigger']\n static values = { filterText: { type: String, default: '' } }\n\n initialize () {\n this.setFilterText = debounce(this.setFilterText, 500).bind(this)\n }\n\n connect () {\n this.icons = ref()\n this.renderer = new CommonDOMRenderer()\n this.availableIcons = Object.keys(MaterialIconData)\n\n this.iconSelector = new Popover(this.triggerTarget, {\n content: this.popoverContent(this.renderer),\n html: true,\n container: this.element\n })\n }\n\n popoverContent (renderer) {\n return renderer.render(\n
\n
\n \n
\n
\n {this.renderIcons(renderer)}\n
\n
\n ).target\n }\n\n renderIcons (renderer) {\n return this.filteredIcons().map(icon => {\n return renderer.render(\n
\n \n
\n ).target\n })\n }\n\n selectIcon (icon) {\n this.iconFieldTarget.value = icon\n this.iconPreviewTarget.textContent = icon\n this.iconSelector.hide()\n this.iconFieldTarget.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n filterTextValueChanged () {\n this.icons?.$.replaceChildren(...this.renderIcons(this.renderer))\n }\n\n setFilterText (event) {\n this.filterTextValue = event.target.value\n }\n\n filteredIcons () {\n return this.availableIcons.filter(icon => icon.search(this.filterTextValue) > -1)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Modal } from 'bootstrap'\nimport { Turbo } from '@hotwired/turbo-rails'\n\nexport default class extends Controller {\n connect () {\n document.addEventListener('turbo:submit-start', this.handleSubmitStart)\n document.addEventListener('turbo:submit-end', this.handleSubmitEnd)\n\n this.modal = Modal.getOrCreateInstance(this.element, {\n keyboard: false,\n backdrop: 'static'\n })\n\n this.element.addEventListener('hidden.bs.modal', this.removeModal)\n\n this.modal.show()\n\n this.originalSubmitValue = null\n }\n\n disconnect () {\n document.removeEventListener('turbo:submit-start', this.handleSubmitStart)\n document.removeEventListener('turbo:submit-end', this.handleSubmitEnd)\n document.removeEventListener('hidden.bs.modal', this.removeModal)\n }\n\n removeModal = (e) => {\n this.modal.dispose()\n\n if (this.element.parentElement) { this.element.parentElement.src = null }\n this.element.remove()\n }\n\n handleSubmitStart = (e) => {\n this.originalSubmitValue = e.detail.formSubmission.submitter.value\n e.detail.formSubmission.submitter.value = 'Speichern...'\n }\n\n handleSubmitEnd = (e) => {\n e.detail.formSubmission.submitter.value = this.originalSubmitValue\n\n // Only close the modal if the request was a success and went to the actual form action.\n // The latter is useful in case of e.g. preview actions which submit the form to a different endpoint.\n if (e.detail.success && e.detail.formSubmission.location.href === e.target.action) {\n this.close()\n\n // If the server response triggered a redirect, it went to the modal_body turbo frame.\n // Therefore, we have to manually trigger a _top visit with the new URL.\n if (e.detail.fetchResponse.response.redirected) {\n Turbo.visit(e.detail.fetchResponse.response.url)\n }\n }\n }\n\n close () {\n this.modal.hide()\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Turbo } from '@hotwired/turbo-rails'\n\nexport default class extends Controller {\n static targets = ['tabContent', 'tabContentFieldset', 'tabHeaderActions']\n\n connect () {\n this.element.addEventListener('show.bs.tab', this.handleTabShow)\n this.disableInputFieldsInAllTabs()\n this.hideAllHeaderActions()\n this.setActiveTabFromLocationHash()\n this.showTabHeaderActions(this.activeTab)\n this.activateInputFields(this.activeTab)\n }\n\n disconnect () {\n this.element.removeEventListener('show.bs.tab', this.handleTabShow)\n }\n\n handleTabShow = (event) => {\n const newTab = this.element.querySelector(event.target.dataset.bsTarget)\n const tabURL = new URL(window.location.href)\n tabURL.searchParams.set('active_tab', event.target.dataset.bsTarget.slice(1))\n\n this.disableInputFieldsInAllTabs()\n this.hideAllHeaderActions()\n this.showTabHeaderActions(newTab)\n this.activateInputFields(newTab)\n // Disabling/Enabling fields should be counted as an input event / a user action\n // and therefore trigger corresponding behaviour, e.g. a preview update\n this.element.dispatchEvent(new Event('input', { bubbles: true }))\n\n // Set the location hash to the active tab for page refreshes\n Turbo.navigator.history.push(tabURL)\n }\n\n get activeTab () {\n return this.tabContentTargets.find(target => target.classList.contains('active'))\n }\n\n setActiveTabFromLocationHash () {\n const tabURL = new URL(window.location.href)\n const activeTabParam = tabURL.searchParams.get('active_tab')\n\n if (activeTabParam) {\n const activeTabID = `#${activeTabParam}`\n const tabFromHash = this.element.querySelector(activeTabID)\n\n // If the correct tab is already marked as active, we have nothing left to do\n if (tabFromHash && !tabFromHash.classList.contains('active')) {\n // Mark the correct tab pill as active\n this.element.querySelector('.nav-link.active')?.classList?.remove('active')\n this.element.querySelector(`.nav-link[data-bs-target=\"${activeTabID}\"]`).classList.add('active')\n\n // Mark the correct tab pane as active\n this.tabContentTargets.forEach(pane => pane.classList.remove('active'))\n tabFromHash.classList.add('active')\n }\n }\n }\n\n activateInputFields = (element) => {\n this.tabContentFieldsetTargets.filter(fieldset => element.contains(fieldset))[0].removeAttribute('disabled')\n }\n\n disableInputFieldsInAllTabs = () => {\n this.tabContentFieldsetTargets.forEach(fieldset => fieldset.setAttribute('disabled', true))\n }\n\n showTabHeaderActions = (tab) => {\n const actions = this.tabHeaderActionsTargets.find(el => el.dataset.tabId === tab.id)\n\n if (actions) {\n actions.style.display = 'inherit'\n }\n }\n\n hideAllHeaderActions = () => {\n this.tabHeaderActionsTargets.forEach(target => { target.style.display = 'none' })\n }\n}\n","export function parameterizeString (string) {\n return string.trim().toLowerCase().replace(/[^a-zA-Z\\d -]/, '-').replace(/\\s/g, '-')\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Tagify from '@yaireo/tagify'\nimport { Popover } from 'bootstrap'\nimport { CommonDOMRenderer } from 'render-jsx/dom'\nimport * as Routes from '../../javascript/routes'\nimport { I18n } from 'i18n-js'\nimport translations from '../../javascript/locales.json'\nimport { parameterizeString } from '../../javascript/src/helpers'\n\nconst i18n = new I18n(translations)\ni18n.locale = 'de'\n\nexport default class extends Controller {\n static targets = ['tagList', 'addTagButton']\n\n connect () {\n this.categories = []\n this.loadCategories()\n\n this.tagify = new Tagify(this.tagListTarget, {\n addTagOnBlur: false,\n dropdown: {\n position: 'text',\n enabled: 1 // show suggestions dropdown after 1 typed character\n },\n duplicates: false,\n enforceWhitelist: false,\n templates: {\n tag: this.renderTag\n },\n transformTag: (tagData) => {\n tagData.name = tagData.value\n },\n trim: true\n })\n\n this.tagify.on('input', this.tagsChanged).on('edit:input', this.tagsChanged)\n\n this.popover = new Popover(this.addTagButtonTarget, {\n content: this.popoverContent,\n html: true,\n container: 'body'\n })\n }\n\n renderTag (tagData, tagify) {\n const renderer = new CommonDOMRenderer()\n\n return renderer.render(\n \n \n
\n \n {tagData[this.settings.tagTextProp] || tagData.value}\n \n
\n \n ).target.outerHTML\n }\n\n /* eslint-disable react/jsx-key */\n popoverContent = () => {\n const renderer = new CommonDOMRenderer()\n\n return renderer.render(\n
\n
\n {['mandatory', 'optional', 'excluded'].map(matchingType => {\n return (\n
\n {i18n.t(`activerecord.attributes.tagging.matching_types.${matchingType}`)}\n\n {this.categories.map(({ value, name }) => {\n return (\n this.addTag(matchingType, value)}\n >\n {name}\n \n )\n })}\n
\n )\n })}\n
\n
\n ).target\n }\n\n addTag (matchingType, category) {\n this.popover.hide()\n this.tagify.addEmptyTag({ matchingType, category })\n }\n\n /**\n * Loads matching tags from the server on user input (new tags and edited tags)\n * @param e\n */\n tagsChanged = (e) => {\n this.tagify.whitelist.length = 0 // reset current whitelist\n this.tagify.loading(true).dropdown.hide.call(this.tagify) // show the loader animation\n\n const { matchingType, category } = e.detail.tag.__tagifyTagData\n const inputValue = e.detail.data.newValue\n\n this\n .loadMatchingTags(category, inputValue)\n .then(tags => {\n const tagObjects = tags.map(tag => {\n return { category: tag.category, matchingType, value: tag.name, name: tag.name }\n })\n\n // Add the newly loaded tags to the dropdown suggestions and keep the data\n // the user already added.\n this.tagify.whitelist.push(...tagObjects, ...this.tagify.value)\n this.tagify.loading(false).dropdown.show.call(this.tagify, e.detail.data.newValue)\n })\n }\n\n loadMatchingTags = (category, input) => {\n return fetch(Routes.admin_tags_path({ category, q: input, format: 'json' }))\n .then(response => response.json())\n }\n\n loadCategories () {\n fetch(Routes.categories_admin_tags_path({ format: 'json' }))\n .then(response => response.json())\n .then(data => {\n this.categories = data\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport '@snaque/snaque-bite/snaque-bite'\n\nexport default class extends Controller {\n static targets = ['bite']\n static values = {\n bite: Object\n }\n\n connect () {\n this.biteTarget.bite = this.biteValue\n }\n\n disconnect () {\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['collapsedItem', 'showItemsLink']\n connect () {\n if (this.hasShowItemsLinkTarget) {\n this.showItemsLinkTarget.addEventListener('click', () => { this.showCollapsedItems() })\n }\n }\n\n disconnect () {\n if (this.hasShowItemsLinkTarget) {\n this.showItemsLinkTarget.removeEventListener('click', this.showCollapsedItems)\n }\n }\n\n showCollapsedItems () {\n this.collapsedItemTargets.forEach(elem => {\n elem.classList.remove('is-collapsed')\n })\n this.showItemsLinkTarget.classList.add('is-collapsed')\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['source', 'icon']\n static values = {\n iconDefault: { type: String, default: 'content_paste' },\n iconCopied: { type: String, default: 'inventory' }\n }\n\n copy (event) {\n event.preventDefault()\n navigator.clipboard.writeText(this.sourceTarget.value).then(() => {\n this.#setCopiedIcon()\n setTimeout(() => {\n this.#setOriginalIcon()\n }, 3000)\n })\n }\n\n selectAll (event) {\n event.preventDefault()\n event.target.setSelectionRange(0, event.target.value.length)\n }\n\n #setCopiedIcon () {\n this.iconTarget.textContent = this.iconCopiedValue\n }\n\n #setOriginalIcon () {\n this.iconTarget.textContent = this.iconDefaultValue\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['messageInput']\n\n connect () {\n this.messageInputTarget.value = ''\n this.messageInputTarget.focus()\n }\n\n checkSubmit (event) {\n if (event.keyCode === 13 && event.metaKey) {\n event.preventDefault()\n this.messageInputTarget.closest('form').requestSubmit()\n } else {\n this.adjustHeight()\n }\n }\n\n adjustHeight () {\n this.messageInputTarget.style.height = 'auto'\n this.messageInputTarget.style.height = (this.messageInputTarget.scrollHeight) + 'px'\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport flatpickr from 'flatpickr'\nimport { German } from 'flatpickr/dist/l10n/de'\n\nexport default class extends Controller {\n static targets = ['dateField']\n\n connect () {\n this.picker = flatpickr(this.dateFieldTarget, {\n altInput: true,\n mode: 'single',\n locale: German,\n enableTime: false,\n dateFormat: 'Y-m-d',\n minDate: this.dateFieldTarget.dataset.minimum,\n maxDate: this.dateFieldTarget.dataset.maximum,\n altFormat: 'd.m.Y'\n })\n }\n\n disconnect () {\n if (this.picker) {\n this.picker.destroy()\n }\n }\n}\n","import dayjs from 'dayjs'\n\nfunction FlatpickrPredefinedRanges () {\n return function (fp) {\n const rangesNav = document.createElement('div')\n rangesNav.className = 'buttons flatpickr-predefined-ranges'\n\n const pluginData = {\n ranges: typeof fp.config.ranges !== 'undefined' ? fp.config.ranges : {},\n rangesOnly: typeof fp.config.rangesOnly === 'undefined' || fp.config.rangesOnly,\n rangesAllowCustom: typeof fp.config.rangesAllowCustom === 'undefined' || fp.config.rangesAllowCustom,\n rangesCustomLabel: typeof fp.config.rangesCustomLabel !== 'undefined' ? fp.config.rangesCustomLabel : 'Custom Range',\n rangesNav,\n rangesButtons: {}\n }\n\n /**\n * @param {string} label\n * @returns HTML Element\n */\n const addRangeButton = function (label) {\n const button = document.createElement('button')\n button.type = 'button'\n button.className = 'button is-fullwidth'\n button.innerText = label\n\n pluginData.rangesButtons[label] = button\n pluginData.rangesNav.appendChild(button)\n\n return button\n }\n\n /**\n * Loop the ranges and check for one that matches the selected dates, adding\n * an active class to its corresponding button.\n *\n * If there are selected dates and a range is not matched, check for a custom\n * range button and set it to active.\n *\n * If there are no selected dates or a range is not matched, check if the\n * rangeOnly option is true and if so hide the calendar.\n *\n * @param {Array} selectedDates\n */\n const selectActiveRangeButton = function (selectedDates) {\n let isPredefinedRange = false\n const current = pluginData.rangesNav.querySelector('.active')\n\n if (current) {\n current.classList.remove('active')\n }\n\n if (selectedDates.length > 0) {\n const startDate = dayjs(selectedDates[0])\n const endDate = selectedDates.length > 1 ? dayjs(selectedDates[1]) : startDate\n for (const [label, range] of Object.entries(pluginData.ranges)) {\n if (startDate.isSame(dayjs(range[0]), 'day') && endDate.isSame(dayjs(range[1]), 'day')) {\n pluginData.rangesButtons[label].classList.add('is-active')\n isPredefinedRange = true\n break\n }\n }\n }\n\n if (selectedDates.length > 0 &&\n !isPredefinedRange &&\n Object.prototype.hasOwnProperty.call(pluginData.rangesButtons, pluginData.rangesCustomLabel)\n ) {\n pluginData.rangesButtons[pluginData.rangesCustomLabel].classList.add('active')\n fp.calendarContainer.classList.remove('flatpickr-predefined-ranges-only')\n } else if (pluginData.rangesOnly) {\n fp.calendarContainer.classList.add('flatpickr-predefined-ranges-only')\n }\n }\n\n return {\n onOpen () {\n const predefinedWidth = fp.calendarContainer.querySelector('.flatpickr-predefined-ranges').offsetWidth\n const calendarWidth = fp.calendarContainer.querySelector('.flatpickr-innerContainer').offsetWidth\n\n fp.calendarContainer.style.width = `${predefinedWidth + calendarWidth}px`\n },\n\n /**\n * Loop the ranges and add buttons for each range which a click handler to set the date.\n * Also adds a custom range button if the rangesAllowCustom option is set to true.\n */\n onReady (selectedDates) {\n for (const [label, range] of Object.entries(pluginData.ranges)) {\n addRangeButton(label).addEventListener('click', function () {\n const start = dayjs(range[0]).toDate()\n const end = dayjs(range[1]).toDate()\n\n if (!start) {\n fp.clear()\n } else {\n fp.setDate([start, end], true)\n }\n\n fp.close()\n })\n }\n\n if (pluginData.rangesNav.children.length > 0) {\n if (pluginData.rangesOnly && pluginData.rangesAllowCustom) {\n const customButton = addRangeButton(pluginData.rangesCustomLabel)\n customButton.addEventListener('click', function () {\n const current = pluginData.rangesNav.querySelector('.active')\n if (current) {\n current.classList.remove('active')\n }\n customButton.classList.add('active')\n fp.calendarContainer.classList.remove('flatpickr-predefined-ranges-only')\n })\n }\n\n fp.calendarContainer.prepend(pluginData.rangesNav)\n fp.calendarContainer.classList.add('flatpickr-has-predefined-ranges')\n // make sure the right range button is active for the default value\n selectActiveRangeButton(selectedDates)\n }\n },\n\n /**\n * Make sure the right range button is active when a value is manually entered\n *\n * @param {Array} selectedDates\n */\n onValueUpdate (selectedDates) {\n selectActiveRangeButton(selectedDates)\n }\n }\n }\n}\n\nexport default FlatpickrPredefinedRanges\n","import { Controller } from '@hotwired/stimulus'\nimport dayjs from 'dayjs'\nimport flatpickr from 'flatpickr'\nimport { German } from 'flatpickr/dist/l10n/de'\nimport FlatpickrPredefinedRanges from '../../../javascript/src/flatpickr-predefined-ranges-bulma'\n\nexport default class extends Controller {\n static targets = ['outputField', 'startDate', 'endDate']\n\n static predefinedRanges = {\n Heute: [new Date(), new Date()],\n Gestern: [dayjs().subtract(1, 'days').toDate(), dayjs().subtract(1, 'days').toDate()],\n 'Letzte 30 Tage': [dayjs().subtract(29, 'days').toDate(), new Date()],\n 'Aktueller Monat': [dayjs().startOf('month').toDate(), dayjs().endOf('month').toDate()],\n 'Letzter Monat': [\n dayjs().subtract(1, 'month').startOf('month').toDate(),\n dayjs().subtract(1, 'month').endOf('month').toDate()\n ],\n 'Aktuelles Jahr': [\n dayjs().startOf('year').toDate(),\n new Date()\n ],\n 'Letztes Jahr': [\n dayjs().subtract(1, 'year').startOf('year').toDate(),\n dayjs().subtract(1, 'year').endOf('year').toDate()\n ]\n }\n\n connect () {\n this.startDate = new Date(this.startDateTarget.value)\n this.endDate = new Date(this.endDateTarget.value)\n\n this.picker = flatpickr(this.outputFieldTarget, {\n plugins: [new FlatpickrPredefinedRanges()],\n mode: 'range',\n onChange: this.datesChanged,\n locale: German,\n dateFormat: 'd.m.Y',\n defaultDate: [this.startDate, this.endDate],\n weekNumbers: true,\n ranges: this.constructor.predefinedRanges,\n rangesOnly: false,\n rangesAllowCustom: true,\n rangesCustomLabel: 'Custom Range'\n })\n }\n\n datesChanged = (dates, dateString, _instance) => {\n if (dates.length === 2) {\n this.startDate = dates[0]\n this.endDate = dates[1]\n this.setFieldValues()\n }\n }\n\n setFieldValues () {\n this.startDateTarget.value = this.startDate.toISOString()\n this.endDateTarget.value = this.endDate.toISOString()\n\n this.outputFieldTarget.disabled = true\n this.element.closest('form').requestSubmit()\n this.outputFieldTarget.disabled = false\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport flatpickr from 'flatpickr'\nimport { German } from 'flatpickr/dist/l10n/de'\n\nexport default class extends Controller {\n static targets = ['dateField']\n\n connect () {\n this.picker = flatpickr(this.dateFieldTarget, {\n altInput: true,\n mode: 'single',\n locale: German,\n enableTime: true,\n dateFormat: 'Z',\n minDate: this.dateFieldTarget.dataset.minimum,\n altFormat: 'd.m.Y - H:i'\n })\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['preview', 'input']\n\n connect () {\n this.inputTarget.addEventListener('input', this.setImage)\n }\n\n setImage = () => {\n const input = this.inputTarget\n const output = this.previewTarget\n\n if (input.files && input.files[0]) {\n const reader = new window.FileReader()\n\n reader.onload = () => {\n output.src = reader.result\n output.classList.remove('placeholder', 'placeholder-wave')\n }\n\n reader.readAsDataURL(input.files[0])\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['colorFieldTemplate', 'colorField', 'preview']\n static values = {\n fieldName: String,\n colors: Array\n }\n\n connect () {\n this.colorsValue.forEach(color => {\n const node = this.templateNode()\n node.value = color\n this.element.appendChild(node)\n })\n\n this.generatePreview()\n }\n\n updateColors () {\n this.colorsValue = this.colorFieldTargets.map(elem => elem.value)\n this.generatePreview()\n }\n\n generatePreview () {\n this.previewTarget.style.backgroundImage = `linear-gradient(-45deg,${this.colorsValue.join(',')})`\n }\n\n templateNode () {\n const node = this.colorFieldTemplateTarget.content.querySelector('input').cloneNode(true)\n node.id = node.id + this.colorFieldTargets.length.toString()\n return node\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Tagify from '@yaireo/tagify'\nimport { Popover } from 'bootstrap'\nimport { CommonDOMRenderer } from 'render-jsx/dom'\nimport * as Routes from '../../../javascript/routes'\nimport { I18n } from 'i18n-js'\nimport translations from '../../../javascript/locales.json'\nimport { parameterizeString } from '../../../javascript/src/helpers'\n\nconst i18n = new I18n(translations)\ni18n.locale = 'de'\n\nexport default class extends Controller {\n static targets = ['tagList']\n static values = {\n category: String,\n matchingType: String,\n tagClass: String\n }\n\n connect () {\n const tagClass = this.tagClassValue\n\n this.tagify = new Tagify(this.tagListTarget, {\n addTagOnBlur: false,\n dropdown: {\n position: 'text',\n enabled: 1 // show suggestions dropdown after 1 typed character\n },\n duplicates: false,\n enforceWhitelist: false,\n templates: {\n tag (tagData, tagify) {\n const renderer = new CommonDOMRenderer()\n\n return renderer.render(\n \n \n
\n \n {tagData[this.settings.tagTextProp] || tagData.value}\n \n
\n \n ).target.outerHTML\n }\n },\n transformTag: (tagData) => {\n tagData.name = tagData.value\n },\n trim: true\n })\n\n this.tagify.on('input', this.tagsChanged).on('edit:input', this.tagsChanged)\n }\n\n addTag = () => {\n this.tagify.addEmptyTag({ matchingType: this.matchingTypeValue, category: this.categoryValue })\n }\n\n /**\n * Loads matching tags from the server on user input (new tags and edited tags)\n * @param e\n */\n tagsChanged = (e) => {\n this.tagify.whitelist.length = 0 // reset current whitelist\n this.tagify.loading(true).dropdown.hide.call(this.tagify) // show the loader animation\n\n const { matchingType, category } = e.detail.tag.__tagifyTagData\n const inputValue = e.detail.data.newValue\n\n this\n .loadMatchingTags(category, inputValue)\n .then(tags => {\n const tagObjects = tags.map(tag => {\n return { category: tag.category, matchingType, value: tag.name, name: tag.name }\n })\n\n // Add the newly loaded tags to the dropdown suggestions and keep the data\n // the user already added.\n this.tagify.whitelist.push(...tagObjects, ...this.tagify.value)\n this.tagify.loading(false).dropdown.show.call(this.tagify, e.detail.data.newValue)\n })\n }\n\n loadMatchingTags = (category, input) => {\n return fetch(Routes.admin_tags_path({ category, q: input, format: 'json' }))\n .then(response => response.json())\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['fields', 'resetFields', 'switch', 'blockingLayer']\n\n connect () {\n this.switchTarget.addEventListener('change', this.updateElements)\n\n this.updateElements()\n }\n\n disconnect () {\n this.switchTarget.removeEventListener('change', this.updateElements)\n }\n\n updateElements = () => {\n this.fieldsTargets.forEach(field => {\n field.disabled = this.switchTarget.checked\n })\n\n this.resetFieldsTargets.forEach(field => {\n field.disabled = !this.switchTarget.checked\n })\n\n if (this.switchTarget.checked) { this.blockingLayerTarget.classList.add('show') } else { this.blockingLayerTarget.classList.remove('show') }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['collapseButton', 'collapseButtonIcon']\n static values = {\n iconCollapsed: { type: String, default: 'left_panel_open' },\n iconOpen: { type: String, default: 'left_panel_close' },\n autoCollapseBreakpoint: { type: Number, default: 1215 }\n }\n\n connect () {\n if (this.hasCollapseButtonTarget) {\n this.collapseButtonTarget.addEventListener('click', this.#toggleSidebar)\n window.addEventListener('resize', this.#handleResize)\n this.isCollapsed = false\n this.#handleResize()\n }\n }\n\n #handleResize = () => {\n if (window.matchMedia(`(max-width: ${this.autoCollapseBreakpointValue}px)`).matches) {\n this.#collapse()\n } else {\n this.#show()\n }\n }\n\n #toggleSidebar = () => {\n this.isCollapsed ? this.#show() : this.#collapse()\n }\n\n #collapse () {\n this.element.classList.add('sidebar-collapsed')\n this.element.classList.remove('sidebar-open')\n this.collapseButtonIconTarget.textContent = this.iconCollapsedValue\n this.isCollapsed = true\n }\n\n #show () {\n this.element.classList.remove('sidebar-collapsed')\n this.element.classList.add('sidebar-open')\n this.collapseButtonIconTarget.textContent = this.iconOpenValue\n this.isCollapsed = false\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport { Turbo } from '@hotwired/turbo-rails'\n\nexport default class extends Controller {\n connect () {\n document.addEventListener('turbo:submit-start', this.handleSubmitStart)\n document.addEventListener('turbo:submit-end', this.handleSubmitEnd)\n\n this.originalSubmitValue = null\n\n this.showModal()\n }\n\n disconnect () {\n document.removeEventListener('turbo:submit-start', this.handleSubmitStart)\n document.removeEventListener('turbo:submit-end', this.handleSubmitEnd)\n }\n\n showModal () {\n this.element.classList.add('is-active')\n document.querySelector('html').classList.add('is-clipped')\n }\n\n hideModal () {\n this.element.classList.remove('is-active')\n document.querySelector('html').classList.remove('is-clipped')\n\n this.removeModal()\n }\n\n removeModal () {\n if (this.element.parentElement) { this.element.parentElement.src = null }\n this.element.remove()\n }\n\n handleSubmitStart = (e) => {\n this.originalSubmitValue = e.detail.formSubmission.submitter.value\n e.detail.formSubmission.submitter.value = 'Speichern...'\n }\n\n handleSubmitEnd = (e) => {\n e.detail.formSubmission.submitter.value = this.originalSubmitValue\n\n // Only close the modal if the request was a success and went to the actual form action.\n // The latter is useful in case of e.g. preview actions which submit the form to a different endpoint.\n if (e.detail.success && e.detail.formSubmission.location.href === e.target.action) {\n this.hideModal()\n\n // If the server response triggered a redirect, it went to the modal_body turbo frame.\n // Therefore, we have to manually trigger a _top visit with the new URL.\n // TODO: Check if the redirect should also be handled in the modal under certain conditions?\n if (e.detail.fetchResponse.response.redirected) {\n Turbo.visit(e.detail.fetchResponse.response.url)\n }\n }\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n hide () {\n this.element.classList.remove('is-active')\n }\n\n show = (e) => {\n if (e.detail.id === this.uniqueID) {\n this.element.classList.add('is-active')\n }\n }\n\n get uniqueID () {\n return this.element.id\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['tabContent', 'tabContentFieldset', 'tabHeaderActions']\n\n connect () {\n // If there are multiple tabs in a form, we handle them as mutually exclusive,\n // meaning that we don't want form fields from a different tab to be submitted\n // with the form. Therefore, we disable them (resp. a fieldset around them)\n // whenever a tab is changed.\n this.#disableInputFieldsInAllTabs()\n this.#activateInputFieldsForActiveTab()\n this.#emitInputEvent()\n }\n\n activateTab ({ target, params: { tab } }) {\n this.element.querySelector('.tab.is-active').classList.remove('is-active')\n this.element.querySelector('.tab-content.is-active').classList.remove('is-active')\n\n // Mark the tab header as active\n target.closest('.tab').classList.add('is-active')\n // Mark the tab content as active\n this.tabContentTargets.find(content => content.id === tab)?.classList?.add('is-active')\n\n // If there are multiple tabs in a form, we handle them as mutually exclusive,\n // meaning that we don't want form fields from a different tab to be submitted\n // with the form. Therefore, we disable them (resp. a fieldset around them)\n // whenever a tab is changed.\n this.#disableInputFieldsInAllTabs()\n this.#activateInputFieldsForActiveTab()\n this.#emitInputEvent()\n }\n\n get activeTab () {\n return this.element.querySelector('.tab-content.is-active')\n }\n\n #emitInputEvent () {\n // Changing a tab should be handled like any other input inside a form\n this.element.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n #activateInputFieldsForActiveTab () {\n this.tabContentFieldsetTargets.filter(fieldset => this.activeTab.contains(fieldset))[0].removeAttribute('disabled')\n }\n\n #disableInputFieldsInAllTabs () {\n this.tabContentFieldsetTargets.forEach(fieldset => fieldset.setAttribute('disabled', ''))\n }\n}\n","import Timeago from 'stimulus-timeago'\nimport { de } from 'date-fns/locale'\n\nexport default class extends Timeago {\n get locale () {\n return de\n }\n}\n","import { Controller } from '@hotwired/stimulus'\nimport Toastify from 'toastify-js'\n\nexport default class extends Controller {\n static values = {\n text: { type: String, default: 'a text' },\n destination: { type: String, default: '' }\n }\n\n connect () {\n Toastify({\n text: this.textValue,\n duration: 7500,\n destination: this.destinationValue,\n newWindow: true,\n close: true,\n gravity: 'top', // `top` or `bottom`\n position: 'right', // `left`, `center` or `right`\n stopOnFocus: true, // Prevents dismissing of toast on hover\n style: {\n background: '#c0c'\n },\n onClick: function () {} // Callback after click\n }).showToast()\n\n this.element.remove()\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['fields', 'resetFields', 'switch', 'blockingLayer']\n\n connect () {\n this.switchTarget.addEventListener('change', this.updateElements)\n\n this.updateElements()\n }\n\n disconnect () {\n this.switchTarget.removeEventListener('change', this.updateElements)\n }\n\n updateElements = () => {\n this.fieldsTargets.forEach(field => {\n field.disabled = this.switchTarget.checked\n })\n\n this.resetFieldsTargets.forEach(field => {\n field.disabled = !this.switchTarget.checked\n })\n\n if (this.switchTarget.checked) { this.blockingLayerTarget.classList.add('show') } else { this.blockingLayerTarget.classList.remove('show') }\n }\n}\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","document","querySelector","addEventListener","target","closest","querySelectorAll","forEach","elem","Popover","getInstance","hide","window","vegaEmbed","embed","dispatchEvent","Event","Sentry","dsn","environment","process","allowUrls","integrations","BrowserTracing","tracingOrigins","tracesSampleRate","Chartkick","options","download","library","responsive","scales","x","adapters","date","locale","de","require","application","Application","start","debug","Stimulus","Controller","static","collapsed","type","Boolean","default","connect","this","element","classList","add","triggerTarget","event","toggle","containerTarget","perform","collapsedValue","containerTargets","style","display","remove","inputTargetConnected","initializePicker","generateTrigger","input","renderer","CommonDOMRenderer","render","create","class","value","trigger","insertAdjacentElement","Picker","parent","alpha","color","onChange","background","rgbaString","hex","substring","bubbles","showConfirm","disconnect","removeEventListener","confirm","content","Promise","reject","async","confirmText","preventDefault","templateTarget","textContent","trim","_ref","params","eventName","detail","dispatch","prefix","handleSelector","String","itemSelector","sortable","Sortable","animation","draggable","itemSelectorValue","handle","handleSelectorValue","ghostClass","onUpdate","handleOrderUpdate","hasPositionFieldTarget","positionFieldTargets","field","idx","items","setImage","inputTarget","output","outputTarget","files","reader","FileReader","onload","src","result","readAsDataURL","context","contextComponents","load","definitionsFromContext","concat","attachIndicatorElement","updateIndicatorElement","inputTargetDisconnected","maxLengthIndicator","ref","indicator","length","maxLength","$","insert","setRangeText","dummyInput","appendChild","Cleave","numeral","numeralIntegerScale","numeralDecimalScale","numeralDecimalMark","numeralPositiveOnly","delimiter","onValueChanged","rawValue","replace","dummy","cloneNode","name","maxAmountPerType","Number","maxAmount","template","innerHTML","Date","getTime","toString","insertAdjacentHTML","updatePositionFields","item","itemTargets","filter","i","contains","dataset","newRecord","adjustAddItemTriggers","itemTargetConnected","hideIfMarkedForDestruction","isMarkedForDestruction","addItemTriggerTargets","nestedFormTypeParam","mayAddItemOfType","totalAmount","amountOfType","itemsOfType","maxAmountValue","maxAmountPerTypeValue","nestedFormType","templateTargets","scrollIntoView","behavior","block","initialize","handleInput","debounce","bind","hasSubmitButtonTarget","submitButtonTarget","click","requestSubmit","selector","targetOnConnect","selectorValue","interval","handleSubmitEnd","handleMissingFrame","success","formSubmission","location","href","action","fetchResponse","response","redirected","Turbo","url","setInterval","reload","intervalValue","clearInterval","console","log","srcValue","fetch","headers","Accept","then","r","text","html","hasShowItemsLinkTarget","showItemsLinkTarget","showCollapsedItems","collapsedItemTargets","project","abortUrl","snaquebarId","kioskTarget","error","hasAbortUrlValue","abortUrlValue","currentURL","URL","searchParams","delete","projectValue","resource","meta","JSON","stringify","snaquebar_id","snaquebarIdValue","variant","showKiosk","iconDefault","iconCopied","copy","navigator","clipboard","writeText","sourceTarget","setTimeout","selectAll","setSelectionRange","iconTarget","iconCopiedValue","iconDefaultValue","fp","rangesNav","createElement","className","pluginData","ranges","config","rangesOnly","rangesAllowCustom","rangesCustomLabel","rangesButtons","addRangeButton","label","button","innerText","selectActiveRangeButton","selectedDates","isPredefinedRange","current","startDate","dayjs","endDate","range","entries","isSame","prototype","hasOwnProperty","call","calendarContainer","onOpen","predefinedWidth","offsetWidth","calendarWidth","width","onReady","toDate","end","setDate","clear","close","children","customButton","prepend","onValueUpdate","Heute","Gestern","subtract","startOf","endOf","startDateTarget","endDateTarget","picker","flatpickr","outputFieldTarget","plugins","FlatpickrPredefinedRanges","mode","datesChanged","German","dateFormat","defaultDate","weekNumbers","constructor","predefinedRanges","dates","dateString","_instance","setFieldValues","toISOString","disabled","dateFieldTarget","altInput","enableTime","minDate","minimum","altFormat","connectStreamSource","dropzone","Dropzone","fileFieldTarget","paramName","createImageThumbnails","disablePreviews","autoProcessQueue","acceptedFiles","totaluploadprogress","percent","totalBytes","totalBytesSent","progressBarTarget","file","MessageEvent","data","xhr","errorMessage","includes","alert","removeFile","disconnectStreamSource","fieldName","colors","Array","colorsValue","node","templateNode","generatePreview","updateColors","colorFieldTargets","previewTarget","backgroundImage","join","colorFieldTemplateTarget","filterText","setFilterText","icons","availableIcons","MaterialIconData","iconSelector","popoverContent","container","placeholder","oninput","renderIcons","filteredIcons","icon","onclick","selectIcon","title","iconFieldTarget","iconPreviewTarget","filterTextValueChanged","replaceChildren","filterTextValue","search","handleSubmitStart","modal","Modal","getOrCreateInstance","keyboard","backdrop","removeModal","show","originalSubmitValue","dispose","parentElement","submitter","handleTabShow","disableInputFieldsInAllTabs","hideAllHeaderActions","setActiveTabFromLocationHash","showTabHeaderActions","activeTab","activateInputFields","newTab","bsTarget","tabURL","set","slice","history","push","tabContentTargets","find","activeTabParam","get","activeTabID","tabFromHash","pane","tabContentFieldsetTargets","fieldset","removeAttribute","setAttribute","tab","actions","tabHeaderActionsTargets","el","tabId","parameterizeString","string","toLowerCase","i18n","I18n","translations","categories","loadCategories","tagify","Tagify","tagListTarget","addTagOnBlur","dropdown","position","enabled","duplicates","enforceWhitelist","templates","tag","renderTag","transformTag","tagData","on","tagsChanged","popover","addTagButtonTarget","_extends","contenteditable","spellcheck","tabIndex","settings","a11y","focusableTags","classNames","matchingType","getCustomAttributes","tagX","role","tagText","category","tagTextProp","outerHTML","t","onClick","addTag","addEmptyTag","whitelist","loading","__tagifyTagData","inputValue","newValue","loadMatchingTags","tags","tagObjects","Routes","q","format","json","bite","biteTarget","biteValue","messageInputTarget","focus","checkSubmit","keyCode","metaKey","adjustHeight","height","scrollHeight","maxDate","maximum","destroy","tagClass","tagClassValue","matchingTypeValue","categoryValue","switchTarget","updateElements","fieldsTargets","checked","resetFieldsTargets","blockingLayerTarget","iconCollapsed","iconOpen","autoCollapseBreakpoint","hasCollapseButtonTarget","collapseButtonTarget","isCollapsed","#handleResize","matchMedia","autoCollapseBreakpointValue","matches","#toggleSidebar","collapseButtonIconTarget","iconCollapsedValue","iconOpenValue","showModal","hideModal","uniqueID","activateTab","Timeago","destination","Toastify","textValue","duration","destinationValue","newWindow","gravity","stopOnFocus","showToast"],"sourceRoot":""}