@adyen/bento-vue2 1.8.0 → 1.9.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.
- package/dist/@types/packages/vue2/src/components/data-grid/composables/useKeyboardNavigator/useKeyboardNavigator.d.ts +6 -2
- package/dist/@types/packages/vue2/src/components/data-grid/composables/useScroller/useScroller.d.ts +6 -0
- package/dist/@types/packages/vue2/src/components/data-grid/data-grid.vue.d.ts +23 -391
- package/dist/@types/packages/vue2/src/components/divider/divider.vue.d.ts +1 -5
- package/dist/@types/packages/vue2/src/components/dropdown/components/dropdown-default-textbox/dropdown-default-textbox.vue.d.ts +10 -0
- package/dist/@types/packages/vue2/src/components/dropdown/components/variants/dropdown-avatar/dropdown-avatar.vue.d.ts +9 -0
- package/dist/@types/packages/vue2/src/components/dropdown/components/variants/dropdown-country/dropdown-country.vue.d.ts +9 -0
- package/dist/@types/packages/vue2/src/components/dropdown/components/variants/dropdown-currency/dropdown-currency.vue.d.ts +9 -0
- package/dist/@types/packages/vue2/src/components/dropdown/components/variants/dropdown-payment-method/dropdown-payment-method.vue.d.ts +9 -0
- package/dist/@types/packages/vue2/src/components/dropdown/components/variants/dropdown-tag/dropdown-tag.vue.d.ts +9 -0
- package/dist/@types/packages/vue2/src/components/dropdown/dropdown.vue.d.ts +12 -0
- package/dist/@types/packages/vue2/src/components/filter-bar/components/base-filter/base-filter.vue.d.ts +1 -0
- package/dist/@types/packages/vue2/src/components/input-field/input-field.types.d.ts +1 -3
- package/dist/@types/packages/vue2/src/components/internal/field-label/field-label.vue.d.ts +9 -0
- package/dist/accordion.js +3 -3
- package/dist/action-bar.js +8 -8
- package/dist/alert.js +26 -26
- package/dist/alert.js.map +1 -1
- package/dist/assets/base-modal.css +1 -1
- package/dist/assets/checkbox.css +1 -1
- package/dist/assets/copy.css +1 -1
- package/dist/assets/cross.css +1 -1
- package/dist/assets/dropdown-default-textbox.css +1 -1
- package/dist/assets/dropdown.css +1 -1
- package/dist/assets/field-label.css +1 -1
- package/dist/assets/index.css +1 -1
- package/dist/assets/index10.css +1 -1
- package/dist/assets/index11.css +1 -1
- package/dist/assets/index12.css +1 -1
- package/dist/assets/index13.css +1 -1
- package/dist/assets/index14.css +1 -1
- package/dist/assets/index15.css +1 -1
- package/dist/assets/index16.css +1 -1
- package/dist/assets/index17.css +1 -1
- package/dist/assets/index18.css +1 -1
- package/dist/assets/index19.css +1 -1
- package/dist/assets/index2.css +1 -1
- package/dist/assets/index20.css +1 -1
- package/dist/assets/index21.css +1 -1
- package/dist/assets/index22.css +1 -1
- package/dist/assets/index23.css +1 -1
- package/dist/assets/index24.css +1 -1
- package/dist/assets/index25.css +1 -1
- package/dist/assets/index26.css +1 -1
- package/dist/assets/index27.css +1 -1
- package/dist/assets/index28.css +1 -1
- package/dist/assets/index29.css +1 -1
- package/dist/assets/index3.css +1 -1
- package/dist/assets/index30.css +1 -1
- package/dist/assets/index31.css +1 -1
- package/dist/assets/index32.css +1 -1
- package/dist/assets/index33.css +1 -1
- package/dist/assets/index34.css +1 -1
- package/dist/assets/index35.css +1 -1
- package/dist/assets/index36.css +1 -1
- package/dist/assets/index37.css +1 -1
- package/dist/assets/index38.css +1 -1
- package/dist/assets/index39.css +1 -1
- package/dist/assets/index4.css +1 -1
- package/dist/assets/index40.css +1 -1
- package/dist/assets/index41.css +1 -1
- package/dist/assets/index42.css +1 -1
- package/dist/assets/index43.css +1 -1
- package/dist/assets/index44.css +1 -1
- package/dist/assets/index45.css +1 -1
- package/dist/assets/index5.css +1 -1
- package/dist/assets/index6.css +1 -1
- package/dist/assets/index7.css +1 -1
- package/dist/assets/index8.css +1 -1
- package/dist/assets/index9.css +1 -1
- package/dist/assets/listbox.css +1 -1
- package/dist/avatar-image.js +1 -1
- package/dist/badge.js +2 -2
- package/dist/button.js +5 -5
- package/dist/card.js +5 -5
- package/dist/checkbox.js +6 -6
- package/dist/chunks/arrow-left.2db60716.js +26 -0
- package/dist/chunks/arrow-left.2db60716.js.map +1 -0
- package/dist/chunks/{base-button.7886a7e6.js → base-button.df9a9bea.js} +3 -3
- package/dist/chunks/{base-button.7886a7e6.js.map → base-button.df9a9bea.js.map} +1 -1
- package/dist/chunks/{base-modal.31634fe8.js → base-modal.75319f4e.js} +8 -8
- package/dist/chunks/{base-modal.31634fe8.js.map → base-modal.75319f4e.js.map} +1 -1
- package/dist/chunks/{button-actions-with-menu.5faea13e.js → button-actions-with-menu.32770485.js} +3 -3
- package/dist/chunks/{button-actions-with-menu.5faea13e.js.map → button-actions-with-menu.32770485.js.map} +1 -1
- package/dist/chunks/{button.e09d5980.js → button.7dd8d4de.js} +3 -3
- package/dist/chunks/{button.e09d5980.js.map → button.7dd8d4de.js.map} +1 -1
- package/dist/chunks/{calendar.47e9e755.js → calendar.a885d8fc.js} +6 -6
- package/dist/chunks/{calendar.47e9e755.js.map → calendar.a885d8fc.js.map} +1 -1
- package/dist/chunks/{checkbox.2277450e.js → checkbox.65743b08.js} +33 -33
- package/dist/chunks/checkbox.65743b08.js.map +1 -0
- package/dist/chunks/checkmark-circle-fill.345311d2.js +26 -0
- package/dist/chunks/checkmark-circle-fill.345311d2.js.map +1 -0
- package/dist/chunks/checkmark-small.520f01b1.js +26 -0
- package/dist/chunks/checkmark-small.520f01b1.js.map +1 -0
- package/dist/chunks/checkmark.a6ed8f47.js +26 -0
- package/dist/chunks/checkmark.a6ed8f47.js.map +1 -0
- package/dist/chunks/chevron-left.5edf02ac.js +47 -0
- package/dist/chunks/chevron-left.5edf02ac.js.map +1 -0
- package/dist/chunks/chevron-up.81185563.js +47 -0
- package/dist/chunks/chevron-up.81185563.js.map +1 -0
- package/dist/chunks/{controls-group.6c5bfccd.js → controls-group.dd967ccf.js} +3 -3
- package/dist/chunks/{controls-group.6c5bfccd.js.map → controls-group.dd967ccf.js.map} +1 -1
- package/dist/chunks/copy.e12b418e.js +103 -0
- package/dist/chunks/copy.e12b418e.js.map +1 -0
- package/dist/chunks/cross-circle-fill.7c07d16a.js +26 -0
- package/dist/chunks/cross-circle-fill.7c07d16a.js.map +1 -0
- package/dist/chunks/cross.04678d81.js +26 -0
- package/dist/chunks/cross.04678d81.js.map +1 -0
- package/dist/chunks/{dropdown-default-textbox.25134789.js → dropdown-default-textbox.465db4d4.js} +29 -24
- package/dist/chunks/{dropdown-default-textbox.25134789.js.map → dropdown-default-textbox.465db4d4.js.map} +1 -1
- package/dist/chunks/{dropdown.ce937989.js → dropdown.6461dbe3.js} +212 -205
- package/dist/chunks/dropdown.6461dbe3.js.map +1 -0
- package/dist/chunks/field-label.01df3cba.js +111 -0
- package/dist/chunks/field-label.01df3cba.js.map +1 -0
- package/dist/chunks/{fixed-scroller.8994e30a.js → fixed-scroller.42354ccc.js} +4 -4
- package/dist/chunks/{fixed-scroller.8994e30a.js.map → fixed-scroller.42354ccc.js.map} +1 -1
- package/dist/chunks/{footer-actions.c9b2cb74.js → footer-actions.2cd9079e.js} +3 -3
- package/dist/chunks/{footer-actions.c9b2cb74.js.map → footer-actions.2cd9079e.js.map} +1 -1
- package/dist/chunks/{get-slot-text.c1114034.js → get-slot-text.99c3d860.js} +2 -2
- package/dist/chunks/{get-slot-text.c1114034.js.map → get-slot-text.99c3d860.js.map} +1 -1
- package/dist/chunks/{grid-layout.a806acb2.js → grid-layout.e0025286.js} +2 -2
- package/dist/chunks/{grid-layout.a806acb2.js.map → grid-layout.e0025286.js.map} +1 -1
- package/dist/chunks/{i18n.155748d6.js → i18n.eb5b985b.js} +2 -2
- package/dist/chunks/{i18n.155748d6.js.map → i18n.eb5b985b.js.map} +1 -1
- package/dist/chunks/{index.89942d3a.js → index.02da8d63.js} +6 -5
- package/dist/chunks/{index.89942d3a.js.map → index.02da8d63.js.map} +1 -1
- package/dist/chunks/{index.a5de5242.js → index.0890dc99.js} +7 -7
- package/dist/chunks/{index.a5de5242.js.map → index.0890dc99.js.map} +1 -1
- package/dist/chunks/{index.66503760.js → index.152b2b16.js} +4 -4
- package/dist/chunks/{index.66503760.js.map → index.152b2b16.js.map} +1 -1
- package/dist/chunks/{index.a99ffd48.js → index.16914bb1.js} +30 -29
- package/dist/chunks/{index.a99ffd48.js.map → index.16914bb1.js.map} +1 -1
- package/dist/chunks/{index.b83f8b7e.js → index.322692c8.js} +3 -3
- package/dist/chunks/{index.b83f8b7e.js.map → index.322692c8.js.map} +1 -1
- package/dist/chunks/index.4c062058.js +8 -0
- package/dist/chunks/{index.af05ced4.js.map → index.4c062058.js.map} +1 -1
- package/dist/chunks/{index.86fc63ca.js → index.6cef7328.js} +3 -3
- package/dist/chunks/{index.86fc63ca.js.map → index.6cef7328.js.map} +1 -1
- package/dist/chunks/{index.965ac1af.js → index.b201e81d.js} +2 -2
- package/dist/chunks/{index.965ac1af.js.map → index.b201e81d.js.map} +1 -1
- package/dist/chunks/{index.210d2169.js → index.d1beb704.js} +7 -7
- package/dist/chunks/{index.210d2169.js.map → index.d1beb704.js.map} +1 -1
- package/dist/chunks/{index.d8bd7596.js → index.f358c4bd.js} +9 -9
- package/dist/chunks/index.f358c4bd.js.map +1 -0
- package/dist/chunks/info-filled.27bd4bfb.js +47 -0
- package/dist/chunks/info-filled.27bd4bfb.js.map +1 -0
- package/dist/chunks/{listbox-option-tag.97af47fc.js → listbox-option-tag.55cd9c16.js} +8 -7
- package/dist/chunks/{listbox-option-tag.97af47fc.js.map → listbox-option-tag.55cd9c16.js.map} +1 -1
- package/dist/chunks/{listbox.d039b178.js → listbox.a117e6d4.js} +45 -41
- package/dist/chunks/{listbox.d039b178.js.map → listbox.a117e6d4.js.map} +1 -1
- package/dist/chunks/{loading-button.9a9cbbad.js → loading-button.459b9ab4.js} +4 -4
- package/dist/chunks/{loading-button.9a9cbbad.js.map → loading-button.459b9ab4.js.map} +1 -1
- package/dist/chunks/refresh.71a03998.js +26 -0
- package/dist/chunks/refresh.71a03998.js.map +1 -0
- package/dist/chunks/search.471270fe.js +26 -0
- package/dist/chunks/search.471270fe.js.map +1 -0
- package/dist/chunks/{toastController.0e01443d.js → toastController.fd667b68.js} +2 -2
- package/dist/chunks/{toastController.0e01443d.js.map → toastController.fd667b68.js.map} +1 -1
- package/dist/chunks/{tooltip.ecd0f707.js → tooltip.b8929659.js} +4 -4
- package/dist/chunks/{tooltip.ecd0f707.js.map → tooltip.b8929659.js.map} +1 -1
- package/dist/chunks/{use-default-slot-validator.cbdfe693.js → use-default-slot-validator.b9bff4c6.js} +2 -2
- package/dist/chunks/{use-default-slot-validator.cbdfe693.js.map → use-default-slot-validator.b9bff4c6.js.map} +1 -1
- package/dist/chunks/use-has-slot.fbeb19ec.js +6 -0
- package/dist/chunks/{use-has-slot.6052d56a.js.map → use-has-slot.fbeb19ec.js.map} +1 -1
- package/dist/chunks/{useCountryItems.5d7b436e.js → useCountryItems.34ac8740.js} +2 -2
- package/dist/chunks/{useCountryItems.5d7b436e.js.map → useCountryItems.34ac8740.js.map} +1 -1
- package/dist/code-snippet.js +106 -106
- package/dist/code-snippet.js.map +1 -1
- package/dist/country.js +3 -3
- package/dist/currency.js +2 -2
- package/dist/data-grid.js +768 -832
- package/dist/data-grid.js.map +1 -1
- package/dist/date-picker.js +23 -22
- package/dist/date-picker.js.map +1 -1
- package/dist/date-range-picker.js +2 -2
- package/dist/date.js +1 -1
- package/dist/divider.js +13 -27
- package/dist/divider.js.map +1 -1
- package/dist/dropdown.js +5 -5
- package/dist/empty-state.js +3 -3
- package/dist/filter-bar.js +695 -565
- package/dist/filter-bar.js.map +1 -1
- package/dist/focus-trap.js +1 -1
- package/dist/form-layout.js +3 -3
- package/dist/header.js +5 -5
- package/dist/index.js +16 -16
- package/dist/info-icon.js +5 -5
- package/dist/info-icon.js.map +1 -1
- package/dist/input-field.js +40 -42
- package/dist/input-field.js.map +1 -1
- package/dist/internal.js +8 -8
- package/dist/link.js +2 -2
- package/dist/loading-indicator.js +1 -1
- package/dist/menu.js +1 -1
- package/dist/modal.js +5 -5
- package/dist/pagination.js +45 -45
- package/dist/pagination.js.map +1 -1
- package/dist/payment-method.js +3 -3
- package/dist/payment-method.js.map +1 -1
- package/dist/popover.js +1 -1
- package/dist/popper-container.js +1 -1
- package/dist/radio-group.js +7 -7
- package/dist/search-bar.js +5 -5
- package/dist/segmented-control.js +5 -5
- package/dist/sidepanel.js +8 -8
- package/dist/status.js +2 -2
- package/dist/stepper.js +40 -40
- package/dist/stepper.js.map +1 -1
- package/dist/structured-list.js +1 -1
- package/dist/summary-grid.js +5 -5
- package/dist/tabs.js +3 -3
- package/dist/tag.js +4 -4
- package/dist/textarea.js +21 -21
- package/dist/textarea.js.map +1 -1
- package/dist/timeline.js +113 -113
- package/dist/timeline.js.map +1 -1
- package/dist/toast.js +6 -6
- package/dist/toggle.js +6 -6
- package/dist/tutorial.js +71 -71
- package/dist/tutorial.js.map +1 -1
- package/dist/typography.js +1 -1
- package/dist/web-types.json +650 -615
- package/package.json +4 -4
- package/dist/assets/arrow-left.css +0 -1
- package/dist/assets/checkmark-circle-fill.css +0 -1
- package/dist/assets/checkmark-small.css +0 -1
- package/dist/assets/checkmark.css +0 -1
- package/dist/assets/chevron-left.css +0 -1
- package/dist/assets/chevron-up.css +0 -1
- package/dist/assets/cross-circle-fill.css +0 -1
- package/dist/assets/info-filled.css +0 -1
- package/dist/assets/refresh.css +0 -1
- package/dist/assets/search.css +0 -1
- package/dist/chunks/arrow-left.1d5d08bd.js +0 -26
- package/dist/chunks/arrow-left.1d5d08bd.js.map +0 -1
- package/dist/chunks/checkbox.2277450e.js.map +0 -1
- package/dist/chunks/checkmark-circle-fill.2cfbb81b.js +0 -26
- package/dist/chunks/checkmark-circle-fill.2cfbb81b.js.map +0 -1
- package/dist/chunks/checkmark-small.5ca15f00.js +0 -26
- package/dist/chunks/checkmark-small.5ca15f00.js.map +0 -1
- package/dist/chunks/checkmark.78f3ed9c.js +0 -26
- package/dist/chunks/checkmark.78f3ed9c.js.map +0 -1
- package/dist/chunks/chevron-left.c10778d3.js +0 -47
- package/dist/chunks/chevron-left.c10778d3.js.map +0 -1
- package/dist/chunks/chevron-up.674ec2e5.js +0 -47
- package/dist/chunks/chevron-up.674ec2e5.js.map +0 -1
- package/dist/chunks/copy.a85c2e9f.js +0 -103
- package/dist/chunks/copy.a85c2e9f.js.map +0 -1
- package/dist/chunks/cross-circle-fill.d5e9ae44.js +0 -26
- package/dist/chunks/cross-circle-fill.d5e9ae44.js.map +0 -1
- package/dist/chunks/cross.a2cadac5.js +0 -26
- package/dist/chunks/cross.a2cadac5.js.map +0 -1
- package/dist/chunks/dropdown.ce937989.js.map +0 -1
- package/dist/chunks/field-label.330edb60.js +0 -107
- package/dist/chunks/field-label.330edb60.js.map +0 -1
- package/dist/chunks/index.af05ced4.js +0 -7
- package/dist/chunks/index.d8bd7596.js.map +0 -1
- package/dist/chunks/info-filled.48f3268f.js +0 -47
- package/dist/chunks/info-filled.48f3268f.js.map +0 -1
- package/dist/chunks/refresh.eb485c6f.js +0 -26
- package/dist/chunks/refresh.eb485c6f.js.map +0 -1
- package/dist/chunks/search.a8055e95.js +0 -26
- package/dist/chunks/search.a8055e95.js.map +0 -1
- package/dist/chunks/use-has-slot.6052d56a.js +0 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown.6461dbe3.js","sources":["../../src/components/dropdown/dropdown.types.ts","../../src/components/dropdown/components/dropdown-options-container/composables/useDropdownOptionsListbox.ts","../../src/components/dropdown/components/dropdown-options-container/dropdown-options-container.vue","../../node_modules/@adyen/ui-assets-icons-16/dist/vue/chevron-down-small.vue","../../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/useDisplayValue.ts","../../src/components/dropdown/composables/useKeyboardNavigation.ts","../../src/components/search-bar/useSearchBarDataFilter.ts","../../src/components/dropdown/dropdown.vue"],"sourcesContent":["/**\n * @deprecated for usage with properties since version 2.0. Use the string literal instead.\n */\nexport enum BentoDropdownSize {\n DEFAULT = 'DropdownInputDefault',\n SMALL = 'DropdownInputSmall',\n}\n\nexport {\n /**\n * @deprecated since version 2.0. Use the string literal instead.\n */\n BentoListboxLazyLoadType as BentoDropdownLazyLoadType,\n BentoListboxEvent as BentoDropdownEvent,\n} from '@/types';\n\nexport type { BentoListboxSearchOptions as BentoDropdownSearchOptions } from '@/types';\nexport type { BentoListboxEmptyStateProps as BentoDropdownEmptyStateProps } from '@/types';\nexport type { BentoListboxVirtulisationOptions as BentoDropdownVirtulisationOptions } from '@/types';\n","import { computed, ref, Ref, watch } from 'vue';\nimport { BentoListboxEvent, BentoListboxSelectedValue } 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 emit - the emit function for the dropdown options container component.\n */\nexport const useDropdownOptionsListbox = (\n selectedValue: Ref<BentoListboxSelectedValue>,\n multiple: Ref<boolean>,\n emit: (event: BentoListboxEvent | BentoDropdownEvent, selectedValue?: BentoListboxSelectedValue) => 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 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: BentoListboxSelectedValue) => {\n internalSelectedValue.value = newSelectedValue;\n if (!multiple.value) {\n emit(BentoDropdownEvent.SELECT, newSelectedValue);\n }\n };\n\n const onTabKey = (newSelectedValue: BentoListboxSelectedValue) => {\n onOptionSelected(newSelectedValue);\n emit(BentoDropdownEvent.TAB);\n };\n\n const onEnterKey = (newSelectedValue: BentoListboxSelectedValue) => {\n onOptionSelected(newSelectedValue);\n emit(BentoDropdownEvent.ENTER);\n };\n\n const onSpaceKey = (newSelectedValue: BentoListboxSelectedValue) => {\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 };\n};\n","<template>\n <component\n :is=\"popperContainerOrPopoverComponent\"\n class=\"b-dropdown-options-container\"\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 :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 lang=\"ts\">\n import { computed, defineComponent, PropType, ref, toRefs } from 'vue';\n import { BentoListbox } from '@/internal';\n import {\n BentoListboxEvent,\n BentoListboxIsOptionDisabled,\n BentoListboxOptions,\n BentoListboxSelectedValue,\n } from '@/types';\n import { PopperContainer } from '@/components/popper-container';\n import {\n BentoDropdownEmptyStateProps,\n BentoDropdownEvent,\n BentoDropdownLazyLoadType,\n BentoDropdownSize,\n BentoDropdownVirtulisationOptions,\n } from '../../dropdown.types';\n import { useI18n } from '@/utils/ts/i18n';\n import { BentoPopover } from '@/components/popover';\n import { useDropdownOptionsListbox } from './composables/useDropdownOptionsListbox';\n import { generateUid } from '@/utils/ts/unique-id';\n import messages from './messages.json';\n\n type MessageSchema = (typeof messages)['en-US'];\n\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 components: {\n BentoListbox,\n PopperContainer,\n BentoPopover,\n },\n props: {\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 * Dropdown input size\n */\n inputSize: {\n type: String as PropType<BentoDropdownSize | `${BentoDropdownSize}`>,\n default: BentoDropdownSize.DEFAULT,\n validator: (value: BentoDropdownSize) => Object.values(BentoDropdownSize).includes(value),\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 * 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: BentoDropdownLazyLoadType.AUTOMATIC,\n validator: (value: BentoDropdownLazyLoadType) =>\n 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 * 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: [String, Number, Array] as PropType<BentoListboxSelectedValue>,\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 * 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 emits: [\n BentoDropdownEvent.CLOSE_DROPDOWN,\n BentoDropdownEvent.SHOW_MORE,\n BentoListboxEvent.SELECT,\n BentoListboxEvent.ENTER,\n BentoListboxEvent.ESCAPE,\n BentoListboxEvent.SPACE,\n BentoListboxEvent.TAB,\n ],\n setup(props, { emit, slots }) {\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--small': props.inputSize === BentoDropdownSize.SMALL,\n 'b-dropdown-options-container__listbox--single': !props?.multiple,\n }));\n\n const { actions, internalSelectedValue, listeners, onEscapeKey } = useDropdownOptionsListbox(\n selectedValue,\n multiple,\n emit\n );\n\n // Use different components depending on if the dropdown is a single or multi-select\n const popperContainerOrPopoverComponent = computed(() =>\n props?.multiple ? BentoPopover : PopperContainer\n );\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 return {\n // Values\n isDropdownOpen,\n conditionalClasses,\n conditionalListboxClasses,\n noResultsMessage,\n slots,\n actions,\n internalSelectedValue,\n\n // Component wrapper\n popperContainerOrPopoverComponent,\n popperContainerOrPopoverProps,\n\n // Refs\n dropdownOptionsListboxRef,\n\n // Events\n onEscapeKey,\n listeners,\n };\n },\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 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 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 { 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\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 components: { ChevronDownSmallIcon, ChevronUpSmallIcon, DropdownBaseTextbox },\n inheritAttrs: false,\n props: {\n /**\n * The number of additional items that have been selected in the dropdown.\n */\n additionalItemsSelected: { type: Number, 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: {\n type: String,\n required: true,\n },\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: {\n type: String,\n default: null,\n },\n\n /**\n * Corresponds to the label's id that labels the textbox element.\n */\n ariaLabelledby: {\n type: String,\n default: null,\n },\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: {\n type: Boolean,\n default: false,\n },\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 emits: [DropdownBaseTextboxEvent.OPEN, DropdownBaseTextboxEvent.CLOSE],\n setup(props, { emit }) {\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 openDropdown = () => {\n emit(DropdownBaseTextboxEvent.OPEN);\n };\n\n const closeDropdown = () => {\n emit(DropdownBaseTextboxEvent.CLOSE);\n };\n\n const listeners = {\n [DropdownBaseTextboxEvent.OPEN]: openDropdown,\n [DropdownBaseTextboxEvent.CLOSE]: closeDropdown,\n };\n\n return {\n // Values\n conditionalClasses,\n isDropdownOpen,\n\n // Events\n listeners,\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./dropdown-small-textbox.scss\" />\n","import { computed } from 'vue';\nimport { UseDisplayValue } from './useDisplayValue.types';\n\nconst singleSelect = ({ items, placeholder, selectedValue }) => {\n const selectedItem = items.value.find(({ value }) => value === selectedValue.value);\n return selectedItem?.label || placeholder.value || null;\n};\n\nconst multiSelect = ({ selectedValues, items, placeholder }) => {\n // No selected values\n if (!selectedValues.value || (selectedValues.value as Array<string | number>)?.length === 0) {\n return placeholder.value || null;\n }\n\n return (selectedValues.value as Array<string | number>)\n .map(selectedValue => {\n const { label } = items.value.find(({ value }) => value === selectedValue);\n return label;\n })\n .join(', ');\n};\n\nconst categoryMultiSelect = ({ selectedValues, items, placeholder }) => {\n // No selected values\n if (!selectedValues.value || !(selectedValues.value as Array<string | number>)?.length) {\n return placeholder.value || null;\n }\n\n return items.value\n .reduce((acc, option) => {\n // Category items\n if (option.items) {\n const selectedCategoryOptions = option.items.filter(categoryOption =>\n (selectedValues.value as Array<string | number>).includes(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.label);\n } else {\n // If category is partially selected add each selected option and category\n selectedCategoryOptions.forEach(({ label }) => acc.push(label));\n }\n }\n\n // Non-category option\n if ((selectedValues.value as Array<string | number>).includes(option.value)) {\n acc.push(option.label);\n }\n\n return acc;\n }, [])\n .join(', ');\n};\n\nexport const useDisplayValue: UseDisplayValue = ({ items, placeholder, value, multiple }) => {\n const isCategoryMultilevel = computed(() => items.value.find(option => option.items?.length));\n\n const displayValue = computed(() => {\n // Single select\n if (!multiple.value) {\n return singleSelect({ items, placeholder, selectedValue: value });\n }\n\n // Category multi select\n if (isCategoryMultilevel.value) {\n return categoryMultiSelect({ selectedValues: value, placeholder, items });\n }\n\n // Multi select\n return multiSelect({ selectedValues: value, items, placeholder });\n });\n\n return displayValue;\n};\n","import { BentoKeyboardNavigationKeyDownEvent } from '@/types';\nimport { BentoListboxEvent } from '@/types/listbox';\nimport { computed, nextTick, Ref } from 'vue';\n\nconst focusOnTextbox = (elementToFocusOn: Ref) => {\n elementToFocusOn.value.$children?.[0].$refs.textbox.focus();\n};\n\nexport const useTextboxKeyboardNavigation = (\n {\n inputContainerRef,\n optionsContainerRef,\n selectedValueIndex,\n isDropdownOpen,\n isDynamicFltering,\n items,\n isMultiple,\n },\n toggleDropdown,\n openDropdown,\n closeDropdown\n) => {\n const onArrowDown = ({ detail: event }) => {\n event.preventDefault();\n if (!isDropdownOpen.value) {\n openDropdown();\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 const onArrowUp = ({ detail: event }) => {\n event.preventDefault();\n if (!isDropdownOpen.value) {\n openDropdown();\n nextTick(() => {\n optionsContainerRef.value.$refs.dropdownOptionsListboxRef.$refs.listboxItemRef.$children?.[0].$el.focus();\n });\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 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 }));\n\n return textboxKeyboardNavigationListeners;\n};\n\nexport const useListboxKeyboardNavigation = ({ inputContainerRef, isDropdownOpen }, closeDropdown) => {\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 */\nexport function useSearchBarFilter<T extends BentoSearchBarItem>(\n searchTerm: Ref<string>,\n data: Ref<T[]>,\n searchEvent?: (searchValue: string) => void\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 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","<!-- 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=\"closeOpenedDropdown\" 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=\"idDefaultSize ? 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 :input-size=\"size\"\n :is-option-disabled=\"isOptionDisabled\"\n :items=\"filteredItems\"\n :multiple=\"multiple\"\n :open=\"isDropdownOpen\"\n :selected-value=\"value\"\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\"\n :id=\"descriptionId\"\n class=\"b-dropdown__description\"\n :class=\"descriptionConditionalClasses\"\n el=\"span\"\n >\n {{ description }}\n </bento-typography>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { computed, defineComponent, PropType, ref, toRef, toRefs } 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 } from '@/internal';\n\n // Utils\n import { deprecate } from '@/utils/ts/deprecate';\n import { generateUid } from '@/utils/ts/unique-id';\n import { useAriaLabel } from '@/utils/ts/aria-label';\n import { useI18n } from '@/utils/ts/i18n';\n\n // Composables\n import { useDisplayValue } from './composables/useDisplayValue';\n import { useFormLayoutFieldLoading } from '@/composables/use-form-layout-loading/use-form-layout-loading';\n import { useListboxKeyboardNavigation, useTextboxKeyboardNavigation } from './composables/useKeyboardNavigation';\n import { useSearchBarFilter } from '@/components/search-bar/useSearchBarDataFilter';\n\n // Directives\n import { BentoClickOutsideDirective } from '@/directives/click-outside';\n import { BentoKeyboardNavigationDirective } 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\n type MessageSchema = (typeof messages)['en-US'];\n\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 BentoDropdownOptionsContainer,\n BentoTypography,\n DropdownInputDefault,\n DropdownInputSmall,\n ErrorMessage,\n FieldLabel,\n },\n directives: { BentoClickOutsideDirective, BentoKeyboardNavigationDirective },\n props: {\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 * Text that appears in the form control when it has no value set\n */\n placeholder: {\n type: String,\n default: null,\n },\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 * Text that is displayed as a label above the element.\n */\n label: { 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 * 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) =>\n 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 * 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 * 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 * Dropdown input size\n * * @see BentoDropdownSize\n */\n size: {\n type: String as PropType<BentoDropdownSize | `${BentoDropdownSize}`>,\n default: BentoDropdownSize.DEFAULT,\n validator: (value: BentoDropdownSize) => Object.values(BentoDropdownSize).includes(value),\n },\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 * Dropdown search options and events.\n * @see BentoDropdownSearchOptions\n */\n search: {\n type: Object as PropType<BentoDropdownSearchOptions>,\n default: undefined,\n },\n },\n emits: ['input', BentoDropdownEvent.SHOW_MORE],\n setup(props, { attrs, emit, slots }) {\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n\n const inputContainerRef = ref(null);\n const inputContainerRefWrapper = ref(null);\n const optionsContainerRef = 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 ariaLabelAttribute = ref(attrs['aria-label']);\n const { ariaLabel } = toRefs(props);\n const computedAriaLabel = useAriaLabel({\n ariaLabel: ariaLabelAttribute.value as string,\n // TODO: take this line away when the aria-label props is removed\n label: ariaLabel,\n defaultFallback: t('ariaLabelFallback'),\n });\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 filteredItems = useSearchBarFilter(searchTerm, items, props?.search?.searchEvent);\n const isSearching = computed(() => props.dynamicFiltering && !!searchTerm.value);\n\n const displayValue = useDisplayValue({\n items,\n multiple: toRef(props, 'multiple'),\n placeholder: toRef(props, 'placeholder'),\n value: toRef(props, 'value'),\n });\n\n const idDefaultSize = computed(() => props.size === BentoDropdownSize.DEFAULT);\n\n const selectedValueItem = computed(() =>\n props?.multiple\n ? props.items.filter(\n ({ value }) => props?.value && (props?.value as BentoListboxMultiSelectValue).includes(value)\n )\n : 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 additionalItemsSelected = computed(() => {\n if (props.multiple) {\n return (props?.value as BentoListboxMultiSelectValue)?.length;\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 closeOpenedDropdown = () => {\n if (isSearching.value) {\n searchTerm.value = '';\n }\n\n if (isDropdownOpen.value) {\n isDropdownOpen.value = false;\n }\n };\n\n const onOptionSelected = (selectedValue: BentoListboxSelectedValue) => {\n // Clear and close the dropdown on single selection\n if (!props.multiple) {\n searchTerm.value = '';\n isDropdownOpen.value = false;\n }\n\n emit('input', selectedValue);\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 return {\n // Values\n conditionalClasses,\n computedAriaLabel,\n additionalItemsSelected,\n idDefaultSize,\n isDropdownOpen,\n displayValue,\n dropdownOptionsContainerId,\n filteredItems,\n isSearching,\n isReadOnly,\n searchTerm,\n labelId,\n descriptionId,\n errorId,\n ariaDescribedBy,\n selectedValueItem,\n // Conciliation of Vue2 $scopedSlots and Vue3 $scopes.\n // The setup method and the \"useSlots\" composible define\n // { slots } as a proxy of $scopedSlots and $scopes in their\n // respective Vue version. Source: https://github.com/vuejs/composition-api/issues/84#issuecomment-524885445\n slots,\n descriptionConditionalClasses,\n\n // Refs\n inputContainerRef,\n inputContainerRefWrapper,\n optionsContainerRef,\n\n // Events\n closeOpenedDropdown,\n toggleDropdown,\n onOptionSelected,\n emitShowMoreEvent,\n textboxKeyboardNavigationListeners,\n listboxListeners,\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./dropdown.scss\" />\n"],"names":["BentoDropdownSize","BentoDropdownSize2","useDropdownOptionsListbox","selectedValue","multiple","emit","internalSelectedValue","ref","t","useI18n","watch","isApplyButtonDisabled","computed","onApplyClick","BentoListboxEvent","onCancelClick","actions","onOptionSelected","newSelectedValue","onTabKey","onEnterKey","onSpaceKey","onEscapeKey","emitShowMoreEvent","listeners","_sfc_main$4","defineComponent","messages$1","BentoListbox","PopperContainer","BentoPopover","value","BentoListboxLazyLoadType","props","slots","toRefs","dropdownOptionsListboxRef","isDropdownOpen","noResultsMessage","conditionalClasses","conditionalListboxClasses","popperContainerOrPopoverComponent","popperContainerOrPopoverProps","containerMinAndMaxWidth","_a","generateUid","uuid$1","_sfc_main$3","uuid","_sfc_main$2","_sfc_main$1","ChevronDownSmallIcon","ChevronUpSmallIcon","DropdownBaseTextbox","DropdownBaseTextboxEvent","DropdownBaseTextboxState","openDropdown","closeDropdown","singleSelect","items","placeholder","selectedItem","multiSelect","selectedValues","label","categoryMultiSelect","acc","option","selectedCategoryOptions","categoryOption","useDisplayValue","isCategoryMultilevel","focusOnTextbox","elementToFocusOn","useTextboxKeyboardNavigation","inputContainerRef","optionsContainerRef","selectedValueIndex","isDynamicFltering","isMultiple","toggleDropdown","onArrowDown","event","nextTick","_b","onArrowUp","onEndKey","firstLayer","onHomeKey","BentoKeyboardNavigationKeyDownEvent","useListboxKeyboardNavigation","closeDropdownAndFocusOnTextbox","useSearchBarFilter","searchTerm","data","searchEvent","searchTermRef","dataRef","findHits","searchTermLowerCased","options","_sfc_main","messages","BentoDropdownOptionsContainer","BentoTypography","DropdownInputDefault","DropdownInputSmall","ErrorMessage","FieldLabel","BentoClickOutsideDirective","BentoKeyboardNavigationDirective","attrs","inputContainerRefWrapper","dropdownOptionsContainerId","labelId","descriptionId","errorId","isReadOnly","useFormLayoutFieldLoading","toRef","ariaLabelAttribute","ariaLabel","computedAriaLabel","useAriaLabel","descriptionConditionalClasses","filteredItems","isSearching","displayValue","idDefaultSize","selectedValueItem","index","additionalItemsSelected","ariaDescribedBy","closeOpenedDropdown","textboxKeyboardNavigationListeners","listboxKeyboardNavigationListeners","listboxListeners","deprecate"],"mappings":";;;;;;;;;;;;;;;AAGY,IAAAA,IAAA,kBAAAC,OACRA,EAAA,UAAA,wBACAA,EAAA,QAAA,sBAFQA,IAAAD,KAAA,CAAA,CAAA;;;;;;;GCcLE,KAAA,CAAAC,GAAAC,GAAAC,MAAA;AAKH,QAAAC,IAAAC,EAAAJ,EAAA,KAAA,GACA,EAAA,GAAAK,EAAA,IAAAC,EAAA;AAEA,EAAAC,EAAAP,GAAA,MAAA;AACI,IAAAG,EAAA,QAAAH,EAAA;AAAA,EAA4C,CAAA;AAIhD,QAAAQ,IAAAC;AAAA,IAA8B,MAAA,KAAA,UAAAN,EAAA,KAAA,MAAA,KAAA,UAAAH,EAAA,KAAA;AAAA,EAC8D,GAG5FU,IAAA,MAAA;AACI,IAAAR,EAAAS,EAAA,QAAAR,EAAA,KAAA,GACAD,EAAAS,EAAA,cAAA;AAAA,EAAsC,GAG1CC,IAAA,MAAA;AACI,IAAAT,EAAA,QAAAH,EAAA,OACAE,EAAAS,EAAA,cAAA;AAAA,EAAsC,GAE1CE,IAAAJ,EAAA,MAAA;AAAA,IAA+B;AAAA,MAC3B,OAAAJ,EAAA,OAAA;AAAA,MACoB,OAAAK;AAAA,MACT,UAAAF,EAAA;AAAA,IACyB;AAAA,IACpC;AAAA,MACA,OAAAH,EAAA,QAAA;AAAA,MACqB,OAAAO;AAAA,IACV;AAAA,EACX,CAAA,GAIJE,IAAA,CAAAC,MAAA;AACI,IAAAZ,EAAA,QAAAY,GACAd,EAAA,SACIC,EAAAS,EAAA,QAAAI,CAAA;AAAA,EACJ,GAGJC,IAAA,CAAAD,MAAA;AACI,IAAAD,EAAAC,CAAA,GACAb,EAAAS,EAAA,GAAA;AAAA,EAA2B,GAG/BM,IAAA,CAAAF,MAAA;AACI,IAAAD,EAAAC,CAAA,GACAb,EAAAS,EAAA,KAAA;AAAA,EAA6B,GAGjCO,IAAA,CAAAH,MAAA;AACI,IAAAD,EAAAC,CAAA,GACAb,EAAAS,EAAA,KAAA;AAAA,EAA6B,GAGjCQ,IAAA,MAAA;AACI,IAAAP,EAAA,GACAV,EAAAS,EAAA,MAAA;AAAA,EAA6B,GAGjCS,IAAA,MAAA;AACI,IAAAlB,EAAAS,EAAA,SAAA;AAAA,EAAiC,GAGrCU,IAAA;AAAA,IAAkB,CAAAV,EAAA,MAAA,GAAAG;AAAA,IACc,CAAAH,EAAA,SAAA,GAAAS;AAAA,IACG,CAAAT,EAAA,GAAA,GAAAK;AAAA,IACN,CAAAL,EAAA,KAAA,GAAAO;AAAA,IACE,CAAAP,EAAA,KAAA,GAAAM;AAAA,EACA;AAG/B,SAAA;AAAA;AAAA,IAAO,SAAAJ;AAAA,IAEH,uBAAAV;AAAA;AAAA,IACA,WAAAkB;AAAA,IAGA,aAAAF;AAAA,EACA;AAER,GCtBAG,KAAAC,EAAA;AAAA,EAAA,MAAA,EAAA,UAAAC,GAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,cAAAC;AAAA,EACA;AAAA,EACA,OAAA;AAAA;AAAA;AAAA;AAAA,IACA,WAAA,EAAA,MAAA,QAAA,SAAA,KAAA;AAAA;AAAA;AAAA;AAAA,IAIA,YAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,cAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,IAAA,EAAA,MAAA,QAAA,UAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,kBAAA;AAAA,MAWA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,WAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA9B,EAAA;AAAA,MACA,WAAA,CAAA+B,MAAA,OAAA,OAAA/B,CAAA,EAAA,SAAA+B,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACA,OAAA;AAAA,MAQA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,SAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,cAAA;AAAA,MAOA,MAAA;AAAA,MACA,SAAAC,EAAA;AAAA,MACA,WAAA,CAAAD,MAAA,OAAA,OAAAC,CAAA,EAAA,SAAAD,CAAA;AAAA,IAEA;AAAA;AAAA;AAAA;AAAA,IACA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAA,EAAA,MAAA,SAAA,UAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,eAAA;AAAA,MAOA,MAAA,CAAA,QAAA,QAAA,KAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACA,WAAAH,EAAA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,eAAA,EAAA,MAAAC,EAAA,MAAA,cAAA,MAAA,UAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,eAAA;AAAA,MAMA,MAAA,CAAA,SAAA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EACA,OAAA;AAAA,IACAf,EAAA;AAAA,IACAA,EAAA;AAAA,IACAA,EAAA;AAAA,IACAA,EAAA;AAAA,IACAA,EAAA;AAAA,IACAA,EAAA;AAAA,IACAA,EAAA;AAAA,EACA;AAAA,EACA,MAAAmB,GAAA,EAAA,MAAA5B,GAAA,OAAA6B,EAAA,GAAA;AAEA,UAAA,EAAA,eAAA/B,GAAA,UAAAC,EAAA,IAAA+B,EAAAF,CAAA,GACAG,IAAA7B,EAAA,IAAA,GACA,EAAA,GAAAC,EAAA,IAAAC,EAAA,GACA4B,IAAAzB,EAAA,MAAAqB,EAAA,QAAA,CAAAA,EAAA,QAAA,GACAK,IAAA1B,EAAA,MAAAJ,EAAA,0BAAA,CAAA,GAEA+B,IAAA3B,EAAA,OAAA;AAAA,MAAA,wCAAA,EAAAqB,KAAA,QAAAA,EAAA;AAAA,IACA,EAAA,GAGAO,IAAA5B,EAAA,OAAA;AAAA,MAAA,gDAAAqB,EAAA,cAAAjC,EAAA;AAAA,MACA,iDAAA,EAAAiC,KAAA,QAAAA,EAAA;AAAA,IACA,EAAA,GAGA,EAAA,SAAAjB,GAAA,uBAAAV,GAAA,WAAAkB,GAAA,aAAAF,EAAA,IAAApB;AAAA,MAAAC;AAAA,MACAC;AAAA,MACAC;AAAA,IACA,GAIAoC,IAAA7B;AAAA,MAAA,MAAAqB,KAAA,QAAAA,EAAA,WAAAH,IAAAD;AAAA,IACA,GAGAa,IAAA9B,EAAA,MAAA;;AACA,YAAA+B,IAAA;AAAA,QAAA,aAAA,IAAAC,IAAAX,KAAA,gBAAAA,EAAA,kBAAA,gBAAAW,EAAA;AAAA,QACA,aAAA;AAAA,MACA;AAGA,aAAAX,KAAA,QAAAA,EAAA,WAAA;AAAA,QACA,eAAA;AAAA,QACA,SAAAjB,EAAA;AAAA,QACA,SAAA;AAAA,QACA,kBAAA,CAAA,WAAA;AAAA,QACA,IAAA6B,EAAA,oBAAAZ,EAAA,IAAA;AAAA,QACA,MAAAA,EAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,UACA,OAAA;AAAA,UACA,GAAAU;AAAA,QACA;AAAA,QACA,eAAAV,EAAA;AAAA,MACA,IAAA;AAAA,QAEA,kBAAA,CAAA,WAAA;AAAA,QACA,QAAA,CAAA,GAAA,CAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,UACA,SAAAI,EAAA,QAAA,UAAA;AAAA,UACA,GAAAM;AAAA,QACA;AAAA,QACA,eAAAV,EAAA;AAAA,MACA;AAAA,IACA,CAAA;AAGA,WAAA;AAAA;AAAA,MAAA,gBAAAI;AAAA,MAEA,oBAAAE;AAAA,MACA,2BAAAC;AAAA,MACA,kBAAAF;AAAA,MACA,OAAAJ;AAAA,MACA,SAAAlB;AAAA,MACA,uBAAAV;AAAA;AAAA,MACA,mCAAAmC;AAAA,MAGA,+BAAAC;AAAA;AAAA,MACA,2BAAAN;AAAA;AAAA,MAGA,aAAAd;AAAA,MAGA,WAAAE;AAAA,IACA;AAAA,EACA;AAEA,CAAA;;;;;;;;;;;;;;;;;;;;;AC5SA,IAAAsB,IAAA;AAEA,MAAAC,KAAA;AAAA,EACA,eAAA;AACA,SAAA,OAAAD,EAAA,SAAA,GACAA,KAAA;AAAA,EACA;AACA;;;;;;;;;;;;;;;ACPA,IAAAE,IAAA;AAEA,MAAAC,KAAA;AAAA,EACA,eAAA;AACA,SAAA,OAAAD,EAAA,SAAA,GACAA,KAAA;AAAA,EACA;AACA;;;;;;;;;;;;;;uBCmBAE,KAAAxB,EAAA;AAAA,EAAA,MAAA;AAAA,EACA,YAAA,EAAA,sBAAAyB,IAAA,oBAAAC,IAAA,qBAAAC,GAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA;AAAA;AAAA;AAAA,IACA,yBAAA,EAAA,MAAA,QAAA,SAAA,EAAA;AAAA;AAAA;AAAA;AAAA,IAIA,cAAA;AAAA,MAKA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,cAAA;AAAA,MAKA,MAAA,CAAA,QAAA,OAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,WAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,gBAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,cAAA,EAAA,MAAA,QAAA,SAAA,IAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,cAAA,EAAA,MAAA,QAAA,SAAA,KAAA;AAAA;AAAA;AAAA;AAAA,IAKA,kBAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,WAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAA,EAAA,MAAA,QAAA,SAAA,GAAA;AAAA,EAKA;AAAA,EACA,OAAA,CAAAC,EAAA,MAAAA,EAAA,KAAA;AAAA,EACA,MAAArB,GAAA,EAAA,MAAA5B,EAAA,GAAA;AAEA,UAAAkC,IAAA3B,EAAA,OAAA;AAAA,MAAA,CAAA,6BAAA2C,EAAA,UAAA,GAAAtB,EAAA;AAAA,MACA,CAAA,6BAAAsB,EAAA,UAAA,GAAAtB,EAAA;AAAA,MACA,CAAA,6BAAAsB,EAAA,QAAA,GAAAtB,EAAA;AAAA,IACA,EAAA,GAGAI,IAAAzB,EAAA,MAAAqB,EAAA,QAAA,CAAAA,EAAA,YAAA,CAAAA,EAAA,QAAA,GAEAuB,IAAA,MAAA;AACA,MAAAnD,EAAAiD,EAAA,IAAA;AAAA,IAAA,GAGAG,IAAA,MAAA;AACA,MAAApD,EAAAiD,EAAA,KAAA;AAAA,IAAA,GAGA9B,IAAA;AAAA,MAAA,CAAA8B,EAAA,IAAA,GAAAE;AAAA,MACA,CAAAF,EAAA,KAAA,GAAAG;AAAA,IACA;AAGA,WAAA;AAAA;AAAA,MAAA,oBAAAlB;AAAA,MAEA,gBAAAF;AAAA;AAAA,MACA,WAAAb;AAAA,IAGA;AAAA,EACA;AAEA,CAAA;;;;;;;;;;;;;;;;uBClJAkC,KAAA,CAAA,EAAA,OAAAC,GAAA,aAAAC,GAAA,eAAAzD,EAAA,MAAA;AACI,QAAA0D,IAAAF,EAAA,MAAA,KAAA,CAAA,EAAA,OAAA5B,EAAA,MAAAA,MAAA5B,EAAA,KAAA;AACA,UAAA0D,KAAA,gBAAAA,EAAA,UAAAD,EAAA,SAAA;AACJ,GAEAE,KAAA,CAAA,EAAA,gBAAAC,GAAA,OAAAJ,GAAA,aAAAC,EAAA,MAAA;;AAEI,SAAA,CAAAG,EAAA,WAAAnB,IAAAmB,EAAA,UAAA,gBAAAnB,EAAA,YAAA,IACIgB,EAAA,SAAA,OAGJG,EAAA,MAAA,IAAA,CAAA5D,MAAA;AAEQ,UAAA,EAAA,OAAA6D,EAAA,IAAAL,EAAA,MAAA,KAAA,CAAA,EAAA,OAAA5B,EAAA,MAAAA,MAAA5B,CAAA;AACA,WAAA6D;AAAA,EAAO,CAAA,EAAA,KAAA,IAAA;AAGnB,GAEAC,KAAA,CAAA,EAAA,gBAAAF,GAAA,OAAAJ,GAAA,aAAAC,EAAA,MAAA;;AAEI,SAAA,CAAAG,EAAA,SAAA,GAAAnB,IAAAmB,EAAA,UAAA,QAAAnB,EAAA,UACIgB,EAAA,SAAA,OAGJD,EAAA,MAAA,OAAA,CAAAO,GAAAC,MAAA;AAGQ,QAAAA,EAAA,OAAA;AACI,YAAAC,IAAAD,EAAA,MAAA;AAAA,QAA6C,CAAAE,MAAAN,EAAA,MAAA,SAAAM,EAAA,KAAA;AAAA,MACqC;AAKlF,MADAD,EAAA,WAAAD,EAAA,MAAA,SAEID,EAAA,KAAAC,EAAA,KAAA,IAGAC,EAAA,QAAA,CAAA,EAAA,OAAAJ,EAAA,MAAAE,EAAA,KAAAF,CAAA,CAAA;AAAA;AAKR,WAAAD,EAAA,MAAA,SAAAI,EAAA,KAAA,KACID,EAAA,KAAAC,EAAA,KAAA,GAGJD;AAAA,EAAO,GAAA,CAAA,CAAA,EAAA,KAAA,IAAA;AAGnB,GAEOI,KAAA,CAAA,EAAA,OAAAX,GAAA,aAAAC,GAAA,OAAA7B,GAAA,UAAA3B,EAAA,MAAA;AACH,QAAAmE,IAAA3D,EAAA,MAAA+C,EAAA,MAAA,KAAA,CAAAQ,MAAA;;AAAA,YAAAvB,IAAAuB,EAAA,UAAA,gBAAAvB,EAAA;AAAA,GAAA,CAAA;AAiBA,SAfAhC,EAAA,MAEIR,EAAA,QAKAmE,EAAA,QACIN,GAAA,EAAA,gBAAAlC,GAAA,aAAA6B,GAAA,OAAAD,EAAA,CAAA,IAIJG,GAAA,EAAA,gBAAA/B,GAAA,OAAA4B,GAAA,aAAAC,EAAA,CAAA,IATIF,GAAA,EAAA,OAAAC,GAAA,aAAAC,GAAA,eAAA7B,EAAA,CAAA,CAS4D;AAIxE,GCvEAyC,IAAA,CAAAC,MAAA;;AACI,GAAA7B,IAAA6B,EAAA,MAAA,cAAA,QAAA7B,EAAA,GAAA,MAAA,QAAA;AACJ,GAEO8B,KAAA,CAAA;AAAA,EACH,mBAAAC;AAAA,EACI,qBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,gBAAAxC;AAAA,EACA,mBAAAyC;AAAA,EACA,OAAAnB;AAAA,EACA,YAAAoB;AAEJ,GAAAC,GAAAxB,GAAAC,MAAA;AAKA,QAAAwB,IAAA,CAAA,EAAA,QAAAC,EAAA,MAAA;AACI,IAAAA,EAAA,eAAA,GACA7C,EAAA,UACImB,EAAA,GACA2B,EAAA,MAAA;;AACI,MAAAJ,KACInC,IAAAgC,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAhC,EAAA,GAAA,IAAA,WAEAwC,IAAAR,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAQ,EAAAP,EAAA,OAAA,IAAA;AAAA,IAGJ,CAAA;AAAA,EAER,GAEJQ,IAAA,CAAA,EAAA,QAAAH,EAAA,MAAA;AACI,IAAAA,EAAA,eAAA,GACA7C,EAAA,UACImB,EAAA,GACA2B,EAAA,MAAA;;AACI,OAAAvC,IAAAgC,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAhC,EAAA,GAAA,IAAA;AAAA,IAAwG,CAAA;AAAA,EAEhH,GAGJ0C,IAAA,MAAA;AACI,IAAAjD,EAAA,UACImB,EAAA,GACA2B,EAAA,MAAA;;AACI,UAAAJ,GAAA;AACI,cAAAQ,IAAAX,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA;AAEA,SAAAhC,IAAAgC,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAhC,EAAA2C,EAAA,SAAA,GAAA,UAAA5B,EAAA,SAAA,GAAA,IAAA;AAAA;AAIA,SAAAyB,IAAAR,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAQ,EAAAzB,EAAA,SAAA,GAAA,IAAA;AAAA,IAGJ,CAAA;AAAA,EAER,GAGJrC,IAAA,MAAA;AACI,IAAAe,EAAA,UACIoB,EAAA,GACAe,EAAAG,CAAA;AAAA,EACJ,GAGJa,IAAA,MAAA;AACI,IAAAnD,EAAA,SACImB,EAAA,GAEJ2B,EAAA,MAAA;;AACI,OAAAvC,IAAAgC,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAhC,EAAA,GAAA,IAAA;AAAA,IAAwG,CAAA;AAAA,EAC3G,GAGLvB,IAAA,CAAA,EAAA,QAAA6D,EAAA,MAAA;AACI,IAAAA,EAAA,eAAA,GACAF,EAAA,GACA3C,EAAA,SACI8C,EAAA,MAAA;;AACI,MAAAJ,KACInC,IAAAgC,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAhC,EAAA,GAAA,IAAA,WAEAwC,IAAAR,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAQ,EAAAP,EAAA,OAAA,IAAA;AAAA,IAGJ,CAAA;AAAA,EAER,GAGJzD,IAAA,MAAA;AACI,IAAA4D,EAAA,GACA3C,EAAA,SACI8C,EAAA,MAAA;;AACI,MAAAJ,KACInC,IAAAgC,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAhC,EAAA,GAAA,IAAA,WAEAwC,IAAAR,EAAA,MAAA,MAAA,0BAAA,MAAA,eAAA,cAAA,QAAAQ,EAAAP,EAAA,OAAA,IAAA;AAAA,IAGJ,CAAA;AAAA,EAER;AAaJ,SAVAjE,EAAA,OAAA;AAAA,IAA2D,GAAAkE,EAAA,QAAA,CAAA,IAAA,EAAA,CAAAW,EAAA,KAAA,GAAApE,EAAA;AAAA,IACuC,CAAAoE,EAAA,KAAA,GAAArE;AAAA,IACjD,CAAAqE,EAAA,UAAA,GAAAR;AAAA,IACK,CAAAQ,EAAA,QAAA,GAAAJ;AAAA,IACF,CAAAI,EAAA,GAAA,GAAAH;AAAA,IACL,CAAAG,EAAA,MAAA,GAAAnE;AAAA,IACG,CAAAmE,EAAA,IAAA,GAAAD;AAAA,EACF,EAAA;AAIpD,GAEOE,KAAA,CAAA,EAAA,mBAAAf,GAAA,gBAAAtC,EAAA,GAAAoB,MAAA;AACH,QAAAkC,IAAA,MAAA;AACI,IAAAtD,EAAA,SACIoB,EAAA,GAEJ0B,EAAA,MAAA;AACI,MAAAX,EAAAG,CAAA;AAAA,IAAgC,CAAA;AAAA,EACnC;AAUL,SAPA;AAAA,IAA2C,CAAA7D,EAAA,KAAA,GAAA6E;AAAA,IACZ,CAAA7E,EAAA,MAAA,GAAA6E;AAAA,IACC,CAAA7E,EAAA,GAAA,GAAA6E;AAAA,IACH,CAAA7E,EAAA,KAAA,GAAA6E;AAAA,EACE;AAInC;ACrIgB,SAAAC,GAAAC,GAAAC,GAAAC,GAAA;AAKZ,QAAAC,IAAAzF,EAAAsF,CAAA,GACAI,IAAA1F,EAAAuF,CAAA,GAEAI,IAAA,CAAAC,GAAAC,IAAA,CAAA,MAAAA,EAAA,QAAA,CAAAjC,MAEQA,EAAA,MAAA,kBAAA,EAAA,SAAAgC,CAAA,IACI,CAAAhC,GAAA,GAAA+B,EAAAC,GAAAhC,EAAA,KAAA,CAAA,IAGJA,EAAA,QACI,CAAA,GAAA+B,EAAAC,GAAAhC,EAAA,KAAA,CAAA,IAGJ,CAAA,CAAQ;AAIhB,SAAAzD,EAAAsF,GAAA,MAAA;AACI,IAAAD,MAAA,UACIA,EAAAC,EAAA,KAAA;AAAA,EACJ,CAAA,GAGJpF,EAAA,MAAA;AAKI,QAJA,CAAAoF,EAAA,SAIAD,MAAA;AACI,aAAAE,EAAA;AAGJ,UAAAE,IAAAH,EAAA,MAAA,kBAAA;AAEA,WADAE,EAAAC,GAAAF,EAAA,KAAA;AAAA,EACO,CAAA;AAIf;;;;;;GCkHAI,KAAA3E,EAAA;AAAA,EAAA,MAAA,EAAA,UAAA4E,GAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,IACA,+BAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,EACA;AAAA,EACA,YAAA,EAAA,4BAAAC,IAAA,kCAAAC,GAAA;AAAA,EACA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACA,WAAA,EAAA,MAAA,QAAA,SAAA,KAAA;AAAA;AAAA;AAAA;AAAA,IAOA,WAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,YAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,kBAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACA,OAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAOA,cAAA,EAAA,MAAA,QAAA,SAAA,KAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAA,EAAA,MAAA,QAAA,SAAA,KAAA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA,EAAA,MAAA,QAAA,SAAA,KAAA;AAAA;AAAA;AAAA;AAAA,IAKA,cAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,kBAAA;AAAA,MAWA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IACA,OAAA;AAAA,MAQA,MAAA;AAAA,MACA,SAAA,MAAA,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,SAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,cAAA;AAAA,MAOA,MAAA;AAAA,MACA,SAAAlF,EAAA,MAAA,aAAA;AAAA,MACA,WAAA,CAAAG,MAAA,OAAA,OAAAC,CAAA,EAAA,SAAAD,CAAA;AAAA,IAEA;AAAA;AAAA;AAAA;AAAA,IACA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA,IAKA,2BAAA,EAAA,MAAA,SAAA,SAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,MAAA;AAAA,MAMA,MAAA;AAAA,MACA,SAAA/B,EAAA;AAAA,MACA,WAAA,CAAA+B,MAAA,OAAA,OAAA/B,CAAA,EAAA,SAAA+B,CAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,aAAA,EAAA,MAAA,QAAA,SAAA,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAA;AAAA,MAOA,MAAA,CAAA,QAAA,QAAA,KAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IACA,eAAA;AAAA,MAMA,MAAA,CAAA,SAAA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IACA,QAAA;AAAA,MAMA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EACA,OAAA,CAAA,SAAAjB,EAAA,SAAA;AAAA,EACA,MAAAmB,GAAA,EAAA,OAAA8E,GAAA,MAAA1G,GAAA,OAAA6B,EAAA,GAAA;;AAEA,UAAA,EAAA,GAAA1B,EAAA,IAAAC,EAAA,GAEAkE,IAAApE,EAAA,IAAA,GACAyG,IAAAzG,EAAA,IAAA,GACAqE,IAAArE,EAAA,IAAA,GACA8B,IAAA9B,EAAA,EAAA,GACA0G,IAAApE,EAAA,kCAAA,GACAqE,IAAArE,EAAA,gBAAA,GACAsE,IAAAtE,EAAA,sBAAA,GACAuE,IAAAvE,EAAA,gBAAA,GAEA,EAAA,YAAAwE,EAAA,IAAAC,GAAAC,EAAAtF,GAAA,UAAA,CAAA,GAEAuF,IAAAjH,EAAAwG,EAAA,YAAA,CAAA,GACA,EAAA,WAAAU,EAAA,IAAAtF,EAAAF,CAAA,GACAyF,IAAAC,GAAA;AAAA,MAAA,WAAAH,EAAA;AAAA;AAAA,MACA,OAAAC;AAAA,MAEA,iBAAAjH,EAAA,mBAAA;AAAA,IACA,CAAA,GAGA+B,IAAA3B,EAAA,OAAA;AAAA,MAAA,yBAAAqB,EAAA;AAAA,IACA,EAAA,GAIA2F,IAAAhH,EAAA,OAAA;AAAA,MAAA,kCAAA,CAAA,CAAAqB,EAAA;AAAA,IACA,EAAA,GAIA4D,IAAAtF,EAAA,EAAA,GACAoD,IAAA4D,EAAAtF,GAAA,OAAA,GACA4F,IAAAjC,GAAAC,GAAAlC,IAAAf,IAAAX,KAAA,gBAAAA,EAAA,WAAA,gBAAAW,EAAA,WAAA,GACAkF,IAAAlH,EAAA,MAAAqB,EAAA,oBAAA,CAAA,CAAA4D,EAAA,KAAA,GAEAkC,IAAAzD,GAAA;AAAA,MAAA,OAAAX;AAAA,MACA,UAAA4D,EAAAtF,GAAA,UAAA;AAAA,MACA,aAAAsF,EAAAtF,GAAA,aAAA;AAAA,MACA,OAAAsF,EAAAtF,GAAA,OAAA;AAAA,IACA,CAAA,GAGA+F,IAAApH,EAAA,MAAAqB,EAAA,SAAAjC,EAAA,OAAA,GAEAiI,IAAArH;AAAA,MAAA,MAAAqB,KAAA,QAAAA,EAAA,WAAAA,EAAA,MAAA;AAAA,QAEA,CAAA,EAAA,OAAAF,EAAA,OAAAE,KAAA,gBAAAA,EAAA,WAAAA,KAAA,gBAAAA,EAAA,OAAA,SAAAF,CAAA;AAAA,MACA,IAAAE,EAAA,MAAA,KAAA,CAAA,EAAA,OAAAF,EAAA,MAAAA,OAAAE,KAAA,gBAAAA,EAAA,MAAA;AAAA,IAEA,GAGA4C,KAAAjE,EAAA,MAAA;AACA,YAAAsH,IAAAjG,EAAA,MAAA,UAAA,CAAA,EAAA,OAAAF,GAAA,MAAAE,EAAA,UAAAF,EAAA;AACA,aAAAmG,IAAA,IAAAA,IAAA;AAAA,IAAA,CAAA,GAGAC,KAAAvH,EAAA,MAAA;;AACA,aAAAqB,EAAA,YACAW,IAAAX,KAAA,gBAAAA,EAAA,UAAA,gBAAAW,EAAA,SAGA;AAAA,IAAA,CAAA,GAIAwF,KAAAxH;AAAA,MAAA,MAAA,GAAAqB,EAAA,cAAAkF,IAAA,MAAAlF,EAAA,eAAAmF,IAAA,KAAA,KAAA,KAAA;AAAA,IACA,GAGA5D,KAAA,MAAA;AACA,MAAA6D,EAAA,UAGAhF,EAAA,QAAA;AAAA,IAAA,GAGAoB,IAAA,MAAA;AACA,MAAApB,EAAA,QAAA;AAAA,IAAA,GAGA2C,IAAA,MAAA;AACA,MAAAqC,EAAA,UAGAhF,EAAA,QAAA,CAAAA,EAAA,OAGAyF,EAAA,UACAjC,EAAA,QAAA;AAAA,IACA,GAGAwC,KAAA,MAAA;AACA,MAAAP,EAAA,UACAjC,EAAA,QAAA,KAGAxD,EAAA,UACAA,EAAA,QAAA;AAAA,IACA,GAGApB,IAAA,CAAAd,MAAA;AAEA,MAAA8B,EAAA,aACA4D,EAAA,QAAA,IACAxD,EAAA,QAAA,KAGAhC,EAAA,SAAAF,CAAA;AAAA,IAAA,GAGAoB,IAAA,MAAA;AACA,MAAAlB,EAAAS,EAAA,SAAA;AAAA,IAAA,GAGAwH,KAAA5D;AAAA,MAAA;AAAA,QACA,mBAAAC;AAAA,QACA,qBAAAC;AAAA,QACA,oBAAAC;AAAA,QACA,gBAAAxC;AAAA,QACA,mBAAAkF,EAAAtF,GAAA,kBAAA;AAAA,QACA,OAAAA,EAAA;AAAA,QACA,YAAAA,EAAA;AAAA,MACA;AAAA,MACA+C;AAAA,MACAxB;AAAA,MACAC;AAAA,IACA,GAGA8E,KAAA7C;AAAA,MAAA;AAAA,QACA,mBAAAf;AAAA,QACA,gBAAAtC;AAAA,MACA;AAAA,MACAoB;AAAA,IACA,GAGA+E,KAAA;AAAA,MAAA,CAAA1H,EAAA,cAAA,GAAA2C;AAAA,MACA,CAAA3C,EAAA,MAAA,GAAAG;AAAA,MACA,CAAAH,EAAA,SAAA,GAAAS;AAAA,MACA,GAAAgH;AAAA,IACA;AAGA,WAAAtG,EAAA,SACAwG;AAAA,MAAA;AAAA,MACA;AAAA;AAAA;AAAA,MACA;AAAA,IAGA,GAIA;AAAA;AAAA,MAAA,oBAAAlG;AAAA,MAEA,mBAAAmF;AAAA,MACA,yBAAAS;AAAA,MACA,eAAAH;AAAA,MACA,gBAAA3F;AAAA,MACA,cAAA0F;AAAA,MACA,4BAAAd;AAAA,MACA,eAAAY;AAAA,MACA,aAAAC;AAAA,MACA,YAAAT;AAAA,MACA,YAAAxB;AAAA,MACA,SAAAqB;AAAA,MACA,eAAAC;AAAA,MACA,SAAAC;AAAA,MACA,iBAAAgB;AAAA,MACA,mBAAAH;AAAA;AAAA;AAAA;AAAA;AAAA,MACA,OAAA/F;AAAA,MAKA,+BAAA0F;AAAA;AAAA,MACA,mBAAAjD;AAAA,MAGA,0BAAAqC;AAAA,MACA,qBAAApC;AAAA;AAAA,MACA,qBAAAyD;AAAA,MAGA,gBAAArD;AAAA,MACA,kBAAA/D;AAAA,MACA,mBAAAM;AAAA,MACA,oCAAA+G;AAAA,MACA,kBAAAE;AAAA,IACA;AAAA,EACA;AAEA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[3,4]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { defineComponent as o, computed as _ } from "vue";
|
|
2
|
+
import { B as a } from "./index.b201e81d.js";
|
|
3
|
+
import { C as i } from "./cross-circle-fill.7c07d16a.js";
|
|
4
|
+
import { u as l } from "./i18n.eb5b985b.js";
|
|
5
|
+
import { n } from "./_plugin-vue2_normalizer.71e2aa87.js";
|
|
6
|
+
import { BentoInfoIcon as p } from "../info-icon.js";
|
|
7
|
+
import "../assets/field-label.css";
|
|
8
|
+
const c = {
|
|
9
|
+
"en-US": {
|
|
10
|
+
error: "Error"
|
|
11
|
+
}
|
|
12
|
+
}, d = {
|
|
13
|
+
i18n: { messages: c },
|
|
14
|
+
name: "error-message"
|
|
15
|
+
}, f = /* @__PURE__ */ o({
|
|
16
|
+
...d,
|
|
17
|
+
props: {
|
|
18
|
+
/**
|
|
19
|
+
* The rendered error message
|
|
20
|
+
*/
|
|
21
|
+
errorMessage: {
|
|
22
|
+
type: String,
|
|
23
|
+
required: !0
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
setup(r) {
|
|
27
|
+
const { t: e } = l();
|
|
28
|
+
return { __sfc: !0, t: e, BentoTypography: a, CrossCircleIcon: i };
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
var u = function() {
|
|
32
|
+
var e = this, t = e._self._c, s = e._self._setupProxy;
|
|
33
|
+
return t(s.BentoTypography, { staticClass: "b-error-message", attrs: { id: e.$attrs.id, el: "span", "aria-live": "polite" } }, [t("div", { staticClass: "b-error-message__icon" }, [t(s.CrossCircleIcon, { attrs: { "svg-title": s.t("error") } })], 1), e._v(" " + e._s(e.errorMessage) + " ")]);
|
|
34
|
+
}, m = [], b = /* @__PURE__ */ n(
|
|
35
|
+
f,
|
|
36
|
+
u,
|
|
37
|
+
m,
|
|
38
|
+
!1,
|
|
39
|
+
null,
|
|
40
|
+
"2490b85a",
|
|
41
|
+
null,
|
|
42
|
+
null
|
|
43
|
+
);
|
|
44
|
+
const F = b.exports, y = {
|
|
45
|
+
"en-US": {
|
|
46
|
+
optional: "optional",
|
|
47
|
+
required: "required"
|
|
48
|
+
}
|
|
49
|
+
}, g = {
|
|
50
|
+
i18n: { messages: y }
|
|
51
|
+
}, v = /* @__PURE__ */ o({
|
|
52
|
+
...g,
|
|
53
|
+
__name: "field-label",
|
|
54
|
+
props: {
|
|
55
|
+
/**
|
|
56
|
+
* Renders the dropdown with a condensed style.
|
|
57
|
+
*/
|
|
58
|
+
condensed: { type: Boolean, default: !1 },
|
|
59
|
+
/**
|
|
60
|
+
* Field label
|
|
61
|
+
*/
|
|
62
|
+
label: {
|
|
63
|
+
type: String,
|
|
64
|
+
default: null
|
|
65
|
+
},
|
|
66
|
+
/**
|
|
67
|
+
* Sets the field as optional
|
|
68
|
+
*/
|
|
69
|
+
optional: {
|
|
70
|
+
type: Boolean,
|
|
71
|
+
default: !1
|
|
72
|
+
},
|
|
73
|
+
/**
|
|
74
|
+
* Sets the field as required
|
|
75
|
+
*/
|
|
76
|
+
required: {
|
|
77
|
+
type: Boolean,
|
|
78
|
+
default: !1
|
|
79
|
+
},
|
|
80
|
+
/**
|
|
81
|
+
* Adds a info icon next to the label to display the passed tooltip message.
|
|
82
|
+
*/
|
|
83
|
+
tooltipText: {
|
|
84
|
+
type: String,
|
|
85
|
+
default: null
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
setup(r) {
|
|
89
|
+
const e = r, { t } = l(), s = _(() => ({ "b-field-label--condensed": e.condensed }));
|
|
90
|
+
return { __sfc: !0, props: e, t, conditionalClasses: s, BentoInfoIcon: p, BentoTypography: a };
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
var C = function() {
|
|
94
|
+
var e = this, t = e._self._c, s = e._self._setupProxy;
|
|
95
|
+
return t("label", { staticClass: "b-field-label", class: s.conditionalClasses }, [t(s.BentoTypography, { attrs: { el: "span", stronger: "" } }, [e.label ? [e._v(" " + e._s(e.label))] : [e._t("default")]], 2), e.tooltipText ? t(s.BentoTypography, { staticClass: "b-field-label__tooltip-wrapper", attrs: { el: "span" } }, [t(s.BentoInfoIcon, { staticClass: "b-field-label__tooltip", attrs: { "tooltip-text": e.tooltipText } })], 1) : e._e(), e.required ? t(s.BentoTypography, { staticClass: "b-field-label__requirement", attrs: { el: "span" } }, [e._v("(" + e._s(s.t("required")) + ")")]) : e.optional ? t(s.BentoTypography, { staticClass: "b-field-label__requirement", attrs: { el: "span" } }, [e._v("(" + e._s(s.t("optional")) + ")")]) : e._e()], 1);
|
|
96
|
+
}, B = [], x = /* @__PURE__ */ n(
|
|
97
|
+
v,
|
|
98
|
+
C,
|
|
99
|
+
B,
|
|
100
|
+
!1,
|
|
101
|
+
null,
|
|
102
|
+
"2ce625aa",
|
|
103
|
+
null,
|
|
104
|
+
null
|
|
105
|
+
);
|
|
106
|
+
const M = x.exports;
|
|
107
|
+
export {
|
|
108
|
+
F as E,
|
|
109
|
+
M as F
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=field-label.01df3cba.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-label.01df3cba.js","sources":["../../src/components/internal/error-message/error-message.vue","../../src/components/internal/field-label/field-label.vue"],"sourcesContent":["<template>\n <bento-typography :id=\"$attrs.id\" class=\"b-error-message\" el=\"span\" aria-live=\"polite\">\n <div class=\"b-error-message__icon\">\n <cross-circle-icon :svg-title=\"t('error')\" />\n </div>\n {{ errorMessage }}\n </bento-typography>\n</template>\n\n<script setup lang=\"ts\">\n import { BentoTypography } from '@/components/typography';\n import CrossCircleIcon from '@adyen/ui-assets-icons-16/vue/cross-circle-fill';\n import { useI18n } from '@/utils/ts/i18n';\n import messages from './messages.json';\n\n type MessageSchema = (typeof messages)['en-US'];\n\n /**\n * An error message component should be used whenever it is necessary to add an error message to a component.\n * If adding to a form component, the proper accessibility measures should be taken when necessary\n * (ex. associating an element with this one using aria-describedby).\n\n * @example\n * import { ErrorMessage } from '@/components/internal/error-message';\n *\n * export default {\n * components: { ErrorMessage },\n * template: `\n * <error-message :error-message=\"errorMessage\" />\n * `\n * }\n */\n\n defineProps({\n /**\n * The rendered error message\n */\n errorMessage: {\n type: String,\n required: true,\n },\n });\n\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n</script>\n\n<script lang=\"ts\">\n export default {\n i18n: { messages },\n name: 'error-message',\n };\n</script>\n\n<style lang=\"scss\" scoped src=\"./error-message.scss\" />\n","<template>\n <label class=\"b-field-label\" :class=\"conditionalClasses\">\n <bento-typography el=\"span\" stronger>\n <template v-if=\"label\"> {{ label }}</template>\n <template v-else><slot></slot></template>\n </bento-typography>\n <bento-typography v-if=\"!!tooltipText\" el=\"span\" class=\"b-field-label__tooltip-wrapper\">\n <bento-info-icon :tooltip-text=\"tooltipText\" class=\"b-field-label__tooltip\" />\n </bento-typography>\n <bento-typography v-if=\"required\" class=\"b-field-label__requirement\" el=\"span\"\n >({{ t('required') }})</bento-typography\n >\n <bento-typography v-else-if=\"optional\" class=\"b-field-label__requirement\" el=\"span\"\n >({{ t('optional') }})</bento-typography\n >\n </label>\n</template>\n\n<script setup lang=\"ts\">\n import { BentoInfoIcon } from '@/components/info-icon';\n import { BentoTypography } from '@/components/typography';\n\n import { useI18n } from '@/utils/ts/i18n';\n\n import messages from './messages.json';\n import { computed } from 'vue';\n\n type MessageSchema = (typeof messages)['en-US'];\n\n const props = defineProps({\n /**\n * Renders the dropdown with a condensed style.\n */\n condensed: { type: Boolean, default: false },\n /**\n * Field label\n */\n label: {\n type: String,\n default: null,\n },\n /**\n * Sets the field as optional\n */\n optional: {\n type: Boolean,\n default: false,\n },\n /**\n * Sets the field as required\n */\n required: {\n type: Boolean,\n default: false,\n },\n /**\n * Adds a info icon next to the label to display the passed tooltip message.\n */\n tooltipText: {\n type: String,\n default: null,\n },\n });\n\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n\n const conditionalClasses = computed(() => ({ 'b-field-label--condensed': props.condensed }));\n</script>\n\n<script lang=\"ts\">\n /**\n * Internal component to handle the labels for all field components\n\n * @example\n * import { FieldLabel } from '@/components/internal/field-label';\n *\n * export default {\n * components: { FieldLabel },\n * template: `\n * <field-label label=\"Label\" tooltip-text=\"Tooltip info\" required />\n * `\n * }\n */\n export default {\n i18n: { messages },\n };\n</script>\n\n<style lang=\"scss\" scoped src=\"./field-label.scss\" />\n"],"names":["__default__$1","messages$1","t","useI18n","__default__","messages","conditionalClasses","computed","props"],"mappings":";;;;;;;;;;;GA+CIA,IAAA;AAAA,EAAe,MAAA,EAAA,UAAAC,EAAA;AAAA,EACM,MAAA;AAErB;;;;;;;;;;;;AAPA,UAAA,EAAA,GAAAC,EAAA,IAAAC,EAAA;;;;;;;;;;;;;;;;;;;;;;GCwCAC,IAAA;AAAA,EAAe,MAAA,EAAA,UAAAC,EAAA;AAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBArBA,EAAA,EAAA,IAAAF,EAAA,GAEAG,IAAAC,EAAA,OAAA,EAAA,4BAAAC,EAAA,UAAA,EAAA;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ref as r, onMounted as R, computed as f, defineComponent as x } from "vue";
|
|
2
|
-
import { a as L } from "./button.
|
|
3
|
-
import { u as y } from "./i18n.
|
|
4
|
-
import { C, a as b } from "./chevron-left.
|
|
2
|
+
import { a as L } from "./button.7dd8d4de.js";
|
|
3
|
+
import { u as y } from "./i18n.eb5b985b.js";
|
|
4
|
+
import { C, a as b } from "./chevron-left.5edf02ac.js";
|
|
5
5
|
import { o as m } from "./resize.a041304d.js";
|
|
6
6
|
import { n as W } from "./_plugin-vue2_normalizer.71e2aa87.js";
|
|
7
7
|
import "../assets/fixed-scroller.css";
|
|
@@ -105,4 +105,4 @@ const U = P.exports;
|
|
|
105
105
|
export {
|
|
106
106
|
U as F
|
|
107
107
|
};
|
|
108
|
-
//# sourceMappingURL=fixed-scroller.
|
|
108
|
+
//# sourceMappingURL=fixed-scroller.42354ccc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixed-scroller.8994e30a.js","sources":["../../src/components/internal/fixed-scroller/composables/useFixedScroller.ts","../../src/components/internal/fixed-scroller/fixed-scroller.vue"],"sourcesContent":["import { observeSizeOfElement } from '@/utils/ts/resize';\nimport { computed, onMounted, ref } from 'vue';\nimport type { Ref } from 'vue';\n\n// Adding an offset of \"1\" so that the border can be shown within the boundaries\nconst OVERFLOW_CLIP_OFFSET = 1;\n// Add the gradient offset to the calculations\nconst GRADIENT_OFFSET = 40;\n\ninterface useFixedScrollerProps {\n contentRef?: Ref<HTMLElement | undefined>;\n containerRef?: Ref<HTMLElement | undefined>;\n leftButtonRef?: Ref<HTMLElement | undefined>;\n rightButtonRef?: Ref<HTMLElement | undefined>;\n}\n\n/**\n * Function to calculate the offset of each view and change the \"view\" via offsets\n * through the functions `scrollLeft` and `scrollRight` whilst providing a way to\n * show and hide the buttons based on the current \"view\" via\n * `shouldShowLeftButton` and `shouldShowRightButton`.\n *\n * Each view is pre-calculated (offsetArray) and updated if the content changes as a computed ref:\n * First view: Always 0 (x axis beginning).\n * Last view: total content space - visible width\n * Intermediate views: Previous offset (to the left) plus the visible space taking\n * away the space the buttons take so that the whole view can be rendered\n *\n *\n * @param {useFixedScrollerProps} props - All the necessary references to calculate the scroll\n * @param {Ref<HTMLElement | undefined>} props.containerRef - Reference to the container, this defines the visible space width\n * @param {Ref<HTMLElement | undefined>} props.contentRef - Reference to the content itself, this defines the total content width\n * @param {Ref<HTMLElement | undefined>} props.leftButtonRef - Reference to the left button, used to calculate total space in which the content will be rendered\n * @param {Ref<HTMLElement | undefined>} props.rightButtonRef - Reference to the right button, used to calculate total space in which the content will be rendered\n * @returns {Object} response - Values used in the view to show the buttons and to change the view right or left\n * @returns {Ref<number>} response.offset - Offset value by which the view will move on the x axis. To be used in `styles`.\n * @returns {ComputedRef<boolean>} response.shouldShowLeftButton - Indicates if the button on the left should be shown\n * @returns {ComputedRef<boolean>} response.shouldShowRightButton - Indicates if the button on the right should be shown\n * @returns {() => {}} response.scrollLeft - Used to shift the view to the left\n * @returns {() => {}} response.scrollRight - Used to shift the view to the right\n */\nexport const useFixedScroller = ({\n contentRef,\n containerRef,\n leftButtonRef,\n rightButtonRef,\n}: useFixedScrollerProps) => {\n const offset = ref(0);\n const currentView = ref(0);\n\n // Calculated using 'scrollWidth' to get the full width of the content\n const totalContentWidth = ref(0);\n // Calculated using 'clientWidth' to get the rendered componen width\n const visibleSpaceWidth = ref(0);\n\n onMounted(() => {\n observeSizeOfElement(containerRef.value, () => {\n if (containerRef.value) {\n // Set new width when resized\n visibleSpaceWidth.value = containerRef.value.offsetWidth;\n // Reset the offset and view\n currentView.value = 0;\n offset.value = 0;\n }\n });\n\n observeSizeOfElement(contentRef.value, () => {\n totalContentWidth.value = contentRef.value?.scrollWidth;\n });\n });\n\n // Sum of the space used by the Left and Right buttons\n // Used to calculate how much space the \"actual\" visible space is\n const buttonsWidth = computed(() => {\n const leftButtonWidth = leftButtonRef.value?.scrollWidth\n ? leftButtonRef.value.scrollWidth + GRADIENT_OFFSET\n : 0;\n const rightButtonWidth = rightButtonRef.value?.scrollWidth\n ? rightButtonRef.value.scrollWidth + GRADIENT_OFFSET\n : 0;\n\n return leftButtonWidth + rightButtonWidth;\n });\n // Total number of pages/views available.\n // Calculated as \"ceil\" because if the space doesn't fit \"one view\" (irrational number) the content flows to the next view (integer).\n const totalViews = computed(() => Math.ceil(totalContentWidth.value / visibleSpaceWidth.value) ?? 0);\n\n // Calculation of offsets per view (index).\n // This allows to easily swap the offset without on-the-fly calculations\n const offsetArray = computed(() => {\n const calculatedOffsetList = new Array(totalViews.value).fill(0);\n\n calculatedOffsetList.forEach((_, index) => {\n // First offset will be 0\n if (index === 0) {\n return;\n }\n\n // Calculate last\n if (index === totalViews.value - 1) {\n calculatedOffsetList[calculatedOffsetList.length - 1] = -(\n totalContentWidth.value -\n visibleSpaceWidth.value +\n OVERFLOW_CLIP_OFFSET\n );\n\n return;\n }\n\n // Calculate each offset - Move 1 view\n const previousOffset = calculatedOffsetList[index - 1];\n calculatedOffsetList[index] = -(visibleSpaceWidth.value + Math.abs(previousOffset) - buttonsWidth.value);\n });\n\n return calculatedOffsetList;\n });\n\n // Hide left button when it's the first view\n const shouldShowLeftButton = computed(() => currentView.value !== 0);\n // Hide right button if it's the last view\n const shouldShowRightButton = computed(\n () => offset.value >= -(totalContentWidth.value - visibleSpaceWidth.value - 1)\n );\n\n /**\n * Shifts the current offset by one view to the left.\n */\n const scrollLeft = () => {\n // Do nothing if it is already in page 0\n if (currentView.value === 0) {\n return;\n }\n\n currentView.value -= 1;\n offset.value = offsetArray.value[currentView.value];\n };\n\n /**\n * Shifts the current offset by one view to the right.\n */\n const scrollRight = () => {\n // Do nothing if it is already in last page\n if (currentView.value === totalViews.value - 1) {\n return;\n }\n\n currentView.value += 1;\n offset.value = offsetArray.value[currentView.value];\n };\n\n return {\n offset,\n shouldShowLeftButton,\n shouldShowRightButton,\n\n // Methods\n scrollLeft,\n scrollRight,\n };\n};\n","<template>\n <div ref=\"fixedScrollerRef\" class=\"b-fixed-scroller\">\n <div class=\"b-fixed-scroller__container\">\n <div\n ref=\"contentRef\"\n class=\"b-fixed-scroller__content\"\n :style=\"{\n transform: `translateX(${offset}px)`,\n paddingTop: shouldShowLeftButton || shouldShowRightButton ? `${extraPaddingTop}px` : null,\n }\"\n >\n <slot></slot>\n </div>\n </div>\n\n <div v-if=\"shouldShowLeftButton\" ref=\"leftButtonRef\" class=\"b-fixed-scroller__left\">\n <bento-button variant=\"secondary\" :aria-label=\"t('scrollLeft')\" :condensed=\"condensed\" @click=\"scrollLeft\">\n <template #iconLeft>\n <chevron-left-icon svg-title=\"checked\" aria-hidden=\"true\" />\n </template>\n </bento-button>\n </div>\n <div v-if=\"shouldShowRightButton\" ref=\"rightButtonRef\" class=\"b-fixed-scroller__right\">\n <bento-button\n variant=\"secondary\"\n :aria-label=\"t('scrollRight')\"\n :condensed=\"condensed\"\n @click=\"scrollRight\"\n >\n <template #iconLeft>\n <chevron-right-icon svg-title=\"checked\" aria-hidden=\"true\" />\n </template>\n </bento-button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { ref } from 'vue';\n import { BentoButton } from '@/components/button';\n import { useFixedScroller } from './composables';\n import { useI18n } from '@/utils/ts/i18n';\n import ChevronLeftIcon from '@adyen/ui-assets-icons-16/vue/chevron-left';\n import ChevronRightIcon from '@adyen/ui-assets-icons-16/vue/chevron-right';\n\n import messages from './messages.json';\n\n type MessageSchema = (typeof messages)['en-US'];\n\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n\n const contentRef = ref(null);\n const fixedScrollerRef = ref(null);\n const leftButtonRef = ref(null);\n const rightButtonRef = ref(null);\n\n defineProps({\n /**\n * Applies the condensed style to the buttons\n */\n condensed: { type: Boolean, default: false },\n /**\n * Padding to be applied to the top of the scroller container\n */\n extraPaddingTop: { type: Number, default: 0 },\n });\n\n const { offset, shouldShowLeftButton, shouldShowRightButton, scrollLeft, scrollRight } = useFixedScroller({\n contentRef,\n containerRef: fixedScrollerRef,\n leftButtonRef,\n rightButtonRef,\n });\n</script>\n\n<script lang=\"ts\">\n /**\n * Allows to horizontally scroll content by one view at a time.\n *\n * @example\n * import { FixedScroller } from '@/internal';\n *\n * export default {\n * components: { FixedScroller },\n * template: `\n * <fixed-scroller>\n * <div style=\"display: flex; gap: 8px;\">\n * {{ Content here }}\n * </div>\n * </fixed-scroller>\n * `\n * }\n */\n export default {\n i18n: { messages },\n };\n</script>\n\n<style lang=\"scss\" scoped src=\"./fixed-scroller.scss\" />\n"],"names":["OVERFLOW_CLIP_OFFSET","GRADIENT_OFFSET","useFixedScroller","contentRef","containerRef","leftButtonRef","rightButtonRef","offset","ref","currentView","totalContentWidth","visibleSpaceWidth","onMounted","observeSizeOfElement","_a","buttonsWidth","computed","leftButtonWidth","rightButtonWidth","_b","totalViews","offsetArray","calculatedOffsetList","_","index","previousOffset","shouldShowLeftButton","shouldShowRightButton","__default__","messages","t","useI18n","fixedScrollerRef","scrollLeft","scrollRight"],"mappings":";;;;;;;AAKA,MAAAA,IAAA,GAEAC,IAAA,IAkCOC,IAAA,CAAA;AAAA,EAA0B,YAAAC;AAAA,EAC7B,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAEJ,MAAA;AACI,QAAAC,IAAAC,EAAA,CAAA,GACAC,IAAAD,EAAA,CAAA,GAGAE,IAAAF,EAAA,CAAA,GAEAG,IAAAH,EAAA,CAAA;AAEA,EAAAI,EAAA,MAAA;AACI,IAAAC,EAAAT,EAAA,OAAA,MAAA;AACI,MAAAA,EAAA,UAEIO,EAAA,QAAAP,EAAA,MAAA,aAEAK,EAAA,QAAA,GACAF,EAAA,QAAA;AAAA,IACJ,CAAA,GAGJM,EAAAV,EAAA,OAAA,MAAA;;AACI,MAAAO,EAAA,SAAAI,IAAAX,EAAA,UAAA,gBAAAW,EAAA;AAAA,IAA4C,CAAA;AAAA,EAC/C,CAAA;AAKL,QAAAC,IAAAC,EAAA,MAAA;;AACI,UAAAC,KAAAH,IAAAT,EAAA,UAAA,QAAAS,EAAA,cAAAT,EAAA,MAAA,cAAAJ,IAAA,GAGAiB,KAAAC,IAAAb,EAAA,UAAA,QAAAa,EAAA,cAAAb,EAAA,MAAA,cAAAL,IAAA;AAIA,WAAAgB,IAAAC;AAAA,EAAyB,CAAA,GAI7BE,IAAAJ,EAAA,MAAA,KAAA,KAAAN,EAAA,QAAAC,EAAA,KAAA,KAAA,CAAA,GAIAU,IAAAL,EAAA,MAAA;AACI,UAAAM,IAAA,IAAA,MAAAF,EAAA,KAAA,EAAA,KAAA,CAAA;AAEA,WAAAE,EAAA,QAAA,CAAAC,GAAAC,MAAA;AAEI,UAAAA,MAAA;AACI;AAIJ,UAAAA,MAAAJ,EAAA,QAAA,GAAA;AACI,QAAAE,EAAAA,EAAA,SAAA,CAAA,IAAA,EAAAZ,EAAA,QAAAC,EAAA,QAAAX;AAMA;AAAA;AAIJ,YAAAyB,IAAAH,EAAAE,IAAA,CAAA;AACA,MAAAF,EAAAE,CAAA,IAAA,EAAAb,EAAA,QAAA,KAAA,IAAAc,CAAA,IAAAV,EAAA;AAAA,IAAkG,CAAA,GAGtGO;AAAA,EAAO,CAAA,GAIXI,IAAAV,EAAA,MAAAP,EAAA,UAAA,CAAA,GAEAkB,IAAAX;AAAA,IAA8B,MAAAT,EAAA,SAAA,EAAAG,EAAA,QAAAC,EAAA,QAAA;AAAA,EACkD;AA6BhF,SAAA;AAAA,IAAO,QAAAJ;AAAA,IACH,sBAAAmB;AAAA,IACA,uBAAAC;AAAA;AAAA,IACA,YA1BJ,MAAA;AAEI,MAAAlB,EAAA,UAAA,MAIAA,EAAA,SAAA,GACAF,EAAA,QAAAc,EAAA,MAAAZ,EAAA,KAAA;AAAA,IAAkD;AAAA,IAsBlD,aAhBJ,MAAA;AAEI,MAAAA,EAAA,UAAAW,EAAA,QAAA,MAIAX,EAAA,SAAA,GACAF,EAAA,QAAAc,EAAA,MAAAZ,EAAA,KAAA;AAAA,IAAkD;AAAA,EAUlD;AAER;;;;;GClEImB,IAAA;AAAA,EAAe,MAAA,EAAA,UAAAC,EAAA;AAEf;;;;;;;;;;;;;;AA9CA,UAAA,EAAA,GAAAC,EAAA,IAAAC,EAAA,GAEA5B,IAAAK,EAAA,IAAA,GACAwB,IAAAxB,EAAA,IAAA,GACAH,IAAAG,EAAA,IAAA,GACAF,IAAAE,EAAA,IAAA,GAaA,EAAA,QAAAD,GAAA,sBAAAmB,GAAA,uBAAAC,GAAA,YAAAM,GAAA,aAAAC,EAAA,IAAAhC,EAAA;AAAA,MAA0G,YAAAC;AAAA,MACtG,cAAA6B;AAAA,MACc,eAAA3B;AAAA,MACd,gBAAAC;AAAA,IACA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"fixed-scroller.42354ccc.js","sources":["../../src/components/internal/fixed-scroller/composables/useFixedScroller.ts","../../src/components/internal/fixed-scroller/fixed-scroller.vue"],"sourcesContent":["import { observeSizeOfElement } from '@/utils/ts/resize';\nimport { computed, onMounted, ref } from 'vue';\nimport type { Ref } from 'vue';\n\n// Adding an offset of \"1\" so that the border can be shown within the boundaries\nconst OVERFLOW_CLIP_OFFSET = 1;\n// Add the gradient offset to the calculations\nconst GRADIENT_OFFSET = 40;\n\ninterface useFixedScrollerProps {\n contentRef?: Ref<HTMLElement | undefined>;\n containerRef?: Ref<HTMLElement | undefined>;\n leftButtonRef?: Ref<HTMLElement | undefined>;\n rightButtonRef?: Ref<HTMLElement | undefined>;\n}\n\n/**\n * Function to calculate the offset of each view and change the \"view\" via offsets\n * through the functions `scrollLeft` and `scrollRight` whilst providing a way to\n * show and hide the buttons based on the current \"view\" via\n * `shouldShowLeftButton` and `shouldShowRightButton`.\n *\n * Each view is pre-calculated (offsetArray) and updated if the content changes as a computed ref:\n * First view: Always 0 (x axis beginning).\n * Last view: total content space - visible width\n * Intermediate views: Previous offset (to the left) plus the visible space taking\n * away the space the buttons take so that the whole view can be rendered\n *\n *\n * @param {useFixedScrollerProps} props - All the necessary references to calculate the scroll\n * @param {Ref<HTMLElement | undefined>} props.containerRef - Reference to the container, this defines the visible space width\n * @param {Ref<HTMLElement | undefined>} props.contentRef - Reference to the content itself, this defines the total content width\n * @param {Ref<HTMLElement | undefined>} props.leftButtonRef - Reference to the left button, used to calculate total space in which the content will be rendered\n * @param {Ref<HTMLElement | undefined>} props.rightButtonRef - Reference to the right button, used to calculate total space in which the content will be rendered\n * @returns {Object} response - Values used in the view to show the buttons and to change the view right or left\n * @returns {Ref<number>} response.offset - Offset value by which the view will move on the x axis. To be used in `styles`.\n * @returns {ComputedRef<boolean>} response.shouldShowLeftButton - Indicates if the button on the left should be shown\n * @returns {ComputedRef<boolean>} response.shouldShowRightButton - Indicates if the button on the right should be shown\n * @returns {() => {}} response.scrollLeft - Used to shift the view to the left\n * @returns {() => {}} response.scrollRight - Used to shift the view to the right\n */\nexport const useFixedScroller = ({\n contentRef,\n containerRef,\n leftButtonRef,\n rightButtonRef,\n}: useFixedScrollerProps) => {\n const offset = ref(0);\n const currentView = ref(0);\n\n // Calculated using 'scrollWidth' to get the full width of the content\n const totalContentWidth = ref(0);\n // Calculated using 'clientWidth' to get the rendered componen width\n const visibleSpaceWidth = ref(0);\n\n onMounted(() => {\n observeSizeOfElement(containerRef.value, () => {\n if (containerRef.value) {\n // Set new width when resized\n visibleSpaceWidth.value = containerRef.value.offsetWidth;\n // Reset the offset and view\n currentView.value = 0;\n offset.value = 0;\n }\n });\n\n observeSizeOfElement(contentRef.value, () => {\n totalContentWidth.value = contentRef.value?.scrollWidth;\n });\n });\n\n // Sum of the space used by the Left and Right buttons\n // Used to calculate how much space the \"actual\" visible space is\n const buttonsWidth = computed(() => {\n const leftButtonWidth = leftButtonRef.value?.scrollWidth\n ? leftButtonRef.value.scrollWidth + GRADIENT_OFFSET\n : 0;\n const rightButtonWidth = rightButtonRef.value?.scrollWidth\n ? rightButtonRef.value.scrollWidth + GRADIENT_OFFSET\n : 0;\n\n return leftButtonWidth + rightButtonWidth;\n });\n // Total number of pages/views available.\n // Calculated as \"ceil\" because if the space doesn't fit \"one view\" (irrational number) the content flows to the next view (integer).\n const totalViews = computed(() => Math.ceil(totalContentWidth.value / visibleSpaceWidth.value) ?? 0);\n\n // Calculation of offsets per view (index).\n // This allows to easily swap the offset without on-the-fly calculations\n const offsetArray = computed(() => {\n const calculatedOffsetList = new Array(totalViews.value).fill(0);\n\n calculatedOffsetList.forEach((_, index) => {\n // First offset will be 0\n if (index === 0) {\n return;\n }\n\n // Calculate last\n if (index === totalViews.value - 1) {\n calculatedOffsetList[calculatedOffsetList.length - 1] = -(\n totalContentWidth.value -\n visibleSpaceWidth.value +\n OVERFLOW_CLIP_OFFSET\n );\n\n return;\n }\n\n // Calculate each offset - Move 1 view\n const previousOffset = calculatedOffsetList[index - 1];\n calculatedOffsetList[index] = -(visibleSpaceWidth.value + Math.abs(previousOffset) - buttonsWidth.value);\n });\n\n return calculatedOffsetList;\n });\n\n // Hide left button when it's the first view\n const shouldShowLeftButton = computed(() => currentView.value !== 0);\n // Hide right button if it's the last view\n const shouldShowRightButton = computed(\n () => offset.value >= -(totalContentWidth.value - visibleSpaceWidth.value - 1)\n );\n\n /**\n * Shifts the current offset by one view to the left.\n */\n const scrollLeft = () => {\n // Do nothing if it is already in page 0\n if (currentView.value === 0) {\n return;\n }\n\n currentView.value -= 1;\n offset.value = offsetArray.value[currentView.value];\n };\n\n /**\n * Shifts the current offset by one view to the right.\n */\n const scrollRight = () => {\n // Do nothing if it is already in last page\n if (currentView.value === totalViews.value - 1) {\n return;\n }\n\n currentView.value += 1;\n offset.value = offsetArray.value[currentView.value];\n };\n\n return {\n offset,\n shouldShowLeftButton,\n shouldShowRightButton,\n\n // Methods\n scrollLeft,\n scrollRight,\n };\n};\n","<template>\n <div ref=\"fixedScrollerRef\" class=\"b-fixed-scroller\">\n <div class=\"b-fixed-scroller__container\">\n <div\n ref=\"contentRef\"\n class=\"b-fixed-scroller__content\"\n :style=\"{\n transform: `translateX(${offset}px)`,\n paddingTop: shouldShowLeftButton || shouldShowRightButton ? `${extraPaddingTop}px` : null,\n }\"\n >\n <slot></slot>\n </div>\n </div>\n\n <div v-if=\"shouldShowLeftButton\" ref=\"leftButtonRef\" class=\"b-fixed-scroller__left\">\n <bento-button variant=\"secondary\" :aria-label=\"t('scrollLeft')\" :condensed=\"condensed\" @click=\"scrollLeft\">\n <template #iconLeft>\n <chevron-left-icon svg-title=\"checked\" aria-hidden=\"true\" />\n </template>\n </bento-button>\n </div>\n <div v-if=\"shouldShowRightButton\" ref=\"rightButtonRef\" class=\"b-fixed-scroller__right\">\n <bento-button\n variant=\"secondary\"\n :aria-label=\"t('scrollRight')\"\n :condensed=\"condensed\"\n @click=\"scrollRight\"\n >\n <template #iconLeft>\n <chevron-right-icon svg-title=\"checked\" aria-hidden=\"true\" />\n </template>\n </bento-button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { ref } from 'vue';\n import { BentoButton } from '@/components/button';\n import { useFixedScroller } from './composables';\n import { useI18n } from '@/utils/ts/i18n';\n import ChevronLeftIcon from '@adyen/ui-assets-icons-16/vue/chevron-left';\n import ChevronRightIcon from '@adyen/ui-assets-icons-16/vue/chevron-right';\n\n import messages from './messages.json';\n\n type MessageSchema = (typeof messages)['en-US'];\n\n const { t } = useI18n<{ message: MessageSchema }>({ messages });\n\n const contentRef = ref(null);\n const fixedScrollerRef = ref(null);\n const leftButtonRef = ref(null);\n const rightButtonRef = ref(null);\n\n defineProps({\n /**\n * Applies the condensed style to the buttons\n */\n condensed: { type: Boolean, default: false },\n /**\n * Padding to be applied to the top of the scroller container\n */\n extraPaddingTop: { type: Number, default: 0 },\n });\n\n const { offset, shouldShowLeftButton, shouldShowRightButton, scrollLeft, scrollRight } = useFixedScroller({\n contentRef,\n containerRef: fixedScrollerRef,\n leftButtonRef,\n rightButtonRef,\n });\n</script>\n\n<script lang=\"ts\">\n /**\n * Allows to horizontally scroll content by one view at a time.\n *\n * @example\n * import { FixedScroller } from '@/internal';\n *\n * export default {\n * components: { FixedScroller },\n * template: `\n * <fixed-scroller>\n * <div style=\"display: flex; gap: 8px;\">\n * {{ Content here }}\n * </div>\n * </fixed-scroller>\n * `\n * }\n */\n export default {\n i18n: { messages },\n };\n</script>\n\n<style lang=\"scss\" scoped src=\"./fixed-scroller.scss\" />\n"],"names":["OVERFLOW_CLIP_OFFSET","GRADIENT_OFFSET","useFixedScroller","contentRef","containerRef","leftButtonRef","rightButtonRef","offset","ref","currentView","totalContentWidth","visibleSpaceWidth","onMounted","observeSizeOfElement","_a","buttonsWidth","computed","leftButtonWidth","rightButtonWidth","_b","totalViews","offsetArray","calculatedOffsetList","_","index","previousOffset","shouldShowLeftButton","shouldShowRightButton","__default__","messages","t","useI18n","fixedScrollerRef","scrollLeft","scrollRight"],"mappings":";;;;;;;AAKA,MAAAA,IAAA,GAEAC,IAAA,IAkCOC,IAAA,CAAA;AAAA,EAA0B,YAAAC;AAAA,EAC7B,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAEJ,MAAA;AACI,QAAAC,IAAAC,EAAA,CAAA,GACAC,IAAAD,EAAA,CAAA,GAGAE,IAAAF,EAAA,CAAA,GAEAG,IAAAH,EAAA,CAAA;AAEA,EAAAI,EAAA,MAAA;AACI,IAAAC,EAAAT,EAAA,OAAA,MAAA;AACI,MAAAA,EAAA,UAEIO,EAAA,QAAAP,EAAA,MAAA,aAEAK,EAAA,QAAA,GACAF,EAAA,QAAA;AAAA,IACJ,CAAA,GAGJM,EAAAV,EAAA,OAAA,MAAA;;AACI,MAAAO,EAAA,SAAAI,IAAAX,EAAA,UAAA,gBAAAW,EAAA;AAAA,IAA4C,CAAA;AAAA,EAC/C,CAAA;AAKL,QAAAC,IAAAC,EAAA,MAAA;;AACI,UAAAC,KAAAH,IAAAT,EAAA,UAAA,QAAAS,EAAA,cAAAT,EAAA,MAAA,cAAAJ,IAAA,GAGAiB,KAAAC,IAAAb,EAAA,UAAA,QAAAa,EAAA,cAAAb,EAAA,MAAA,cAAAL,IAAA;AAIA,WAAAgB,IAAAC;AAAA,EAAyB,CAAA,GAI7BE,IAAAJ,EAAA,MAAA,KAAA,KAAAN,EAAA,QAAAC,EAAA,KAAA,KAAA,CAAA,GAIAU,IAAAL,EAAA,MAAA;AACI,UAAAM,IAAA,IAAA,MAAAF,EAAA,KAAA,EAAA,KAAA,CAAA;AAEA,WAAAE,EAAA,QAAA,CAAAC,GAAAC,MAAA;AAEI,UAAAA,MAAA;AACI;AAIJ,UAAAA,MAAAJ,EAAA,QAAA,GAAA;AACI,QAAAE,EAAAA,EAAA,SAAA,CAAA,IAAA,EAAAZ,EAAA,QAAAC,EAAA,QAAAX;AAMA;AAAA;AAIJ,YAAAyB,IAAAH,EAAAE,IAAA,CAAA;AACA,MAAAF,EAAAE,CAAA,IAAA,EAAAb,EAAA,QAAA,KAAA,IAAAc,CAAA,IAAAV,EAAA;AAAA,IAAkG,CAAA,GAGtGO;AAAA,EAAO,CAAA,GAIXI,IAAAV,EAAA,MAAAP,EAAA,UAAA,CAAA,GAEAkB,IAAAX;AAAA,IAA8B,MAAAT,EAAA,SAAA,EAAAG,EAAA,QAAAC,EAAA,QAAA;AAAA,EACkD;AA6BhF,SAAA;AAAA,IAAO,QAAAJ;AAAA,IACH,sBAAAmB;AAAA,IACA,uBAAAC;AAAA;AAAA,IACA,YA1BJ,MAAA;AAEI,MAAAlB,EAAA,UAAA,MAIAA,EAAA,SAAA,GACAF,EAAA,QAAAc,EAAA,MAAAZ,EAAA,KAAA;AAAA,IAAkD;AAAA,IAsBlD,aAhBJ,MAAA;AAEI,MAAAA,EAAA,UAAAW,EAAA,QAAA,MAIAX,EAAA,SAAA,GACAF,EAAA,QAAAc,EAAA,MAAAZ,EAAA,KAAA;AAAA,IAAkD;AAAA,EAUlD;AAER;;;;;GClEImB,IAAA;AAAA,EAAe,MAAA,EAAA,UAAAC,EAAA;AAEf;;;;;;;;;;;;;;AA9CA,UAAA,EAAA,GAAAC,EAAA,IAAAC,EAAA,GAEA5B,IAAAK,EAAA,IAAA,GACAwB,IAAAxB,EAAA,IAAA,GACAH,IAAAG,EAAA,IAAA,GACAF,IAAAE,EAAA,IAAA,GAaA,EAAA,QAAAD,GAAA,sBAAAmB,GAAA,uBAAAC,GAAA,YAAAM,GAAA,aAAAC,EAAA,IAAAhC,EAAA;AAAA,MAA0G,YAAAC;AAAA,MACtG,cAAA6B;AAAA,MACc,eAAA3B;AAAA,MACd,gBAAAC;AAAA,IACA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent as i, toRefs as r, computed as l, onMounted as c } from "vue";
|
|
2
|
-
import { B as _ } from "./index.
|
|
3
|
-
import { B as u } from "./button.
|
|
2
|
+
import { B as _ } from "./index.b201e81d.js";
|
|
3
|
+
import { B as u } from "./button.7dd8d4de.js";
|
|
4
4
|
import { BentoButtonActions as d } from "../button.js";
|
|
5
5
|
import { n as p } from "./_plugin-vue2_normalizer.71e2aa87.js";
|
|
6
6
|
import "../assets/footer-actions.css";
|
|
@@ -95,4 +95,4 @@ const w = b.exports;
|
|
|
95
95
|
export {
|
|
96
96
|
w as F
|
|
97
97
|
};
|
|
98
|
-
//# sourceMappingURL=footer-actions.
|
|
98
|
+
//# sourceMappingURL=footer-actions.2cd9079e.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"footer-actions.
|
|
1
|
+
{"version":3,"file":"footer-actions.2cd9079e.js","sources":["../../src/components/internal/footer-actions/footer-actions.vue"],"sourcesContent":["<template>\n <div class=\"b-footer-actions\">\n <div class=\"b-footer-actions__wrapper\">\n <bento-typography v-if=\"actionsLabel\" class=\"b-footer-actions__label\" el=\"span\" variant=\"body\" stronger>\n {{ actionsLabel }}\n </bento-typography>\n\n <bento-button-actions\n v-if=\"alignedActions.leftAligned\"\n class=\"b-footer-actions__left-group\"\n :actions=\"alignedActions.leftAligned\"\n layout=\"buttons-start\"\n ></bento-button-actions>\n\n <bento-button-actions\n class=\"b-footer-actions__right-group\"\n :actions=\"alignedActions.rightAligned\"\n layout=\"buttons-end\"\n ></bento-button-actions>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { BentoTypography } from '@/components/typography';\n import { computed, onMounted, PropType, toRefs } from 'vue';\n import { BentoButtonActions, BentoButtonActionsList, BentoButtonVariant } from '@/components/button';\n\n const props = defineProps({\n /**\n * List of actions that will be used to render the buttons.\n * First element in the list will be rendered as \"primary\".\n * All elements after the first will be rendered as \"secondary\".\n * But you may change the color of 1-st action to red with 'critial' key\n * Not more than 3 action buttons can be provided\n * Or 2 action buttons and 1 Label for them\n *\n * Each object in the list should have a `title`, an `event` and\n * (optional) a Vue `icon` from the library `@adyen/ui-assets-icons-16`.\n *\n * `title`: Button's text.\n *\n * `event`: Event triggered when clicking the Button.\n *\n * `icon`: Vue Icon from the library `@adyen/ui-assets-icons-16`.\n *\n * ```\n * [{\n * title: 'Primary',2\n * event: () => { ... },\n * icon: FourPeopleIcon\n * }, {\n * title: 'Secondary',\n * event: () => { ... }\n * }]\n * ```\n */\n actions: {\n type: Array as PropType<BentoButtonActionsList>,\n required: true,\n },\n /**\n * Text label that is displayed left to the action buttons\n */\n actionsLabel: {\n type: String,\n default: null,\n },\n /**\n * If passed - sets first button color to red\n */\n destructiveActions: {\n type: Boolean,\n default: false,\n },\n });\n\n const { actions, destructiveActions } = toRefs(props);\n\n const alignedActions = computed(() => {\n const rightAlignedButtons =\n actions.value.length < 3 ? actions.value : actions.value.slice(0, actions.value.length - 1);\n\n // Add red color to the 1-st Action button\n rightAlignedButtons[0].critical = destructiveActions.value || rightAlignedButtons[0].critical;\n\n return {\n leftAligned:\n actions.value.length === 3\n ? [\n {\n ...actions.value[actions.value.length - 1],\n variant: BentoButtonVariant.SECONDARY,\n },\n ]\n : null,\n rightAligned: [...rightAlignedButtons],\n };\n });\n\n onMounted(() => {\n if (props.actions && props.actions.length > 3) {\n throw new Error('Not more than 3 action buttons may be provided to Bento Modal default variant');\n }\n\n if (props.actionsLabel && props.actions && props.actions.length > 2) {\n throw new Error(\n 'Not more than 2 action buttons may be provided with actions label to Bento Modal default variant'\n );\n }\n });\n</script>\n\n<script lang=\"ts\">\n /**\n * Internal component to handle the logic of displaying actions in default Modal and Sidepanel\n\n * @example\n * import { FooterActions } from '@/components/internal/footer-actions';\n *\n * export default {\n * components: { FooterActions },\n * template: `\n * <footer-actions :actions=\"BentoButtonActionsList\" actions-label=\"Label\" :destructive-actions=\"true\" />\n * `\n * }\n */\n export default {};\n</script>\n\n<style lang=\"scss\" scoped src=\"./footer-actions.scss\" />\n"],"names":["__default__","actions","destructiveActions","toRefs","props","alignedActions","computed","rightAlignedButtons","BentoButtonVariant","onMounted"],"mappings":";;;;;;AA+HI,MAAAA,IAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAlDA,EAAA,SAAAC,GAAA,oBAAAC,EAAA,IAAAC,EAAAC,CAAA,GAEAC,IAAAC,EAAA,MAAA;AACI,YAAAC,IAAAN,EAAA,MAAA,SAAA,IAAAA,EAAA,QAAAA,EAAA,MAAA,MAAA,GAAAA,EAAA,MAAA,SAAA,CAAA;AAIA,aAAAM,EAAA,CAAA,EAAA,WAAAL,EAAA,SAAAK,EAAA,CAAA,EAAA,UAEA;AAAA,QAAO,aAAAN,EAAA,MAAA,WAAA,IAAA;AAAA,UAGO;AAAA,YACI,GAAAA,EAAA,MAAAA,EAAA,MAAA,SAAA,CAAA;AAAA,YAC6C,SAAAO,EAAA;AAAA,UACb;AAAA,QAChC,IAAA;AAAA,QAEJ,cAAA,CAAA,GAAAD,CAAA;AAAA,MAC2B;AAAA,IACzC,CAAA;AAGJ,WAAAE,EAAA,MAAA;AACI,UAAAL,EAAA,WAAAA,EAAA,QAAA,SAAA;AACI,cAAA,IAAA,MAAA,+EAAA;AAGJ,UAAAA,EAAA,gBAAAA,EAAA,WAAAA,EAAA,QAAA,SAAA;AACI,cAAA,IAAA;AAAA,UAAU;AAAA,QACN;AAAA,IAER,CAAA;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./index.
|
|
1
|
+
import "./index.4c062058.js";
|
|
2
2
|
const n = (r, t) => t > 5 ? "" : Array.isArray(r) ? r != null && r[0].text ? r == null ? void 0 : r[0].text : n(r == null ? void 0 : r[0].children, t + 1) : r == null ? void 0 : r.text, u = (r) => (t) => {
|
|
3
3
|
var i;
|
|
4
4
|
return n((i = r[t]) == null ? void 0 : i.call(r), 1);
|
|
@@ -6,4 +6,4 @@ const n = (r, t) => t > 5 ? "" : Array.isArray(r) ? r != null && r[0].text ? r =
|
|
|
6
6
|
export {
|
|
7
7
|
u as g
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=get-slot-text.
|
|
9
|
+
//# sourceMappingURL=get-slot-text.99c3d860.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-slot-text.
|
|
1
|
+
{"version":3,"file":"get-slot-text.99c3d860.js","sources":["../../src/utils/ts/get-slot-text/get-slot-text.ts"],"sourcesContent":["import { isVue2 } from 'vue-demi';\nimport type { Slots } from 'vue/types/v3-setup-context';\n\n// TODO: remove these types when vue 2 support has been removed\ntype vue2VNode = { text?: string; children?: vue2VNode };\n\nconst getTextFromChildren = (vNode: vue2VNode[] | vue2VNode, nestedLevel: number): string => {\n // We should not be checking for slot text more than 5 layers. If we are end the recursion.\n if (nestedLevel > 5) {\n return '';\n }\n if (Array.isArray(vNode)) {\n if (isVue2 && (vNode as Array<vue2VNode>)?.[0].text) {\n return vNode?.[0].text;\n }\n return getTextFromChildren(vNode?.[0].children, nestedLevel + 1);\n }\n return isVue2 ? (vNode as vue2VNode)?.text : vNode?.toString();\n};\n\n/**\n * Get text recursively from slot by giving slot name.\n * This recursion will only occur 5 times before the method gives up and returns an empty string.\n * @param slots - the slots provided the the component's setup function\n * @returns A function who's first parameter is the name of the slot.\n */\nexport const getSlotText = (slots: Slots) => (name: string) =>\n getTextFromChildren(slots[name]?.() as vue2VNode[] | vue2VNode, 1);\n\nexport default getSlotText;\n"],"names":["getTextFromChildren","vNode","nestedLevel","getSlotText","slots","name","_a"],"mappings":";AAMA,MAAMA,IAAsB,CAACC,GAAgCC,MAErDA,IAAc,IACP,KAEP,MAAM,QAAQD,CAAK,IACJA,KAAA,QAAAA,EAA6B,GAAG,OACpCA,KAAA,gBAAAA,EAAQ,GAAG,OAEfD,EAAoBC,KAAA,gBAAAA,EAAQ,GAAG,UAAUC,IAAc,CAAC,IAElDD,KAAA,gBAAAA,EAAqB,MAS7BE,IAAc,CAACC,MAAiB,CAACC,MAAA;;AAC1C,SAAAL,GAAoBM,IAAAF,EAAMC,OAAN,gBAAAC,EAAA,KAAAF,IAA4C,CAAC;AAAA;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent as r, computed as d } from "vue";
|
|
2
|
-
import { u as _ } from "./use-has-slot.
|
|
2
|
+
import { u as _ } from "./use-has-slot.fbeb19ec.js";
|
|
3
3
|
import { n as m } from "./_plugin-vue2_normalizer.71e2aa87.js";
|
|
4
4
|
import "../assets/grid-layout.css";
|
|
5
5
|
var s = /* @__PURE__ */ ((l) => (l.INLINE = "inline-size", l.SIZE = "size", l.NORMAL = "normal", l))(s || {});
|
|
@@ -75,4 +75,4 @@ export {
|
|
|
75
75
|
C as G,
|
|
76
76
|
s as a
|
|
77
77
|
};
|
|
78
|
-
//# sourceMappingURL=grid-layout.
|
|
78
|
+
//# sourceMappingURL=grid-layout.e0025286.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-layout.
|
|
1
|
+
{"version":3,"file":"grid-layout.e0025286.js","sources":["../../src/components/internal/grid-layout/grid-layout.types.ts","../../src/components/internal/grid-layout/grid-layout.vue"],"sourcesContent":["export enum GridLayoutContainerType {\n INLINE = 'inline-size',\n SIZE = 'size',\n NORMAL = 'normal',\n}\n\nexport interface GridLayoutColumnWidth {\n small: number | string;\n medium: number | string;\n large: number | string;\n}\n\nexport type GridLayoutColumnWidths = Array<'auto' | GridLayoutColumnWidth>;\n","<template>\n <div class=\"b-grid-layout\" :class=\"computedClasses\" data-testid=\"grid-layout\">\n <div\n v-if=\"hasSlot('col-1')\"\n class=\"b-grid-layout__column\"\n :class=\"computeColumnSize(0)\"\n data-testid=\"grid-layout-col-1\"\n >\n <slot name=\"col-1\"></slot>\n </div>\n <div\n v-if=\"hasSlot('col-2')\"\n class=\"b-grid-layout__column\"\n :class=\"computeColumnSize(1)\"\n data-testid=\"grid-layout-col-2\"\n >\n <slot name=\"col-2\"></slot>\n </div>\n <div\n v-if=\"hasSlot('col-3')\"\n class=\"b-grid-layout__column\"\n :class=\"computeColumnSize(2)\"\n data-testid=\"grid-layout-col-3\"\n >\n <slot name=\"col-3\"></slot>\n </div>\n <div\n v-if=\"hasSlot('col-4')\"\n class=\"b-grid-layout__column\"\n :class=\"computeColumnSize(3)\"\n data-testid=\"grid-layout-col-4\"\n >\n <slot name=\"col-4\"></slot>\n </div>\n <div\n v-if=\"hasSlot('col-5')\"\n class=\"b-grid-layout__column\"\n :class=\"computeColumnSize(4)\"\n data-testid=\"grid-layout-col-5\"\n >\n <slot name=\"col-5\"></slot>\n </div>\n <div\n v-if=\"hasSlot('col-6')\"\n class=\"b-grid-layout__column\"\n :class=\"computeColumnSize(5)\"\n data-testid=\"grid-layout-col-6\"\n >\n <slot name=\"col-6\"></slot>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { computed, defineComponent, PropType } from 'vue';\n import { useHasSlot } from '@/composables';\n import { GridLayoutColumnWidth, GridLayoutColumnWidths, GridLayoutContainerType } from './grid-layout.types';\n\n /**\n * Component used to render the grid layout in the bento-summary-grid. For internal use only\n */\n export default defineComponent({\n name: 'grid-layout',\n props: {\n /**\n * Sets the responsive columns widths for the grid.\n */\n columnWidth: {\n type: Array as PropType<GridLayoutColumnWidths>,\n default: null,\n validator: (array: GridLayoutColumnWidths) => array && array.length <= 6,\n },\n\n /**\n * Set the type of CSS container the grid layout has\n * @values inline-size, size, normal\n */\n containerType: {\n type: String as PropType<GridLayoutContainerType>,\n default: GridLayoutContainerType.INLINE,\n },\n\n /**\n * Sets the gap in the grid to 0.\n */\n noGap: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const hasSlot = useHasSlot(slots);\n\n // TODO: add a computedItems computed here that only returns the slots that are presents so as to be able to render the divs in the template via a v-for\n const computeColumnSize = index => {\n if (props.columnWidth?.[index] && props.columnWidth?.[index] !== 'auto') {\n const columnWidth = props.columnWidth[index] as GridLayoutColumnWidth;\n return [\n `b-grid-layout__column--${columnWidth.small}`,\n `b-grid-layout-m__column--${columnWidth.medium}`,\n `b-grid-layout-l__column--${columnWidth.large}`,\n ];\n }\n return null;\n };\n\n const computedClasses = computed(() => ({\n 'b-grid-layout--container-type-normal': props.containerType === GridLayoutContainerType.NORMAL,\n 'b-grid-layout--container-type-size': props.containerType === GridLayoutContainerType.SIZE,\n 'b-grid-layout--all-auto':\n props.columnWidth === null || props.columnWidth.every(width => width === 'auto'),\n 'b-grid-layout--no-gap': props.noGap,\n }));\n\n return {\n // Values\n computeColumnSize,\n computedClasses,\n\n // Methods\n hasSlot,\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped src=\"./grid-layout.scss\" />\n"],"names":["GridLayoutContainerType","GridLayoutContainerType2","_sfc_main","defineComponent","array","props","slots","hasSlot","useHasSlot","computeColumnSize","index","_a","_b","columnWidth","computedClasses","computed","width"],"mappings":";;;;AAAY,IAAAA,IAAA,kBAAAC,OACRA,EAAA,SAAA,eACAA,EAAA,OAAA,QACAA,EAAA,SAAA,UAHQA,IAAAD,KAAA,CAAA,CAAA;AC6DZ,MAAAE,IAAAC,EAAA;AAAA,EAAA,MAAA;AAAA,EACA,OAAA;AAAA;AAAA;AAAA;AAAA,IACA,aAAA;AAAA,MAIA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,CAAAC,MAAAA,KAAAA,EAAA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,IACA,eAAA;AAAA,MAMA,MAAA;AAAA,MACA,SAAAJ,EAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IACA,OAAA;AAAA,MAKA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EACA,MAAAK,GAAA,EAAA,OAAAC,EAAA,GAAA;AAEA,UAAAC,IAAAC,EAAAF,CAAA,GAGAG,IAAA,CAAAC,MAAA;;AACA,WAAAC,IAAAN,EAAA,gBAAA,QAAAM,EAAAD,QAAAE,IAAAP,EAAA,gBAAA,gBAAAO,EAAAF,QAAA,QAAA;AACA,cAAAG,IAAAR,EAAA,YAAAK,CAAA;AACA,eAAA;AAAA,UAAA,0BAAAG,EAAA;AAAA,UACA,4BAAAA,EAAA;AAAA,UACA,4BAAAA,EAAA;AAAA,QACA;AAAA;AAGA,aAAA;AAAA,IAAA,GAGAC,IAAAC,EAAA,OAAA;AAAA,MAAA,wCAAAV,EAAA,kBAAAL,EAAA;AAAA,MACA,sCAAAK,EAAA,kBAAAL,EAAA;AAAA,MACA,2BAAAK,EAAA,gBAAA,QAAAA,EAAA,YAAA,MAAA,CAAAW,MAAAA,MAAA,MAAA;AAAA,MAEA,yBAAAX,EAAA;AAAA,IACA,EAAA;AAGA,WAAA;AAAA;AAAA,MAAA,mBAAAI;AAAA,MAEA,iBAAAK;AAAA;AAAA,MACA,SAAAP;AAAA,IAGA;AAAA,EACA;AAEA,CAAA;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getCurrentInstance as p, computed as l } from "vue";
|
|
2
|
-
import "./index.
|
|
2
|
+
import "./index.4c062058.js";
|
|
3
3
|
import "vue-i18n";
|
|
4
4
|
let o = null;
|
|
5
5
|
const b = (e, r = !1) => {
|
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
$ as g,
|
|
29
29
|
b as u
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=i18n.
|
|
31
|
+
//# sourceMappingURL=i18n.eb5b985b.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.
|
|
1
|
+
{"version":3,"file":"i18n.eb5b985b.js","sources":["../../src/utils/ts/i18n.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject } from 'vue';\nimport type { WritableComputedRef } from 'vue';\nimport { useI18n as useI18nBridge } from 'vue-i18n-bridge';\nimport { isVue2 } from 'vue-demi';\nimport VueI18n from 'vue-i18n';\n\nexport const defaultI18nOptions = {\n locale: 'en-US',\n fallbackLocale: 'en-US',\n fallbackRoot: false,\n};\n\nlet i18n: VueI18n = null;\n\nexport function createI18n(options = defaultI18nOptions): VueI18n {\n i18n = new VueI18n(options);\n return i18n;\n}\n\nexport interface Composer<MessageKey> {\n locale: WritableComputedRef<string>;\n t(key: MessageKey, values?: VueI18n.Values): string;\n tc(key: MessageKey, choice?: VueI18n.Choice, values?: VueI18n.Values): string;\n tc(key: MessageKey, choice: VueI18n.Choice, locale: VueI18n.Locale, values?: VueI18n.Values): string;\n te(key: MessageKey, locale?: VueI18n.Locale): boolean;\n d: typeof VueI18n.prototype.d;\n n: typeof VueI18n.prototype.n;\n}\n\nexport type MessageKeys = {\n [key: string]: string;\n};\n\nexport interface i18nMessages {\n 'en-US': {\n [key: string]: string;\n };\n [key: string]: {\n [key: string]: string;\n };\n}\n\nexport const useI18n = <T extends { message: MessageKeys }>(\n params?: { messages?: i18nMessages } | undefined,\n onlyLocale = false\n) => {\n const currentInstance = getCurrentInstance() as unknown;\n // eslint-disable-next-line no-underscore-dangle\n const vue3InjectionI18nKey = (currentInstance as any)?.appContext?.app?.__VUE_I18N_SYMBOL__;\n const locale = computed({\n get() {\n return i18n.locale;\n },\n set(v: string) {\n i18n.locale = v;\n },\n });\n\n // Vue 3\n // eslint-disable-next-line no-underscore-dangle\n if (!isVue2) {\n if (!onlyLocale) {\n const { t, d, te, n, locale: coolLocale } = useI18nBridge({ messages: params?.messages });\n return {\n locale: coolLocale,\n t,\n d,\n te,\n n,\n };\n }\n\n // eslint-disable-next-line no-underscore-dangle\n const vue3I18nInstance = inject(vue3InjectionI18nKey);\n const vue3GlobalI18nComposer = (vue3I18nInstance as any)?.global;\n if (vue3GlobalI18nComposer) {\n i18n = vue3GlobalI18nComposer;\n }\n\n return {\n locale,\n };\n }\n\n // Vue 2\n const instance = currentInstance as { proxy: any & { _i18n: VueI18n } } | null;\n const vm = instance.proxy as Vue & { _i18n: VueI18n };\n // If no VueI18n has been intialised then attempt to get the globally attached one from the Vue VM\n // eslint-disable-next-line no-underscore-dangle\n if (vm?._i18n) {\n // eslint-disable-next-line no-underscore-dangle -- reading the i18n local instance\n i18n = vm._i18n;\n }\n\n return {\n locale,\n t: vm.$t.bind(vm),\n tc: vm.$tc.bind(vm),\n d: vm.$d.bind(vm),\n te: vm.$te.bind(vm),\n n: vm.$n.bind(vm),\n } as Composer<keyof T['message']>;\n};\n\n/**\n * Gets the vue 2 or vue 3 global vue-i18n component\n */\nexport const getI18nComponent = () => (isVue2 ? 'i18n' : 'i18n-t');\n\n/**\n * Gets the correct props for the global vue-i18n component depending on if the component is used in vue 2 or vue 3.\n * @param path - the translation key path.\n */\nexport const getI18nProps = (path: string) => (isVue2 ? { path } : { keypath: path });\n"],"names":["i18n","useI18n","params","onlyLocale","currentInstance","getCurrentInstance","_b","_a","locale","computed","v","vm","getI18nComponent","getI18nProps","path"],"mappings":";;;AAYA,IAAIA,IAAgB;AA8Bb,MAAMC,IAAU,CACnBC,GACAC,IAAa,OACZ;;AACD,QAAMC,IAAkBC;AAEM,GAAAC,KAAAC,IAAAH,KAAA,gBAAAA,EAAyB,eAAzB,gBAAAG,EAAqC,QAArC,QAAAD,EAA0C;AACxE,QAAME,IAASC,EAAS;AAAA,IACpB,MAAM;AACF,aAAOT,EAAK;AAAA,IAChB;AAAA,IACA,IAAIU,GAAW;AACX,MAAAV,EAAK,SAASU;AAAA,IAClB;AAAA,EAAA,CACH,GA8BKC,IADWP,EACG;AAGpB,SAAIO,KAAA,QAAAA,EAAI,UAEJX,IAAOW,EAAG,QAGP;AAAA,IACH,QAAAH;AAAA,IACA,GAAGG,EAAG,GAAG,KAAKA,CAAE;AAAA,IAChB,IAAIA,EAAG,IAAI,KAAKA,CAAE;AAAA,IAClB,GAAGA,EAAG,GAAG,KAAKA,CAAE;AAAA,IAChB,IAAIA,EAAG,IAAI,KAAKA,CAAE;AAAA,IAClB,GAAGA,EAAG,GAAG,KAAKA,CAAE;AAAA,EAAA;AAExB,GAKaC,IAAmB,MAAgB,QAMnCC,IAAe,CAACC,OAA2B,EAAE,MAAAA,EAAK;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ref as i, computed as n, defineComponent as l, toRefs as o } from "vue";
|
|
2
|
-
import { B as c } from "./index.
|
|
2
|
+
import { B as c } from "./index.b201e81d.js";
|
|
3
|
+
import "./index.4c062058.js";
|
|
3
4
|
import { n as u } from "./_plugin-vue2_normalizer.71e2aa87.js";
|
|
4
|
-
import "../assets/
|
|
5
|
+
import "../assets/index9.css";
|
|
5
6
|
const _ = (a) => {
|
|
6
7
|
const t = i(a);
|
|
7
8
|
return n(() => t.value ? t.value.trim().charAt(0).toUpperCase() : null);
|
|
@@ -72,11 +73,11 @@ var m = function() {
|
|
|
72
73
|
null,
|
|
73
74
|
null
|
|
74
75
|
);
|
|
75
|
-
const
|
|
76
|
+
const E = p.exports;
|
|
76
77
|
export {
|
|
77
|
-
|
|
78
|
+
E as A,
|
|
78
79
|
r as B,
|
|
79
80
|
s as a,
|
|
80
81
|
_ as u
|
|
81
82
|
};
|
|
82
|
-
//# sourceMappingURL=index.
|
|
83
|
+
//# sourceMappingURL=index.02da8d63.js.map
|