{"version":3,"sources":["components/date-picker/fix-events-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAEtD,OAAO,MAAM,MAAM,+BAA+B,CAAC;AACnD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,SAAS,EAAE,iBAAiB,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,wCAAyC,SAAQ,iBAAiB;IACjF;;OAEG;IACH,0CAA0C,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3D;;OAEG;IACH,wCAAwC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1D;;AAED;;;GAGG;AACH,wBAiEE","file":"fix-events-plugin.d.ts","sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2019\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Instance as FlatpickrInstance } from 'flatpickr/dist/types/instance';\nimport { Plugin } from 'flatpickr/dist/types/options';\nimport on from 'carbon-components/es/globals/js/misc/on';\nimport Handle from '../../globals/internal/handle';\nimport BXDatePickerInput from './date-picker-input';\n\n/**\n * The configuration for the Flatpickr plugin to fix Flatpickr's behavior of certain events.\n */\nexport interface DatePickerFixEventsPluginConfig {\n  /**\n   * The input box to enter starting date.\n   */\n  inputFrom: BXDatePickerInput;\n\n  /**\n   * The input box to enter end date.\n   */\n  inputTo?: BXDatePickerInput;\n}\n\n/**\n * `FlatpickrInstance` with additional properties used for `carbonFlatpickrFixEventsPlugin`.\n */\nexport interface ExtendedFlatpickrInstanceFixEventsPlugin extends FlatpickrInstance {\n  /**\n   * The handle for `keydown` event handler in the `<input>` for the starting date.\n   */\n  _hBXCEDatePickerFixEventsPluginKeydownFrom?: Handle | null;\n\n  /**\n   * The handle for `keydown` event handler in the `<input>` for the end date.\n   */\n  _hBXCEDatePickerFixEventsPluginKeydownTo?: Handle | null;\n}\n\n/**\n * @param config Plugin configuration.\n * @returns A Flatpickr plugin to fix Flatpickr's behavior of certain events.\n */\nexport default (config: DatePickerFixEventsPluginConfig): Plugin => (fp: ExtendedFlatpickrInstanceFixEventsPlugin) => {\n  /**\n   * Handles `keydown` event.\n   */\n  const handleKeydown = (event: KeyboardEvent) => {\n    const { inputFrom, inputTo } = config;\n    const { key, target } = event;\n    if (inputFrom === target || inputTo === target) {\n      switch (key) {\n        case 'Enter':\n          // Makes sure the hitting enter key picks up pending values of both `<input>`\n          // Workaround for: https://github.com/flatpickr/flatpickr/issues/1942\n          fp.setDate([inputFrom.value!, (inputTo && inputTo.value)!], true, fp.config.dateFormat);\n          event.stopPropagation();\n          break;\n        case 'ArrowLeft':\n        case 'Left':\n        case 'ArrowRight':\n        case 'Right':\n          // Prevents Flatpickr code from canceling the event if left/right arrow keys are hit on `<input>`,\n          // so user can move the keyboard cursor for editing dates\n          // Workaround for: https://github.com/flatpickr/flatpickr/issues/1943\n          event.stopPropagation();\n          break;\n        default:\n          break;\n      }\n    }\n  };\n\n  /**\n   * Releases event listeners used in this Flatpickr plugin.\n   */\n  const release = () => {\n    if (fp._hBXCEDatePickerFixEventsPluginKeydownTo) {\n      fp._hBXCEDatePickerFixEventsPluginKeydownTo = fp._hBXCEDatePickerFixEventsPluginKeydownTo.release();\n    }\n    if (fp._hBXCEDatePickerFixEventsPluginKeydownFrom) {\n      fp._hBXCEDatePickerFixEventsPluginKeydownFrom = fp._hBXCEDatePickerFixEventsPluginKeydownFrom.release();\n    }\n  };\n\n  /**\n   * Sets up event listeners used for this Flatpickr plugin.\n   */\n  const init = () => {\n    release();\n    const { inputFrom, inputTo } = config;\n    fp._hBXCEDatePickerFixEventsPluginKeydownFrom = on(inputFrom, 'keydown', handleKeydown, true);\n    if (inputTo) {\n      fp._hBXCEDatePickerFixEventsPluginKeydownTo = on(inputTo, 'keydown', handleKeydown, true);\n    }\n  };\n\n  /**\n   * Registers this Flatpickr plugin.\n   */\n  const register = () => {\n    fp.loadedPlugins.push('carbonFlatpickrFixEventsPlugin');\n  };\n\n  return {\n    onReady: [register, init],\n    onDestroy: [release],\n  };\n};\n"]}