{"version":3,"file":"theme.js.map","sources":["../../../../js/mrare/util.js","../../../../js/mrare/chat.js","../../../../js/mrare/checklist.js","../../../../js/mrare/dropzone.js","../../../../js/mrare/filter.js","../../../../js/mrare/flatpickr.js","../../../../js/mrare/kanban.js","../../../../js/mrare/prism.js","../../../../js/mrare/index.js"],"sourcesContent":["//\n//\n// Util\n//\n// Medium Rare utility functions\n// v 1.2.0\n\nimport jQuery from 'jquery';\n\nconst mrUtil = (($) => {\n const VERSION = '1.2.0';\n\n const Tagname = {\n SCRIPT: 'script',\n };\n\n const Selector = {\n RECAPTCHA: '[data-recaptcha]',\n };\n\n // Activate tooltips\n $('body').tooltip({ selector: '[data-toggle=\"tooltip\"]', container: 'body' });\n\n // Activate popovers\n $('body').popover({ selector: '[data-toggle=\"popover\"]', container: 'body' });\n\n // Activate toasts\n $('.toast').toast();\n\n const Util = {\n\n version: VERSION,\n selector: Selector,\n\n activateIframeSrc(iframe) {\n const $iframe = $(iframe);\n if ($iframe.attr('data-src')) {\n $iframe.attr('src', $iframe.attr('data-src'));\n }\n },\n\n idleIframeSrc(iframe) {\n const $iframe = $(iframe);\n $iframe.attr('data-src', $iframe.attr('src')).attr('src', '');\n },\n\n forEach(array, callback, scope) {\n if (array) {\n if (array.length) {\n for (let i = 0; i < array.length; i += 1) {\n callback.call(scope, i, array[i]); // passes back stuff we need\n }\n } else if (array[0] || mrUtil.isElement(array)) { callback.call(scope, 0, array); }\n }\n },\n\n dedupArray(arr) {\n return arr.reduce((p, c) => {\n // create an identifying String from the object values\n const id = JSON.stringify(c);\n // if the JSON string is not found in the temp array\n // add the object to the output array\n // and add the key to the temp array\n if (p.temp.indexOf(id) === -1) {\n p.out.push(c);\n p.temp.push(id);\n }\n return p;\n // return the deduped array\n }, { temp: [], out: [] }).out;\n },\n\n isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n },\n\n getFuncFromString(funcName, context) {\n const findFunc = funcName || null;\n\n // if already a function, return\n if (typeof findFunc === 'function') return funcName;\n\n // if string, try to find function or method of object (of \"obj.func\" format)\n if (typeof findFunc === 'string') {\n if (!findFunc.length) return null;\n let target = context || window;\n const func = findFunc.split('.');\n while (func.length) {\n const ns = func.shift();\n if (typeof target[ns] === 'undefined') return null;\n target = target[ns];\n }\n if (typeof target === 'function') return target;\n }\n // return null if could not parse\n return null;\n },\n getScript(source, callback) {\n let script = document.createElement(Tagname.SCRIPT);\n const prior = document.getElementsByTagName(Tagname.SCRIPT)[0];\n script.async = 1;\n script.defer = 1;\n\n script.onreadystatechange = (_, isAbort) => {\n if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {\n script.onload = null;\n script.onreadystatechange = null;\n script = undefined;\n\n if (!isAbort && callback && typeof callback === 'function') { callback(); }\n }\n };\n\n script.onload = script.onreadystatechange;\n\n script.src = source;\n prior.parentNode.insertBefore(script, prior);\n },\n };\n\n return Util;\n})(jQuery);\n\nexport default mrUtil;\n","//\n//\n// chat.js\n//\n// Initializes the autosize library and scrolls chat list to bottom\n//\n\n\nimport jQuery from 'jquery';\nimport autosize from 'autosize';\nimport mrUtil from './util';\n\nautosize(document.querySelectorAll('.chat-module-bottom textarea'));\n\n// Scrolls the chat-module-body to the bottom\n(($) => {\n $(window).on('load', () => {\n const lastChatItems = document.querySelectorAll('.media.chat-item:last-child');\n if (lastChatItems) {\n mrUtil.forEach(lastChatItems, (index, item) => {\n item.scrollIntoView();\n });\n }\n });\n})(jQuery);\n","//\n//\n// checklist.js\n//\n// Initializes the Shopify Draggable library on Checklist elements.\n//\n\nimport jQuery from 'jquery';\nimport Draggable from '@shopify/draggable/lib/draggable';\nimport SwapAnimation from '@shopify/draggable/lib/plugins';\nimport mrUtil from './util';\n\nconst mrAutoWidth = (($) => {\n /*\n Special Thanks to Lim Yuan Qing\n for autosize-input\n\n https://github.com/yuanqing/autosize-input\n\n The MIT License (MIT)\n Copyright (c) 2018 Lim Yuan Qing\n Permission is hereby granted, free of charge, to any person obtaining\n a copy of this software and associated documentation files (the \"Software\"),\n to deal in the Software without restriction, including without limitation\n the rights to use, copy, modify, merge, publish, distribute, sublicense,\n and/or sell copies of the Software, and to permit persons to whom the Software\n is furnished to do so, subject to the following conditions:\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n class AutoWidth {\n constructor(element, options) {\n this.element = element;\n const elementStyle = window.getComputedStyle(this.element);\n // prettier-ignore\n this.elementCssText = `box-sizing:${elementStyle.boxSizing}\n ;border-left:${elementStyle.borderLeftWidth} solid red \n ;border-right:${elementStyle.borderRightWidth} solid red\n ;font-family:${elementStyle.fontFamily}\n ;font-feature-settings:${elementStyle.fontFeatureSettings}\n ;font-kerning:${elementStyle.fontKerning}\n ;font-size:${elementStyle.fontSize}\n ;font-stretch:${elementStyle.fontStretch}\n ;font-style:${elementStyle.fontStyle}\n ;font-variant:${elementStyle.fontVariant}\n ;font-variant-caps:${elementStyle.fontVariantCaps}\n ;font-variant-ligatures:${elementStyle.fontVariantLigatures}\n ;font-variant-numeric:${elementStyle.fontVariantNumeric}\n ;font-weight:${elementStyle.fontWeight}\n ;letter-spacing:${elementStyle.letterSpacing}\n ;margin-left:${elementStyle.marginLeft}\n ;margin-right:${elementStyle.marginRight}\n ;padding-left:${elementStyle.paddingLeft}\n ;padding-right:${elementStyle.paddingRight}\n ;text-indent:${elementStyle.textIndent}\n ;text-transform:${elementStyle.textTransform};`;\n\n this.GHOST_ELEMENT_ID = '__autosizeInputGhost';\n\n element.addEventListener('input', AutoWidth.passWidth);\n element.addEventListener('keydown', AutoWidth.passWidth);\n element.addEventListener('cut', AutoWidth.passWidth);\n element.addEventListener('paste', AutoWidth.passWidth);\n\n this.extraPixels = (options && options.extraPixels) ? parseInt(options.extraPixels, 10) : 0;\n this.width = AutoWidth.setWidth(this);\n\n // Set `min-width` only if `options.minWidth` was set, and only if the initial\n // width is non-zero.\n if (options && options.minWidth && this.width !== '0px') {\n this.element.style.minWidth = this.width;\n }\n }\n\n static setWidth(input) {\n const string = input.element.value || input.element.getAttribute('placeholder') || '';\n // Check if the `ghostElement` exists. If no, create it.\n const ghostElement = document.getElementById(input.GHOST_ELEMENT_ID)\n || input.createGhostElement();\n // Copy all width-affecting styles to the `ghostElement`.\n ghostElement.style.cssText += input.elementCssText;\n ghostElement.innerHTML = AutoWidth.escapeSpecialCharacters(string);\n // Copy the width of `ghostElement` to `element`.\n let { width } = window.getComputedStyle(ghostElement);\n width = Math.ceil(width.replace('px', '')) + input.extraPixels;\n /* eslint-disable no-param-reassign */\n\n input.element.style.width = `${width}px`;\n return width;\n }\n\n static passWidth(evt) {\n const input = $(evt.target).data('autoWidth');\n AutoWidth.setWidth(input);\n }\n\n static mapSpecialCharacterToCharacterEntity(specialCharacter) {\n const characterEntities = {\n ' ': 'nbsp',\n '<': 'lt',\n '>': 'gt',\n };\n\n return `&${characterEntities[specialCharacter]};`;\n }\n\n static escapeSpecialCharacters(string) {\n return string.replace(/\\s/g, ' ').replace(//g, '>');\n }\n\n // Create `ghostElement`, with inline styles to hide it and ensure that the text is all\n // on a single line.\n createGhostElement() {\n const ghostElement = document.createElement('div');\n ghostElement.id = this.GHOST_ELEMENT_ID;\n ghostElement.style.cssText = 'display:inline-block;height:0;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:nowrap;';\n document.body.appendChild(ghostElement);\n return ghostElement;\n }\n }\n\n $(document).ready(() => {\n const checklistItems = document.querySelectorAll('form.checklist .custom-checkbox div input');\n\n if (checklistItems) {\n mrUtil.forEach(checklistItems, (index, item) => {\n $(item).data('autoWidth', new AutoWidth(item, { extraPixels: 3 }));\n\n item.addEventListener('keypress', (evt) => {\n if (evt.which === 13) {\n evt.preventDefault();\n }\n });\n });\n }\n });\n\n return AutoWidth;\n})(jQuery);\n\nconst mrChecklist = {\n sortableChecklists: new Draggable.Sortable(document.querySelectorAll('form.checklist, .drop-to-delete'), {\n plugins: [SwapAnimation],\n draggable: '.checklist > .row',\n handle: '.form-group > span > i',\n }),\n};\n\nexport { mrChecklist, mrAutoWidth };\n","//\n//\n// dropzone.js\n//\n// Initializes dropzone plugin on elements to facilitate drag/drop for uploads\n//\n\n\nimport jQuery from 'jquery';\n// import Dropzone from 'dropzone';\n\nwindow.Dropzone.autoDiscover = false;\n\n(($) => {\n $(() => {\n let template = `
  • \n
    \n \n
    \n
    \n \n \n
    \n \"Loader\"\n
    \n \n
    \n Delete\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
  • `;\n template = document.querySelector('.dz-template') ? document.querySelector('.dz-template').innerHTML : template;\n $('.dropzone').dropzone({\n previewTemplate: template,\n thumbnailWidth: 320,\n thumbnailHeight: 320,\n thumbnailMethod: 'contain',\n previewsContainer: '.dropzone-previews',\n });\n });\n})(jQuery);\n","//\n//\n// filter.js\n//\n// Initialises the List.js plugin and provides interface to list objects\n//\n\nimport jQuery from 'jquery';\nimport List from 'list.js';\nimport mrUtil from './util';\n\nconst mrFilterList = (($) => {\n /**\n * Check for List.js dependency\n * List.js - http://listjs.com\n */\n if (typeof List === 'undefined') {\n throw new Error('mrFilterList requires list.js (http://listjs.com)');\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'mrFilterList';\n const VERSION = '1.0.0';\n const DATA_KEY = 'mr.filterList';\n const EVENT_KEY = `.${DATA_KEY}`;\n const DATA_API_KEY = '.data-api';\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n const Event = {\n LOAD_DATA_API: `load${EVENT_KEY}${DATA_API_KEY}`,\n };\n\n const Selector = {\n FILTER: '[data-filter-list]',\n DATA_ATTR: 'filter-list',\n DATA_ATTR_CAMEL: 'filterList',\n DATA_FILTER_BY: 'data-filter-by',\n DATA_FILTER_BY_CAMEL: 'filterBy',\n FILTER_INPUT: 'filter-list-input',\n FILTER_TEXT: 'filter-by-text',\n };\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class FilterList {\n constructor(element) {\n // The current data-filter-list element\n this.element = element;\n\n // Get class of list elements to be used within this data-filter-list element\n const listData = element.dataset[Selector.DATA_ATTR_CAMEL];\n\n // data-filter-by rules collected from filterable elements\n // to be passed to List.js\n this.valueNames = [];\n\n // List.js instances included in this filterList\n this.lists = [];\n\n // Find all matching list elements and initialise List.js on each\n this.initAllLists(listData);\n\n // Bind the search input to each list in the array of lists\n this.bindInputEvents();\n }\n\n // version getter\n static get VERSION() {\n return VERSION;\n }\n\n initAllLists(listData) {\n // Initialise each list matching the selector in data-filter-list attribute\n mrUtil.forEach(this.element.querySelectorAll(`.${listData}`), (index, listElement) => {\n this.initList(this.element, listElement);\n });\n }\n\n initList(element, listElement) {\n // Each individual list needs a unique ID to be added\n // as a class as List.js identifies lists by class\n const listID = `${Selector.DATA_ATTR}-${new Date().getTime()}`;\n\n // Use the first child of the list and parse all data-filter-by attributes inside.\n // Pass to parseFilters to construct an array of valueNames appropriate for List.js\n const filterables = listElement.querySelectorAll(`*:first-child [${Selector.DATA_FILTER_BY}]`);\n mrUtil.forEach(filterables, (index, filterElement) => {\n // Parse the comma separated values in the data-filter-by attribute\n // on each filterable element\n this.parseFilters(\n listElement,\n filterElement,\n filterElement.dataset[Selector.DATA_FILTER_BY_CAMEL],\n );\n });\n\n // De-duplicate the array by creating new set of stringified objects and\n // mapping back to parsed objects.\n // This is necessary because similar items in the list element could produce\n // the same rule in the valueNames array.\n this.valueNames = mrUtil.dedupArray(this.valueNames);\n\n // Add unique ID as class to the list so List.js can handle it individually\n listElement.classList.add(listID);\n\n // Set up the list instance using the List.js library\n const list = new List(element, {\n valueNames: this.valueNames,\n listClass: listID,\n });\n\n // Add this list instance to the array associated with this filterList instance\n // as each filterList can have miltiple list instances connected to the\n // same filter-list-input\n this.lists.push(list);\n }\n\n parseFilters(listElement, filterElement, filterBy) {\n // Get a jQuery instance of the list for easier class manipulation on multiple elements\n const $listElement = $(listElement);\n let filters = [];\n // Get array of filter-by instructions from the data-filter-by attribute\n try {\n filters = filterBy.split(',');\n } catch (err) {\n throw new Error(`Cannot read comma separated data-filter-by attribute: \"\n ${filterBy}\" on element: \n ${this.element}`);\n }\n\n filters.forEach((filter) => {\n // Store appropriate rule for List.js in the valueNames array\n if (filter === 'text') {\n if (filterElement.className !== `${filterElement.nodeName}-${Selector.FILTER_TEXT}`) {\n this.valueNames.push(`${filterElement.className} ${filterElement.nodeName}-${Selector.FILTER_TEXT}`);\n }\n $listElement.find(`${filterElement.nodeName.toLowerCase()}[${Selector.DATA_FILTER_BY}*=\"text\"]`)\n // Prepend element type to class on filterable element as List.js needs separate classes\n .addClass(`${filterElement.nodeName}-${Selector.FILTER_TEXT}`);\n } else if (filter.indexOf('data-') === 0) {\n $listElement.find(`[${Selector.DATA_FILTER_BY}*=\"${filter}\"]`).addClass(`filter-by-${filter}`);\n this.valueNames.push({ name: `filter-by-${filter}`, data: filter.replace('data-', '') });\n } else if (filterElement.getAttribute(filter)) {\n $listElement.find(`[${Selector.DATA_FILTER_BY}*=\"${filter}\"]`).addClass(`filter-by-${filter}`);\n this.valueNames.push({ name: `filter-by-${filter}`, attr: filter });\n }\n });\n }\n\n bindInputEvents() {\n const filterInput = this.element.querySelector(`.${Selector.FILTER_INPUT}`);\n // Store reference to data-filter-list element on the input itself\n $(filterInput).data(DATA_KEY, this);\n filterInput.addEventListener('keyup', this.searchLists, false);\n filterInput.addEventListener('paste', this.searchLists, false);\n // Handle submit to disable page reload\n filterInput.closest('form').addEventListener('submit', (evt) => {\n if (evt.preventDefault) {\n // evt.preventDefault();\n }\n });\n }\n\n searchLists(event) {\n // Retrieve the filterList object from the element\n const filterList = $(this).data(DATA_KEY);\n // Apply the currently searched term to the List.js instances in this filterList instance\n mrUtil.forEach(filterList.lists, (index, list) => {\n list.search(event.target.value);\n });\n }\n\n static jQueryInterface() {\n return this.each(function jqEachFilterList() {\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n if (!data) {\n data = new FilterList(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n // END Class definition\n\n /**\n * ------------------------------------------------------------------------\n * Initialise by data attribute\n * ------------------------------------------------------------------------\n */\n\n $(window).on(Event.LOAD_DATA_API, () => {\n const filterLists = $.makeArray($(Selector.FILTER));\n\n /* eslint-disable no-plusplus */\n for (let i = filterLists.length; i--;) {\n const $list = $(filterLists[i]);\n FilterList.jQueryInterface.call($list, $list.data());\n }\n });\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n /* eslint-disable no-param-reassign */\n $.fn[NAME] = FilterList.jQueryInterface;\n $.fn[NAME].Constructor = FilterList;\n $.fn[NAME].noConflict = function FilterListNoConflict() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FilterList.jQueryInterface;\n };\n /* eslint-enable no-param-reassign */\n\n return FilterList;\n})(jQuery);\n\nexport default mrFilterList;\n","//\n//\n// flatpickr.js\n//\n// an initializer for the flatpickr date/time picker plugin\n// https://flatpickr.js.org/\n//\n\nimport jQuery from 'jquery';\nimport flatpickr from 'flatpickr';\n\nconst mrFlatpickr = (($) => {\n /**\n * Check for flatpickr dependency\n */\n if (typeof flatpickr === 'undefined') {\n throw new Error('mrFlatpickr requires flatpickr.js (https://github.com/flatpickr/flatpickr)');\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'mrFlatpickr';\n const VERSION = '1.0.0';\n const DATA_KEY = 'mr.flatpickr';\n const EVENT_KEY = `.${DATA_KEY}`;\n const DATA_API_KEY = '.data-api';\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n const Event = {\n LOAD_DATA_API: `load${EVENT_KEY}${DATA_API_KEY}`,\n };\n\n const Selector = {\n FLATPICKR: '[data-flatpickr]',\n };\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Flatpickr {\n constructor(element) {\n // The current flatpickr element\n this.element = element;\n // const $element = $(element);\n\n this.initflatpickr();\n }\n\n // getters\n static get VERSION() {\n return VERSION;\n }\n\n initflatpickr() {\n const options = $(this.element).data();\n this.instance = flatpickr(this.element, options);\n }\n\n static jQueryInterface() {\n return this.each(function jqEachFlatpickr() {\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n if (!data) {\n data = new Flatpickr(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n // END Class definition\n\n /**\n * ------------------------------------------------------------------------\n * Initialise by data attribute\n * ------------------------------------------------------------------------\n */\n\n $(window).on(Event.LOAD_DATA_API, () => {\n const pickers = $.makeArray($(Selector.FLATPICKR));\n\n /* eslint-disable no-plusplus */\n for (let i = pickers.length; i--;) {\n const $flatpickr = $(pickers[i]);\n Flatpickr.jQueryInterface.call($flatpickr, $flatpickr.data());\n }\n });\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n /* eslint-disable no-param-reassign */\n $.fn[NAME] = Flatpickr.jQueryInterface;\n $.fn[NAME].Constructor = Flatpickr;\n $.fn[NAME].noConflict = function flatpickrNoConflict() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Flatpickr.jQueryInterface;\n };\n /* eslint-enable no-param-reassign */\n\n return Flatpickr;\n})(jQuery);\n\nexport default mrFlatpickr;\n","//\n//\n// kanban.js\n//\n// Initializes the kanban plugin .\n//\n\nimport Draggable from '@shopify/draggable/lib/draggable';\nimport SwapAnimation from '@shopify/draggable/lib/plugins';\n\nconst mrKanban = {\n sortableKanbanLists: new Draggable.Sortable(document.querySelectorAll('div.kanban-board'), {\n draggable: '.kanban-col:not(:last-child)',\n handle: '.card-list-header',\n }),\n\n sortableKanbanCards: new Draggable.Sortable(document.querySelectorAll('.kanban-col .card-list-body'), {\n plugins: [SwapAnimation],\n draggable: '.card-kanban',\n handle: '.card-kanban',\n appendTo: 'body',\n }),\n};\n\nexport default mrKanban;\n","//\n//\n// prism.js\n//\n// Initialises the prism code highlighting plugin\n\nimport Prism from 'prismjs';\n\nPrism.highlightAll();\n","\nimport './chat';\nimport './checklist';\nimport './dropzone';\nimport mrFilterList from './filter';\nimport mrFlatpickr from './flatpickr';\nimport mrKanban from './kanban';\nimport './prism';\nimport mrUtil from './util';\n\n(() => {\n if (typeof $ === 'undefined') {\n throw new TypeError('Medium Rare JavaScript requires jQuery. jQuery must be included before theme.js.');\n }\n})();\n\nexport {\n mrFilterList,\n mrFlatpickr,\n mrKanban,\n mrUtil,\n};\n"],"names":["$","Tagname","mrUtil","jQuery","tooltip","selector","container","popover","toast","version","RECAPTCHA","activateIframeSrc","iframe","$iframe","attr","idleIframeSrc","forEach","array","callback","scope","length","i","call","isElement","dedupArray","arr","reduce","p","c","id","JSON","stringify","temp","indexOf","out","push","obj","nodeType","getFuncFromString","funcName","context","findFunc","target","window","func","split","ns","shift","getScript","source","script","document","createElement","prior","getElementsByTagName","async","defer","onreadystatechange","_","isAbort","readyState","test","onload","undefined","src","parentNode","insertBefore","autosize","querySelectorAll","on","lastChatItems","index","item","scrollIntoView","AutoWidth","element","options","elementStyle","getComputedStyle","this","elementCssText","boxSizing","borderLeftWidth","borderRightWidth","fontFamily","fontFeatureSettings","fontKerning","fontSize","fontStretch","fontStyle","fontVariant","fontVariantCaps","fontVariantLigatures","fontVariantNumeric","fontWeight","letterSpacing","marginLeft","marginRight","paddingLeft","paddingRight","textIndent","textTransform","GHOST_ELEMENT_ID","addEventListener","passWidth","extraPixels","parseInt","width","setWidth","minWidth","style","input","string","value","getAttribute","ghostElement","getElementById","createGhostElement","cssText","innerHTML","escapeSpecialCharacters","Math","ceil","replace","evt","data","mapSpecialCharacterToCharacterEntity","specialCharacter","body","appendChild","ready","checklistItems","which","preventDefault","Draggable","Sortable","plugins","SwapAnimation","draggable","handle","Dropzone","autoDiscover","template","querySelector","dropzone","previewTemplate","thumbnailWidth","thumbnailHeight","thumbnailMethod","previewsContainer","mrFilterList","List","Error","NAME","DATA_KEY","JQUERY_NO_CONFLICT","fn","Event","LOAD_DATA_API","Selector","FilterList","listData","dataset","valueNames","lists","initAllLists","bindInputEvents","listElement","_this","initList","listID","Date","getTime","filterables","filterElement","_this2","parseFilters","classList","add","list","listClass","filterBy","$listElement","filters","err","filter","className","nodeName","_this3","find","toLowerCase","addClass","name","filterInput","searchLists","closest","event","filterList","search","jQueryInterface","each","$element","filterLists","makeArray","$list","Constructor","noConflict","mrFlatpickr","flatpickr","Flatpickr","initflatpickr","instance","pickers","$flatpickr","mrKanban","sortableKanbanLists","sortableKanbanCards","appendTo","Prism","highlightAll","TypeError"],"mappings":"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"}