@adyen/bento-vue2 1.45.0 → 1.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/dist/@types/index.d.ts +16740 -18774
  2. package/dist/accordion.js +1 -1
  3. package/dist/action-bar.js +1 -1
  4. package/dist/alert.js +1 -1
  5. package/dist/assets/accordion-item.css +1 -1
  6. package/dist/assets/action-bar.css +1 -1
  7. package/dist/assets/base-modal.css +1 -1
  8. package/dist/assets/calendar.css +1 -1
  9. package/dist/assets/card.css +1 -1
  10. package/dist/assets/data-grid.css +1 -1
  11. package/dist/assets/date-picker.css +1 -1
  12. package/dist/assets/date-range-picker.css +1 -1
  13. package/dist/assets/dialog-page.css +1 -1
  14. package/dist/assets/divider.css +1 -1
  15. package/dist/assets/dropdown.css +1 -1
  16. package/dist/assets/file-uploader.css +1 -1
  17. package/dist/assets/input-field-password.css +1 -1
  18. package/dist/assets/input-field.css +1 -1
  19. package/dist/assets/inspector.css +1 -1
  20. package/dist/assets/menu.css +1 -1
  21. package/dist/assets/modal-fullscreen.css +1 -1
  22. package/dist/assets/popover.css +1 -1
  23. package/dist/assets/radio-group.css +1 -1
  24. package/dist/assets/radio-input.css +1 -1
  25. package/dist/assets/sidepanel.css +1 -1
  26. package/dist/assets/status.css +1 -1
  27. package/dist/assets/step.css +1 -1
  28. package/dist/button.js +1 -1
  29. package/dist/card.js +1 -1
  30. package/dist/checkbox.js +2 -2
  31. package/dist/chunks/{accordion-item.CzKttO4w.js → accordion-item.CTxrEQEW.js} +5 -5
  32. package/dist/chunks/{accordion-item.CzKttO4w.js.map → accordion-item.CTxrEQEW.js.map} +1 -1
  33. package/dist/chunks/{action-bar.BXemSuq4.js → action-bar.EcN2I7Az.js} +11 -11
  34. package/dist/chunks/{action-bar.BXemSuq4.js.map → action-bar.EcN2I7Az.js.map} +1 -1
  35. package/dist/chunks/{alert.CAIp-87f.js → alert.BRN8cpXl.js} +7 -7
  36. package/dist/chunks/{alert.CAIp-87f.js.map → alert.BRN8cpXl.js.map} +1 -1
  37. package/dist/chunks/{base-modal.4JSNBM4T.js → base-modal.BgTZ8iQ6.js} +5 -5
  38. package/dist/chunks/{base-modal.4JSNBM4T.js.map → base-modal.BgTZ8iQ6.js.map} +1 -1
  39. package/dist/chunks/{button-actions-with-menu.ieopdfI7.js → button-actions-with-menu.C8EjGVCT.js} +4 -4
  40. package/dist/chunks/{button-actions-with-menu.ieopdfI7.js.map → button-actions-with-menu.C8EjGVCT.js.map} +1 -1
  41. package/dist/chunks/{button-actions.CtFB6iRj.js → button-actions.BU173IFE.js} +5 -5
  42. package/dist/chunks/{button-actions.CtFB6iRj.js.map → button-actions.BU173IFE.js.map} +1 -1
  43. package/dist/chunks/{calendar.BouORZfb.js → calendar.DlOcbH6E.js} +161 -148
  44. package/dist/chunks/{calendar.BouORZfb.js.map → calendar.DlOcbH6E.js.map} +1 -1
  45. package/dist/chunks/{card.BabmUkTG.js → card.DoyCGJay.js} +10 -10
  46. package/dist/chunks/{card.BabmUkTG.js.map → card.DoyCGJay.js.map} +1 -1
  47. package/dist/chunks/{checkbox-group.DbLznnsa.js → checkbox-group.BQN9gjgH.js} +4 -4
  48. package/dist/chunks/{checkbox-group.DbLznnsa.js.map → checkbox-group.BQN9gjgH.js.map} +1 -1
  49. package/dist/chunks/{checkbox.fhQLs-NN.js → checkbox.O1CbmNdS.js} +22 -22
  50. package/dist/chunks/{checkbox.fhQLs-NN.js.map → checkbox.O1CbmNdS.js.map} +1 -1
  51. package/dist/chunks/{code-snippet.5iJcUZSo.js → code-snippet.BDBD85qD.js} +117 -87
  52. package/dist/chunks/code-snippet.BDBD85qD.js.map +1 -0
  53. package/dist/chunks/{codemirror.CXFEqvAi.js → codemirror.0fz2cWJS.js} +4970 -4661
  54. package/dist/chunks/codemirror.0fz2cWJS.js.map +1 -0
  55. package/dist/chunks/{controls-group.CnXzOQkX.js → controls-group.C3RDqB9H.js} +2 -2
  56. package/dist/chunks/{controls-group.CnXzOQkX.js.map → controls-group.C3RDqB9H.js.map} +1 -1
  57. package/dist/chunks/{copy.DN0tClPm.js → copy.BuMSGw23.js} +5 -5
  58. package/dist/chunks/{copy.DN0tClPm.js.map → copy.BuMSGw23.js.map} +1 -1
  59. package/dist/chunks/{country.Bft91V1L.js → country.2-ZtYkh7.js} +2 -2
  60. package/dist/chunks/{country.Bft91V1L.js.map → country.2-ZtYkh7.js.map} +1 -1
  61. package/dist/chunks/{country.types.pilf5B3F.js → country.types.CLjbulKL.js} +4114 -4114
  62. package/dist/chunks/{country.types.pilf5B3F.js.map → country.types.CLjbulKL.js.map} +1 -1
  63. package/dist/chunks/{dashboard-section.DYXZhtop.js → dashboard-section.COWO5SVw.js} +3 -3
  64. package/dist/chunks/{dashboard-section.DYXZhtop.js.map → dashboard-section.COWO5SVw.js.map} +1 -1
  65. package/dist/chunks/{dashed-underline.BvSZS1-m.js → dashed-underline.BEAEmTCb.js} +2 -2
  66. package/dist/chunks/{dashed-underline.BvSZS1-m.js.map → dashed-underline.BEAEmTCb.js.map} +1 -1
  67. package/dist/chunks/{data-grid-template.Du92TEFY.js → data-grid-template.vBl7u2cB.js} +2 -2
  68. package/dist/chunks/{data-grid-template.Du92TEFY.js.map → data-grid-template.vBl7u2cB.js.map} +1 -1
  69. package/dist/chunks/{data-grid.Kwtf1DMq.js → data-grid.DQ0578m9.js} +46 -46
  70. package/dist/chunks/{data-grid.Kwtf1DMq.js.map → data-grid.DQ0578m9.js.map} +1 -1
  71. package/dist/chunks/{date-picker.B7mTNghB.js → date-picker.Bym2OEd9.js} +47 -39
  72. package/dist/chunks/date-picker.Bym2OEd9.js.map +1 -0
  73. package/dist/chunks/{date-range-picker.DPLri9D-.js → date-range-picker.P2Q5FNB-.js} +310 -306
  74. package/dist/chunks/date-range-picker.P2Q5FNB-.js.map +1 -0
  75. package/dist/chunks/divider.Cc4JFWG_.js +35 -0
  76. package/dist/chunks/divider.Cc4JFWG_.js.map +1 -0
  77. package/dist/chunks/{dropdown-default-textbox.DBoSso4J.js → dropdown-default-textbox.CC9Z_RFG.js} +4 -4
  78. package/dist/chunks/{dropdown-default-textbox.DBoSso4J.js.map → dropdown-default-textbox.CC9Z_RFG.js.map} +1 -1
  79. package/dist/chunks/{dropdown-tag.XIlES6IT.js → dropdown-tag.CiCDvGyN.js} +4 -4
  80. package/dist/chunks/{dropdown-tag.XIlES6IT.js.map → dropdown-tag.CiCDvGyN.js.map} +1 -1
  81. package/dist/chunks/{dropdown.BqsoncJr.js → dropdown.hc9ZuuTt.js} +197 -193
  82. package/dist/chunks/dropdown.hc9ZuuTt.js.map +1 -0
  83. package/dist/chunks/{error-message.Ccc1sTTp.js → error-message.Da-p1QIA.js} +8 -8
  84. package/dist/chunks/{error-message.Ccc1sTTp.js.map → error-message.Da-p1QIA.js.map} +1 -1
  85. package/dist/chunks/{es6.jIyAPBgt.js → es6.BtaxuP0b.js} +7 -7
  86. package/dist/chunks/es6.BtaxuP0b.js.map +1 -0
  87. package/dist/chunks/file-uploader.DVyryYaq.js +1879 -0
  88. package/dist/chunks/file-uploader.DVyryYaq.js.map +1 -0
  89. package/dist/chunks/{filter-bar.DT_-lVmf.js → filter-bar.DzcNo5nF.js} +53 -53
  90. package/dist/chunks/{filter-bar.DT_-lVmf.js.map → filter-bar.DzcNo5nF.js.map} +1 -1
  91. package/dist/chunks/{footer-actions.D0uH9JWq.js → footer-actions.Cbe_YLjP.js} +2 -2
  92. package/dist/chunks/{footer-actions.D0uH9JWq.js.map → footer-actions.Cbe_YLjP.js.map} +1 -1
  93. package/dist/chunks/{form-layout-title.DN0jonFa.js → form-layout-title.Xdsi84v2.js} +2 -2
  94. package/dist/chunks/{form-layout-title.DN0jonFa.js.map → form-layout-title.Xdsi84v2.js.map} +1 -1
  95. package/dist/chunks/{header.BvZxtIOD.js → header.BIZTUAJE.js} +4 -4
  96. package/dist/chunks/{header.BvZxtIOD.js.map → header.BIZTUAJE.js.map} +1 -1
  97. package/dist/chunks/{info-icon-with-popover.DEjsASNU.js → info-icon-with-popover.Bly2e0uy.js} +5 -5
  98. package/dist/chunks/{info-icon-with-popover.DEjsASNU.js.map → info-icon-with-popover.Bly2e0uy.js.map} +1 -1
  99. package/dist/chunks/{input-field-password.HRDEb0jL.js → input-field-password.CosL-n__.js} +27 -27
  100. package/dist/chunks/{input-field-password.HRDEb0jL.js.map → input-field-password.CosL-n__.js.map} +1 -1
  101. package/dist/chunks/input-field.DgDFJbg7.js +231 -0
  102. package/dist/chunks/input-field.DgDFJbg7.js.map +1 -0
  103. package/dist/chunks/{inspector.types.2YEArjPi.js → inspector.types.8071wkf0.js} +5 -5
  104. package/dist/chunks/{inspector.types.2YEArjPi.js.map → inspector.types.8071wkf0.js.map} +1 -1
  105. package/dist/chunks/{menu.CLaN9Eys.js → menu.Dq7RlryT.js} +5 -5
  106. package/dist/chunks/{menu.CLaN9Eys.js.map → menu.Dq7RlryT.js.map} +1 -1
  107. package/dist/chunks/{modal-fullscreen.B-qr1Szh.js → modal-fullscreen.CfrgVR_K.js} +5 -5
  108. package/dist/chunks/{modal-fullscreen.B-qr1Szh.js.map → modal-fullscreen.CfrgVR_K.js.map} +1 -1
  109. package/dist/chunks/{modal.wU3uUJKq.js → modal.CuUUMIU_.js} +4 -4
  110. package/dist/chunks/{modal.wU3uUJKq.js.map → modal.CuUUMIU_.js.map} +1 -1
  111. package/dist/chunks/{pagination.BM3FhtxJ.js → pagination.QF1EEUfX.js} +45 -45
  112. package/dist/chunks/{pagination.BM3FhtxJ.js.map → pagination.QF1EEUfX.js.map} +1 -1
  113. package/dist/chunks/{popover.DsUymZWJ.js → popover.nev0GndY.js} +2 -2
  114. package/dist/chunks/{popover.DsUymZWJ.js.map → popover.nev0GndY.js.map} +1 -1
  115. package/dist/chunks/radio-group.D1q0VKvv.js +229 -0
  116. package/dist/chunks/radio-group.D1q0VKvv.js.map +1 -0
  117. package/dist/chunks/{radio-input.C1DZbkcT.js → radio-input.uJAhxKRs.js} +29 -25
  118. package/dist/chunks/{radio-input.C1DZbkcT.js.map → radio-input.uJAhxKRs.js.map} +1 -1
  119. package/dist/chunks/{search-bar.rubkdbcD.js → search-bar.fmMx-zRN.js} +7 -7
  120. package/dist/chunks/{search-bar.rubkdbcD.js.map → search-bar.fmMx-zRN.js.map} +1 -1
  121. package/dist/chunks/{secondary-nav.DKSjc5bn.js → secondary-nav.ldVrzGbB.js} +7 -7
  122. package/dist/chunks/{secondary-nav.DKSjc5bn.js.map → secondary-nav.ldVrzGbB.js.map} +1 -1
  123. package/dist/chunks/{selection-card-group.iYyZ9yX4.js → selection-card-group.CdkrhyZV.js} +11 -11
  124. package/dist/chunks/{selection-card-group.iYyZ9yX4.js.map → selection-card-group.CdkrhyZV.js.map} +1 -1
  125. package/dist/chunks/{sidepanel.CQnLpV8A.js → sidepanel.D-KuHnwI.js} +5 -5
  126. package/dist/chunks/{sidepanel.CQnLpV8A.js.map → sidepanel.D-KuHnwI.js.map} +1 -1
  127. package/dist/chunks/{status.types.Cv6hHRMu.js → status.types.Ce018tQy.js} +18 -17
  128. package/dist/chunks/status.types.Ce018tQy.js.map +1 -0
  129. package/dist/chunks/{structured-list-item.BhBbmkbw.js → structured-list-item.Dk8Z-FPn.js} +5 -5
  130. package/dist/chunks/{structured-list-item.BhBbmkbw.js.map → structured-list-item.Dk8Z-FPn.js.map} +1 -1
  131. package/dist/chunks/{summary-grid-item-custom.CicAOBVQ.js → summary-grid-item-custom.atXX3GY9.js} +2 -2
  132. package/dist/chunks/{summary-grid-item-custom.CicAOBVQ.js.map → summary-grid-item-custom.atXX3GY9.js.map} +1 -1
  133. package/dist/chunks/{textarea.Cf21WMwL.js → textarea.BVzGn3zO.js} +2 -2
  134. package/dist/chunks/{textarea.Cf21WMwL.js.map → textarea.BVzGn3zO.js.map} +1 -1
  135. package/dist/chunks/{timeline-item.Cu5b-Mqj.js → timeline-item.D_YNHlRi.js} +13 -13
  136. package/dist/chunks/{timeline-item.Cu5b-Mqj.js.map → timeline-item.D_YNHlRi.js.map} +1 -1
  137. package/dist/chunks/{tutorial.w2ZqeOh1.js → tutorial.cQXPvqV4.js} +10 -10
  138. package/dist/chunks/{tutorial.w2ZqeOh1.js.map → tutorial.cQXPvqV4.js.map} +1 -1
  139. package/dist/chunks/{use-cached-selected-values.impKjAIS.js → use-cached-selected-values.BGlHmPhX.js} +10 -10
  140. package/dist/chunks/{use-cached-selected-values.impKjAIS.js.map → use-cached-selected-values.BGlHmPhX.js.map} +1 -1
  141. package/dist/chunks/{use-country-items.DPBbl1KK.js → use-country-items.eWARMT6I.js} +2 -2
  142. package/dist/chunks/{use-country-items.DPBbl1KK.js.map → use-country-items.eWARMT6I.js.map} +1 -1
  143. package/dist/code-snippet.js +1 -1
  144. package/dist/country.js +2 -2
  145. package/dist/dashboard-template.js +1 -1
  146. package/dist/dashed-underline.js +1 -1
  147. package/dist/data-grid-template.js +1 -1
  148. package/dist/data-grid.js +1 -1
  149. package/dist/date-picker.js +2 -2
  150. package/dist/date-range-picker.js +2 -2
  151. package/dist/divider.js +1 -1
  152. package/dist/dropdown.js +4 -4
  153. package/dist/file-uploader.js +1 -1
  154. package/dist/filter-bar.js +1 -1
  155. package/dist/form-layout.js +1 -1
  156. package/dist/header.js +1 -1
  157. package/dist/index.js +47 -47
  158. package/dist/input-field-password.js +1 -1
  159. package/dist/input-field.js +1 -1
  160. package/dist/inspector.js +1 -1
  161. package/dist/internal.js +8 -8
  162. package/dist/menu.js +1 -1
  163. package/dist/modal-fullscreen.js +1 -1
  164. package/dist/modal.js +2 -2
  165. package/dist/pagination.js +1 -1
  166. package/dist/popover.js +1 -1
  167. package/dist/radio-group.js +2 -2
  168. package/dist/search-bar.js +2 -2
  169. package/dist/secondary-nav.js +1 -1
  170. package/dist/selection-card.js +1 -1
  171. package/dist/sidepanel.js +1 -1
  172. package/dist/status.js +1 -1
  173. package/dist/structured-list.js +1 -1
  174. package/dist/styles/bento-dark.css +2 -0
  175. package/dist/styles/bento-light.css +2 -0
  176. package/dist/styles/bento.css +2 -0
  177. package/dist/styles/legacy.css +7 -5
  178. package/dist/styles/styleguide.css +2 -0
  179. package/dist/summary-grid.js +1 -1
  180. package/dist/textarea.js +1 -1
  181. package/dist/timeline.js +1 -1
  182. package/dist/tutorial.js +1 -1
  183. package/dist/web-types.json +42 -3
  184. package/package.json +12 -7
  185. package/dist/chunks/code-snippet.5iJcUZSo.js.map +0 -1
  186. package/dist/chunks/codemirror.CXFEqvAi.js.map +0 -1
  187. package/dist/chunks/date-picker.B7mTNghB.js.map +0 -1
  188. package/dist/chunks/date-range-picker.DPLri9D-.js.map +0 -1
  189. package/dist/chunks/divider.BZfeYmB9.js +0 -30
  190. package/dist/chunks/divider.BZfeYmB9.js.map +0 -1
  191. package/dist/chunks/dropdown.BqsoncJr.js.map +0 -1
  192. package/dist/chunks/es6.jIyAPBgt.js.map +0 -1
  193. package/dist/chunks/file-uploader.C6kcnhqp.js +0 -729
  194. package/dist/chunks/file-uploader.C6kcnhqp.js.map +0 -1
  195. package/dist/chunks/input-field.D6N2kt7s.js +0 -228
  196. package/dist/chunks/input-field.D6N2kt7s.js.map +0 -1
  197. package/dist/chunks/radio-group.DMob8x2J.js +0 -219
  198. package/dist/chunks/radio-group.DMob8x2J.js.map +0 -1
  199. package/dist/chunks/status.types.Cv6hHRMu.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-picker.B7mTNghB.js","sources":["../../src/components/date-picker/composables/use-date-picker-single-calendar-text.ts","../../src/components/date-picker/date-picker.types.ts","../../src/components/date-picker/date-picker.vue"],"sourcesContent":["import { computed, ref } from 'vue';\nimport { useI18n } from '@/utils/ts/i18n';\nimport { UseDateDisplayText } from './use-date-picker-single-calendar-text.types';\nimport { DateFormat } from '@/types';\nimport { getDateLocale } from '@/utils/ts/get-date-locale/get-date-locale';\nimport format from 'date-fns/format';\n\n/**\n * Composable that sets and formats the date to be displayed in the input box of a Single Date Picker\n * @param {Ref<Date>} option.datePickerValue Ref to the datePickerValue set in the DatePicker component\n * @param {Ref<boolean>} option.isDateIncorrect Indicates if the date is correct or not\n */\nexport const useDatePickerSingleCalendarText: UseDateDisplayText<Date> = ({ datePickerValue, isDateIncorrect }) => {\n const { locale, t } = useI18n();\n const locales = getDateLocale();\n\n const textInputValue = ref(datePickerValue.value?.toDateString());\n\n const dateDisplayValue = computed(() => {\n // Display incorrect date when there's an error with the input\n if (isDateIncorrect.value) {\n return textInputValue.value;\n }\n\n // Display \"Select a date\" when there's no date selected or input\n if (!datePickerValue.value) {\n return t('selectDate') as string;\n }\n\n // Display the date in format \"dd MMM, yyyy (25 Jun, 2023)\" if there's a valid date selected\n return format(datePickerValue.value as Date, DateFormat.FULL_DATE, {\n locale: locales[locale.value.substring(0, 2)] || locales.enUS,\n });\n });\n\n /**\n * Formats the \"dateToFormat\" date value with the yyyy-MM-dd format and sets it as \"formatTextInputDisplayValue\" value\n * @param {DATE} dateToFormat - Date to be assigned and formatted\n */\n const formatTextInputDisplayValue = (dateToFormat: Date = datePickerValue.value) => {\n // If date is incorrect, leave the textInputValue intact\n if (isDateIncorrect.value) {\n return;\n }\n\n textInputValue.value = dateToFormat\n ? format(dateToFormat, DateFormat.NUMERIC_DATE_YEAR_FIRST, {\n locale: locales[locale.value.substring(0, 2)] || locales.enUS,\n })\n : null;\n };\n\n return {\n // Values\n dateDisplayValue,\n textInputValue,\n\n // Methods\n formatTextInputDisplayValue,\n };\n};\n","export { CalendarFirstDayOfWeek as BentoDatePickerFirstDayOfWeek } from '@/internal';\nexport type {\n CalendarIsDateDisabled as BentoDatePickerIsDateDisabled,\n CalendarSingleDateValue as BentoDatePickerValue,\n} from '@/internal';\n\nexport enum BentoDatePickerEvent {\n INPUT = 'input',\n}\n","<!-- TODO: Remove aria props as these are part of JSX elements /vue/types/jsx.d.ts -->\n<!-- eslint-disable vue/attribute-hyphenation -->\n<template>\n <div\n v-bento-click-outside-directive=\"closeDatePicker\"\n class=\"b-date-picker\"\n @keydown.space.capture=\"onSpaceBarOrEnter\"\n @keydown.enter.capture=\"onSpaceBarOrEnter\"\n >\n <!-- Label -->\n <field-label\n v-if=\"label\"\n :id=\"labelId\"\n :label=\"label\"\n :tooltip-text=\"tooltipText\"\n :optional=\"optional\"\n :required=\"required\"\n />\n\n <!-- Input -->\n <div>\n <dropdown-input-default\n ref=\"inputContainerRef\"\n always-combobox-is-input\n :ariaControls=\"datePickerContainerId\"\n :ariaExpanded=\"isDatePickerOpen\"\n :aria-labelledby=\"label ? labelId : null\"\n :aria-describedby=\"ariaDescribedBy\"\n :disabled=\"disabled\"\n dynamic-filtering\n :is-invalid=\"!!errorMessage || !!dateErrorText\"\n :open=\"isDatePickerOpen\"\n :value=\"textInputValue\"\n :display-value=\"dateDisplayValue\"\n :debounce-time=\"0\"\n :readonly=\"isReadOnly\"\n @input=\"onDateInputChange\"\n @open=\"openDatePicker\"\n @keydown=\"onDateKeyDown\"\n @clear=\"clearDatePickerValue\"\n @close=\"closeDatePicker\"\n />\n </div>\n\n <!-- Error Messages -->\n <error-message\n v-if=\"dateErrorText\"\n :id=\"dateErrorId\"\n :error-message=\"dateErrorText\"\n class=\"b-date-picker__error-message\"\n />\n <error-message\n v-if=\"errorMessage\"\n :id=\"errorId\"\n :error-message=\"errorMessage\"\n class=\"b-date-picker__error-message\"\n />\n\n <!-- Description -->\n <bento-typography\n v-if=\"description\"\n class=\"b-date-picker__description\"\n :class=\"descriptionConditionalClasses\"\n el=\"span\"\n >\n {{ description }}\n </bento-typography>\n\n <!-- Calendar container -->\n <bento-popover\n v-if=\"inputContainerRef\"\n :id=\"datePickerContainerId\"\n class=\"b-date-picker__container\"\n role=\"dialog\"\n :open=\"isDatePickerOpen\"\n :target-element=\"inputContainerRef\"\n :disable-focus-trap=\"true\"\n :aria-label=\"popoverAriaLabel\"\n :aria-modal=\"true\"\n position=\"bottom-start\"\n fit-content\n >\n <calendar\n ref=\"calendarContainerRef\"\n :first-day-of-week=\"firstDayOfWeek\"\n :is-date-disabled=\"isDateDisabled\"\n :number-of-months=\"1\"\n :value=\"value\"\n :min=\"min\"\n :max=\"max\"\n @input=\"onDateSelected\"\n />\n </bento-popover>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { computed, defineComponent, nextTick, PropType, Ref, ref, toRef, watch } from 'vue';\n\n // Components\n import { BentoPopover } from '@/components/popover';\n import { BentoTypography } from '../typography';\n import { Calendar, ErrorMessage, FieldLabel } from '@/internal';\n import { DropdownInputDefault } from '@/components/dropdown/components';\n\n // Utils\n import { debounce } from '@/utils/ts/debounce';\n import { formatDateInputValue, validateDateInput } from '@/utils/ts/date-input';\n import { generateUid } from '@/core/utils/ts';\n import { useI18n } from '@/utils/ts/i18n';\n\n // Composables\n import { useDatePickerSingleCalendarText } from './composables/use-date-picker-single-calendar-text';\n import { useFormLayoutFieldLoading } from '@/composables';\n\n // Directive\n import { BentoClickOutsideDirective } from '@/directives';\n\n // Types\n import { BentoDatePickerEvent, BentoDatePickerValue } from './date-picker.types';\n\n import messages from './messages.json';\n\n type MessageSchema = (typeof messages)['en-US'];\n const DEBOUNCE_TIME = 1000;\n\n /**\n * Date picker selector.\n *\n * @example\n * import { BentoDatePicker } from '@adyen/bento-vue2';\n *\n * export default {\n * components: { BentoDatePicker },\n * template: `\n * <bento-date-picker\n * label=\"Label\"\n * description=\"Supporting text\"\n * required\n * optional\n * disabled\n * @input=\"onDateChanged\"\n * v-model=\"selectedDate\"\n * />\n * `,\n * setup() {\n * const selectedDate = ref(new Date()); // reactive({ startDate: new Date(), endDate: new Date() })\n * return {\n * selectedDate,\n * }\n * }\n * }\n */\n export default defineComponent({\n i18n: { messages },\n name: 'bento-date-picker',\n components: {\n BentoTypography,\n BentoPopover,\n Calendar,\n ErrorMessage,\n DropdownInputDefault,\n FieldLabel,\n },\n directives: { BentoClickOutsideDirective },\n props: {\n /**\n * Descriptive supporting text visbile underneath the dropdown.\n */\n description: { type: String, default: undefined },\n\n /**\n * Disables dropdown functionality.\n */\n disabled: { type: Boolean, default: false },\n\n /**\n * Displays component in an error state with an error message\n */\n errorMessage: { type: String, default: null },\n\n /**\n * Allows you to set the first day of the week. 0 is sunday, 1 is monday, 6 is saturday\n */\n firstDayOfWeek: Calendar.props.firstDayOfWeek,\n\n /**\n * Indicate if a date should be disabled or not\n */\n isDateDisabled: Calendar.props.isDateDisabled,\n\n /**\n * Sets a minimum limit for selectable dates - dates before `min` will not be selectable\n */\n min: Calendar.props.min,\n\n /**\n * Sets a maximum limit for selectable dates - dates after `max` will not be selectable\n */\n max: Calendar.props.max,\n\n /**\n * Text that is displayed as a label above the element.\n */\n label: { type: String, default: undefined },\n\n /**\n * Highlights the dropdown is optional.\n */\n optional: { type: Boolean, default: false },\n\n /**\n * The Boolean readonly property, when present, makes the element not mutable, meaning the user can not edit the date picker.\n */\n readonly: { type: Boolean, default: false },\n\n /**\n * Highlights the dropdown is required.\n */\n required: { type: Boolean, default: false },\n\n /**\n * Adds a info icon next to the label to display the passed tooltip message.\n */\n tooltipText: { type: String, default: null },\n\n /**\n * Selected date\n */\n value: { type: [Date, Object] as PropType<BentoDatePickerValue>, default: null },\n },\n emits: [BentoDatePickerEvent.INPUT],\n setup(props, { emit }) {\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n const datePickerContainerId = generateUid('bento-date-picker-container');\n const labelId = generateUid('bento-date-picker-label');\n const descriptionId = generateUid('bento-date-picker-description');\n const errorId = generateUid('bento-date-picker-error');\n const dateErrorId = generateUid('bento-date-picker-date-error');\n const popoverAriaLabel = computed(() => props.label || t('datePicker', { name: datePickerContainerId }));\n\n // Refs\n const calendarContainerRef = ref(null);\n const inputContainerRef = ref(null);\n\n // Values\n const isDateIncorrect = ref(false);\n const isDatePickerOpen = ref(false);\n const { isReadOnly } = useFormLayoutFieldLoading(toRef(props, 'readonly'));\n\n watch(\n () => props.disabled,\n disabled => {\n // Close date picker popover if it's opened when it's disabled\n if (disabled && isDatePickerOpen.value) {\n isDatePickerOpen.value = false;\n }\n }\n );\n\n const { dateDisplayValue, textInputValue, formatTextInputDisplayValue } = useDatePickerSingleCalendarText({\n datePickerValue: toRef(props, 'value') as Ref<Date>,\n isDateIncorrect,\n });\n\n const dateErrorText = computed(() => {\n if (\n props.isDateDisabled &&\n props.isDateDisabled(new Date(textInputValue.value)) &&\n !isDatePickerOpen.value\n ) {\n return t('selectedDateIsNotAvailable');\n }\n\n return isDateIncorrect.value ? t('provideDateInAFormat') : null;\n });\n\n const descriptionConditionalClasses = computed(() => ({\n 'b-date-picker__description--error': props.errorMessage || dateErrorText.value,\n }));\n\n const ariaDescribedBy = computed(\n () =>\n `${props.description ? descriptionId : ''} ${props.errorMessage ? errorId : ''} ${\n dateErrorText.value ? dateErrorId : ''\n }`.trim() || null\n );\n\n const isDateEnabled = (date: Date) => {\n // Check if date is between min/max bounds, if there are any\n if ((props.min && date <= props.min) || (props.max && date >= props.max)) {\n return false;\n }\n\n // Check if function is set, otherwise all dates are enabled\n if (props.isDateDisabled) {\n return !props.isDateDisabled(date);\n }\n\n return true;\n };\n\n const closeDatePicker = () => {\n isDatePickerOpen.value = false;\n };\n\n const openDatePicker = () => {\n isDatePickerOpen.value = true;\n\n formatTextInputDisplayValue();\n };\n\n const onDateSelected = (selectedDate: Date) => {\n // Reset the error state when a valid date is selected\n isDateIncorrect.value = false;\n\n closeDatePicker();\n emit(BentoDatePickerEvent.INPUT, selectedDate);\n };\n\n const clearDatePickerValue = async () => {\n if (isDateIncorrect.value) {\n isDateIncorrect.value = false;\n textInputValue.value = null;\n }\n emit(BentoDatePickerEvent.INPUT, null);\n };\n\n const onDateKeyDown = (event: KeyboardEvent) => {\n validateDateInput(event);\n };\n\n const validateDate = (stringDate: string) => {\n // Validate only if the date is complete\n if (stringDate.length < 10) {\n return;\n }\n\n // Checks for YYYY-MM-DD format\n const dateRegex = /^\\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$/;\n const isValidDate = dateRegex.test(stringDate) && isDateEnabled(new Date(stringDate));\n if (isValidDate) {\n isDateIncorrect.value = false;\n emit(BentoDatePickerEvent.INPUT, new Date(stringDate));\n } else if (stringDate) {\n // Only set to true if the value exists (not null/undefined)\n isDateIncorrect.value = true;\n emit(BentoDatePickerEvent.INPUT, null);\n }\n };\n\n const validateDateDebounced = debounce(validateDate, DEBOUNCE_TIME);\n\n const onDateInputChange = (stringDate: string) => {\n textInputValue.value = formatDateInputValue(stringDate);\n // If we are closing the date picker, we should validate (and emit date inputs) immediately so the user doesn't have to wait for the debounce time.\n if (isDatePickerOpen.value) {\n validateDateDebounced(textInputValue.value);\n } else {\n validateDate(textInputValue.value);\n }\n };\n\n /**\n * Space bar and Enter keyDown event handler.\n *\n * * Opens the date picker dialog on the first keydown.\n * * Move focus to selected date, i.e., the date displayed in the date input text field. If no date has been selected, places focus on the current date.\n * @param {KeyboardEvent} event Event being triggered\n */\n const onSpaceBarOrEnter = async (event: KeyboardEvent) => {\n if (isDatePickerOpen.value) {\n return;\n }\n event.preventDefault();\n\n openDatePicker();\n\n // Wait for the date picker dialog to open\n await nextTick();\n\n // Set current date (today) if no date is selected\n if (!props.value) {\n // Format the opened date picker date to YYYY-MM-DD\n formatTextInputDisplayValue(new Date());\n emit(BentoDatePickerEvent.INPUT, new Date());\n\n // Wait for new value to be set with the emit\n await nextTick();\n }\n\n // Focus on date\n calendarContainerRef.value?.$refs.calendarRef[0].focusOnDate(props.value);\n };\n\n return {\n // Refs\n inputContainerRef,\n calendarContainerRef,\n\n // Values,\n dateDisplayValue,\n datePickerContainerId,\n descriptionConditionalClasses,\n isDateIncorrect,\n isDatePickerOpen,\n isReadOnly,\n dateErrorText,\n labelId,\n descriptionId,\n errorId,\n dateErrorId,\n popoverAriaLabel,\n ariaDescribedBy,\n textInputValue,\n\n // Events\n closeDatePicker,\n clearDatePickerValue,\n onDateSelected,\n openDatePicker,\n onDateKeyDown,\n onDateInputChange,\n\n // Keyboard navigation\n onSpaceBarOrEnter,\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./date-picker.scss\" />\n"],"names":["useDatePickerSingleCalendarText","datePickerValue","isDateIncorrect","locale","t","useI18n","locales","getDateLocale","textInputValue","ref","_a","computed","format","DateFormat","dateToFormat","BentoDatePickerEvent","BentoDatePickerEvent2","DEBOUNCE_TIME","_sfc_main","defineComponent","messages","BentoTypography","BentoPopover","Calendar","ErrorMessage","DropdownInputDefault","FieldLabel","BentoClickOutsideDirective","props","emit","datePickerContainerId","generateUid","labelId","descriptionId","errorId","dateErrorId","popoverAriaLabel","calendarContainerRef","inputContainerRef","isDatePickerOpen","isReadOnly","useFormLayoutFieldLoading","toRef","watch","disabled","dateDisplayValue","formatTextInputDisplayValue","dateErrorText","descriptionConditionalClasses","ariaDescribedBy","isDateEnabled","date","closeDatePicker","openDatePicker","onDateSelected","selectedDate","clearDatePickerValue","onDateKeyDown","event","validateDateInput","validateDate","stringDate","validateDateDebounced","debounce","formatDateInputValue","nextTick"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-range-picker.DPLri9D-.js","sources":["../../../../node_modules/.pnpm/date-fns@2.28.0/node_modules/date-fns/esm/isEqual/index.js","../../../../node_modules/.pnpm/date-fns@2.28.0/node_modules/date-fns/esm/startOfSecond/index.js","../../../../node_modules/.pnpm/date-fns@2.28.0/node_modules/date-fns/esm/isSameSecond/index.js","../../../../node_modules/.pnpm/date-fns@2.28.0/node_modules/date-fns/esm/setHours/index.js","../../../../node_modules/.pnpm/date-fns@2.28.0/node_modules/date-fns/esm/setMinutes/index.js","../../../../node_modules/.pnpm/date-fns@2.28.0/node_modules/date-fns/esm/setSeconds/index.js","../../src/components/internal/calendar/components/calendar-month/composables/granular-min-max-date.ts","../../src/components/date-range-picker/composables/use-granularity-memory.ts","../../src/components/date-range-picker/components/date-range-picker-calendar/date-range-picker-calendar.types.ts","../../src/utils/ts/time-input.ts","../../src/components/date-range-picker/components/date-range-picker-calendar/date-range-picker-calendar.vue","../../src/components/date-range-picker/composables/use-date-range-picker-calendar-text.ts","../../src/components/date-range-picker/date-range-picker.types.ts","../../src/components/date-range-picker/date-range-picker.vue"],"sourcesContent":["import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * var result = isEqual(\n * new Date(2014, 6, 2, 6, 30, 45, 0),\n * new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\n\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyLeftDate);\n var dateRight = toDate(dirtyRightDate);\n return dateLeft.getTime() === dateRight.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\n\nexport default function startOfSecond(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMilliseconds(0);\n return date;\n}","import startOfSecond from \"../startOfSecond/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameSecond\n * @category Second Helpers\n * @summary Are the given dates in the same second (and hour and day)?\n *\n * @description\n * Are the given dates in the same second (and hour and day)?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second (and hour and day)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500 in the same second?\n * var result = isSameSecond(\n * new Date(2014, 8, 4, 6, 30, 15),\n * new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n * \n * @example\n * // Are 4 September 2014 06:00:15.000 and 4 September 2014 06:01.15.000 in the same second?\n * var result = isSameSecond(\n * new Date(2014, 8, 4, 6, 0, 15),\n * new Date(2014, 8, 4, 6, 1, 15)\n * )\n * //=> false\n * \n * @example\n * // Are 4 September 2014 06:00:15.000 and 5 September 2014 06:00.15.000 in the same second?\n * var result = isSameSecond(\n * new Date(2014, 8, 4, 6, 0, 15),\n * new Date(2014, 8, 5, 6, 0, 15)\n * )\n * //=> false\n */\n\nexport default function isSameSecond(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft);\n var dateRightStartOfSecond = startOfSecond(dirtyDateRight);\n return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime();\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\n\nexport default function setHours(dirtyDate, dirtyHours) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var hours = toInteger(dirtyHours);\n date.setHours(hours);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * const result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\n\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var minutes = toInteger(dirtyMinutes);\n date.setMinutes(minutes);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * const result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\n\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var seconds = toInteger(dirtySeconds);\n date.setSeconds(seconds);\n return date;\n}","import addDays from 'date-fns/addDays';\nimport addMonths from 'date-fns/addMonths';\nimport endOfDay from 'date-fns/endOfDay';\nimport endOfMonth from 'date-fns/endOfMonth';\nimport endOfWeek from 'date-fns/endOfWeek';\nimport isSameDay from 'date-fns/isSameDay';\nimport startOfDay from 'date-fns/startOfDay';\nimport startOfMonth from 'date-fns/startOfMonth';\nimport startOfWeek from 'date-fns/startOfWeek';\nimport subDays from 'date-fns/subDays';\nimport subMonths from 'date-fns/subMonths';\n\nimport type { CalendarGranularityConfig } from '../../../calendar.types';\nimport type { UseGranularMinMaxDate } from './granular-min-max-date.types';\n\n/**\n * Provides utility function to set calendar min/max dates based on the granularity selected.\n * @param props Configured min/max dates, and the day the week starts on.\n * @returns Function to calculate calendar limits.\n */\nexport const useGranularMinMaxDate: UseGranularMinMaxDate = ({\n firstDayOfWeek,\n min: minimumDate,\n max: maximumDate,\n}) => {\n const getGranularCalendarLimits = (granularity: CalendarGranularityConfig) => {\n let min = startOfDay(minimumDate);\n let max = endOfDay(maximumDate);\n\n if (granularity?.type === 'weekly') {\n if (granularity.earliest) {\n min = startOfDay(granularity.earliest);\n } else {\n const startOfMin = startOfWeek(min, { weekStartsOn: firstDayOfWeek });\n\n // If the minimum is in the middle of a week, set to the end (only allow full weeks)\n if (!isSameDay(min, startOfMin)) {\n min = startOfDay(addDays(endOfWeek(min, { weekStartsOn: firstDayOfWeek }), 1));\n }\n }\n\n if (granularity.latest) {\n max = endOfDay(granularity.latest);\n } else {\n const endOfMax = endOfWeek(max, { weekStartsOn: firstDayOfWeek });\n\n // If the maximum is in the middle of a week, set to the end of last week (only allow full weeks)\n if (!isSameDay(max, endOfMax)) {\n max = endOfDay(subDays(startOfWeek(max, { weekStartsOn: firstDayOfWeek }), 1));\n }\n }\n }\n\n if (granularity?.type === 'monthly') {\n if (granularity.earliest) {\n min = startOfDay(granularity.earliest);\n } else {\n const startOfMin = startOfMonth(min);\n\n // If the minimum is in the middle of a month, set to the start of next month (only allow full month)\n if (!isSameDay(min, startOfMin)) {\n min = startOfMonth(addMonths(min, 1));\n }\n }\n\n if (granularity.latest) {\n max = endOfDay(granularity.latest);\n } else {\n const endOfMax = endOfMonth(max);\n\n // If the maximum is in the middle of a month, set to the end of last month (only allow full months)\n if (!isSameDay(max, endOfMax)) {\n max = endOfMonth(subMonths(max, 1));\n }\n }\n }\n\n return { min, max };\n };\n\n return { getGranularCalendarLimits };\n};\n","import { reactive } from 'vue';\n\nimport type { CalendarGranularityType } from '../../internal/calendar/calendar.types';\nimport type { UseGranularityMemory } from './use-granularity-memory.types';\n\n/**\n * Provides utility property and functions to store date ranges based on granularity.\n * This is used to revert back to the previously selected range when users switch between granularities\n * @returns Saved date ranges per granularity, and functions to save/reset ranges.\n */\nexport const useGranularityMemory: UseGranularityMemory = () => {\n const savedRanges = reactive<{\n daily: { startDate: Date; endDate: Date } | null;\n weekly: { startDate: Date; endDate: Date } | null;\n monthly: { startDate: Date; endDate: Date } | null;\n }>({\n daily: null,\n weekly: null,\n monthly: null,\n });\n\n const saveRange = (type: CalendarGranularityType, range: { startDate: Date; endDate: Date }) => {\n savedRanges[type] = range;\n };\n\n const resetSavedRanges = () => {\n savedRanges.daily = null;\n savedRanges.weekly = null;\n savedRanges.monthly = null;\n };\n\n return {\n savedRanges,\n\n saveRange,\n resetSavedRanges,\n };\n};\n","import { CalendarGranularityType } from '@/internal';\n\nexport interface DateRangePickerCalendarFormData {\n startDate: string;\n endDate: string;\n startTime?: string;\n endTime?: string;\n granularity?: CalendarGranularityType;\n}\n\nexport enum DateRangePickerCalendarEvent {\n CUSTOM_RANGE = 'custom-range',\n INPUT = 'input',\n ERROR = 'error',\n FORM_DATE = 'form-date',\n START_DATE_SELECTED = 'start-date-selected',\n}\n\nexport interface DateRangePickerCalendarRangeSelectorItem {\n label: string;\n value: string;\n data: {\n startDate: Date;\n endDate: Date;\n granularity?: CalendarGranularityType;\n };\n}\n\nexport type DateRangePickerCalendarRangeSelectorItems = Array<DateRangePickerCalendarRangeSelectorItem>;\n","const validDigitRegex = /[\\d]/;\n\nconst hourRegex = /^\\d{2}$/;\nconst minuteRegex = /^\\d{2}:\\d{2}$/;\n\nexport const validateTimeInput = (event: KeyboardEvent) => {\n const { selectionStart } = event.target as HTMLInputElement;\n\n const isValidKey = validDigitRegex.test(event.key) || event.key === 'Backspace';\n const isValidColon = [1, 2, 4, 5].includes(selectionStart) && event.key === ':';\n\n if (!isValidKey && !isValidColon) {\n event.preventDefault();\n }\n};\n\nexport const formatTimeInputValue = (value: string) => {\n if (!value) {\n return value;\n }\n\n let formattedValue = value;\n\n // Format if the first value is bigger than 2, because it can't be bigger than 24 hours\n if (formattedValue.length === 1 && parseInt(value, 10) > 2) {\n return `0${formattedValue}:`;\n }\n\n const [secondToLastDigit, lastDigit] = formattedValue.slice(-2);\n if ([2, 5].includes(formattedValue.length) && lastDigit === ':') {\n formattedValue = `${formattedValue.slice(0, formattedValue.length - 2)}0${secondToLastDigit}`;\n }\n\n // Add `:` after hour/minute\n if (hourRegex.test(formattedValue) || minuteRegex.test(formattedValue)) {\n formattedValue += ':';\n }\n return formattedValue;\n};\n","<template>\n <div class=\"b-date-range-picker-calendar\">\n <!-- Form -->\n <div class=\"b-date-range-picker-calendar__form-container\">\n <div class=\"b-date-range-picker-calendar__form\">\n <template v-if=\"hasSlot('title')\">\n <slot name=\"title\" />\n </template>\n\n <bento-dropdown\n v-if=\"quickSelectRanges\"\n :aria-label=\"t('customRange')\"\n :items=\"quickSelectRangeDefaultItems\"\n :value=\"selectedRangeSelectorValue\"\n @input=\"onRangeSelectorInput\"\n />\n\n <bento-segmented-control\n v-if=\"granularities\"\n :items=\"granularityItems\"\n :model-value=\"internalRangeDate.granularity\"\n full-width\n @update:model-value=\"onGranularityInput\"\n >\n </bento-segmented-control>\n <div>\n <bento-typography stronger el=\"span\" class=\"b-date-range-picker-calendar__label\">\n From\n </bento-typography>\n <div :class=\"formInputWrapperConditionalClasses\">\n <bento-input-field\n :aria-label=\"t('dateFrom')\"\n :value=\"dateTextInput.startDate\"\n :error=\"startDateError\"\n class=\"b-date-range-picker-calendar__form-input\"\n @input=\"onStartDateInput\"\n @keydown=\"onDateInputKeyDown\"\n >\n <template #description>YYYY-MM-DD</template>\n </bento-input-field>\n\n <bento-input-field\n v-if=\"allowTimeInput\"\n :aria-label=\"t('timeFrom')\"\n :value=\"dateTextInput.startTime\"\n :error=\"startTimeError\"\n class=\"b-date-range-picker-calendar__form-input\"\n @input=\"onStartTimeInput\"\n @keydown=\"onTimeInputKeyDown\"\n >\n <template #description>HH:MM:SS</template>\n </bento-input-field>\n </div>\n </div>\n\n <div>\n <bento-typography stronger el=\"span\" class=\"b-date-range-picker-calendar__label\">\n To\n </bento-typography>\n <div :class=\"formInputWrapperConditionalClasses\">\n <bento-input-field\n class=\"b-date-range-picker-calendar__form-input\"\n :aria-label=\"t('dateTo')\"\n :value=\"dateTextInput.endDate\"\n :error=\"endDateError\"\n @input=\"onEndDateInput\"\n @keydown=\"onDateInputKeyDown\"\n >\n <template #description>YYYY-MM-DD</template>\n </bento-input-field>\n\n <bento-input-field\n v-if=\"allowTimeInput\"\n :aria-label=\"t('timeTo')\"\n :value=\"dateTextInput.endTime\"\n :error=\"endTimeError\"\n class=\"b-date-range-picker-calendar__form-input\"\n @input=\"onEndTimeInput\"\n @keydown=\"onTimeInputKeyDown\"\n >\n <template #description>HH:MM:SS</template>\n </bento-input-field>\n </div>\n </div>\n </div>\n\n <div v-if=\"hasSlot('actions')\">\n <slot name=\"actions\" />\n </div>\n </div>\n\n <!-- Calendar -->\n <div class=\"b-date-range-picker-calendar__calendars-container\">\n <calendar\n :value=\"value\"\n :first-day-of-week=\"firstDayOfWeek\"\n :is-date-disabled=\"isDateDisabled\"\n :max-range=\"maxRange\"\n :min=\"computedMinMax.min\"\n :max=\"computedMinMax.max\"\n :number-of-months=\"numberOfMonths\"\n :show-end-date-on-open=\"showEndDateOnOpen\"\n :granularity=\"selectedGranularity\"\n is-range\n @input=\"onDateInput\"\n @start-date-selected=\"onStartDateSelected\"\n @end-date-selected=\"onEndDateSelected\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { computed, defineComponent, onMounted, PropType, reactive, ref, toRaw } from 'vue';\n import { Calendar, CalendarGranularityType } from '@/internal';\n import { BentoTypography } from '@/components/typography';\n import { BentoInputField } from '@/components/input-field';\n import { BentoDropdown } from '@/components/dropdown';\n import { BentoSegmentedControl, type BentoSegmentedControlItem } from '@/components/segmented-control';\n import { getDateLocale } from '@/utils/ts/get-date-locale/get-date-locale';\n import { useI18n } from '@/utils/ts/i18n';\n import { debounce } from '@/utils/ts/debounce';\n import { useHasSlot } from '@/composables';\n import { useGranularityAdjustments } from '@/components/internal/calendar/composables/use-granularity-adjustments';\n import { useGranularMinMaxDate } from '@/components/internal/calendar/components/calendar-month/composables/granular-min-max-date';\n import { useGranularityMemory } from '../../composables/use-granularity-memory';\n import { formatDateInputValue, validateDateInput } from '@/utils/ts/date-input';\n import {\n DateRangePickerCalendarEvent,\n DateRangePickerCalendarFormData,\n DateRangePickerCalendarRangeSelectorItems,\n } from './date-range-picker-calendar.types';\n import type {\n BentoDateRangePickerGranularityConfig,\n BentoDateRangePickerValue,\n } from '../../date-range-picker.types';\n import { DateFormat } from '@/types';\n import { formatTimeInputValue, validateTimeInput } from '@/utils/ts/time-input';\n import endOfDay from 'date-fns/endOfDay';\n import format from 'date-fns/format';\n import isSameSecond from 'date-fns/isSameSecond';\n import isSameDay from 'date-fns/isSameDay';\n import setHours from 'date-fns/setHours';\n import setMinutes from 'date-fns/setMinutes';\n import setSeconds from 'date-fns/setSeconds';\n import startOfDay from 'date-fns/startOfDay';\n import messages from './messages.json';\n\n const FORM_INPUT_DEBOUNCE_TIME = 300;\n const RANGE_SELECTOR_CUSTOM_RANGE_KEY = 'customRange';\n const DEFAULT_GRANULARITY = 'daily';\n type MessageSchema = (typeof messages)['en-US'];\n\n /**\n * Calendar for range dates. Contains the logic to handle the range forms.\n *\n * @example\n * import DatePickerCalendarRange from './date-range-picker-calendar.vue';\n *\n * export default {\n * components: { DatePickerCalendarRange },\n * template: `\n * <date-range-picker-calendar\n * :value=\"{startDate: new Date(), endDate: new Date() }\"\n * :first-day-of-week=\"BentoDatePickerFirstDayOfWeek.MONDAY\"\n * :is-date-disabled=\"(date: Date) => boolean\"\n * :number-of-months=\"2\"\n * @input=\"({ startDate, endDate }) => void\"\n * />\n * `\n * }\n */\n export default defineComponent({\n i18n: { messages },\n name: 'date-range-picker-calendar',\n components: {\n BentoDropdown,\n BentoInputField,\n BentoSegmentedControl,\n BentoTypography,\n Calendar,\n },\n props: {\n /**\n * Allows user to enter time values in the form\n */\n allowTimeInput: { type: Boolean, default: false },\n\n /**\n * Ranges form persistance data\n */\n dateFormData: {\n type: Object as PropType<DateRangePickerCalendarFormData>,\n default: () => ({ startDate: undefined, endDate: undefined, startTime: undefined, endTime: undefined }),\n },\n\n /**\n * Allows you to set the first day of the week. 0 is sunday, 1 is monday, 6 is saturday\n */\n firstDayOfWeek: Calendar.props.firstDayOfWeek,\n\n /**\n * A list of available granularities.\n * If present, the date picker will display a segmented control to change granularity.\n */\n granularities: {\n type: Array as PropType<Array<BentoDateRangePickerGranularityConfig>>,\n default: null,\n },\n\n /**\n * Indicate if a date should be disabled or not\n */\n isDateDisabled: Calendar.props.isDateDisabled,\n\n /**\n * Set a maximum number of dates to be selectable by the range.\n */\n maxRange: Calendar.props.maxRange,\n\n /**\n * Sets a minimum limit for selectable dates - dates before `min` will not be selectable\n */\n min: Calendar.props.min,\n\n /**\n * Sets a maximum limit for selectable dates - dates after `max` will not be selectable\n */\n max: Calendar.props.max,\n\n /**\n * Number of months rendered on pane\n */\n numberOfMonths: Calendar.props.numberOfMonths,\n\n /**\n * Displays the end date's month when the calendar is opened. Defaults to false i.e. the start date's month is displayed.\n */\n showEndDateOnOpen: { type: Boolean, default: false },\n\n /**\n * Enables the custom range selector.\n * If provided, must be an array that sets the custom range dropdown items. Items are of the structure:\n * `label` - label of custom range item.\n * `value` - a unique key of the custom range item.\n * `data` - an object `{ startDate: Date; endDate: Date }` to set the date picker range to upon selecting.\n */\n quickSelectRanges: {\n type: Array as PropType<DateRangePickerCalendarRangeSelectorItems>,\n default: undefined,\n },\n\n /**\n * Selected date\n */\n value: { type: Object as PropType<BentoDateRangePickerValue>, default: undefined },\n },\n emits: [\n DateRangePickerCalendarEvent.CUSTOM_RANGE,\n DateRangePickerCalendarEvent.INPUT,\n DateRangePickerCalendarEvent.ERROR,\n DateRangePickerCalendarEvent.FORM_DATE,\n DateRangePickerCalendarEvent.START_DATE_SELECTED,\n ],\n setup(props, { emit, slots }) {\n const { locale, t } = useI18n<{ message: MessageSchema }>({ messages });\n const locales = getDateLocale();\n const internalRangeDate = reactive({\n startDate: (props.value as BentoDateRangePickerValue)?.startDate,\n endDate: (props.value as BentoDateRangePickerValue)?.endDate,\n ...(props.granularities\n ? {\n granularity: (props.value as BentoDateRangePickerValue)?.granularity || DEFAULT_GRANULARITY,\n }\n : {}),\n });\n const selectedRangeSelectorValue = computed(\n () =>\n props?.quickSelectRanges?.find(({ data }) => {\n if (props.allowTimeInput) {\n return (\n isSameSecond(data.startDate, internalRangeDate.startDate) &&\n isSameSecond(data.endDate, internalRangeDate.endDate)\n );\n }\n return (\n isSameDay(data.startDate, internalRangeDate.startDate) &&\n isSameDay(data.endDate, internalRangeDate.endDate)\n );\n })?.value ?? RANGE_SELECTOR_CUSTOM_RANGE_KEY\n );\n const formInputWrapperConditionalClasses = computed(() => ({\n 'b-date-range-picker-calendar__form-input-wrapper': props.allowTimeInput,\n }));\n const quickSelectRangeDefaultItems = computed(() => [\n { label: t('customRange'), value: RANGE_SELECTOR_CUSTOM_RANGE_KEY },\n ...(props.quickSelectRanges ? props.quickSelectRanges : []),\n ]);\n\n const selectedGranularity = computed(\n () => props.granularities?.find(({ type }) => type === internalRangeDate.granularity) || null\n );\n\n const granularityItems = computed<Array<BentoSegmentedControlItem>>(\n () =>\n props.granularities?.map(({ type, disabled }) => ({\n label: t(type),\n value: type,\n disabled,\n })) ?? []\n );\n\n const { getGranularCalendarLimits } = useGranularMinMaxDate(props);\n\n const computedMinMax = computed(() =>\n props.granularities\n ? getGranularCalendarLimits(selectedGranularity.value)\n : { min: startOfDay(props.min), max: endOfDay(props.max) }\n );\n\n const {\n adjustDateForMonthly,\n adjustDateForWeekly,\n adjustStartDateInputForWeekly,\n adjustEndDateInputForWeekly,\n adjustStartDateInputForMonthly,\n adjustEndDateInputForMonthly,\n } = useGranularityAdjustments(props.firstDayOfWeek);\n const { savedRanges, saveRange, resetSavedRanges } = useGranularityMemory();\n\n /**\n * Format date to a string value in format yyyy-MM-dd\n * @param {Date} dateToFormat Date to be formatted\n */\n const formatDate = (dateToFormat?: Date) => {\n if (!dateToFormat) {\n return '';\n }\n return format(dateToFormat, DateFormat.NUMERIC_DATE_YEAR_FIRST, {\n locale: locales[locale.value.substring(0, 2)] || locales.enUS,\n });\n };\n\n const formatTime = (dateToFormat?: Date) => {\n if (!dateToFormat) {\n return '';\n }\n\n return format(dateToFormat, DateFormat.HOUR_MINUTE_SECONDS, {\n locale: locales[locale.value.substring(0, 2)] || locales.enUS,\n });\n };\n\n // Form error flags\n const startDateError = ref(false);\n const endDateError = ref(false);\n const startTimeError = ref(false);\n const endTimeError = ref(false);\n\n // Form input text used in range variant\n const dateTextInput = reactive({\n startDate: props.dateFormData.startDate,\n endDate: props.dateFormData.endDate,\n startTime: props.dateFormData.startTime,\n endTime: props.dateFormData.endTime,\n });\n\n // Validate time\n const isValidTime = (timeText: string) => {\n // HH:MM:SS regex\n const timeRegex = /^(?:[01]\\d|2[01234]):(?:[012345]\\d):(?:[012345]\\d)$/;\n return timeRegex.test(timeText);\n };\n\n const setTimeInDate = (date: Date, time: string) => {\n if (!time || !isValidTime(time)) {\n return date;\n }\n\n let dateWithTime = new Date(date);\n\n const [hours, minutes, seconds] = time.split(':');\n dateWithTime = setHours(dateWithTime, parseInt(hours, 10));\n dateWithTime = setMinutes(dateWithTime, parseInt(minutes, 10));\n dateWithTime = setSeconds(dateWithTime, parseInt(seconds, 10));\n return dateWithTime;\n };\n\n const onDateInput = (selectedRange: BentoDateRangePickerValue) => {\n internalRangeDate.startDate = setTimeInDate(selectedRange.startDate, dateTextInput.startTime);\n internalRangeDate.endDate = setTimeInDate(selectedRange.endDate, dateTextInput.endTime);\n\n if (props.granularities) {\n // Reset saved ranges on input\n resetSavedRanges();\n }\n\n emit(DateRangePickerCalendarEvent.INPUT, {\n ...internalRangeDate,\n range: selectedRangeSelectorValue.value,\n });\n };\n\n const isValidDate = (dateText: string) => {\n // Is date selectable\n const isDateEnabled = (date: Date) => {\n // Check if date is between min/max bounds, if there are any\n if ((props.min && date <= props.min) || (props.max && date >= props.max)) {\n return false;\n }\n\n // Check if function is set, otherwise all dates are enabled\n if (props.isDateDisabled) {\n return !props.isDateDisabled(date);\n }\n\n return true;\n };\n\n // YYYY-MM-DD regex\n const dateRegex = /^\\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$/;\n // Date matches text regex\n return dateRegex.test(dateText) && isDateEnabled(new Date(dateText));\n };\n\n /**\n * When mounted, set the input error states to true if the values are not valid\n */\n onMounted(() => {\n if (props.dateFormData.startDate && !isValidDate(props.dateFormData.startDate)) {\n startDateError.value = true;\n } else {\n startDateError.value = false;\n startTimeError.value = false;\n }\n\n if (props.dateFormData.endDate && !isValidDate(props.dateFormData.endDate)) {\n endDateError.value = true;\n } else {\n endDateError.value = false;\n endTimeError.value = false;\n }\n });\n\n const onStartDateSelected = (newStartDate: Date) => {\n dateTextInput.startDate = formatDate(newStartDate);\n if (!dateTextInput.startTime) {\n // Set the time to the beginning of the day\n dateTextInput.startTime = formatTime(newStartDate);\n } else if (startTimeError.value) {\n // Set the form time if it was previously set\n dateTextInput.startTime = props.dateFormData?.startTime;\n }\n\n // Reset errors\n startDateError.value = false;\n startTimeError.value = false;\n\n emit(DateRangePickerCalendarEvent.START_DATE_SELECTED, newStartDate);\n };\n\n const onEndDateSelected = (newEndDate: Date) => {\n dateTextInput.endDate = formatDate(newEndDate);\n if (!dateTextInput.endTime) {\n // Set the time to the end of the day\n dateTextInput.endTime = formatTime(endOfDay(newEndDate));\n } else if (endTimeError.value) {\n // Set the form time if it was previously set\n dateTextInput.endTime = props.dateFormData?.endTime;\n }\n\n // Reset errors\n endDateError.value = false;\n endTimeError.value = false;\n };\n\n const getDate = (keyName: keyof BentoDateRangePickerValue) => {\n const dateProp = (props.value as BentoDateRangePickerValue)[keyName];\n if (dateProp) {\n return dateProp;\n }\n\n if (props.dateFormData[keyName] && isValidDate(props.dateFormData[keyName])) {\n return new Date(props.dateFormData[keyName]);\n }\n\n return undefined;\n };\n\n const validateStartDate = debounce((startDateText: string) => {\n // Checks for YYYY-MM-DD format\n if (isValidDate(startDateText)) {\n let dateText = startDateText;\n\n startDateError.value = false;\n\n switch (selectedGranularity.value?.type) {\n case 'weekly':\n dateText = adjustStartDateInputForWeekly(\n startDateText,\n formatDate,\n computedMinMax.value.min,\n computedMinMax.value.max\n );\n dateTextInput.startDate = dateText;\n break;\n case 'monthly':\n dateText = adjustStartDateInputForMonthly(\n startDateText,\n formatDate,\n computedMinMax.value.min,\n computedMinMax.value.max\n );\n dateTextInput.startDate = dateText;\n break;\n case 'daily':\n default:\n break;\n }\n\n // Format date string to Date object\n internalRangeDate.startDate = setTimeInDate(new Date(dateText), dateTextInput.startTime);\n\n const endDate = getDate('endDate');\n\n emit(DateRangePickerCalendarEvent.FORM_DATE, {\n startDate: new Date(dateText),\n endDate,\n });\n\n emit(DateRangePickerCalendarEvent.INPUT, {\n startDate: new Date(dateText),\n endDate,\n range: selectedRangeSelectorValue.value,\n });\n } else {\n // Indicate form error\n startDateError.value = true;\n // Emit Date picker calendar error\n emit(DateRangePickerCalendarEvent.ERROR, { ...dateTextInput });\n }\n }, FORM_INPUT_DEBOUNCE_TIME);\n\n const onStartDateInput = (startDateText: string) => {\n // Set the date as string when input through the form\n dateTextInput.startDate = formatDateInputValue(startDateText);\n validateStartDate(dateTextInput.startDate);\n };\n\n const validateEndDate = debounce((endDateText: string) => {\n // Checks for YYYY-MM-DD format\n if (isValidDate(endDateText)) {\n let dateText = endDateText;\n\n endDateError.value = false;\n\n switch (selectedGranularity.value?.type) {\n case 'weekly':\n dateText = adjustEndDateInputForWeekly(\n endDateText,\n formatDate,\n computedMinMax.value.min,\n computedMinMax.value.max\n );\n dateTextInput.endDate = dateText;\n break;\n case 'monthly':\n dateText = adjustEndDateInputForMonthly(\n endDateText,\n formatDate,\n computedMinMax.value.min,\n computedMinMax.value.max\n );\n dateTextInput.endDate = dateText;\n break;\n case 'daily':\n default:\n break;\n }\n\n internalRangeDate.endDate = setTimeInDate(new Date(dateText), dateTextInput.endTime);\n\n const startDate = getDate('startDate');\n\n emit(DateRangePickerCalendarEvent.FORM_DATE, {\n startDate,\n endDate: new Date(endDateText),\n });\n\n emit(DateRangePickerCalendarEvent.INPUT, {\n startDate,\n endDate: new Date(endDateText),\n range: selectedRangeSelectorValue.value,\n });\n } else {\n // Indicate form error\n endDateError.value = true;\n // Emit Date picker calendar error\n emit(DateRangePickerCalendarEvent.ERROR, { ...dateTextInput });\n }\n }, FORM_INPUT_DEBOUNCE_TIME);\n\n const onEndDateInput = (endDateText: string) => {\n // Set the date as string when input through the form\n dateTextInput.endDate = formatDateInputValue(endDateText);\n validateEndDate(dateTextInput.endDate);\n };\n\n const onDateInputKeyDown = (event: KeyboardEvent) => {\n validateDateInput(event);\n };\n\n const validateStartTime = debounce((startTimeText: string) => {\n if (isValidTime(startTimeText)) {\n startTimeError.value = false;\n internalRangeDate.startDate = setTimeInDate(internalRangeDate.startDate, startTimeText);\n\n const endDate = getDate('endDate');\n\n emit(DateRangePickerCalendarEvent.FORM_DATE, {\n startDate: new Date(internalRangeDate.startDate),\n endDate: setTimeInDate(new Date(endDate), props.dateFormData.endTime),\n startTime: startTimeText,\n endTime: props.dateFormData.endTime,\n });\n\n emit(DateRangePickerCalendarEvent.INPUT, {\n startDate: new Date(internalRangeDate.startDate),\n endDate: setTimeInDate(new Date(endDate), props.dateFormData.endTime),\n range: selectedRangeSelectorValue.value,\n });\n } else {\n // Indicate form error\n startTimeError.value = true;\n // Emit Date picker calendar error\n emit(DateRangePickerCalendarEvent.ERROR, { ...dateTextInput });\n }\n });\n\n const validateEndTime = debounce((endTimeText: string) => {\n if (isValidTime(endTimeText)) {\n endTimeError.value = false;\n internalRangeDate.endDate = setTimeInDate(internalRangeDate.endDate, endTimeText);\n\n const startDate = getDate('startDate');\n\n emit(DateRangePickerCalendarEvent.FORM_DATE, {\n startDate: setTimeInDate(new Date(startDate), props.dateFormData.startTime),\n endDate: new Date(internalRangeDate.endDate),\n startTime: props.dateFormData.startTime,\n endTime: endTimeText,\n });\n emit(DateRangePickerCalendarEvent.INPUT, {\n startDate: setTimeInDate(new Date(startDate), props.dateFormData.startTime),\n endDate: new Date(internalRangeDate.endDate),\n range: selectedRangeSelectorValue.value,\n });\n } else {\n // Indicate form error\n endTimeError.value = true;\n // Emit Date picker calendar error\n emit(DateRangePickerCalendarEvent.ERROR, { ...dateTextInput });\n }\n });\n\n const onStartTimeInput = (startTimeText: string) => {\n dateTextInput.startTime = formatTimeInputValue(startTimeText);\n validateStartTime(dateTextInput.startTime);\n };\n\n const onEndTimeInput = (endDateText: string) => {\n dateTextInput.endTime = formatTimeInputValue(endDateText);\n validateEndTime(dateTextInput.endTime);\n };\n\n const onTimeInputKeyDown = (event: KeyboardEvent) => {\n validateTimeInput(event);\n };\n\n const setInternalRange = (startDate: Date, endDate: Date, granularity?: CalendarGranularityType) => {\n internalRangeDate.startDate = startDate;\n internalRangeDate.endDate = endDate;\n\n if (granularity) {\n internalRangeDate.granularity = granularity;\n }\n };\n\n const onRangeSelectorInput = (newCustomRangeValue: string) => {\n const foundResult = props.quickSelectRanges?.find(({ value }) => value === newCustomRangeValue);\n if (foundResult) {\n resetSavedRanges();\n const date = foundResult.data;\n\n dateTextInput.startDate = formatDate(date.startDate);\n dateTextInput.endDate = formatDate(date.endDate);\n\n setInternalRange(date.startDate, date.endDate);\n\n if (props.granularities) {\n internalRangeDate.granularity = date.granularity || DEFAULT_GRANULARITY;\n }\n if (!dateTextInput.startTime) {\n dateTextInput.startTime = formatTime(endOfDay(date.startDate));\n }\n if (!dateTextInput.endTime) {\n dateTextInput.endTime = formatTime(endOfDay(date.endDate));\n }\n emit(DateRangePickerCalendarEvent.CUSTOM_RANGE, { ...foundResult.data, range: foundResult.value });\n }\n };\n\n const onGranularityInput = (value: CalendarGranularityType) => {\n const previousValue = internalRangeDate.granularity;\n\n internalRangeDate.granularity = value;\n\n // Save previously selected range\n if (previousValue) {\n saveRange(previousValue, structuredClone(toRaw(internalRangeDate)));\n }\n\n if (internalRangeDate.startDate && internalRangeDate.endDate) {\n // Adjust date range based on new granularity\n switch (value) {\n case 'monthly': {\n if (savedRanges.monthly) {\n setInternalRange(savedRanges.monthly.startDate, savedRanges.monthly.endDate, value);\n break;\n }\n\n const { startDate, endDate } = adjustDateForMonthly(\n internalRangeDate.startDate,\n internalRangeDate.endDate,\n computedMinMax.value.min,\n computedMinMax.value.max\n );\n setInternalRange(startDate, endDate, value);\n break;\n }\n case 'weekly': {\n if (savedRanges.weekly) {\n setInternalRange(savedRanges.weekly.startDate, savedRanges.weekly.endDate, value);\n break;\n }\n\n const { startDate, endDate } = adjustDateForWeekly(\n internalRangeDate.startDate,\n internalRangeDate.endDate,\n computedMinMax.value.min,\n computedMinMax.value.max\n );\n setInternalRange(startDate, endDate, value);\n break;\n }\n case 'daily':\n if (savedRanges.daily) {\n setInternalRange(savedRanges.daily.startDate, savedRanges.daily.endDate, value);\n }\n break;\n default:\n break;\n }\n\n dateTextInput.startDate = formatDate(internalRangeDate.startDate);\n dateTextInput.endDate = formatDate(internalRangeDate.endDate);\n\n emit(DateRangePickerCalendarEvent.INPUT, {\n ...internalRangeDate,\n range: selectedRangeSelectorValue.value,\n });\n }\n };\n\n return {\n // Values\n internalRangeDate,\n dateTextInput,\n endDateError,\n endTimeError,\n granularityItems,\n selectedGranularity,\n computedMinMax,\n selectedRangeSelectorValue,\n startDateError,\n startTimeError,\n quickSelectRangeDefaultItems,\n formInputWrapperConditionalClasses,\n\n // Methods\n hasSlot: useHasSlot(slots),\n t,\n\n // Events\n onDateInput,\n onDateInputKeyDown,\n onEndDateInput,\n onEndDateSelected,\n onEndTimeInput,\n onGranularityInput,\n onRangeSelectorInput,\n onStartDateInput,\n onStartDateSelected,\n onStartTimeInput,\n onTimeInputKeyDown,\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./date-range-picker-calendar.scss\" />\n","import { computed, reactive } from 'vue';\nimport { getDateLocale } from '@/utils/ts/get-date-locale/get-date-locale';\nimport { useI18n } from '@/utils/ts/i18n';\nimport { UseDateDisplayText } from './use-date-range-picker-calendar-text.types';\nimport { DateFormat } from '@/types';\nimport { CalendarRangeDateValue } from '@/internal';\nimport { DateRangePickerCalendarFormData } from '../components/date-range-picker-calendar/date-range-picker-calendar.types';\nimport format from 'date-fns/format';\nimport isEqual from 'date-fns/isEqual';\n\nexport const useDateRangePickerCalendarText: UseDateDisplayText<CalendarRangeDateValue> = ({\n datePickerValue,\n isDateIncorrect,\n quickSelectRanges,\n}) => {\n const { locale, t } = useI18n();\n const locales = getDateLocale();\n\n const isValidDate = date => !!date && !isNaN(date.getTime());\n\n const formatDate = (date: Date, dateFormat: DateFormat) =>\n isValidDate(date)\n ? format(date, dateFormat, {\n locale: locales[locale.value.substring(0, 2)] || locales.enUS,\n })\n : undefined;\n\n // Handle the form input text\n const textInputDisplayValue = reactive<DateRangePickerCalendarFormData>({\n startDate: formatDate(datePickerValue.value?.startDate, DateFormat.NUMERIC_DATE_YEAR_FIRST),\n endDate: formatDate(datePickerValue.value?.endDate, DateFormat.NUMERIC_DATE_YEAR_FIRST),\n startTime: formatDate(datePickerValue.value?.startDate, DateFormat.HOUR_MINUTE_SECONDS),\n endTime: formatDate(datePickerValue.value?.endDate, DateFormat.HOUR_MINUTE_SECONDS),\n });\n\n const dateDisplayValue = computed(() => {\n // Display incorrect date when there's an error with the input\n if (isDateIncorrect.value) {\n return `${textInputDisplayValue.startDate || ''} - ${textInputDisplayValue.endDate || ''}`;\n }\n\n // Display \"Select a date\" when there's no date selected or input\n if (!datePickerValue.value || (!datePickerValue.value.startDate && !datePickerValue.value.endDate)) {\n return t('selectDateRange') as string;\n }\n\n if (quickSelectRanges.value?.length) {\n const customRangeSelected = quickSelectRanges.value.find(\n ({ data }) =>\n isEqual(data?.startDate, datePickerValue.value?.startDate) &&\n isEqual(data?.endDate, datePickerValue.value?.endDate)\n );\n if (customRangeSelected) {\n return customRangeSelected.label;\n }\n }\n\n const { startDate, endDate } = textInputDisplayValue;\n return `${formatDate(new Date(startDate), DateFormat.FULL_DATE_MONTH_FIRST)} - ${formatDate(\n new Date(endDate),\n DateFormat.FULL_DATE_MONTH_FIRST\n )}`;\n });\n\n const formatTextInputDisplayValue = () => '';\n\n return {\n // Values\n dateDisplayValue,\n textInputDisplayValue,\n\n // Methods\n formatTextInputDisplayValue,\n };\n};\n","export { CalendarFirstDayOfWeek as BentoDateRangePickerFirstDayOfWeek } from '@/internal';\nexport type {\n CalendarIsDateDisabled as BentoDateRangePickerIsDateDisabled,\n CalendarRangeDateValue as BentoDateRangePickerValue,\n CalendarGranularityConfig as BentoDateRangePickerGranularityConfig,\n} from '@/internal';\n\nexport enum BentoDateRangePickerEvent {\n INPUT = 'input',\n}\n","<!-- TODO: Remove aria props as these are part of JSX elements /vue/types/jsx.d.ts -->\n<!-- eslint-disable vue/attribute-hyphenation -->\n<template>\n <div v-bento-click-outside-directive=\"closeDateRangePicker\" class=\"b-date-range-picker\">\n <!-- Label -->\n <field-label\n v-if=\"label\"\n :id=\"labelId\"\n :label=\"label\"\n :tooltip-text=\"tooltipText\"\n :optional=\"optional\"\n :required=\"required\"\n />\n\n <!-- Input -->\n <div @keydown.enter=\"onEnterPressedOverInput\">\n <dropdown-input-default\n ref=\"inputContainerRef\"\n always-combobox-is-input\n :ariaControls=\"datePickerContainerId\"\n :ariaExpanded=\"isDateRangePickerOpen\"\n :aria-labelledby=\"label ? labelId : null\"\n :aria-describedby=\"ariaDescribedBy\"\n :disabled=\"disabled\"\n :is-invalid=\"!!errorMessage || shouldDisplayError\"\n :open=\"isDateRangePickerOpen\"\n :display-value=\"displayedDateValue\"\n :readonly=\"isReadOnly\"\n @open=\"openDateRangePicker\"\n @clear=\"clearDateRangePickerValue\"\n @close=\"closeDateRangePicker\"\n />\n </div>\n\n <!-- Error Messages -->\n <error-message\n v-if=\"shouldDisplayError\"\n :id=\"dateErrorId\"\n :error-message=\"t('provideDateInAFormat')\"\n class=\"b-date-range-picker__error-message\"\n />\n <error-message\n v-if=\"!!errorMessage\"\n :id=\"errorId\"\n :error-message=\"errorMessage\"\n class=\"b-date-range-picker__error-message\"\n />\n\n <!-- Description -->\n <bento-typography\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"b-date-range-picker__description\"\n :class=\"descriptionConditionalClasses\"\n el=\"span\"\n >\n {{ description }}\n </bento-typography>\n\n <!-- Calendar container -->\n <bento-popover\n v-if=\"inputContainerRef\"\n :id=\"datePickerContainerId\"\n class=\"b-date-range-picker__container\"\n :open=\"isDateRangePickerOpen\"\n :target-element=\"inputContainerRef\"\n :disable-focus-trap=\"true\"\n :aria-label=\"popoverAriaLabel\"\n position=\"bottom-start\"\n without-space\n fit-content\n >\n <date-range-picker-calendar\n :allow-time-input=\"allowTimeInput\"\n :quick-select-ranges=\"quickSelectRanges\"\n :value=\"value\"\n :first-day-of-week=\"firstDayOfWeek\"\n :granularities=\"granularities\"\n :is-date-disabled=\"isDateDisabled\"\n :max-range=\"maxRange\"\n :min=\"min\"\n :max=\"max\"\n :number-of-months=\"numberOfMonths\"\n :show-end-date-on-open=\"showEndDateOnOpen\"\n :date-form-data=\"displayedTextInputValue\"\n @custom-range=\"onRangeSelectorInput\"\n @input=\"onDateRangePickerInput\"\n @error=\"onDateRangePickerError\"\n @form-date=\"onDateRangePickerFormDateInputUpdate\"\n >\n <template v-if=\"hasActions\" #actions>\n <bento-divider />\n\n <div class=\"b-date-range-picker__footer\">\n <bento-button-actions\n :actions=\"rangePickerButtonActions\"\n :layout=\"BentoButtonActionsLayout.SPACE_BETWEEN\"\n />\n </div>\n </template>\n </date-range-picker-calendar>\n </bento-popover>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { computed, defineComponent, onMounted, PropType, ref, toRaw, toRef, watch } from 'vue';\n\n // Components\n import { BentoButtonActions, BentoButtonActionsLayout } from '@/components/button';\n import { BentoDivider } from '@/components/divider';\n import { BentoPopover } from '@/components/popover';\n import { BentoTypography } from '../typography';\n import { DateRangePickerCalendar } from './components/date-range-picker-calendar';\n import { DropdownInputDefault } from '@/components/dropdown/components';\n import { ErrorMessage, FieldLabel } from '@/internal';\n\n // Utils\n import { getDateLocale } from '@/utils/ts/get-date-locale/get-date-locale';\n import { generateUid } from '@/core/utils/ts';\n import { useI18n } from '@/utils/ts/i18n';\n import format from 'date-fns/format';\n\n // Composables\n import { useDateRangePickerCalendarText } from './composables/use-date-range-picker-calendar-text';\n import { useFormLayoutFieldLoading } from '@/composables';\n\n // Directives\n import { BentoClickOutsideDirective } from '@/directives';\n\n // Types\n import { BentoDateRangePickerEvent, BentoDateRangePickerValue } from './date-range-picker.types';\n import { DateFormat } from '@/types';\n import {\n DateRangePickerCalendarFormData,\n DateRangePickerCalendarRangeSelectorItems,\n } from './components/date-range-picker-calendar/date-range-picker-calendar.types';\n\n import { deprecate } from '@/utils/ts/deprecate';\n import messages from './messages.json';\n\n type MessageSchema = (typeof messages)['en-US'];\n\n /**\n * Date range picker selector.\n *\n * @example\n * import { BentoDateRangePicker } from '@adyen/bento-vue2';\n *\n * export default {\n * components: { BentoDateRangePicker },\n * template: `\n * <bento-date-range-picker\n * label=\"Label\"\n * description=\"Supporting text\"\n * required\n * optional\n * disabled\n * @input=\"onDateChanged\"\n * v-model=\"selectedDate\"\n * />\n * `,\n * setup() {\n * const selectedDate = ref(new Date()); // reactive({ startDate: new Date(), endDate: new Date() })\n * return {\n * selectedDate,\n * }\n * }\n * }\n */\n export default defineComponent({\n i18n: { messages },\n name: 'bento-date-range-picker',\n components: {\n BentoButtonActions,\n BentoDivider,\n BentoTypography,\n BentoPopover,\n DateRangePickerCalendar,\n DropdownInputDefault,\n ErrorMessage,\n FieldLabel,\n },\n directives: { BentoClickOutsideDirective },\n props: {\n /**\n * Allows user to enter time values in the form\n */\n allowTimeInput: { type: Boolean, default: false },\n\n /**\n * Descriptive supporting text visbile underneath the dropdown.\n */\n description: { type: String, default: undefined },\n\n /**\n * Disables dropdown functionality.\n */\n disabled: { type: Boolean, default: false },\n\n /**\n * Displays component in an error state with an error message\n */\n errorMessage: { type: String, default: null },\n\n /**\n * Allows user to set the first day of the week. 0 is sunday, 1 is monday, 6 is saturday\n */\n firstDayOfWeek: DateRangePickerCalendar.props.firstDayOfWeek,\n\n /**\n * A list of available granularities.\n * If present, the date picker will display a segmented control to change granularity.\n */\n granularities: DateRangePickerCalendar.props.granularities,\n\n /**\n * Indicate if a date should be disabled or not\n */\n isDateDisabled: DateRangePickerCalendar.props.isDateDisabled,\n\n /**\n * Text that is displayed as a label above the element.\n */\n label: { type: String, default: undefined },\n\n /**\n * Upon opening date range picker, end date's month will be pre-selected.\n */\n showEndDateOnOpen: { type: Boolean, default: false },\n\n /**\n * Highlights the dropdown is optional.\n */\n optional: { type: Boolean, default: false },\n\n /**\n * The Boolean readonly property, when present, makes the element not mutable, meaning the user can not edit the date range picker.\n */\n readonly: { type: Boolean, default: false },\n\n /**\n * Highlights the dropdown is required.\n */\n required: { type: Boolean, default: false },\n\n /**\n * Adds a info icon next to the label to display the passed tooltip message.\n */\n tooltipText: { type: String, default: null },\n\n /**\n * Enables the range selector.\n * If provided, must be an array that sets the custom range dropdown items. Items are of the structure:\n * `label` - label of custom range item.\n * `value` - a unique key of the custom range item.\n * `data` - an object `{ startDate: Date; endDate: Date }` to set the date picker range to upon selecting.\n */\n quickSelectRanges: {\n type: Array as PropType<DateRangePickerCalendarRangeSelectorItems>,\n default: undefined,\n },\n\n /**\n * Set a maximum number of dates to be selectable by the range.\n */\n maxRange: DateRangePickerCalendar.props.maxRange,\n\n /**\n * Sets a minimum limit for selectable dates - dates before `min` will not be selectable\n */\n min: DateRangePickerCalendar.props.min,\n\n /**\n * Sets a maximum limit for selectable dates - dates after `max` will not be selectable\n */\n max: DateRangePickerCalendar.props.max,\n\n /**\n * Number of months rendered on pane\n */\n numberOfMonths: DateRangePickerCalendar.props.numberOfMonths,\n\n /**\n * Selected date\n */\n value: DateRangePickerCalendar.props.value,\n\n /**\n * Enables the date picker selection to persist until it is explicitly applied.\n * Displays a set of buttons: Apply and Cancel.\n *\n * @deprecated This will be the default behaviour in v2.0.0.\n */\n hasActions: { type: Boolean, default: false },\n },\n emits: [BentoDateRangePickerEvent.INPUT],\n setup(props, { emit }) {\n const { locale, t } = useI18n<{ message: MessageSchema }>({ messages });\n const locales = getDateLocale();\n const datePickerContainerId = generateUid('bento-date-range-picker-container');\n const labelId = generateUid('bento-date-range-picker-label');\n const descriptionId = generateUid('bento-date-range-picker-description');\n const errorId = generateUid('bento-date-range-picker-error');\n const dateErrorId = generateUid('bento-date-range-picker-date-error');\n const popoverAriaLabel = computed(\n () => props.label || t('dateRangePicker', { name: datePickerContainerId })\n );\n\n const isDateIncorrect = ref(false);\n const inputContainerRef = ref(null);\n const isDateRangePickerOpen = ref(false);\n const { isReadOnly } = useFormLayoutFieldLoading(toRef(props, 'readonly'));\n\n watch(\n () => props.disabled,\n () => {\n // Close date picker popover if it's opened when it's disabled\n if (props.disabled && isDateRangePickerOpen.value) {\n isDateRangePickerOpen.value = false;\n }\n }\n );\n\n const shouldDisplayError = computed(() => {\n if (props.hasActions) {\n return !isApplyDisabled.value && isDateIncorrect.value;\n }\n\n return isDateIncorrect.value;\n });\n\n const descriptionConditionalClasses = computed(() => ({\n 'b-date-range-picker__description--error': !!props.errorMessage || shouldDisplayError.value,\n }));\n\n const { dateDisplayValue, textInputDisplayValue, formatTextInputDisplayValue } =\n useDateRangePickerCalendarText({\n datePickerValue: toRef(props, 'value'),\n isDateIncorrect,\n quickSelectRanges: toRef(props, 'quickSelectRanges'),\n });\n\n const ariaDescribedBy = computed(\n () =>\n `${props.description ? descriptionId : ''} ${props.errorMessage ? errorId : ''} ${\n isDateIncorrect.value ? dateErrorId : ''\n }`.trim() || null\n );\n\n const closeDateRangePicker = () => {\n isDateRangePickerOpen.value = false;\n };\n\n const openDateRangePicker = () => {\n isDateRangePickerOpen.value = true;\n formatTextInputDisplayValue();\n };\n\n /*\n * Used when `hasActions` is set to true\n */\n const localDateDisplayValue = ref(dateDisplayValue.value);\n const localTextInputDisplayValue = ref<DateRangePickerCalendarFormData>(\n // textInputDisplayValue is a reactive object\n structuredClone(toRaw(textInputDisplayValue))\n );\n const selectedDate = ref<BentoDateRangePickerValue>(props.value);\n const isApplyDisabled = ref(true);\n\n const displayedTextInputValue = computed(() =>\n props.hasActions ? localTextInputDisplayValue.value : textInputDisplayValue\n );\n\n const displayedDateValue = computed(() =>\n props.hasActions ? localDateDisplayValue.value : dateDisplayValue.value\n );\n\n onMounted(() => {\n if (!props.hasActions) {\n deprecate(\n 'BentoDateRangePicker \"hasActions\" property',\n `Set the BentoDateRangePicker \"hasActions\" property true which will display the \"Apply\" and \"Cancel\" buttons.\n This will be the default behavior in the v2 and \"hasActions\" will be removed.`,\n '2.0.0'\n );\n }\n });\n\n const rangePickerButtonActions = computed(() => [\n {\n title: t('apply'),\n event: () => {\n localDateDisplayValue.value = dateDisplayValue.value;\n localTextInputDisplayValue.value = structuredClone(toRaw(textInputDisplayValue));\n\n emit(BentoDateRangePickerEvent.INPUT, selectedDate.value);\n closeDateRangePicker();\n\n isApplyDisabled.value = true;\n },\n disabled: isApplyDisabled.value,\n },\n {\n title: t('cancel'),\n event: closeDateRangePicker,\n },\n ]);\n\n watch(selectedDate, date => {\n // skip emit until Apply button is clicked\n if (props.hasActions) {\n isApplyDisabled.value = isDateIncorrect.value;\n\n return;\n }\n\n emit(BentoDateRangePickerEvent.INPUT, date);\n });\n\n const onDateRangePickerInput = (selectedRange: BentoDateRangePickerValue) => {\n // Reset the errors when the date is correct\n isDateIncorrect.value = false;\n\n const formatDate = (date: Date, dateFormat: DateFormat) =>\n date\n ? format(date, dateFormat, {\n locale: locales[locale.value.substring(0, 2)] || locales.enUS,\n })\n : undefined;\n\n textInputDisplayValue.startDate = formatDate(\n selectedRange.startDate,\n DateFormat.NUMERIC_DATE_YEAR_FIRST\n );\n textInputDisplayValue.endDate = formatDate(selectedRange.endDate, DateFormat.NUMERIC_DATE_YEAR_FIRST);\n textInputDisplayValue.startTime = formatDate(selectedRange.startDate, DateFormat.HOUR_MINUTE_SECONDS);\n textInputDisplayValue.endTime = formatDate(selectedRange.endDate, DateFormat.HOUR_MINUTE_SECONDS);\n\n selectedDate.value = selectedRange;\n };\n\n const clearDateRangePickerValue = async () => {\n if (isDateIncorrect.value) {\n isDateIncorrect.value = false;\n }\n\n selectedDate.value = null;\n };\n\n const onEnterPressedOverInput = () => {\n // Close the date picker if the date is correct\n if (!isDateIncorrect.value) {\n isDateRangePickerOpen.value = false;\n }\n };\n\n const onDateRangePickerFormDateInputUpdate = (dateFormDate: DateRangePickerCalendarFormData) => {\n isDateIncorrect.value = false;\n\n if (dateFormDate.startTime) {\n textInputDisplayValue.startTime = dateFormDate.startTime;\n }\n\n if (dateFormDate.endTime) {\n textInputDisplayValue.endTime = dateFormDate.endTime;\n }\n };\n\n const onDateRangePickerError = dateTextInput => {\n isDateIncorrect.value = true;\n textInputDisplayValue.startDate = dateTextInput.startDate;\n textInputDisplayValue.endDate = dateTextInput.endDate;\n\n // Remove current date range selection\n selectedDate.value = { startDate: null, endDate: null };\n };\n\n const onRangeSelectorInput = (quickSelectRanges?: BentoDateRangePickerValue) => {\n if (quickSelectRanges) {\n const formatDate = (date: Date) =>\n format(date, DateFormat.NUMERIC_DATE_YEAR_FIRST, {\n locale: locales[locale.value.substring(0, 2)] || locales.enUS,\n });\n textInputDisplayValue.startDate = formatDate(quickSelectRanges.startDate);\n textInputDisplayValue.endDate = formatDate(quickSelectRanges.endDate);\n\n selectedDate.value = quickSelectRanges;\n }\n };\n\n return {\n // Refs\n inputContainerRef,\n\n // Values,\n dateDisplayValue,\n datePickerContainerId,\n descriptionConditionalClasses,\n displayedTextInputValue,\n displayedDateValue,\n isDateIncorrect,\n isDateRangePickerOpen,\n isReadOnly,\n labelId,\n descriptionId,\n dateErrorId,\n errorId,\n popoverAriaLabel,\n shouldDisplayError,\n ariaDescribedBy,\n textInputDisplayValue,\n rangePickerButtonActions,\n BentoButtonActionsLayout,\n\n // Events\n closeDateRangePicker,\n clearDateRangePickerValue,\n openDateRangePicker,\n onRangeSelectorInput,\n onEnterPressedOverInput,\n onDateRangePickerInput,\n onDateRangePickerError,\n onDateRangePickerFormDateInputUpdate,\n\n // Translations\n t,\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./date-range-picker.scss\" />\n"],"names":["isEqual","dirtyLeftDate","dirtyRightDate","requiredArgs","dateLeft","toDate","dateRight","startOfSecond","dirtyDate","date","isSameSecond","dirtyDateLeft","dirtyDateRight","dateLeftStartOfSecond","dateRightStartOfSecond","setHours","dirtyHours","hours","toInteger","setMinutes","dirtyMinutes","minutes","setSeconds","dirtySeconds","seconds","useGranularMinMaxDate","firstDayOfWeek","minimumDate","maximumDate","granularity","min","startOfDay","max","endOfDay","startOfMin","startOfWeek","isSameDay","addDays","endOfWeek","endOfMax","subDays","startOfMonth","addMonths","endOfMonth","subMonths","useGranularityMemory","savedRanges","reactive","type","range","DateRangePickerCalendarEvent","DateRangePickerCalendarEvent2","validDigitRegex","hourRegex","minuteRegex","validateTimeInput","event","selectionStart","isValidKey","isValidColon","formatTimeInputValue","value","formattedValue","secondToLastDigit","lastDigit","FORM_INPUT_DEBOUNCE_TIME","RANGE_SELECTOR_CUSTOM_RANGE_KEY","DEFAULT_GRANULARITY","_sfc_main$1","defineComponent","messages$1","BentoDropdown","BentoInputField","BentoSegmentedControl","BentoTypography","Calendar","props","emit","slots","locale","t","useI18n","locales","getDateLocale","internalRangeDate","_a","_b","_c","selectedRangeSelectorValue","computed","data","formInputWrapperConditionalClasses","quickSelectRangeDefaultItems","selectedGranularity","granularityItems","disabled","getGranularCalendarLimits","computedMinMax","adjustDateForMonthly","adjustDateForWeekly","adjustStartDateInputForWeekly","adjustEndDateInputForWeekly","adjustStartDateInputForMonthly","adjustEndDateInputForMonthly","useGranularityAdjustments","saveRange","resetSavedRanges","formatDate","dateToFormat","format","DateFormat","formatTime","startDateError","ref","endDateError","startTimeError","endTimeError","dateTextInput","isValidTime","timeText","setTimeInDate","time","dateWithTime","onDateInput","selectedRange","isValidDate","dateText","isDateEnabled","onMounted","onStartDateSelected","newStartDate","onEndDateSelected","newEndDate","getDate","keyName","dateProp","validateStartDate","debounce","startDateText","endDate","onStartDateInput","formatDateInputValue","validateEndDate","endDateText","startDate","onEndDateInput","onDateInputKeyDown","validateDateInput","validateStartTime","startTimeText","validateEndTime","endTimeText","onStartTimeInput","onEndTimeInput","onTimeInputKeyDown","setInternalRange","onRangeSelectorInput","newCustomRangeValue","foundResult","onGranularityInput","previousValue","toRaw","useHasSlot","useDateRangePickerCalendarText","datePickerValue","isDateIncorrect","quickSelectRanges","dateFormat","textInputDisplayValue","_d","customRangeSelected","BentoDateRangePickerEvent","BentoDateRangePickerEvent2","_sfc_main","messages","BentoButtonActions","BentoDivider","BentoPopover","DateRangePickerCalendar","DropdownInputDefault","ErrorMessage","FieldLabel","BentoClickOutsideDirective","datePickerContainerId","generateUid","labelId","descriptionId","errorId","dateErrorId","popoverAriaLabel","inputContainerRef","isDateRangePickerOpen","isReadOnly","useFormLayoutFieldLoading","toRef","watch","shouldDisplayError","isApplyDisabled","descriptionConditionalClasses","dateDisplayValue","ariaDescribedBy","closeDateRangePicker","openDateRangePicker","localDateDisplayValue","localTextInputDisplayValue","selectedDate","displayedTextInputValue","displayedDateValue","deprecate","rangePickerButtonActions","BentoButtonActionsLayout","dateFormDate"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
@@ -1,30 +0,0 @@
1
- import { defineComponent as t, inject as i, ref as o, computed as _ } from "vue";
2
- import { n as a } from "./_plugin-vue2_normalizer.CeySl7Fu.js";
3
- import "../assets/divider.css";
4
- const c = Symbol("divider inverse style injection key"), d = {}, l = /* @__PURE__ */ t({
5
- ...d,
6
- __name: "divider",
7
- setup(n) {
8
- const e = i(c, o(!1)), s = _(() => ({
9
- "b-divider--inverse": e.value
10
- }));
11
- return { __sfc: !0, isInverseColorSet: e, conditionalClasses: s };
12
- }
13
- });
14
- var v = function() {
15
- var e = this, s = e._self._c, r = e._self._setupProxy;
16
- return s("div", { staticClass: "b-divider" }, [s("hr", { staticClass: "b-divider__horizontal-rule", class: r.conditionalClasses })]);
17
- }, f = [], m = /* @__PURE__ */ a(
18
- l,
19
- v,
20
- f,
21
- !1,
22
- null,
23
- "5aad370f"
24
- );
25
- const C = m.exports;
26
- export {
27
- C as B,
28
- c as D
29
- };
30
- //# sourceMappingURL=divider.BZfeYmB9.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"divider.BZfeYmB9.js","sources":["../../src/components/divider/divider.keys.ts","../../src/components/divider/divider.vue"],"sourcesContent":["export const DIVIDER_INVERSE_INJECTION_KEY = Symbol('divider inverse style injection key');\n","<template>\n <div class=\"b-divider\">\n <hr class=\"b-divider__horizontal-rule\" :class=\"conditionalClasses\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, inject, ref } from 'vue';\n import { DIVIDER_INVERSE_INJECTION_KEY } from './divider.keys';\n\n const isInverseColorSet = inject(DIVIDER_INVERSE_INJECTION_KEY, ref(false));\n\n const conditionalClasses = computed(() => ({\n 'b-divider--inverse': isInverseColorSet.value,\n }));\n</script>\n\n<script lang=\"ts\">\n /**\n * Divider component is a thin line that helps separate content and group them visually into sections.\n *\n * @example\n * import { BentoDivider } from '@adyen/bento-vue2';\n *\n * export default {\n * components: { BentoDivider },\n * template: `<bento-divider />`\n * }\n */\n\n export default {};\n</script>\n\n<style lang=\"scss\" scoped src=\"./divider.scss\" />\n"],"names":["DIVIDER_INVERSE_INJECTION_KEY","__default__","isInverseColorSet","inject","ref","conditionalClasses","computed"],"mappings":";;;AAAa,MAAAA,IAAA,OAAA,qCAAA,GC8BTC,IAAA,CAAA;;;;AApBA,UAAAC,IAAAC,EAAAH,GAAAI,EAAA,EAAA,CAAA,GAEAC,IAAAC,EAAA,OAAA;AAAA,MAA2C,sBAAAJ,EAAA;AAAA,IACC,EAAA;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown.BqsoncJr.js","sources":["../../src/components/dropdown/components/dropdown-options-container/composables/use-dropdown-options-listbox.ts","../../src/components/dropdown/components/dropdown-options-container/dropdown-options-container.vue","../../../../node_modules/.pnpm/@adyen+ui-assets-icons-16@4.1.0_vue@2.7.16/node_modules/@adyen/ui-assets-icons-16/dist/vue/chevron-down-small.vue","../../../../node_modules/.pnpm/@adyen+ui-assets-icons-16@4.1.0_vue@2.7.16/node_modules/@adyen/ui-assets-icons-16/dist/vue/chevron-up-small.vue","../../src/components/dropdown/components/dropdown-small-textbox/dropdown-small-textbox.vue","../../src/components/dropdown/composables/use-display-value.ts","../../src/components/dropdown/composables/use-keyboard-navigation.ts","../../src/components/search-bar/useSearchBarDataFilter.ts","../../src/components/input-field/input-field.keys.ts","../../src/components/dropdown/dropdown.vue"],"sourcesContent":["import { computed, ref, Ref, watch } from 'vue';\nimport { BentoListboxEvent, BentoListboxOptions } from '@/types';\nimport { BentoDropdownEvent } from '../../../dropdown.types';\nimport { useI18n } from '@/utils/ts/i18n';\nimport messages from '../messages.json';\n\ntype MessageSchema = (typeof messages)['en-US'];\n\n/**\n * A composable that handles all dropdown options option selecting logic & listeners.\n * If single select dropdown then emits straight up to dropdown.\n * If multi select dropdown then stores selections in internal state and only emits when Apply button is pressed.\n *\n * @param selectedValue The selectedValue property passed into the dropdown options container component.\n * @param multiple The multiple property passed into the dropdown options container component.\n * @param isOpen The isOpen property passed into the dropdown options container component.\n * @param emit The emit function for the dropdown options container component.\n */\nexport const useDropdownOptionsListbox = (\n selectedValue: Ref<BentoListboxOptions>,\n multiple: Ref<boolean>,\n isOpen: Ref<boolean>,\n emit: (event: BentoListboxEvent | BentoDropdownEvent, selectedValue?: BentoListboxOptions) => void\n) => {\n const internalSelectedValue = ref(selectedValue.value);\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n\n watch(selectedValue, () => {\n internalSelectedValue.value = selectedValue.value;\n });\n\n // Multi-select dropdown cancel and apply button logic\n const isApplyButtonDisabled = computed(\n () => JSON.stringify(internalSelectedValue.value) === JSON.stringify(selectedValue.value)\n );\n\n const onApplyClick = () => {\n emit(BentoListboxEvent.SELECT, internalSelectedValue.value);\n emit(BentoDropdownEvent.CLOSE_DROPDOWN);\n };\n\n const onCancelClick = () => {\n internalSelectedValue.value = selectedValue.value;\n emit(BentoDropdownEvent.CLOSE_DROPDOWN);\n };\n\n const onOutsideDropdownClick = () => {\n if (isOpen.value && multiple.value) {\n internalSelectedValue.value = selectedValue.value;\n }\n };\n\n const actions = computed(() => [\n {\n title: t('apply') as string,\n event: onApplyClick,\n disabled: isApplyButtonDisabled.value,\n },\n {\n title: t('cancel') as string,\n event: onCancelClick,\n },\n ]);\n\n // Click and keyboard navigation event listners\n const onOptionSelected = (newSelectedValue: BentoListboxOptions) => {\n internalSelectedValue.value = newSelectedValue;\n if (!multiple.value) {\n emit(BentoDropdownEvent.SELECT, newSelectedValue);\n }\n };\n\n const onTabKey = (newSelectedValue: BentoListboxOptions) => {\n onOptionSelected(newSelectedValue);\n emit(BentoDropdownEvent.TAB);\n };\n\n const onEnterKey = (newSelectedValue: BentoListboxOptions) => {\n onOptionSelected(newSelectedValue);\n emit(BentoDropdownEvent.ENTER);\n };\n\n const onSpaceKey = (newSelectedValue: BentoListboxOptions) => {\n onOptionSelected(newSelectedValue);\n emit(BentoDropdownEvent.SPACE);\n };\n\n const onEscapeKey = () => {\n onCancelClick();\n emit(BentoListboxEvent.ESCAPE);\n };\n\n const emitShowMoreEvent = () => {\n emit(BentoDropdownEvent.SHOW_MORE);\n };\n\n const listeners = {\n [BentoListboxEvent.SELECT]: onOptionSelected,\n [BentoListboxEvent.SHOW_MORE]: emitShowMoreEvent,\n [BentoListboxEvent.TAB]: onTabKey,\n [BentoListboxEvent.SPACE]: onSpaceKey,\n [BentoListboxEvent.ENTER]: onEnterKey,\n };\n\n return {\n // Values\n actions,\n internalSelectedValue,\n\n // Methods\n listeners,\n onEscapeKey,\n onOutsideDropdownClick,\n };\n};\n","<template>\n <component\n :is=\"popperContainerOrPopoverComponent\"\n class=\"b-dropdown-options-container\"\n :aria-label=\"ariaLabel\"\n :class=\"conditionalClasses\"\n v-bind=\"popperContainerOrPopoverProps\"\n >\n <div @keydown.esc=\"onEscapeKey\">\n <bento-listbox\n :id=\"id\"\n ref=\"dropdownOptionsListboxRef\"\n :aria-label=\"ariaLabel\"\n class=\"b-dropdown-options-container__listbox\"\n :class=\"conditionalListboxClasses\"\n :empty-state=\"emptyState\"\n :is-option-disabled=\"isOptionDisabled\"\n :items=\"items\"\n :selected-value=\"internalSelectedValue\"\n :multiple=\"multiple\"\n :static-categories=\"staticCategories\"\n :no-results-message=\"noResultsMessage\"\n :searching=\"searching\"\n :loading=\"loading\"\n :lazy-load-type=\"lazyLoadType\"\n :has-more-items=\"hasMoreItems\"\n :virtual-scroll=\"virtualScroll\"\n v-on=\"listeners\"\n >\n <template v-for=\"(_, innerSlot) of slots\" #[innerSlot]=\"scope\">\n <slot :name=\"innerSlot\" v-bind=\"scope\" />\n </template>\n </bento-listbox>\n </div>\n </component>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, defineComponent, PropType, ref, toRefs, useSlots } from 'vue';\n import { BentoListbox } from '@/internal';\n import { BentoListboxEvent, BentoListboxIsOptionDisabled, BentoListboxOptions } from '@/types';\n import { PopperContainer } from '@/components/popper-container';\n import {\n BentoDropdownEmptyStateProps,\n BentoDropdownEvent,\n BentoDropdownLazyLoadType,\n BentoDropdownVirtulisationOptions,\n } from '../../dropdown.types';\n import { useI18n } from '@/utils/ts/i18n';\n import { BentoPopover } from '@/components/popover';\n import { useDropdownOptionsListbox } from './composables/use-dropdown-options-listbox';\n import { generateUid } from '@/core/utils/ts';\n import messages from './messages.json';\n\n type MessageSchema = (typeof messages)['en-US'];\n\n const slots = useSlots();\n\n const emit = defineEmits([]);\n\n const props = defineProps({\n /**\n * Defines a string value that labels an interactive element.\n */\n ariaLabel: { type: String, default: null },\n\n /**\n * Empty state props used with the inner empty state component which is displayed when no search results are found.\n */\n emptyState: {\n type: Object as PropType<BentoDropdownEmptyStateProps>,\n default: undefined,\n },\n\n /**\n * Disables dropdown functionality\n */\n disabled: { type: Boolean, default: false },\n\n /**\n * Indicates whether there are more items to load\n */\n hasMoreItems: { type: Boolean, default: false },\n\n /**\n * Identifies the listbox whose contents are controlled by the the combobox on which the aria-controls attribute is set.\n */\n id: { type: String, required: true },\n\n /**\n * Function that allows the options to be disabled\n *\n * @type {BentoDropdownIsOptionDisabled}\n * @param {BentoDropdownOptionItem} option - Dropdown option object\n * @param {string} option.label - Option's label text\n * @param {string|number} option.value - Option's value\n * @param {unknown} option.data - Option's extra data to be passed to the default slot\n */\n isOptionDisabled: {\n type: Function as PropType<BentoListboxIsOptionDisabled>,\n default: undefined,\n },\n\n /**\n * The option elements to populate the dropdown with.\n * It must be an array of {@see BentoDropdownOptionItem }\n * * @property {string} value.label - Text to be displayed in the option\n * * @property {string,number} value.value - Value of the option\n */\n items: {\n type: Array as PropType<BentoListboxOptions>,\n required: true,\n },\n\n /**\n * The type of `Lazy Load`.\n * Type \"automatic\" will enable infinite scrolling\n * Type \"button\" will enable lazy loading with \"Show more\" button\n */\n lazyLoadType: {\n type: String as PropType<BentoDropdownLazyLoadType | `${BentoDropdownLazyLoadType}`>,\n default: BentoDropdownLazyLoadType.AUTOMATIC,\n validator: (value: BentoDropdownLazyLoadType) => Object.values(BentoDropdownLazyLoadType).includes(value),\n },\n\n /**\n * Indicates if new options are loading.\n */\n loading: { type: Boolean, default: false },\n\n /**\n * If enabled, the user will be able to select multiple items.\n */\n multiple: { type: Boolean, default: false },\n\n /**\n * Indicates if the dropdown is open so that\n * the container can be displayed.\n */\n open: { type: Boolean, required: true },\n\n /**\n * The `input` value.\n * Providing an empty string or empty array will select no options.\n * Set to an empty string `''` if you don't want any of the available options to be selected for single select\n */\n selectedValue: {\n type: Array as PropType<BentoListboxOptions>,\n default: null,\n },\n\n /**\n * Flag that indicates that an external search it's being made\n * to filter out the items inside the the multi-select listbox\n *\n * If enabled, hides the \"Select all\" checkbox in \"multiple\" mode.\n */\n searching: BentoListbox.props.searching,\n\n /**\n * If enabled, dropdown will display non-selectable, static categories\n */\n staticCategories: { type: Boolean, default: false },\n\n /**\n * Reference to the DOM element or Vue component for positioning\n * the Dropdown container.\n */\n targetElement: { type: PopperContainer.props.targetElement.type, required: true },\n\n /**\n * Enables virtual scrolling if set to true or by providing an object with itemHeight function.\n * The itemHeight function is used to calculate the height of rendered item given it's index.\n */\n virtualScroll: {\n type: [Boolean, Object] as PropType<BentoDropdownVirtulisationOptions>,\n default: false,\n },\n });\n\n const { selectedValue, multiple } = toRefs(props);\n const dropdownOptionsListboxRef = ref(null);\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n const isDropdownOpen = computed(() => props.open && !props.disabled);\n const noResultsMessage = computed(() => t('noOptionsMatchThisSearch') as string);\n\n const conditionalClasses = computed(() => ({\n 'b-dropdown-options-container--single': !props?.multiple,\n }));\n\n const conditionalListboxClasses = computed(() => ({\n 'b-dropdown-options-container__listbox--single': !props?.multiple,\n }));\n\n const { actions, internalSelectedValue, listeners, onEscapeKey, onOutsideDropdownClick } =\n useDropdownOptionsListbox(selectedValue, multiple, isDropdownOpen, emit);\n\n // Use different components depending on if the dropdown is a single or multi-select\n const popperContainerOrPopoverComponent = computed(() => (props?.multiple ? BentoPopover : PopperContainer));\n\n const popperContainerOrPopoverProps = computed(() => {\n const containerMinAndMaxWidth = {\n 'min-width': `${(props?.targetElement as HTMLElement)?.clientWidth}px`,\n 'max-width': 'min(500px, 95%)',\n };\n\n return props?.multiple\n ? ({\n actionsLayout: 'space-between',\n actions: actions.value,\n divider: true,\n fallbackPosition: ['top-start'],\n id: generateUid(`dropdown-options-${props.id}`),\n open: props.open,\n position: 'bottom-start',\n style: {\n width: 'auto',\n ...containerMinAndMaxWidth,\n },\n targetElement: props.targetElement,\n } as InstanceType<typeof BentoPopover>['$props'])\n : ({\n fallbackPosition: ['top-start'],\n offset: [0, 8],\n position: 'bottom-start',\n style: {\n display: isDropdownOpen.value ? 'block' : 'none',\n ...containerMinAndMaxWidth,\n },\n targetElement: props.targetElement,\n } as InstanceType<typeof PopperContainer>['$props']);\n });\n\n defineExpose({\n onOutsideDropdownClick,\n });\n</script>\n\n<script lang=\"ts\">\n /**\n * Dropdown options container.\n * It lists all the available options.\n *\n * @example\n * <bento-dropdown-options-container\n * v-if=\"inputContainerRef\" <!-- Ref to the input to match the width -->\n * :id=\"dropdownOptionsContainerId\"\n * :target-element=\"inputContainerRef\"\n * :aria-label=\"ariaLabel\"\n * :open=\"isDropdownOpen\"\n * :disabled=\"disabled\"\n * :multiple=\"multiple\"\n * :selected=\"value\"\n * :isOptionDisabled=\"option => option.value === 2\"\n * :items=\"[{\n * { label: 'Option 1', value: 1 },\n * { label: 'Option 2', value: 2 },\n * }]\"\n * @select=\"onOptionSelected\"\n * />\n */\n export default defineComponent({\n i18n: { messages },\n name: 'bento-dropdown-options-container',\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./dropdown-options-container.scss\" />\n","\n<template>\n <svg role=\"img\" v-bind=\"$attrs\" class=\"ui-assets-icons-16\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\"><title v-if=\"$attrs['svg-title']\">{{ $attrs['svg-title'] }}</title><path fill=\"#00112C\" d=\"M5.00011 5.43922L8.00011 8.43922L11.0001 5.43922L12.0608 6.49988L8.00011 10.5605L3.93945 6.49988L5.00011 5.43922Z\"/></svg>\n</template>\n<script>\n let uuid = 0;\n\n export default {\n beforeCreate() {\n this.uuid = uuid.toString();\n uuid += 1;\n },\n };\n</script>\n<style>\n @import '../css/main.css';\n</style>\n","\n<template>\n <svg role=\"img\" v-bind=\"$attrs\" class=\"ui-assets-icons-16\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\"><title v-if=\"$attrs['svg-title']\">{{ $attrs['svg-title'] }}</title><path fill=\"#00112C\" d=\"M10.9999 10.5608L7.9999 7.56077L4.9999 10.5608L3.93924 9.50011L7.9999 5.43945L12.0606 9.50011L10.9999 10.5608Z\"/></svg>\n</template>\n<script>\n let uuid = 0;\n\n export default {\n beforeCreate() {\n this.uuid = uuid.toString();\n uuid += 1;\n },\n };\n</script>\n<style>\n @import '../css/main.css';\n</style>\n","<template>\n <div class=\"b-dropdown-small-textbox\" :class=\"conditionalClasses\">\n <dropdown-base-textbox\n v-bind=\"{ ...$attrs, ...$props }\"\n class=\"b-dropdown-small-textbox__textbox\"\n :size=\"BentoDropdownSize.SMALL\"\n v-on=\"listeners\"\n >\n <template #icon>\n <div class=\"b-dropdown-small-textbox__chevron\">\n <chevron-up-small-icon v-show=\"isDropdownOpen\" svg-title=\"opened\" />\n <chevron-down-small-icon v-show=\"!isDropdownOpen\" svg-title=\"closed\" />\n </div>\n </template>\n </dropdown-base-textbox>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, defineComponent, PropType } from 'vue';\n import {\n DropdownBaseTextboxEvent,\n DropdownBaseTextboxState,\n } from '@/components/dropdown/components/dropdown-base-textbox/dropdown-base-textbox.types';\n import { BentoDropdownSize } from '@/components/dropdown/dropdown.types';\n import { Booleanish } from '@/types';\n import DropdownBaseTextbox from '@/components/dropdown/components/dropdown-base-textbox/dropdown-base-textbox.vue';\n import ChevronDownSmallIcon from '@adyen/ui-assets-icons-16/vue/chevron-down-small';\n import ChevronUpSmallIcon from '@adyen/ui-assets-icons-16/vue/chevron-up-small';\n import { stopEventPropagation } from '@/utils/ts/events';\n\n const emit = defineEmits([\"clear\", \"close\", \"input\", \"keydown\", \"open\"]);\n\n const props = defineProps({\n /**\n * The number of additional items that have been selected in the dropdown.\n */\n additionalItemsSelected: { type: [Number, String] as PropType<number | string>, default: 0 },\n\n /**\n * Sets the aria-controls attribute on the textbox. This should correspond to the popover's id that the textbox triggers.\n */\n ariaControls: { type: String, required: true },\n\n /**\n * Indicates whether the content the textbox triggers is visible or not. Needs to be set accordingly when the textbox is used and changed every time the popover is shown/hidden.\n */\n ariaExpanded: {\n type: [String, Boolean] as PropType<Booleanish>,\n required: true,\n },\n\n /**\n * If no label element is used then the aria-label is be set should be set.\n */\n ariaLabel: { type: String, default: null },\n\n /**\n * Corresponds to the label's id that labels the textbox element.\n */\n ariaLabelledby: { type: String, default: null },\n\n /**\n * Custom debounce time. Default: 300\n */\n debounceTime: { type: Number, default: 300 },\n\n /**\n * Disables any textbox functionality\n */\n disabled: { type: Boolean, default: false },\n\n /**\n * Selected option's label\n */\n displayValue: { type: String, default: null },\n\n /**\n * Sets the possibility to type into the textbox\n */\n dynamicFiltering: { type: Boolean, default: false },\n\n /**\n * Marks the textbox as invalid, rendering an error state\n */\n isInvalid: { type: Boolean, default: false },\n\n /**\n * Indicates if the dropdown is open so that\n * the respective event can be emitted\n */\n open: { type: Boolean, default: false },\n\n /**\n * Sets the dropdown to readonly state\n */\n readonly: { type: Boolean, default: false },\n\n /**\n * The input value\n */\n value: { type: String, default: '' },\n });\n\n const conditionalClasses = computed(() => ({\n [`b-dropdown-small-textbox--${DropdownBaseTextboxState.DISABLED}`]: props.disabled,\n [`b-dropdown-small-textbox--${DropdownBaseTextboxState.READONLY}`]: props.readonly,\n [`b-dropdown-small-textbox--${DropdownBaseTextboxState.OPENED}`]: props.open,\n }));\n\n const isDropdownOpen = computed(() => props.open && !props.disabled && !props.readonly);\n\n const onInput = (newInput: string) => {\n emit('input', newInput);\n };\n const onKeyDown = (e: KeyboardEvent) => {\n emit('keydown', e);\n };\n const openDropdown = (e: Event) => {\n stopEventPropagation(e);\n emit('open');\n };\n const closeDropdown = (e: Event) => {\n stopEventPropagation(e);\n emit('close');\n };\n const clearValue = (e: Event) => {\n stopEventPropagation(e);\n emit('clear');\n };\n\n const listeners = {\n [DropdownBaseTextboxEvent.INPUT]: onInput,\n [DropdownBaseTextboxEvent.OPEN]: openDropdown,\n [DropdownBaseTextboxEvent.CLOSE]: closeDropdown,\n [DropdownBaseTextboxEvent.CLEAR]: clearValue,\n [DropdownBaseTextboxEvent.KEYDOWN]: onKeyDown,\n };\n</script>\n\n<script lang=\"ts\">\n /**\n * For internal use only, textbox component in its small variant used in the dropdown component.\n */\n export default defineComponent({\n name: 'dropdown-small-textbox',\n inheritAttrs: false,\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./dropdown-small-textbox.scss\" />\n","import { computed, Ref } from 'vue';\nimport { UseDisplayValueOptions } from './use-display-value.types';\nimport { BentoListboxOptions } from '@/types';\n\n/**\n * Generates the `displayValue` for the Category Multi Select based on\n * the selection, the placeholder or it can be empty if there's nothing to show.\n *\n * @param options Multi select options\n * @returns The text to be displayed by the dropdown\n */\nconst categoryMultiSelect = (selectedValues: Ref<BentoListboxOptions>, items: Ref<BentoListboxOptions>) =>\n items.value\n .reduce((acc, option) => {\n // Category items\n if (option.items) {\n const selectedCategoryOptions = option.items.filter(categoryOption =>\n selectedValues.value.find(selectedOption => selectedOption.value === categoryOption.value)\n );\n\n // If the category is fully selected add the category name\n const isCategoryFullySelected = selectedCategoryOptions.length === option.items.length;\n if (isCategoryFullySelected) {\n acc.push(option.displayValue ?? option.label);\n } else {\n // If category is partially selected add each selected option and category\n selectedCategoryOptions.forEach(({ label, displayValue }) => acc.push(displayValue ?? label));\n }\n }\n\n // Non-category option\n if (selectedValues.value.find(selectedOption => selectedOption.value === option.value)) {\n acc.push(option.displayValue ?? option.label);\n }\n\n return acc;\n }, [])\n .join(', ');\n\n/**\n * Generates the `displayValue` for the Dropdown based on\n * the selection, the placeholder or it can be empty if there's nothing to show.\n *\n * When there is a selected value but the value is not present in the list, the\n * value is then returned as there is no way to know what the text/label is.\n *\n * @param options Options needed to calculate the display value based on the type of Dropdown (single, multi, category)\n * @returns The text to be displayed by the dropdown\n */\nexport const useDisplayValue = ({ items, placeholder, selectedValues, isMultiSelect }: UseDisplayValueOptions) => {\n const isCategoryMultilevel = computed(\n () => isMultiSelect.value && items.value.find(option => option.items?.length)\n );\n\n const computedDisplayValue = computed(() => {\n // If no value selected, return placeholder or nothing\n if (!selectedValues.value.length) {\n return placeholder.value || null;\n }\n\n // Category multi select\n if (isCategoryMultilevel.value) {\n return categoryMultiSelect(selectedValues, items);\n }\n\n return selectedValues.value.map(({ label, displayValue }) => displayValue ?? label).join(', ');\n });\n\n return computedDisplayValue;\n};\n","import { BentoKeyboardNavigationKeyDownEvent } from '@/types';\nimport { BentoListboxEvent } from '@/types/listbox';\nimport { computed, nextTick, Ref } from 'vue';\nimport {\n UseListboxKeyboardNavigationOptions,\n UseTextboxKeyboardNavigationOptions,\n} from './use-keyboard-navigation.types';\n\n/**\n * Returns the focus to the textbox of the dropdown if it exists\n * when the dropdown is being closed.\n * @param elementToFocusOn Reference to the input container\n */\nconst focusOnTextbox = (elementToFocusOn: Ref) => {\n elementToFocusOn.value.$children?.[0].$refs.textbox.focus();\n};\n\n/**\n * Controls the keyboard navigation inside the Dropdown's textbox for Single and Multi select.\n * Adds support for the keys:\n *\n * - Arrow up\n * - Arrow Down\n * - End key\n * - Home key\n * - Escape key\n * - Space key\n * - Enter Key\n *\n * @param options Options from the Dropdown to handle the navigation\n * @param toggleDropdown Function to open/close the Dropdown\n * @param openDropdown Function to open the Dropdown\n * @param closeDropdown Function to close the Dropdown\n * @returns List of event listeners available to the Dropdown's textbox\n */\nexport const useTextboxKeyboardNavigation = (\n {\n inputContainerRef,\n optionsContainerRef,\n selectedValueIndex,\n isDropdownOpen,\n isDynamicFltering,\n items,\n isMultiple,\n }: UseTextboxKeyboardNavigationOptions,\n toggleDropdown: () => void,\n openDropdown: () => void,\n closeDropdown: () => void\n) => {\n const onArrowDown = ({ detail: event }) => {\n event.preventDefault();\n\n if (!isDropdownOpen.value) {\n openDropdown();\n }\n\n // user may click on the dropdown via mouse, then use arrow keys - dropdown already open\n // this ensure it works when use first navigate to dropdown via mouse or arrow keys\n nextTick(() => {\n if (isMultiple) {\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[0].$el.focus();\n } else {\n // ensures focus management in listbox is in-sync\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.setListboxFocusedIndex(\n selectedValueIndex.value\n );\n\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.listboxItemRef[\n selectedValueIndex.value\n ].$el.focus();\n }\n });\n };\n const onArrowUp = ({ detail: event }) => {\n event.preventDefault();\n\n if (!isDropdownOpen.value) {\n openDropdown();\n }\n\n // user may click on the dropdown via mouse, then use arrow keys - dropdown already open\n // ensures it works when use first navigate to dropdown via mouse or arrow keys\n nextTick(() => {\n // ensures focus management in listbox is in-sync\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.setListboxFocusedIndex(\n selectedValueIndex.value\n );\n\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.listboxItemRef[\n selectedValueIndex.value\n ].$el.focus();\n });\n };\n\n const onEndKey = () => {\n if (!isDropdownOpen.value) {\n openDropdown();\n nextTick(() => {\n if (isMultiple) {\n const firstLayer =\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children;\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[\n firstLayer.length - 1\n ].$children[items.length - 1].$el.focus();\n } else {\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[\n items.length - 1\n ].$el.focus();\n }\n });\n }\n };\n\n const onEscapeKey = () => {\n if (isDropdownOpen.value) {\n closeDropdown();\n focusOnTextbox(inputContainerRef);\n }\n };\n\n const onTab = () => {\n // tab should not navigate through a combobox\n if (isDropdownOpen.value) {\n closeDropdown();\n }\n };\n\n const onHomeKey = () => {\n if (!isDropdownOpen.value) {\n openDropdown();\n }\n nextTick(() => {\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[0].$el.focus();\n });\n };\n\n const onSpaceKey = ({ detail: event }) => {\n event.preventDefault();\n toggleDropdown();\n if (isDropdownOpen.value) {\n nextTick(() => {\n if (isMultiple) {\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[0].$el.focus();\n } else {\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[\n selectedValueIndex.value\n ].$el.focus();\n }\n });\n }\n };\n\n const onEnterKey = () => {\n toggleDropdown();\n if (isDropdownOpen.value) {\n nextTick(() => {\n if (isMultiple) {\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[0].$el.focus();\n } else {\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[\n selectedValueIndex.value\n ].$el.focus();\n }\n });\n }\n };\n\n const textboxKeyboardNavigationListeners = computed(() => ({\n ...(!isDynamicFltering.value ? { [BentoKeyboardNavigationKeyDownEvent.SPACE]: onSpaceKey } : {}),\n [BentoKeyboardNavigationKeyDownEvent.ENTER]: onEnterKey,\n [BentoKeyboardNavigationKeyDownEvent.ARROW_DOWN]: onArrowDown,\n [BentoKeyboardNavigationKeyDownEvent.ARROW_UP]: onArrowUp,\n [BentoKeyboardNavigationKeyDownEvent.END]: onEndKey,\n [BentoKeyboardNavigationKeyDownEvent.ESCAPE]: onEscapeKey,\n [BentoKeyboardNavigationKeyDownEvent.HOME]: onHomeKey,\n [BentoKeyboardNavigationKeyDownEvent.TAB]: onTab,\n }));\n\n return textboxKeyboardNavigationListeners;\n};\n\n/**\n * Controls the keyboard navigation inside the Dropdown's listbox container for Single and Multi select.\n * Adds support for the keys:\n *\n * - Escape key\n * - Enter Key\n * - Tab\n * - Space key\n *\n * @param options Options from the Dropdown to handle the navigation inside the listbox\n * @param closeDropdown Function to close the Dropdown\n * @returns List of event listeners available to the Dropdown's listbox container\n */\nexport const useListboxKeyboardNavigation = (\n { inputContainerRef, isDropdownOpen }: UseListboxKeyboardNavigationOptions,\n closeDropdown: () => void\n) => {\n const closeDropdownAndFocusOnTextbox = () => {\n if (isDropdownOpen.value) {\n closeDropdown();\n }\n nextTick(() => {\n focusOnTextbox(inputContainerRef);\n });\n };\n\n const listboxKeyboardNavigationListeners = {\n [BentoListboxEvent.ENTER]: closeDropdownAndFocusOnTextbox,\n [BentoListboxEvent.ESCAPE]: closeDropdownAndFocusOnTextbox,\n [BentoListboxEvent.TAB]: closeDropdownAndFocusOnTextbox,\n [BentoListboxEvent.SPACE]: closeDropdownAndFocusOnTextbox,\n };\n\n return listboxKeyboardNavigationListeners;\n};\n","import { computed, ref, Ref, watch } from 'vue';\nimport { BentoSearchBarItem } from './search-bar.types';\n\n/**\n * Filters an array {@see BentoSearchBarData} containing elements of type {@see BentoSearchBarItem}\n * by the {@param searchTerm}.\n *\n * @param {Ref<String>} searchTerm - Text that satisfies the search criteria.\n * @param {Ref<BentoSearchBarData>} data - Array to be filtered by {@param searchTerm}\n * @returns {Ref<BentoSearchBarData>} New instance of the array filtered by the {@param searchTerm} text\n * @param {Ref<Boolean>} ignoreGroups - Boolean that determines if search returns items with subitems\n */\nexport function useSearchBarFilter<T extends BentoSearchBarItem>(\n searchTerm: Ref<string>,\n data: Ref<T[]>,\n searchEvent?: (searchValue: string) => void,\n ignoreGroups?: Ref<boolean>\n) {\n const searchTermRef = ref(searchTerm);\n const dataRef = ref(data);\n\n const findHits = (searchTermLowerCased: string, options: Array<BentoSearchBarItem> = []) =>\n options.flatMap(option => {\n if (option.label.toLocaleLowerCase().includes(searchTermLowerCased)) {\n if (ignoreGroups?.value && option.items) {\n return [...findHits(searchTermLowerCased, option.items)];\n }\n return [option, ...findHits(searchTermLowerCased, option.items)];\n }\n\n if (option.items) {\n return [...findHits(searchTermLowerCased, option.items)];\n }\n\n return [];\n });\n\n // If search event exists trigger it on the search term changing\n watch(searchTermRef, () => {\n if (searchEvent !== undefined) {\n searchEvent(searchTermRef.value);\n }\n });\n\n const filterInputData = computed(() => {\n if (!searchTermRef.value) {\n return dataRef.value;\n }\n // If search event exists, emit the new search value into the event and do not manipulate data.\n if (searchEvent !== undefined) {\n return dataRef.value;\n }\n\n const searchTermLowerCased = searchTermRef.value.toLocaleLowerCase();\n const filtered = findHits(searchTermLowerCased, dataRef.value);\n return filtered;\n });\n\n return filterInputData;\n}\n","export const INPUT_FIELD_COMPONENT_INJECTION_KEY = Symbol('input field component injection key');\nexport const INPUT_FIELD_HINT_INJECTION_KEY = Symbol('input field hint injection key');\n","<!-- TODO: Remove aria props as these are part of JSX elements /vue/types/jsx.d.ts -->\n<!-- eslint-disable vue/attribute-hyphenation -->\n<template>\n <div v-bento-click-outside-directive=\"clickOutsideDropdown\" class=\"b-dropdown\" :class=\"conditionalClasses\">\n <field-label\n v-if=\"label\"\n :id=\"labelId\"\n :condensed=\"condensed\"\n :label=\"label\"\n :tooltip-text=\"tooltipText\"\n :optional=\"optional\"\n :required=\"required\"\n />\n <div\n ref=\"inputContainerRefWrapper\"\n v-bento-keyboard-navigation-directive\n v-on=\"textboxKeyboardNavigationListeners\"\n >\n <component\n :is=\"size\"\n ref=\"inputContainerRef\"\n :condensed=\"condensed\"\n :value=\"searchTerm\"\n :additional-items-selected=\"additionalItemsSelected\"\n :ariaControls=\"dropdownOptionsContainerId\"\n :ariaExpanded=\"isDropdownOpen\"\n :aria-labelledby=\"label ? labelId : null\"\n :aria-describedby=\"ariaDescribedBy\"\n :aria-label=\"computedAriaLabel\"\n :aria-readonly=\"isReadOnly\"\n :readonly=\"isReadOnly\"\n :disabled=\"disabled\"\n :display-value=\"displayValue\"\n :dynamic-filtering=\"dynamicFiltering\"\n :is-invalid=\"!!errorMessage || error\"\n :multiple=\"multiple\"\n :open=\"isDropdownOpen\"\n :selected-value-item=\"!isInputComponent ? selectedValueItem : undefined\"\n :show-slot-content-in-multiple=\"showSlotContentInMultiple\"\n @input=\"searchTerm = $event\"\n @open=\"toggleDropdown\"\n @close=\"toggleDropdown\"\n >\n <template v-for=\"(_, innerSlot) of slots\" #[innerSlot]=\"scope\">\n <slot :name=\"innerSlot\" v-bind=\"scope\" />\n </template>\n </component>\n </div>\n <bento-dropdown-options-container\n v-if=\"inputContainerRef\"\n :id=\"dropdownOptionsContainerId\"\n ref=\"optionsContainerRef\"\n :aria-label=\"computedAriaLabel\"\n :empty-state=\"emptyState\"\n :debounce-time=\"search?.debounceTime\"\n :disabled=\"disabled\"\n :is-option-disabled=\"isOptionDisabled\"\n :items=\"filteredItems\"\n :multiple=\"multiple\"\n :static-categories=\"staticCategories\"\n :open=\"isDropdownOpen\"\n :selected-value=\"cachedSelectedListboxOptions\"\n :searching=\"isSearching\"\n :target-element=\"inputContainerRefWrapper\"\n :loading=\"loading\"\n :has-more-items=\"hasMoreItems\"\n :lazy-load-type=\"lazyLoadType\"\n :virtual-scroll=\"virtualScroll\"\n v-on=\"listboxListeners\"\n >\n <template v-for=\"(_, innerSlot) of slots\" #[innerSlot]=\"scope\">\n <slot :name=\"innerSlot\" v-bind=\"scope\" />\n </template>\n </bento-dropdown-options-container>\n <error-message\n v-if=\"!!errorMessage\"\n :id=\"errorId\"\n :error-message=\"errorMessage\"\n class=\"b-dropdown__error-message\"\n />\n <bento-typography\n v-if=\"description || hasSlot('description')\"\n :id=\"descriptionId\"\n class=\"b-dropdown__description\"\n :class=\"descriptionConditionalClasses\"\n el=\"span\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </bento-typography>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, defineComponent, inject, PropType, Ref, ref, toRef, toRefs, useAttrs, useSlots } from 'vue';\n\n // Components\n import { BentoDropdownOptionsContainer } from './components/dropdown-options-container';\n import { BentoTypography } from '@/components/typography';\n import { DropdownInputDefault, DropdownInputSmall } from './components';\n import { BentoListbox, ErrorMessage, FieldLabel, useCachedSelectedValues, useMultiLevelItems } from '@/internal';\n\n // Utils\n import { deprecate } from '@/utils/ts/deprecate';\n import { generateUid } from '@/core/utils/ts';\n import { useAriaLabel } from '@/utils/ts/aria-label';\n import { useI18n } from '@/utils/ts/i18n';\n\n // Composables\n import { useDisplayValue, useListboxKeyboardNavigation, useTextboxKeyboardNavigation } from './composables';\n\n import { useFormLayoutFieldLoading } from '@/composables/use-form-layout-loading/use-form-layout-loading';\n import { useSearchBarFilter } from '@/components/search-bar/useSearchBarDataFilter';\n\n // Directives\n import { BentoClickOutsideDirective as vBentoClickOutsideDirective } from '@/directives/click-outside';\n import { BentoKeyboardNavigationDirective as vBentoKeyboardNavigationDirective } from '@/directives';\n\n // Types\n import {\n BentoDropdownEmptyStateProps,\n BentoDropdownEvent,\n BentoDropdownLazyLoadType,\n BentoDropdownSearchOptions,\n BentoDropdownSize,\n BentoDropdownVirtulisationOptions,\n } from './dropdown.types';\n import {\n BentoListboxEvent,\n BentoListboxIsOptionDisabled,\n BentoListboxMultiSelectValue,\n BentoListboxOptions,\n BentoListboxSelectedValue,\n } from '@/types';\n\n import messages from './messages.json';\n import { useHasSlot } from '@/composables';\n import { INPUT_FIELD_COMPONENT_INJECTION_KEY } from '@/components/input-field/input-field.keys';\n\n type MessageSchema = (typeof messages)['en-US'];\n\n const attrs = useAttrs();\n const slots = useSlots();\n const hasSlot = useHasSlot(slots);\n const props = defineProps({\n /**\n * @deprecated from version 2.0.0. Use the aria-label attribute instead.\n */\n /**\n * Defines a string value that labels an interactive element.\n */\n ariaLabel: { type: String, default: null },\n\n /**\n * Renders the dropdown with a condensed style.\n */\n condensed: { type: Boolean, default: false },\n\n /**\n * Empty state props used with the inner empty state component which is displayed when no search results are found.\n */\n emptyState: {\n type: Object as PropType<BentoDropdownEmptyStateProps>,\n default: undefined,\n },\n\n /**\n * Disables dropdown functionality.\n */\n disabled: { type: Boolean, default: false },\n\n /**\n * Sets the possibility to type into the textbox.\n */\n dynamicFiltering: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Highlights the dropdown in an erroneous state.\n *\n * @deprecated Use \"errorMessage\" prop instead\n */\n error: { type: Boolean, default: false },\n\n /**\n * Highlights the dropdown in an erroneous state with an error message.\n */\n errorMessage: { type: String, default: null },\n\n /**\n * Descriptive supporting text visbile underneath the dropdown.\n */\n description: { type: String, default: null },\n\n /**\n * Indicates whether there are more items to load\n */\n hasMoreItems: { type: Boolean, default: false },\n\n /**\n * Function that dertermines which options are disabled from interaction.\n *\n * @type {BentoListboxIsOptionDisabled}\n * @param {BentoListboxOptionItem} option - Dropdown option object\n * @param {string} option.label - Option's label text\n * @param {string|number} option.value - Option's value\n * @param {unknown} option.data - Option's extra data to be passed to the default slot\n */\n isOptionDisabled: {\n type: Function as PropType<BentoListboxIsOptionDisabled>,\n default: undefined,\n },\n\n /**\n * The option elements to populate the dropdown with.\n * It must be an array of {@see BentoListboxOptionItem }\n * * @property {string} value.label - Text to be displayed in the option\n * * @property {string,number} value.value - Value of the option\n */\n items: {\n type: Array as PropType<BentoListboxOptions>,\n default: () => [],\n },\n\n /**\n * Text that is displayed as a label above the element.\n */\n label: { type: String, default: null },\n\n /**\n * Indicates if new options are loading.\n */\n loading: { type: Boolean, default: false },\n\n /**\n * The type of `Lazy Load`.\n * Type \"automatic\" will enable infinite scrolling\n * Type \"button\" will enable lazy loading with \"Show more\" button\n */\n lazyLoadType: {\n type: String as PropType<BentoDropdownLazyLoadType | `${BentoDropdownLazyLoadType}`>,\n default: BentoListbox.props.lazyLoadType.default,\n validator: (value: BentoDropdownLazyLoadType) => Object.values(BentoDropdownLazyLoadType).includes(value),\n },\n\n /*\n * If enabled, the user will be able to select multiple items.\n */\n multiple: { type: Boolean, default: false },\n\n /**\n * Highlights the dropdown is optional.\n */\n optional: { type: Boolean, default: false },\n\n /**\n * Text that appears in the form control when it has no value set\n */\n placeholder: { type: String, default: null },\n\n /**\n * Sets the dropdown to readonly state\n */\n readonly: { type: Boolean, default: false },\n\n /**\n * Highlights the dropdown is required.\n */\n required: { type: Boolean, default: false },\n\n /**\n * Dropdown search options and events.\n * @see BentoDropdownSearchOptions\n */\n search: {\n type: Object as PropType<BentoDropdownSearchOptions>,\n default: undefined,\n },\n\n /**\n * Toggles whether to use the slot content select items shown in the textbox in multiple mode.\n */\n showSlotContentInMultiple: { type: Boolean, default: false },\n\n /**\n * @deprecated Do not use. Only 'default' size should be used.\n */\n size: {\n type: String as PropType<BentoDropdownSize | `${BentoDropdownSize}`>,\n default: null,\n validator: (value: BentoDropdownSize) => Object.values(BentoDropdownSize).includes(value),\n },\n\n /**\n * If enabled, dropdown will display non-selectable, static categories\n */\n staticCategories: { type: Boolean, default: false },\n\n /**\n * Adds a info icon next to the label to display the passed tooltip message.\n */\n tooltipText: { type: String, default: null },\n\n /**\n * The `input` value.\n * Providing an empty string will select no options.\n * Set to an empty string `''` if you don't want any of the available options to be selected.\n */\n value: {\n type: [String, Number, Array] as PropType<BentoListboxSelectedValue>,\n default: null,\n },\n\n /**\n * Enables virtual scrolling if set to true or by providing an object with itemHeight function.\n * The itemHeight function is used to calculate the height of rendered item given it's index.\n */\n virtualScroll: {\n type: [Boolean, Object] as PropType<BentoDropdownVirtulisationOptions>,\n default: false,\n },\n });\n\n const emit = defineEmits([\"input\", \"show-more\"]);\n\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n\n const inputContainerRef = ref(null);\n const inputContainerRefWrapper = ref(null);\n const optionsContainerRef: Ref<InstanceType<typeof BentoDropdownOptionsContainer>> = ref(null);\n const isDropdownOpen = ref(false);\n const dropdownOptionsContainerId = generateUid('bento-dropdown-options-container');\n const labelId = generateUid('dropdown-label');\n const descriptionId = generateUid('dropdown-description');\n const errorId = generateUid('dropdown-error');\n\n const { isReadOnly } = useFormLayoutFieldLoading(toRef(props, 'readonly'));\n\n const { cachedSelectedListboxOptions, cachedListboxSelectedValues, setCachedValues } = useCachedSelectedValues(\n toRef(props, 'items'),\n toRef(props, 'value'),\n toRef(props, 'multiple')\n );\n\n const ariaLabelAttribute = ref(attrs['aria-label']);\n const { ariaLabel, label } = toRefs(props);\n const computedAriaLabel = useAriaLabel({\n // TODO: take ariaLabel ref away when aria-label prop is removed\n ariaLabel: ariaLabel || (ariaLabelAttribute as Ref<string>),\n label,\n defaultFallback: t('ariaLabelFallback'),\n });\n\n // Inject input field component key to change the dropdown size\n const isInputComponent =\n props.size === BentoDropdownSize.SMALL || inject(INPUT_FIELD_COMPONENT_INJECTION_KEY, false);\n const size = computed(() => (isInputComponent ? BentoDropdownSize.SMALL : BentoDropdownSize.DEFAULT));\n\n const conditionalClasses = computed(() => ({\n 'b-dropdown--condensed': props.condensed,\n }));\n\n // Description styles\n const descriptionConditionalClasses = computed(() => ({\n 'b-dropdown__description--error': !!props.errorMessage,\n }));\n\n // Filtering\n const searchTerm = ref('');\n const items = toRef(props, 'items');\n const staticCategories = toRef(props, 'staticCategories');\n const filteredItems = useSearchBarFilter(searchTerm, items, props?.search?.searchEvent, staticCategories);\n const isSearching = computed(() => props.dynamicFiltering && !!searchTerm.value);\n\n const displayValue = useDisplayValue({\n items,\n placeholder: toRef(props, 'placeholder'),\n isMultiSelect: toRef(props, 'multiple'),\n selectedValues: cachedSelectedListboxOptions,\n });\n\n const selectedValueItem = computed(() => {\n if (props?.multiple && Array.isArray(props.value)) {\n return props.items.filter(\n ({ value }) => props?.value && (props?.value as BentoListboxMultiSelectValue).includes(value)\n );\n }\n if (!props.multiple && props.staticCategories) {\n // Find the category that holds the selected value\n const category = props.items.find(categoryItem =>\n categoryItem.items.some(item => item.value === props.value)\n );\n // Find the specific item within the category\n const selectedCategoryItem = category ? category.items.find(item => item.value === props.value) : null;\n\n return selectedCategoryItem;\n }\n\n return props.items.find(({ value }) => value === props?.value);\n });\n\n const selectedValueIndex = computed(() => {\n const index = props.items.findIndex(({ value }) => props.value === value);\n return index > 0 ? index : 0;\n });\n\n const { isMultiLevelSelect, flattenedItemsList } = useMultiLevelItems(items);\n\n const additionalItemsSelected = computed(() => {\n if (props.multiple) {\n const selectedItems = (props?.value as BentoListboxMultiSelectValue)?.length;\n const total = isMultiLevelSelect.value ? flattenedItemsList.value.length : items.value.length;\n\n // Display count always - show \"all\" only when is not external filtering (hasMoreItems = true)\n return !props.hasMoreItems && total === selectedItems ? t('all') : selectedItems;\n }\n\n return null;\n });\n\n // ARIA\n const ariaDescribedBy = computed(\n () => `${props.description ? descriptionId : ''} ${props.errorMessage ? errorId : ''}`.trim() || null\n );\n\n const openDropdown = () => {\n if (isReadOnly.value) {\n return;\n }\n isDropdownOpen.value = true;\n };\n\n const closeDropdown = () => {\n isDropdownOpen.value = false;\n };\n\n const toggleDropdown = () => {\n if (isReadOnly.value) {\n return;\n }\n isDropdownOpen.value = !isDropdownOpen.value;\n\n // Clear search\n if (isSearching.value) {\n searchTerm.value = '';\n }\n };\n\n const clickOutsideDropdown = () => {\n if (isSearching.value) {\n searchTerm.value = '';\n }\n\n if (isDropdownOpen.value) {\n isDropdownOpen.value = false;\n // Reset the internal dropdown options state\n optionsContainerRef.value.onOutsideDropdownClick();\n }\n };\n\n const onOptionSelected = (selectedValue: BentoListboxOptions) => {\n // Clear and close the dropdown on single selection\n if (!props.multiple) {\n searchTerm.value = '';\n isDropdownOpen.value = false;\n }\n\n setCachedValues(selectedValue);\n emit('input', cachedListboxSelectedValues.value);\n };\n\n const emitShowMoreEvent = () => {\n emit(BentoDropdownEvent.SHOW_MORE);\n };\n\n const textboxKeyboardNavigationListeners = useTextboxKeyboardNavigation(\n {\n inputContainerRef,\n optionsContainerRef,\n selectedValueIndex,\n isDropdownOpen,\n isDynamicFltering: toRef(props, 'dynamicFiltering'),\n items: props.items,\n isMultiple: props.multiple,\n },\n toggleDropdown,\n openDropdown,\n closeDropdown\n );\n\n const listboxKeyboardNavigationListeners = useListboxKeyboardNavigation(\n {\n inputContainerRef,\n isDropdownOpen,\n },\n closeDropdown\n );\n\n const listboxListeners = {\n [BentoListboxEvent.CLOSE_DROPDOWN]: closeDropdown,\n [BentoListboxEvent.SELECT]: onOptionSelected,\n [BentoListboxEvent.SHOW_MORE]: emitShowMoreEvent,\n ...listboxKeyboardNavigationListeners,\n };\n\n if (props.error) {\n deprecate(\n 'BentoDropdown \"error\" property',\n `Use the BentoDropdown \"errorMessage\" property instead to indicate that there is a modifier error.\n Having the field as \"undefined\" will hide/remove the error.\n <bento-dropdown errorMessage=\"Error message text\" />`,\n '2.0.0'\n );\n }\n\n if (props.size) {\n deprecate('BentoDropdown \"size\" property', `Do not use. Only 'default' size should be used.`, '2.0.0');\n }\n\n const focus = () => {\n inputContainerRef.value.focus();\n };\n\n defineExpose({\n focus,\n });\n</script>\n\n<script lang=\"ts\">\n /**\n * A Dropdown shows a selected option's.\n * Use a dropdown when you want users to select options\n * from a list of pre-defined options.\n *\n * @example\n * import { BentoDropdown } from '@adyen/bento-vue2';\n * import type { BentoDropdownOptions } from '@adyen/bento-vue2'\n *\n * export default {\n * components: { BentoDropdown },\n * template: `\n * <bento-dropdown\n * v-model=\"selectedValue\"\n * :disabled=\"false\"\n * :multiple=\"true\"\n * :isOptionsDisabled=\"option => option.value === 2\"\n * :items=\"options\"\n * />\n * `,\n * setup() {\n * const selectedValue = ref(2) // Default value\n * const options: BentoDropdownOptions = [\n * { label: 'Option 1', value: 1 },\n * { label: 'Option 2', value: 2 },\n * ];\n * return { options, selectedValue };\n * }\n * }\n */\n export default defineComponent({\n i18n: { messages },\n name: 'b-dropdown',\n components: {\n DropdownInputDefault,\n DropdownInputSmall,\n },\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./dropdown.scss\" />\n"],"names":["useDropdownOptionsListbox","selectedValue","multiple","isOpen","emit","internalSelectedValue","ref","t","useI18n","watch","isApplyButtonDisabled","computed","onApplyClick","BentoListboxEvent","onCancelClick","onOutsideDropdownClick","actions","onOptionSelected","newSelectedValue","onTabKey","onEnterKey","onSpaceKey","onEscapeKey","emitShowMoreEvent","listeners","__default__$2","defineComponent","messages$1","slots","useSlots","toRefs","props","dropdownOptionsListboxRef","isDropdownOpen","noResultsMessage","conditionalClasses","conditionalListboxClasses","popperContainerOrPopoverComponent","BentoPopover","PopperContainer","popperContainerOrPopoverProps","containerMinAndMaxWidth","_a","generateUid","expose","uuid$1","_sfc_main$3","uuid","_sfc_main$2","__default__$1","DropdownBaseTextboxState","onInput","newInput","onKeyDown","e","openDropdown","stopEventPropagation","closeDropdown","clearValue","DropdownBaseTextboxEvent","categoryMultiSelect","selectedValues","items","acc","option","selectedCategoryOptions","categoryOption","selectedOption","label","displayValue","useDisplayValue","placeholder","isMultiSelect","isCategoryMultilevel","focusOnTextbox","elementToFocusOn","useTextboxKeyboardNavigation","inputContainerRef","optionsContainerRef","selectedValueIndex","isDynamicFltering","isMultiple","toggleDropdown","onArrowDown","event","nextTick","onArrowUp","onEndKey","firstLayer","_b","onTab","onHomeKey","BentoKeyboardNavigationKeyDownEvent","useListboxKeyboardNavigation","closeDropdownAndFocusOnTextbox","useSearchBarFilter","searchTerm","data","searchEvent","ignoreGroups","searchTermRef","dataRef","findHits","searchTermLowerCased","options","INPUT_FIELD_COMPONENT_INJECTION_KEY","INPUT_FIELD_HINT_INJECTION_KEY","__default__","messages","DropdownInputDefault","DropdownInputSmall","attrs","useAttrs","hasSlot","useHasSlot","inputContainerRefWrapper","dropdownOptionsContainerId","labelId","descriptionId","errorId","isReadOnly","useFormLayoutFieldLoading","toRef","cachedSelectedListboxOptions","cachedListboxSelectedValues","setCachedValues","useCachedSelectedValues","ariaLabelAttribute","ariaLabel","computedAriaLabel","useAriaLabel","isInputComponent","BentoDropdownSize","inject","size","descriptionConditionalClasses","staticCategories","filteredItems","isSearching","selectedValueItem","value","category","categoryItem","item","index","isMultiLevelSelect","flattenedItemsList","useMultiLevelItems","additionalItemsSelected","selectedItems","total","ariaDescribedBy","clickOutsideDropdown","textboxKeyboardNavigationListeners","listboxKeyboardNavigationListeners","listboxListeners","deprecate","focus"],"mappings":"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","x_google_ignoreList":[2,3]}