@dialpad/dialtone 9.151.0 → 9.153.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +1 -34
  2. package/dist/css/dialtone-default-theme.css +8 -2
  3. package/dist/css/dialtone-default-theme.min.css +1 -1
  4. package/dist/css/dialtone.css +8 -2
  5. package/dist/css/dialtone.min.css +1 -1
  6. package/dist/tokens/css/tokens-botany-dark.css +1 -1
  7. package/dist/tokens/css/tokens-buttercream-dark.css +1 -1
  8. package/dist/tokens/css/tokens-deca-light.css +3 -3
  9. package/dist/tokens/css/tokens-dp-dark.css +1 -1
  10. package/dist/tokens/css/tokens-expressive-dark.css +1 -1
  11. package/dist/tokens/css/tokens-expressive-sm-dark.css +1 -1
  12. package/dist/tokens/css/tokens-high-desert-dark.css +1 -1
  13. package/dist/tokens/css/tokens-plum-dark.css +1 -1
  14. package/dist/tokens/css/tokens-sunflower-dark.css +1 -1
  15. package/dist/tokens/css/tokens-tmo-dark.css +2 -2
  16. package/dist/tokens/doc.json +78308 -78308
  17. package/dist/tokens/themes/botany-dark.cjs +1 -1
  18. package/dist/tokens/themes/botany-dark.js +1 -1
  19. package/dist/tokens/themes/buttercream-dark.cjs +1 -1
  20. package/dist/tokens/themes/buttercream-dark.js +1 -1
  21. package/dist/tokens/themes/dp-dark.cjs +1 -1
  22. package/dist/tokens/themes/dp-dark.js +1 -1
  23. package/dist/tokens/themes/dp-deca-light.cjs +1 -1
  24. package/dist/tokens/themes/dp-deca-light.js +1 -1
  25. package/dist/tokens/themes/expressive-dark.cjs +1 -1
  26. package/dist/tokens/themes/expressive-dark.js +1 -1
  27. package/dist/tokens/themes/high-desert-dark.cjs +1 -1
  28. package/dist/tokens/themes/high-desert-dark.js +1 -1
  29. package/dist/tokens/themes/plum-dark.cjs +1 -1
  30. package/dist/tokens/themes/plum-dark.js +1 -1
  31. package/dist/tokens/themes/sunflower-dark.cjs +1 -1
  32. package/dist/tokens/themes/sunflower-dark.js +1 -1
  33. package/dist/tokens/themes/tmo-dark.cjs +1 -1
  34. package/dist/tokens/themes/tmo-dark.js +1 -1
  35. package/dist/vue2/lib/tab/tab-group.cjs +1 -1
  36. package/dist/vue2/lib/tab/tab-group.cjs.map +1 -1
  37. package/dist/vue2/lib/tab/tab-group.js +4 -4
  38. package/dist/vue2/lib/tab/tab-group.js.map +1 -1
  39. package/dist/vue2/localization/index.cjs +1 -1
  40. package/dist/vue2/localization/index.cjs.map +1 -1
  41. package/dist/vue2/localization/index.js +46 -42
  42. package/dist/vue2/localization/index.js.map +1 -1
  43. package/dist/vue2/types/common/sr_only_close_button.vue.d.ts +2 -3
  44. package/dist/vue2/types/common/sr_only_close_button.vue.d.ts.map +1 -1
  45. package/dist/vue2/types/components/breadcrumbs/breadcrumbs.vue.d.ts +1 -2
  46. package/dist/vue2/types/components/breadcrumbs/breadcrumbs.vue.d.ts.map +1 -1
  47. package/dist/vue2/types/components/button/button.vue.d.ts +1 -2
  48. package/dist/vue2/types/components/button/button.vue.d.ts.map +1 -1
  49. package/dist/vue2/types/components/chip/chip.vue.d.ts +2 -3
  50. package/dist/vue2/types/components/chip/chip.vue.d.ts.map +1 -1
  51. package/dist/vue2/types/components/datepicker/modules/calendar.vue.d.ts +1 -2
  52. package/dist/vue2/types/components/datepicker/modules/calendar.vue.d.ts.map +1 -1
  53. package/dist/vue2/types/components/datepicker/modules/month-year-picker.vue.d.ts +1 -2
  54. package/dist/vue2/types/components/datepicker/modules/month-year-picker.vue.d.ts.map +1 -1
  55. package/dist/vue2/types/components/image_viewer/image_viewer.vue.d.ts +2 -3
  56. package/dist/vue2/types/components/image_viewer/image_viewer.vue.d.ts.map +1 -1
  57. package/dist/vue2/types/components/loader/loader.vue.d.ts +1 -2
  58. package/dist/vue2/types/components/loader/loader.vue.d.ts.map +1 -1
  59. package/dist/vue2/types/components/modal/modal.vue.d.ts +2 -3
  60. package/dist/vue2/types/components/modal/modal.vue.d.ts.map +1 -1
  61. package/dist/vue2/types/components/notice/notice_action.vue.d.ts +2 -3
  62. package/dist/vue2/types/components/notice/notice_action.vue.d.ts.map +1 -1
  63. package/dist/vue2/types/components/pagination/pagination.vue.d.ts +3 -4
  64. package/dist/vue2/types/components/pagination/pagination.vue.d.ts.map +1 -1
  65. package/dist/vue2/types/components/popover/popover_header_footer.vue.d.ts +2 -3
  66. package/dist/vue2/types/components/popover/popover_header_footer.vue.d.ts.map +1 -1
  67. package/dist/vue2/types/components/rich_text_editor/rich_text_editor.vue.d.ts +1 -2
  68. package/dist/vue2/types/components/rich_text_editor/rich_text_editor.vue.d.ts.map +1 -1
  69. package/dist/vue2/types/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts +2 -3
  70. package/dist/vue2/types/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts.map +1 -1
  71. package/dist/vue2/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +2 -3
  72. package/dist/vue2/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts.map +1 -1
  73. package/dist/vue2/types/recipes/cards/ivr_node/ivr_node.vue.d.ts +3 -4
  74. package/dist/vue2/types/recipes/cards/ivr_node/ivr_node.vue.d.ts.map +1 -1
  75. package/dist/vue2/types/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +1 -2
  76. package/dist/vue2/types/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts.map +1 -1
  77. package/dist/vue2/types/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +2 -3
  78. package/dist/vue2/types/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts.map +1 -1
  79. package/dist/vue2/types/recipes/conversation_view/editor/editor.vue.d.ts +14 -15
  80. package/dist/vue2/types/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
  81. package/dist/vue2/types/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +2 -3
  82. package/dist/vue2/types/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts.map +1 -1
  83. package/dist/vue2/types/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts +2 -3
  84. package/dist/vue2/types/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts.map +1 -1
  85. package/dist/vue2/types/recipes/conversation_view/message_input/message_input.vue.d.ts +5 -6
  86. package/dist/vue2/types/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  87. package/dist/vue2/types/recipes/conversation_view/message_input/message_input_link.vue.d.ts +8 -9
  88. package/dist/vue2/types/recipes/conversation_view/message_input/message_input_link.vue.d.ts.map +1 -1
  89. package/dist/vue2/types/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts +9 -10
  90. package/dist/vue2/types/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts.map +1 -1
  91. package/dist/vue2/types/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +2 -3
  92. package/dist/vue2/types/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts.map +1 -1
  93. package/dist/vue2/types/recipes/leftbar/general_row/general_row.vue.d.ts +2 -3
  94. package/dist/vue2/types/recipes/leftbar/general_row/general_row.vue.d.ts.map +1 -1
  95. package/dist/vue2/types/recipes/leftbar/group_row/group_row.vue.d.ts +1 -2
  96. package/dist/vue2/types/recipes/leftbar/group_row/group_row.vue.d.ts.map +1 -1
  97. package/dist/vue2/types/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +2 -3
  98. package/dist/vue2/types/recipes/leftbar/unread_pill/unread_pill.vue.d.ts.map +1 -1
  99. package/dist/vue3/component-documentation.json +1 -1
  100. package/dist/vue3/lib/combobox-multi-select/combobox-multi-select.cjs +1 -1
  101. package/dist/vue3/lib/combobox-multi-select/combobox-multi-select.cjs.map +1 -1
  102. package/dist/vue3/lib/combobox-multi-select/combobox-multi-select.js +100 -93
  103. package/dist/vue3/lib/combobox-multi-select/combobox-multi-select.js.map +1 -1
  104. package/dist/vue3/lib/radio/radio.cjs +1 -1
  105. package/dist/vue3/lib/radio/radio.cjs.map +1 -1
  106. package/dist/vue3/lib/radio/radio.js +7 -14
  107. package/dist/vue3/lib/radio/radio.js.map +1 -1
  108. package/dist/vue3/lib/rich-text-editor/mention-suggestion.cjs +1 -1
  109. package/dist/vue3/lib/rich-text-editor/mention-suggestion.cjs.map +1 -1
  110. package/dist/vue3/lib/rich-text-editor/mention-suggestion.js +12 -2
  111. package/dist/vue3/lib/rich-text-editor/mention-suggestion.js.map +1 -1
  112. package/dist/vue3/lib/rich-text-editor/rich-text-editor.cjs +4 -4
  113. package/dist/vue3/lib/rich-text-editor/rich-text-editor.cjs.map +1 -1
  114. package/dist/vue3/lib/rich-text-editor/rich-text-editor.js +95 -73
  115. package/dist/vue3/lib/rich-text-editor/rich-text-editor.js.map +1 -1
  116. package/dist/vue3/lib/tab/tab-group.cjs +1 -1
  117. package/dist/vue3/lib/tab/tab-group.cjs.map +1 -1
  118. package/dist/vue3/lib/tab/tab-group.js +1 -1
  119. package/dist/vue3/lib/tab/tab-group.js.map +1 -1
  120. package/dist/vue3/lib/tooltip-directive/tooltip.cjs +1 -1
  121. package/dist/vue3/lib/tooltip-directive/tooltip.cjs.map +1 -1
  122. package/dist/vue3/lib/tooltip-directive/tooltip.js +21 -21
  123. package/dist/vue3/lib/tooltip-directive/tooltip.js.map +1 -1
  124. package/dist/vue3/localization/index.cjs +1 -1
  125. package/dist/vue3/localization/index.cjs.map +1 -1
  126. package/dist/vue3/localization/index.js +48 -46
  127. package/dist/vue3/localization/index.js.map +1 -1
  128. package/dist/vue3/types/common/sr_only_close_button.vue.d.ts +2 -3
  129. package/dist/vue3/types/common/sr_only_close_button.vue.d.ts.map +1 -1
  130. package/dist/vue3/types/components/breadcrumbs/breadcrumbs.vue.d.ts +1 -2
  131. package/dist/vue3/types/components/breadcrumbs/breadcrumbs.vue.d.ts.map +1 -1
  132. package/dist/vue3/types/components/button/button.vue.d.ts +1 -2
  133. package/dist/vue3/types/components/button/button.vue.d.ts.map +1 -1
  134. package/dist/vue3/types/components/chip/chip.vue.d.ts +2 -3
  135. package/dist/vue3/types/components/chip/chip.vue.d.ts.map +1 -1
  136. package/dist/vue3/types/components/image_viewer/image_viewer.vue.d.ts +2 -3
  137. package/dist/vue3/types/components/image_viewer/image_viewer.vue.d.ts.map +1 -1
  138. package/dist/vue3/types/components/modal/modal.vue.d.ts +2 -3
  139. package/dist/vue3/types/components/modal/modal.vue.d.ts.map +1 -1
  140. package/dist/vue3/types/components/notice/notice_action.vue.d.ts +2 -3
  141. package/dist/vue3/types/components/notice/notice_action.vue.d.ts.map +1 -1
  142. package/dist/vue3/types/components/pagination/pagination.vue.d.ts +3 -4
  143. package/dist/vue3/types/components/pagination/pagination.vue.d.ts.map +1 -1
  144. package/dist/vue3/types/components/popover/popover_header_footer.vue.d.ts +2 -3
  145. package/dist/vue3/types/components/popover/popover_header_footer.vue.d.ts.map +1 -1
  146. package/dist/vue3/types/components/radio/radio.vue.d.ts +1 -2
  147. package/dist/vue3/types/components/radio/radio.vue.d.ts.map +1 -1
  148. package/dist/vue3/types/components/rich_text_editor/extensions/mentions/MentionComponent.vue.d.ts +3 -1
  149. package/dist/vue3/types/components/rich_text_editor/extensions/mentions/MentionComponent.vue.d.ts.map +1 -1
  150. package/dist/vue3/types/components/rich_text_editor/mention_suggestion.d.ts +3 -0
  151. package/dist/vue3/types/components/rich_text_editor/mention_suggestion.d.ts.map +1 -1
  152. package/dist/vue3/types/components/rich_text_editor/rich_text_editor.vue.d.ts +3 -3
  153. package/dist/vue3/types/components/rich_text_editor/rich_text_editor.vue.d.ts.map +1 -1
  154. package/dist/vue3/types/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts +2 -3
  155. package/dist/vue3/types/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts.map +1 -1
  156. package/dist/vue3/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +2 -3
  157. package/dist/vue3/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts.map +1 -1
  158. package/dist/vue3/types/recipes/cards/ivr_node/ivr_node.vue.d.ts +3 -4
  159. package/dist/vue3/types/recipes/cards/ivr_node/ivr_node.vue.d.ts.map +1 -1
  160. package/dist/vue3/types/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +1 -2
  161. package/dist/vue3/types/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts.map +1 -1
  162. package/dist/vue3/types/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +2 -3
  163. package/dist/vue3/types/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts.map +1 -1
  164. package/dist/vue3/types/recipes/conversation_view/editor/editor.vue.d.ts +14 -15
  165. package/dist/vue3/types/recipes/conversation_view/editor/editor.vue.d.ts.map +1 -1
  166. package/dist/vue3/types/recipes/conversation_view/emoji_row/composables/useMockReactions.d.ts +2 -0
  167. package/dist/vue3/types/recipes/conversation_view/emoji_row/composables/useMockReactions.d.ts.map +1 -0
  168. package/dist/vue3/types/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +2 -3
  169. package/dist/vue3/types/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts.map +1 -1
  170. package/dist/vue3/types/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts +2 -3
  171. package/dist/vue3/types/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts.map +1 -1
  172. package/dist/vue3/types/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts +2 -3
  173. package/dist/vue3/types/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts.map +1 -1
  174. package/dist/vue3/types/recipes/conversation_view/message_input/message_input.vue.d.ts +5 -6
  175. package/dist/vue3/types/recipes/conversation_view/message_input/message_input.vue.d.ts.map +1 -1
  176. package/dist/vue3/types/recipes/conversation_view/message_input/message_input_link.vue.d.ts +8 -9
  177. package/dist/vue3/types/recipes/conversation_view/message_input/message_input_link.vue.d.ts.map +1 -1
  178. package/dist/vue3/types/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts +9 -10
  179. package/dist/vue3/types/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts.map +1 -1
  180. package/dist/vue3/types/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +2 -3
  181. package/dist/vue3/types/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts.map +1 -1
  182. package/dist/vue3/types/recipes/leftbar/general_row/general_row.vue.d.ts +2 -3
  183. package/dist/vue3/types/recipes/leftbar/general_row/general_row.vue.d.ts.map +1 -1
  184. package/dist/vue3/types/recipes/leftbar/group_row/group_row.vue.d.ts +1 -2
  185. package/dist/vue3/types/recipes/leftbar/group_row/group_row.vue.d.ts.map +1 -1
  186. package/dist/vue3/types/recipes/leftbar/unread_pill/unread_pill.vue.d.ts +2 -3
  187. package/dist/vue3/types/recipes/leftbar/unread_pill/unread_pill.vue.d.ts.map +1 -1
  188. package/package.json +4 -4
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const f=require("../combobox-with-popover/combobox-with-popover.cjs"),b=require("../input/input.cjs"),C=require("../chip/chip.cjs"),x=require("../validation-messages/validation-messages.cjs"),y=require("../../common/validators/index.cjs"),a=require("../../common/utils/index.cjs"),I=require("../popover/popover-constants.cjs"),p=require("./combobox-multi-select-constants.cjs"),t=require("vue"),w=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),_={compatConfig:{MODE:3},name:"DtRecipeComboboxMultiSelect",components:{DtRecipeComboboxWithPopover:f.default,DtInput:b.default,DtChip:C.default,DtValidationMessages:x.default},inheritAttrs:!1,props:{label:{type:String,required:!0},labelVisible:{type:Boolean,default:!0},description:{type:String,default:""},placeholder:{type:String,default:"Select one or start typing"},inputMessages:{type:Array,default:()=>[],validator:e=>y.validationMessageValidator(e)},showInputMessages:{type:Boolean,default:!0},loading:{type:Boolean,default:!1},loadingMessage:{type:String,default:"loading..."},showList:{type:Boolean,default:null},listMaxHeight:{type:String,default:"300px"},selectedItems:{type:Array,default:function(){return[]}},maxSelected:{type:Number,default:0},maxSelectedMessage:{type:Array,default:function(){return[]}},hasSuggestionList:{type:Boolean,default:!0},size:{type:String,default:"md",validator:e=>Object.values(p.MULTI_SELECT_SIZES).includes(e)},appendTo:{type:[HTMLElement,String],default:"body",validator:e=>I.POPOVER_APPEND_TO_VALUES.includes(e)||e instanceof HTMLElement},transition:{type:String,default:"fade"},collapseOnFocusOut:{type:Boolean,default:!1},listMaxWidth:{type:String,default:""},reservedRightSpace:{type:Number,default:64},chipMaxWidth:{type:String,default:""},inputClass:{type:[String,Object,Array],default:""},inputWrapperClass:{type:[String,Object,Array],default:""},disabled:{type:Boolean,default:!1}},emits:["input","select","remove","max-selected","keyup","keydown","combobox-highlight"],data(){return{value:"",popoverOffset:[0,4],showValidationMessages:!1,resizeWindowObserver:null,initialInputHeight:null,CHIP_SIZES:p.CHIP_SIZES,hasSlotContent:a.hasSlotContent,inputFocused:!1,hideInputText:!1}},computed:{inputPlaceHolder(){var e;return((e=this.selectedItems)==null?void 0:e.length)>0?"":this.placeholder},chipListeners(){return{keydown:e=>{this.onChipKeyDown(e),this.$emit("keydown",e)}}},inputListeners(){return{...a.extractVueListeners(this.$attrs),onInput:e=>{this.$emit("input",e),this.hasSuggestionList&&this.showComboboxList()},onKeydown:e=>{this.onInputKeyDown(e)},onKeyup:e=>{this.$emit("keyup",e)},onClick:()=>{this.hasSuggestionList&&this.showComboboxList()}}},chipWrapperClass(){return{[`d-recipe-combobox-multi-select__chip-wrapper-${this.size}--collapsed`]:!this.inputFocused&&this.collapseOnFocusOut}}},watch:{selectedItems:{deep:!0,handler:async function(){this.initSelectedItems()}},chipMaxWidth:{async handler(){this.initSelectedItems()}},async label(){await this.$nextTick(),this.setChipsTopPosition()},async description(){await this.$nextTick(),this.setChipsTopPosition()},size:{async handler(){await this.$nextTick();const e=this.getInput();this.revertInputPadding(e),this.initialInputHeight=e.getBoundingClientRect().height,this.setInputPadding(),this.setChipsTopPosition()}}},mounted(){this.setInitialInputHeight(),this.resizeWindowObserver=new ResizeObserver(async()=>{this.setChipsTopPosition(),this.setInputPadding()}),this.resizeWindowObserver.observe(document.body),this.initSelectedItems()},beforeUnmount(){var e;(e=this.resizeWindowObserver)==null||e.unobserve(document.body)},methods:{extractNonListeners:a.extractNonListeners,comboboxHighlight(e){this.$emit("combobox-highlight",e)},async initSelectedItems(){await this.$nextTick(),this.setInputPadding(),this.setChipsTopPosition(),this.setInputMinWidth(),this.checkMaxSelected()},onChipRemove(e){var s;this.$emit("remove",e),(s=this.$refs.input)==null||s.focus()},onComboboxSelect(e){this.loading||(this.value="",this.$emit("select",e))},showComboboxList(){var e;this.showList==null&&((e=this.$refs.comboboxWithPopover)==null||e.showComboboxList())},closeComboboxList(){var e;this.showList==null&&((e=this.$refs.comboboxWithPopover)==null||e.closeComboboxList())},getChipButtons(){return this.$refs.chips&&this.$refs.chips.map(e=>a.returnFirstEl(e.$el).querySelector("button"))},getChips(){return this.$refs.chips&&this.$refs.chips.map(e=>a.returnFirstEl(e.$el))},getLastChipButton(){return this.$refs.chips&&this.getChipButtons()[this.getChipButtons().length-1]},getLastChip(){return this.$refs.chips&&this.getChips()[this.getChips().length-1]},getFirstChip(){return this.$refs.chips&&this.getChips()[0]},getInput(){var e;return(e=this.$refs.input)==null?void 0:e.$refs.input},onChipKeyDown(e){var i;const s=(i=e.code)==null?void 0:i.toLowerCase();s==="arrowleft"?this.navigateBetweenChips(e.target,!0):s==="arrowright"&&(e.target.id===this.getLastChipButton().id?this.moveFromChipToInput():this.navigateBetweenChips(e.target,!1))},onInputKeyDown(e){var i;const s=(i=e.code)==null?void 0:i.toLowerCase();if(this.selectedItems.length>0&&e.target.selectionStart===0){if(e.target.selectionEnd!==e.target.selectionStart)return;(s==="backspace"||s==="arrowleft")&&this.moveFromInputToChip()}},moveFromInputToChip(){var e;this.getLastChipButton().focus(),(e=this.$refs.input)==null||e.blur(),this.closeComboboxList()},moveFromChipToInput(){var e;this.getLastChipButton().blur(),(e=this.$refs.input)==null||e.focus(),this.showComboboxList()},navigateBetweenChips(e,s){var n;const i=this.getChipButtons().indexOf(e),r=s?i-1:i+1;r<0||r>=((n=this.$refs.chips)==null?void 0:n.length)||(this.getChipButtons()[i].blur(),this.getChipButtons()[r].focus(),this.closeComboboxList())},setChipsTopPosition(){const e=this.getInput();if(!e)return;const s=this.$refs.inputSlotWrapper,i=e.getBoundingClientRect().top-s.getBoundingClientRect().top,r=this.$refs.chipsWrapper;r.style.top=i-p.CHIP_TOP_POSITION[this.size]+"px"},setInputPadding(){const e=this.getLastChip(),s=this.getInput(),i=this.$refs.chipsWrapper;if(!s||(this.revertInputPadding(s),this.popoverOffset=[0,4],!e)||this.collapseOnFocusOut&&!this.inputFocused)return;const r=e.offsetLeft+this.getFullWidth(e),n=s.getBoundingClientRect().width-r;n>this.reservedRightSpace?s.style.paddingLeft=r+"px":s.style.paddingLeft="4px";const o=i.getBoundingClientRect().height-4,h=e.getBoundingClientRect().height-4,u=n>this.reservedRightSpace?e.offsetTop+2:o+h-9;s.style.paddingTop=`${u}px`},revertInputPadding(e){e.style.paddingLeft="",e.style.paddingTop="",e.style.paddingBottom=""},getFullWidth(e){const s=window.getComputedStyle(e);return e.offsetWidth+parseInt(s.marginLeft)+parseInt(s.marginRight)},setInputMinWidth(){const e=this.getFirstChip(),s=this.getInput();s&&(e?s.style.minWidth=this.getFullWidth(e)+4+"px":s.style.minWidth="")},checkMaxSelected(){this.maxSelected!==0&&(this.selectedItems.length>this.maxSelected?(this.showValidationMessages=!0,this.$emit("max-selected")):this.showValidationMessages=!1)},setInitialInputHeight(){const e=this.getInput();e&&(this.initialInputHeight=e.getBoundingClientRect().height)},async handleInputFocusIn(){this.inputFocused=!0,this.collapseOnFocusOut&&(this.hideInputText=!1,await this.$nextTick(),this.setInputPadding())},async handleInputFocusOut(){if(this.inputFocused=!1,this.collapseOnFocusOut){this.hideInputText=!0;const e=this.getInput();if(!e||!e.style.paddingTop)return;this.revertInputPadding(e)}}}},S={ref:"header"},v={key:1,class:"d-recipe-combobox-multi-select__list--loading"},L={ref:"footer"};function M(e,s,i,r,n,o){const h=t.resolveComponent("dt-chip"),u=t.resolveComponent("dt-input"),c=t.resolveComponent("dt-validation-messages"),d=t.resolveComponent("dt-recipe-combobox-with-popover");return t.openBlock(),t.createBlock(d,t.mergeProps({ref:"comboboxWithPopover",label:i.label,"show-list":i.showList,"max-height":i.listMaxHeight,"max-width":i.listMaxWidth,"popover-offset":n.popoverOffset,"has-suggestion-list":i.hasSuggestionList,"content-width":"anchor","append-to":i.appendTo,transition:i.transition},o.extractNonListeners(e.$attrs),{onSelect:o.onComboboxSelect,onHighlight:o.comboboxHighlight}),t.createSlots({input:t.withCtx(({onInput:g})=>[t.createElementVNode("span",{ref:"inputSlotWrapper",class:"d-recipe-combobox-multi-select__input-wrapper",onFocusin:s[1]||(s[1]=(...l)=>o.handleInputFocusIn&&o.handleInputFocusIn(...l)),onFocusout:s[2]||(s[2]=(...l)=>o.handleInputFocusOut&&o.handleInputFocusOut(...l))},[t.createElementVNode("span",{ref:"chipsWrapper",class:t.normalizeClass(["d-recipe-combobox-multi-select__chip-wrapper",o.chipWrapperClass])},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(i.selectedItems,l=>(t.openBlock(),t.createBlock(h,t.mergeProps({ref_for:!0,ref:"chips",key:l,"label-class":["d-chip__label"],class:["d-recipe-combobox-multi-select__chip",{"d-recipe-combobox-multi-select__chip--truncate":!!i.chipMaxWidth}],style:{maxWidth:i.chipMaxWidth},size:n.CHIP_SIZES[i.size],disabled:i.disabled},t.toHandlers(o.chipListeners),{onKeydown:t.withKeys(m=>o.onChipRemove(l),["backspace"]),onClose:m=>o.onChipRemove(l)}),{default:t.withCtx(()=>[t.createTextVNode(t.toDisplayString(l),1)]),_:2},1040,["class","style","size","disabled","onKeydown","onClose"]))),128))],2),t.createVNode(u,t.mergeProps({ref:"input",modelValue:n.value,"onUpdate:modelValue":s[0]||(s[0]=l=>n.value=l),class:"d-recipe-combobox-multi-select__input","input-class":[i.inputClass,{"d-recipe-combobox-multi-select__input--hidden":n.hideInputText}],"input-wrapper-class":i.inputWrapperClass,disabled:i.disabled,"aria-label":i.label,label:i.labelVisible?i.label:"",description:i.description,placeholder:o.inputPlaceHolder,"show-messages":i.showInputMessages,messages:i.inputMessages,size:i.size},o.inputListeners,{onInput:g}),null,16,["modelValue","input-class","input-wrapper-class","disabled","aria-label","label","description","placeholder","show-messages","messages","size","onInput"]),t.createVNode(c,{"validation-messages":i.maxSelectedMessage,"show-messages":n.showValidationMessages},null,8,["validation-messages","show-messages"])],544)]),list:t.withCtx(()=>[t.createElementVNode("div",{ref:"list",class:"d-recipe-combobox-multi-select__list",onMousedown:s[3]||(s[3]=t.withModifiers(()=>{},["prevent"]))},[i.loading?(t.openBlock(),t.createElementBlock("div",v,t.toDisplayString(i.loadingMessage),1)):t.renderSlot(e.$slots,"list",{key:0})],544)]),_:2},[n.hasSlotContent(e.$slots.header)?{name:"header",fn:t.withCtx(()=>[t.createElementVNode("div",S,[t.renderSlot(e.$slots,"header")],512)]),key:"0"}:void 0,n.hasSlotContent(e.$slots.footer)?{name:"footer",fn:t.withCtx(()=>[t.createElementVNode("div",L,[t.renderSlot(e.$slots,"footer")],512)]),key:"1"}:void 0]),1040,["label","show-list","max-height","max-width","popover-offset","has-suggestion-list","append-to","transition","onSelect","onHighlight"])}const W=w._(_,[["render",M]]);exports.default=W;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const f=require("../combobox-with-popover/combobox-with-popover.cjs"),b=require("../input/input.cjs"),C=require("../chip/chip.cjs"),x=require("../validation-messages/validation-messages.cjs"),y=require("../../common/validators/index.cjs"),h=require("../../common/utils/index.cjs"),I=require("../popover/popover-constants.cjs"),p=require("./combobox-multi-select-constants.cjs"),s=require("vue"),w=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),_={compatConfig:{MODE:3},name:"DtRecipeComboboxMultiSelect",components:{DtRecipeComboboxWithPopover:f.default,DtInput:b.default,DtChip:C.default,DtValidationMessages:x.default},inheritAttrs:!1,props:{label:{type:String,required:!0},labelVisible:{type:Boolean,default:!0},description:{type:String,default:""},placeholder:{type:String,default:"Select one or start typing"},inputMessages:{type:Array,default:()=>[],validator:e=>y.validationMessageValidator(e)},showInputMessages:{type:Boolean,default:!0},loading:{type:Boolean,default:!1},loadingMessage:{type:String,default:"loading..."},showList:{type:Boolean,default:null},listMaxHeight:{type:String,default:"300px"},selectedItems:{type:Array,default:function(){return[]}},maxSelected:{type:Number,default:0},maxSelectedMessage:{type:Array,default:function(){return[]}},hasSuggestionList:{type:Boolean,default:!0},size:{type:String,default:"md",validator:e=>Object.values(p.MULTI_SELECT_SIZES).includes(e)},appendTo:{type:[HTMLElement,String],default:"body",validator:e=>I.POPOVER_APPEND_TO_VALUES.includes(e)||e instanceof HTMLElement},transition:{type:String,default:"fade"},collapseOnFocusOut:{type:Boolean,default:!1},listMaxWidth:{type:String,default:""},reservedRightSpace:{type:Number,default:64},chipMaxWidth:{type:String,default:""},inputClass:{type:[String,Object,Array],default:""},inputWrapperClass:{type:[String,Object,Array],default:""},disabled:{type:Boolean,default:!1}},emits:["input","select","remove","max-selected","keyup","keydown","combobox-highlight"],data(){return{value:"",popoverOffset:[0,4],showValidationMessages:!1,resizeWindowObserver:null,initialInputHeight:null,CHIP_SIZES:p.CHIP_SIZES,hasSlotContent:h.hasSlotContent,inputFocused:!1,hideInputText:!1}},computed:{inputPlaceHolder(){var e;return((e=this.selectedItems)==null?void 0:e.length)>0?"":this.placeholder},chipListeners(){return{keydown:e=>{this.onChipKeyDown(e),this.$emit("keydown",e)}}},inputListeners(){return{...h.extractVueListeners(this.$attrs),onInput:e=>{this.$emit("input",e),this.hasSuggestionList&&this.showComboboxList()},onKeydown:e=>{this.onInputKeyDown(e)},onKeyup:e=>{this.$emit("keyup",e)},onClick:()=>{this.hasSuggestionList&&this.showComboboxList()}}},chipWrapperClass(){return{[`d-recipe-combobox-multi-select__chip-wrapper-${this.size}--collapsed`]:!this.inputFocused&&this.collapseOnFocusOut}}},watch:{selectedItems:{deep:!0,handler:async function(){await this.initSelectedItems()}},chipMaxWidth:{async handler(){await this.initSelectedItems()}},async label(){await this.$nextTick(),this.setChipsTopPosition()},async description(){await this.$nextTick(),this.setChipsTopPosition()},size:{async handler(){await this.$nextTick();const e=this.getInput();this.revertInputPadding(e),this.initialInputHeight=e.getBoundingClientRect().height,this.setInputPadding(),this.setChipsTopPosition()}}},async mounted(){this.setInitialInputHeight(),this.resizeWindowObserver=new ResizeObserver(async()=>{this.setChipsTopPosition(),this.setInputPadding()}),this.resizeWindowObserver.observe(document.body),await this.initSelectedItems()},beforeUnmount(){var e;(e=this.resizeWindowObserver)==null||e.unobserve(document.body)},methods:{extractNonListeners:h.extractNonListeners,comboboxHighlight(e){this.$emit("combobox-highlight",e)},async initSelectedItems(){await this.$nextTick(),this.setInputPadding(),this.setChipsTopPosition(),this.setInputMinWidth(),this.checkMaxSelected()},onChipRemove(e){var t;this.$emit("remove",e),(t=this.$refs.input)==null||t.focus()},onComboboxSelect(e){this.loading||(this.value="",this.$emit("select",e))},showComboboxList(){var e;this.showList==null&&((e=this.$refs.comboboxWithPopover)==null||e.showComboboxList())},closeComboboxList(){var e;this.showList==null&&((e=this.$refs.comboboxWithPopover)==null||e.closeComboboxList())},getChips(){return!this.selectedItems.length||!this.$refs.chips?null:this.selectedItems.map(t=>this.$refs.chips.find(i=>{var n,o,r;return((r=(o=(n=h.returnFirstEl(i.$el))==null?void 0:n.querySelector(".d-chip__label"))==null?void 0:o.textContent)==null?void 0:r.trim())===t})).filter(Boolean).map(t=>h.returnFirstEl(t.$el))},getChipButtons(){const e=this.getChips();return e&&e.map(t=>h.returnFirstEl(t).querySelector("button"))},getLastChipButton(){const e=this.getChipButtons();return e&&e[e.length-1]},getLastChip(){const e=this.getChips();return e&&e[e.length-1]},getFirstChip(){const e=this.getChips();return e&&e[0]},getInput(){var e;return(e=this.$refs.input)==null?void 0:e.$refs.input},onChipKeyDown(e){var i;const t=(i=e.code)==null?void 0:i.toLowerCase();t==="arrowleft"?this.navigateBetweenChips(e.target,!0):t==="arrowright"&&(e.target.id===this.getLastChipButton().id?this.moveFromChipToInput():this.navigateBetweenChips(e.target,!1))},onInputKeyDown(e){var i;const t=(i=e.code)==null?void 0:i.toLowerCase();if(this.selectedItems.length>0&&e.target.selectionStart===0){if(e.target.selectionEnd!==e.target.selectionStart)return;(t==="backspace"||t==="arrowleft")&&this.moveFromInputToChip()}},moveFromInputToChip(){var e;this.getLastChipButton().focus(),(e=this.$refs.input)==null||e.blur(),this.closeComboboxList()},moveFromChipToInput(){var e;this.getLastChipButton().blur(),(e=this.$refs.input)==null||e.focus(),this.showComboboxList()},navigateBetweenChips(e,t){var n;const i=this.getChipButtons().indexOf(e),l=t?i-1:i+1;l<0||l>=((n=this.$refs.chips)==null?void 0:n.length)||(this.getChipButtons()[i].blur(),this.getChipButtons()[l].focus(),this.closeComboboxList())},setChipsTopPosition(){const e=this.getInput();if(!e)return;const t=this.$refs.inputSlotWrapper,i=e.getBoundingClientRect().top-t.getBoundingClientRect().top,l=this.$refs.chipsWrapper;l.style.top=i-p.CHIP_TOP_POSITION[this.size]+"px"},setInputPadding(){const e=this.getLastChip(),t=this.getInput(),i=this.$refs.chipsWrapper;if(!t||(this.revertInputPadding(t),this.popoverOffset=[0,4],!e)||this.collapseOnFocusOut&&!this.inputFocused)return;const l=e.offsetLeft+this.getFullWidth(e),n=t.getBoundingClientRect().width-l;n>this.reservedRightSpace?t.style.paddingLeft=l+"px":t.style.paddingLeft="4px";const o=i.getBoundingClientRect().height-4,r=e.getBoundingClientRect().height-4,u=n>this.reservedRightSpace?e.offsetTop+2:o+r-9;t.style.paddingTop=`${u}px`},revertInputPadding(e){e.style.paddingLeft="",e.style.paddingTop="",e.style.paddingBottom=""},getFullWidth(e){const t=window.getComputedStyle(e);return e.offsetWidth+parseInt(t.marginLeft)+parseInt(t.marginRight)},setInputMinWidth(){const e=this.getFirstChip(),t=this.getInput();t&&(e?t.style.minWidth=this.getFullWidth(e)+4+"px":t.style.minWidth="")},checkMaxSelected(){this.maxSelected!==0&&(this.selectedItems.length>this.maxSelected?(this.showValidationMessages=!0,this.$emit("max-selected")):this.showValidationMessages=!1)},setInitialInputHeight(){const e=this.getInput();e&&(this.initialInputHeight=e.getBoundingClientRect().height)},async handleInputFocusIn(){this.inputFocused=!0,this.collapseOnFocusOut&&(this.hideInputText=!1,await this.$nextTick(),this.setInputPadding())},async handleInputFocusOut(){if(this.inputFocused=!1,this.collapseOnFocusOut){this.hideInputText=!0;const e=this.getInput();if(!e||!e.style.paddingTop)return;this.revertInputPadding(e)}}}},S={ref:"header"},v={key:1,class:"d-recipe-combobox-multi-select__list--loading"},L={ref:"footer"};function M(e,t,i,l,n,o){const r=s.resolveComponent("dt-chip"),u=s.resolveComponent("dt-input"),c=s.resolveComponent("dt-validation-messages"),d=s.resolveComponent("dt-recipe-combobox-with-popover");return s.openBlock(),s.createBlock(d,s.mergeProps({ref:"comboboxWithPopover",label:i.label,"show-list":i.showList,"max-height":i.listMaxHeight,"max-width":i.listMaxWidth,"popover-offset":n.popoverOffset,"has-suggestion-list":i.hasSuggestionList,"content-width":"anchor","append-to":i.appendTo,transition:i.transition},o.extractNonListeners(e.$attrs),{onSelect:o.onComboboxSelect,onHighlight:o.comboboxHighlight}),s.createSlots({input:s.withCtx(({onInput:g})=>[s.createElementVNode("span",{ref:"inputSlotWrapper",class:"d-recipe-combobox-multi-select__input-wrapper",onFocusin:t[1]||(t[1]=(...a)=>o.handleInputFocusIn&&o.handleInputFocusIn(...a)),onFocusout:t[2]||(t[2]=(...a)=>o.handleInputFocusOut&&o.handleInputFocusOut(...a))},[s.createElementVNode("span",{ref:"chipsWrapper",class:s.normalizeClass(["d-recipe-combobox-multi-select__chip-wrapper",o.chipWrapperClass])},[(s.openBlock(!0),s.createElementBlock(s.Fragment,null,s.renderList(i.selectedItems,a=>(s.openBlock(),s.createBlock(r,s.mergeProps({ref_for:!0,ref:"chips",key:a,"label-class":["d-chip__label"],class:["d-recipe-combobox-multi-select__chip",{"d-recipe-combobox-multi-select__chip--truncate":!!i.chipMaxWidth}],style:{maxWidth:i.chipMaxWidth},size:n.CHIP_SIZES[i.size],disabled:i.disabled},s.toHandlers(o.chipListeners),{onKeydown:s.withKeys(m=>o.onChipRemove(a),["backspace"]),onClose:m=>o.onChipRemove(a)}),{default:s.withCtx(()=>[s.createTextVNode(s.toDisplayString(a),1)]),_:2},1040,["class","style","size","disabled","onKeydown","onClose"]))),128))],2),s.createVNode(u,s.mergeProps({ref:"input",modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=a=>n.value=a),class:"d-recipe-combobox-multi-select__input","input-class":[i.inputClass,{"d-recipe-combobox-multi-select__input--hidden":n.hideInputText}],"input-wrapper-class":i.inputWrapperClass,disabled:i.disabled,"aria-label":i.label,label:i.labelVisible?i.label:"",description:i.description,placeholder:o.inputPlaceHolder,"show-messages":i.showInputMessages,messages:i.inputMessages,size:i.size},o.inputListeners,{onInput:g}),null,16,["modelValue","input-class","input-wrapper-class","disabled","aria-label","label","description","placeholder","show-messages","messages","size","onInput"]),s.createVNode(c,{"validation-messages":i.maxSelectedMessage,"show-messages":n.showValidationMessages},null,8,["validation-messages","show-messages"])],544)]),list:s.withCtx(()=>[s.createElementVNode("div",{ref:"list",class:"d-recipe-combobox-multi-select__list",onMousedown:t[3]||(t[3]=s.withModifiers(()=>{},["prevent"]))},[i.loading?(s.openBlock(),s.createElementBlock("div",v,s.toDisplayString(i.loadingMessage),1)):s.renderSlot(e.$slots,"list",{key:0})],544)]),_:2},[n.hasSlotContent(e.$slots.header)?{name:"header",fn:s.withCtx(()=>[s.createElementVNode("div",S,[s.renderSlot(e.$slots,"header")],512)]),key:"0"}:void 0,n.hasSlotContent(e.$slots.footer)?{name:"footer",fn:s.withCtx(()=>[s.createElementVNode("div",L,[s.renderSlot(e.$slots,"footer")],512)]),key:"1"}:void 0]),1040,["label","show-list","max-height","max-width","popover-offset","has-suggestion-list","append-to","transition","onSelect","onHighlight"])}const W=w._(_,[["render",M]]);exports.default=W;
2
2
  //# sourceMappingURL=combobox-multi-select.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"combobox-multi-select.cjs","sources":["../../../recipes/comboboxes/combobox_multi_select/combobox_multi_select.vue"],"sourcesContent":["<!-- eslint-disable vue/no-static-inline-styles -->\n<template>\n <dt-recipe-combobox-with-popover\n ref=\"comboboxWithPopover\"\n :label=\"label\"\n :show-list=\"showList\"\n :max-height=\"listMaxHeight\"\n :max-width=\"listMaxWidth\"\n :popover-offset=\"popoverOffset\"\n :has-suggestion-list=\"hasSuggestionList\"\n content-width=\"anchor\"\n :append-to=\"appendTo\"\n :transition=\"transition\"\n v-bind=\"extractNonListeners($attrs)\"\n @select=\"onComboboxSelect\"\n @highlight=\"comboboxHighlight\"\n >\n <template #input=\"{ onInput }\">\n <span\n ref=\"inputSlotWrapper\"\n class=\"d-recipe-combobox-multi-select__input-wrapper\"\n @focusin=\"handleInputFocusIn\"\n @focusout=\"handleInputFocusOut\"\n >\n <span\n ref=\"chipsWrapper\"\n :class=\"['d-recipe-combobox-multi-select__chip-wrapper', chipWrapperClass]\"\n >\n <dt-chip\n v-for=\"item in selectedItems\"\n ref=\"chips\"\n :key=\"item\"\n :label-class=\"['d-chip__label']\"\n :class=\"[\n 'd-recipe-combobox-multi-select__chip',\n { 'd-recipe-combobox-multi-select__chip--truncate': !!chipMaxWidth },\n ]\"\n :style=\"{ maxWidth: chipMaxWidth }\"\n :size=\"CHIP_SIZES[size]\"\n :disabled=\"disabled\"\n v-on=\"chipListeners\"\n @keydown.backspace=\"onChipRemove(item)\"\n @close=\"onChipRemove(item)\"\n >\n {{ item }}\n </dt-chip>\n </span>\n\n <dt-input\n ref=\"input\"\n v-model=\"value\"\n class=\"d-recipe-combobox-multi-select__input\"\n :input-class=\"[\n inputClass, {\n 'd-recipe-combobox-multi-select__input--hidden': hideInputText,\n }]\"\n :input-wrapper-class=\"inputWrapperClass\"\n :disabled=\"disabled\"\n :aria-label=\"label\"\n :label=\"labelVisible ? label : ''\"\n :description=\"description\"\n :placeholder=\"inputPlaceHolder\"\n :show-messages=\"showInputMessages\"\n :messages=\"inputMessages\"\n :size=\"size\"\n v-bind=\"inputListeners\"\n @input=\"onInput\"\n />\n\n <dt-validation-messages\n :validation-messages=\"maxSelectedMessage\"\n :show-messages=\"showValidationMessages\"\n />\n </span>\n </template>\n\n <!-- @slot slot for popover header -->\n <template\n v-if=\"hasSlotContent($slots.header)\"\n #header\n >\n <div ref=\"header\">\n <slot name=\"header\" />\n </div>\n </template>\n\n <!-- @slot slot for popover list -->\n <template #list>\n <div\n ref=\"list\"\n class=\"d-recipe-combobox-multi-select__list\"\n @mousedown.prevent\n >\n <slot\n v-if=\"!loading\"\n name=\"list\"\n />\n <div\n v-else\n class=\"d-recipe-combobox-multi-select__list--loading\"\n >\n {{ loadingMessage }}\n </div>\n </div>\n </template>\n\n <!-- @slot slot for popover footer -->\n <template\n v-if=\"hasSlotContent($slots.footer)\"\n #footer\n >\n <div ref=\"footer\">\n <slot name=\"footer\" />\n </div>\n </template>\n </dt-recipe-combobox-with-popover>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport DtRecipeComboboxWithPopover from '@/recipes/comboboxes/combobox_with_popover/combobox_with_popover.vue';\nimport DtInput from '@/components/input/input.vue';\nimport DtChip from '@/components/chip/chip.vue';\nimport DtValidationMessages from '@/components/validation_messages/validation_messages.vue';\nimport { validationMessageValidator } from '@/common/validators';\nimport { extractVueListeners, extractNonListeners, hasSlotContent, returnFirstEl } from '@/common/utils';\nimport {\n POPOVER_APPEND_TO_VALUES,\n} from '@/components/popover/popover_constants';\nimport {\n MULTI_SELECT_SIZES,\n CHIP_SIZES,\n CHIP_TOP_POSITION,\n} from './combobox_multi_select_constants';\n\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtRecipeComboboxMultiSelect',\n\n components: {\n DtRecipeComboboxWithPopover,\n DtInput,\n DtChip,\n DtValidationMessages,\n },\n\n inheritAttrs: false,\n\n props: {\n /**\n * String to use for the input label.\n */\n label: {\n type: String,\n required: true,\n },\n\n /**\n * Determines visibility of input label.\n * @values true, false\n */\n labelVisible: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Description for the input\n */\n description: {\n type: String,\n default: '',\n },\n\n /**\n * Input placeholder\n */\n placeholder: {\n type: String,\n default: 'Select one or start typing',\n },\n\n /**\n * Input validation messages\n */\n inputMessages: {\n type: Array,\n default: () => [],\n validator: inputMessages => {\n return validationMessageValidator(inputMessages);\n },\n },\n\n /**\n * Show input validation message\n */\n showInputMessages: {\n type: Boolean,\n default: true,\n },\n\n // @TODO: https://dialpad.atlassian.net/browse/DP-52324\n // type: {\n // type: String,\n // values: ['input', 'select'],\n // default: 'select',\n // },\n\n /**\n * Determines if the list is loading\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The message when the list is loading\n */\n loadingMessage: {\n type: String,\n default: 'loading...',\n },\n\n /**\n * Determines when to show the list element and also controls the aria-expanded attribute.\n * Leaving this null will have the combobox trigger on input focus by default.\n * If you set this value, the default trigger behavior will be disabled and you can\n * control it as you need.\n */\n showList: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n listMaxHeight: {\n type: String,\n default: '300px',\n },\n\n /**\n * The selected items\n */\n selectedItems: {\n type: Array,\n default: function () { return []; },\n },\n\n /**\n * Would be the maximum number of selections you can make. 0 is unlimited\n */\n maxSelected: {\n type: Number,\n default: 0,\n },\n\n /**\n * Max select message when the max selections is exceeded with the structure:\n * `[{\"message\": string, \"type\": VALIDATION_MESSAGE_TYPES }]`\n */\n maxSelectedMessage: {\n type: Array,\n default: function () { return []; },\n },\n\n /**\n * Displays the list when the combobox is focused, before the user has typed anything.\n * When this is enabled the list will not close after selection.\n */\n hasSuggestionList: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Size of the chip, one of `xs`, `sm`, `md`\n */\n size: {\n type: String,\n default: 'md',\n validator: (t) => Object.values(MULTI_SELECT_SIZES).includes(t),\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTMLElement, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n\n /**\n * Determines whether the combobox should collapse to a single when losing focus.\n * @type {boolean}\n */\n collapseOnFocusOut: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|em\n */\n listMaxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Amount of reserved space (in px) on the right side of the input\n * before the chips and the input caret jump to the next line.\n * default is 64\n */\n reservedRightSpace: {\n type: Number,\n default: 64,\n },\n\n /**\n * Determines the maximum width of a single chip. If the text within this chip exceeds the value\n * it will be truncated with ellipses.\n * Possible units rem|px|em\n */\n chipMaxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Additional class name for the input element.\n * Can accept String, Object, and Array, i.e. has the\n * same API as Vue's built-in handling of the class attribute.\n */\n inputClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * Additional class name for the input wrapper element.\n * Can accept all of String, Object, and Array, i.e. has the\n * same api as Vue's built-in handling of the class attribute.\n */\n inputWrapperClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * When true, disables the underlying input.\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Native input event\n *\n * @event input\n * @type {String }\n */\n 'input',\n\n /**\n * Event fired when item selected\n *\n * @event select\n * @type {Number}\n */\n 'select',\n\n /**\n * Event fired when item removed\n *\n * @event remove\n * @type {String}\n */\n 'remove',\n\n /**\n * Event fired when max selected items limit is reached\n *\n * @event max-selected\n * @type {Object}\n */\n 'max-selected',\n\n /**\n * Native keyup event\n *\n * @event keyup\n * @type {KeyboardEvent}\n */\n 'keyup',\n\n /**\n * Native keydown event\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n\n /**\n * Event fired when combobox item is highlighted\n *\n * @event combobox-highlight\n * @type {Object}\n */\n 'combobox-highlight',\n ],\n\n data () {\n return {\n value: '',\n popoverOffset: [0, 4],\n showValidationMessages: false,\n resizeWindowObserver: null,\n initialInputHeight: null,\n CHIP_SIZES,\n hasSlotContent,\n inputFocused: false,\n hideInputText: false,\n };\n },\n\n computed: {\n inputPlaceHolder () {\n return this.selectedItems?.length > 0 ? '' : this.placeholder;\n },\n\n chipListeners () {\n return {\n keydown: event => {\n this.onChipKeyDown(event);\n this.$emit('keydown', event);\n },\n };\n },\n\n inputListeners () {\n return {\n ...extractVueListeners(this.$attrs),\n onInput: event => {\n this.$emit('input', event);\n if (this.hasSuggestionList) {\n this.showComboboxList();\n }\n },\n\n onKeydown: event => {\n this.onInputKeyDown(event);\n },\n\n onKeyup: event => {\n this.$emit('keyup', event);\n },\n\n onClick: () => {\n if (this.hasSuggestionList) {\n this.showComboboxList();\n }\n },\n };\n },\n\n chipWrapperClass () {\n return {\n [`d-recipe-combobox-multi-select__chip-wrapper-${this.size}--collapsed`]: !this.inputFocused && this.collapseOnFocusOut,\n };\n },\n },\n\n watch: {\n selectedItems: {\n deep: true,\n handler: async function () {\n this.initSelectedItems();\n },\n },\n\n chipMaxWidth: {\n async handler () {\n this.initSelectedItems();\n },\n },\n\n async label () {\n await this.$nextTick();\n // Adjust the chips position if label changed\n this.setChipsTopPosition();\n },\n\n async description () {\n await this.$nextTick();\n // Adjust the chips position if description changed\n this.setChipsTopPosition();\n },\n\n size: {\n async handler () {\n await this.$nextTick();\n const input = this.getInput();\n this.revertInputPadding(input);\n this.initialInputHeight = input.getBoundingClientRect().height;\n this.setInputPadding();\n this.setChipsTopPosition();\n },\n },\n },\n\n mounted () {\n this.setInitialInputHeight();\n // Recalculate chip position and input padding when resizing window\n this.resizeWindowObserver = new ResizeObserver(async () => {\n this.setChipsTopPosition();\n this.setInputPadding();\n });\n this.resizeWindowObserver.observe(document.body);\n\n this.initSelectedItems();\n },\n\n beforeUnmount () {\n this.resizeWindowObserver?.unobserve(document.body);\n },\n\n methods: {\n extractNonListeners,\n comboboxHighlight (highlightIndex) {\n this.$emit('combobox-highlight', highlightIndex);\n },\n\n async initSelectedItems () {\n await this.$nextTick();\n this.setInputPadding();\n this.setChipsTopPosition();\n this.setInputMinWidth();\n this.checkMaxSelected();\n },\n\n onChipRemove (item) {\n this.$emit('remove', item);\n this.$refs.input?.focus();\n },\n\n onComboboxSelect (i) {\n if (this.loading) return;\n this.value = '';\n this.$emit('select', i);\n },\n\n showComboboxList () {\n if (this.showList != null) { return; }\n this.$refs.comboboxWithPopover?.showComboboxList();\n },\n\n closeComboboxList () {\n if (this.showList != null) { return; }\n this.$refs.comboboxWithPopover?.closeComboboxList();\n },\n\n getChipButtons () {\n return this.$refs.chips && this.$refs.chips.map(chip => returnFirstEl(chip.$el).querySelector('button'));\n },\n\n getChips () {\n return this.$refs.chips && this.$refs.chips.map(chip => returnFirstEl(chip.$el));\n },\n\n getLastChipButton () {\n return this.$refs.chips && this.getChipButtons()[this.getChipButtons().length - 1];\n },\n\n getLastChip () {\n return this.$refs.chips && this.getChips()[this.getChips().length - 1];\n },\n\n getFirstChip () {\n return this.$refs.chips && this.getChips()[0];\n },\n\n getInput () {\n return this.$refs.input?.$refs.input;\n },\n\n onChipKeyDown (event) {\n const key = event.code?.toLowerCase();\n if (key === 'arrowleft') {\n // Move to the previous chip\n this.navigateBetweenChips(event.target, true);\n } else if (key === 'arrowright') {\n if (event.target.id === this.getLastChipButton().id) {\n // Move to the input if it's the last chip\n this.moveFromChipToInput();\n } else {\n // Move to the next chip\n this.navigateBetweenChips(event.target, false);\n }\n }\n },\n\n onInputKeyDown (event) {\n const key = event.code?.toLowerCase();\n // If the cursor is at the start of the text,\n // press 'backspace' or 'left' focuses the last chip\n if (this.selectedItems.length > 0 && event.target.selectionStart === 0) {\n // if there is selected text, do not focus the last chip\n if (event.target.selectionEnd !== event.target.selectionStart) {\n return;\n }\n if (key === 'backspace' || key === 'arrowleft') {\n this.moveFromInputToChip();\n }\n }\n },\n\n moveFromInputToChip () {\n this.getLastChipButton().focus();\n this.$refs.input?.blur();\n this.closeComboboxList();\n },\n\n moveFromChipToInput () {\n this.getLastChipButton().blur();\n this.$refs.input?.focus();\n this.showComboboxList();\n },\n\n navigateBetweenChips (target, toLeft) {\n const from = this.getChipButtons().indexOf(target);\n const to = toLeft ? from - 1 : from + 1;\n if (to < 0 || to >= this.$refs.chips?.length) {\n return;\n }\n this.getChipButtons()[from].blur();\n this.getChipButtons()[to].focus();\n this.closeComboboxList();\n },\n\n setChipsTopPosition () {\n // To place the chips in the input box\n // The chip \"top\" position should be the same line as the input box\n const input = this.getInput();\n if (!input) return;\n const inputSlotWrapper = this.$refs.inputSlotWrapper;\n const top = input.getBoundingClientRect().top -\n inputSlotWrapper.getBoundingClientRect().top;\n const chipsWrapper = this.$refs.chipsWrapper;\n chipsWrapper.style.top = (top - CHIP_TOP_POSITION[this.size]) + 'px';\n },\n\n setInputPadding () {\n const lastChip = this.getLastChip();\n const input = this.getInput();\n const chipsWrapper = this.$refs.chipsWrapper;\n if (!input) return;\n this.revertInputPadding(input);\n this.popoverOffset = [0, 4];\n if (!lastChip) return;\n // Avoid adding extra padding when the input is not focused if collapseOnFocusOut is true\n // This ensures the input returns to its original state when resizing\n if (this.collapseOnFocusOut && !this.inputFocused) return;\n\n // Get the position of the last chip\n // The input cursor should be the same \"top\" as that chip and next besides it\n const left = lastChip.offsetLeft + this.getFullWidth(lastChip);\n const spaceLeft = input.getBoundingClientRect().width - left;\n // input.style.paddingLeft = left + 'px';\n\n if (spaceLeft > this.reservedRightSpace) {\n input.style.paddingLeft = left + 'px';\n } else {\n input.style.paddingLeft = '4px';\n }\n\n // Get the chip wrapper height minus the 4px padding\n const chipsWrapperHeight = chipsWrapper.getBoundingClientRect().height - 4;\n const lastChipHeight = lastChip.getBoundingClientRect().height - 4;\n\n // Get lastChip offsetTop plus 2px of the input padding.\n const top = spaceLeft > this.reservedRightSpace\n ? lastChip.offsetTop + 2\n : (chipsWrapperHeight + lastChipHeight - 9);\n\n input.style.paddingTop = `${top}px`;\n },\n\n revertInputPadding (input) {\n input.style.paddingLeft = '';\n input.style.paddingTop = '';\n input.style.paddingBottom = '';\n },\n\n getFullWidth (el) {\n const styles = window.getComputedStyle(el);\n return el.offsetWidth + parseInt(styles.marginLeft) + parseInt(styles.marginRight);\n },\n\n setInputMinWidth () {\n // Ensure the width of the input is \"slightly bigger\" than the width of a single chip\n const firstChip = this.getFirstChip();\n const input = this.getInput();\n if (!input) return;\n if (firstChip) {\n // Add 4px buffer for typing room\n input.style.minWidth = (this.getFullWidth(firstChip) + 4) + 'px';\n } else {\n input.style.minWidth = '';\n }\n },\n\n checkMaxSelected () {\n if (this.maxSelected === 0) return;\n if (this.selectedItems.length > this.maxSelected) {\n this.showValidationMessages = true;\n this.$emit('max-selected');\n } else {\n this.showValidationMessages = false;\n }\n },\n\n setInitialInputHeight () {\n const input = this.getInput();\n if (!input) return;\n this.initialInputHeight = input.getBoundingClientRect().height;\n },\n\n async handleInputFocusIn () {\n this.inputFocused = true;\n if (this.collapseOnFocusOut) {\n this.hideInputText = false;\n await this.$nextTick();\n this.setInputPadding();\n }\n },\n\n async handleInputFocusOut () {\n this.inputFocused = false;\n if (this.collapseOnFocusOut) {\n this.hideInputText = true;\n const input = this.getInput();\n if (!input) return;\n // Hide the input text when is not on first line\n if (!input.style.paddingTop) {\n return;\n }\n this.revertInputPadding(input);\n }\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtRecipeComboboxWithPopover","DtInput","DtChip","DtValidationMessages","inputMessages","validationMessageValidator","t","MULTI_SELECT_SIZES","appendTo","POPOVER_APPEND_TO_VALUES","CHIP_SIZES","hasSlotContent","_a","event","extractVueListeners","input","extractNonListeners","highlightIndex","item","i","chip","returnFirstEl","key","target","toLeft","from","to","inputSlotWrapper","top","chipsWrapper","CHIP_TOP_POSITION","lastChip","left","spaceLeft","chipsWrapperHeight","lastChipHeight","el","styles","firstChip","_hoisted_1","_hoisted_3","_openBlock","_createBlock","_component_dt_recipe_combobox_with_popover","_mergeProps","$props","$data","$options","_ctx","_createSlots","_withCtx","onInput","_createElementVNode","args","_normalizeClass","_createElementBlock","_Fragment","_renderList","_component_dt_chip","_toHandlers","_withKeys","$event","_createTextVNode","_toDisplayString","_createVNode","_component_dt_input","_cache","_component_dt_validation_messages","_withModifiers","_hoisted_2","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"combobox-multi-select.cjs","sources":["../../../recipes/comboboxes/combobox_multi_select/combobox_multi_select.vue"],"sourcesContent":["<!-- eslint-disable vue/no-static-inline-styles -->\n<template>\n <dt-recipe-combobox-with-popover\n ref=\"comboboxWithPopover\"\n :label=\"label\"\n :show-list=\"showList\"\n :max-height=\"listMaxHeight\"\n :max-width=\"listMaxWidth\"\n :popover-offset=\"popoverOffset\"\n :has-suggestion-list=\"hasSuggestionList\"\n content-width=\"anchor\"\n :append-to=\"appendTo\"\n :transition=\"transition\"\n v-bind=\"extractNonListeners($attrs)\"\n @select=\"onComboboxSelect\"\n @highlight=\"comboboxHighlight\"\n >\n <template #input=\"{ onInput }\">\n <span\n ref=\"inputSlotWrapper\"\n class=\"d-recipe-combobox-multi-select__input-wrapper\"\n @focusin=\"handleInputFocusIn\"\n @focusout=\"handleInputFocusOut\"\n >\n <span\n ref=\"chipsWrapper\"\n :class=\"['d-recipe-combobox-multi-select__chip-wrapper', chipWrapperClass]\"\n >\n <dt-chip\n v-for=\"item in selectedItems\"\n ref=\"chips\"\n :key=\"item\"\n :label-class=\"['d-chip__label']\"\n :class=\"[\n 'd-recipe-combobox-multi-select__chip',\n { 'd-recipe-combobox-multi-select__chip--truncate': !!chipMaxWidth },\n ]\"\n :style=\"{ maxWidth: chipMaxWidth }\"\n :size=\"CHIP_SIZES[size]\"\n :disabled=\"disabled\"\n v-on=\"chipListeners\"\n @keydown.backspace=\"onChipRemove(item)\"\n @close=\"onChipRemove(item)\"\n >\n {{ item }}\n </dt-chip>\n </span>\n\n <dt-input\n ref=\"input\"\n v-model=\"value\"\n class=\"d-recipe-combobox-multi-select__input\"\n :input-class=\"[\n inputClass, {\n 'd-recipe-combobox-multi-select__input--hidden': hideInputText,\n }]\"\n :input-wrapper-class=\"inputWrapperClass\"\n :disabled=\"disabled\"\n :aria-label=\"label\"\n :label=\"labelVisible ? label : ''\"\n :description=\"description\"\n :placeholder=\"inputPlaceHolder\"\n :show-messages=\"showInputMessages\"\n :messages=\"inputMessages\"\n :size=\"size\"\n v-bind=\"inputListeners\"\n @input=\"onInput\"\n />\n\n <dt-validation-messages\n :validation-messages=\"maxSelectedMessage\"\n :show-messages=\"showValidationMessages\"\n />\n </span>\n </template>\n\n <!-- @slot slot for popover header -->\n <template\n v-if=\"hasSlotContent($slots.header)\"\n #header\n >\n <div ref=\"header\">\n <slot name=\"header\" />\n </div>\n </template>\n\n <!-- @slot slot for popover list -->\n <template #list>\n <div\n ref=\"list\"\n class=\"d-recipe-combobox-multi-select__list\"\n @mousedown.prevent\n >\n <slot\n v-if=\"!loading\"\n name=\"list\"\n />\n <div\n v-else\n class=\"d-recipe-combobox-multi-select__list--loading\"\n >\n {{ loadingMessage }}\n </div>\n </div>\n </template>\n\n <!-- @slot slot for popover footer -->\n <template\n v-if=\"hasSlotContent($slots.footer)\"\n #footer\n >\n <div ref=\"footer\">\n <slot name=\"footer\" />\n </div>\n </template>\n </dt-recipe-combobox-with-popover>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport DtRecipeComboboxWithPopover from '@/recipes/comboboxes/combobox_with_popover/combobox_with_popover.vue';\nimport DtInput from '@/components/input/input.vue';\nimport DtChip from '@/components/chip/chip.vue';\nimport DtValidationMessages from '@/components/validation_messages/validation_messages.vue';\nimport { validationMessageValidator } from '@/common/validators';\nimport { extractVueListeners, extractNonListeners, hasSlotContent, returnFirstEl } from '@/common/utils';\nimport {\n POPOVER_APPEND_TO_VALUES,\n} from '@/components/popover/popover_constants';\nimport {\n MULTI_SELECT_SIZES,\n CHIP_SIZES,\n CHIP_TOP_POSITION,\n} from './combobox_multi_select_constants';\n\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtRecipeComboboxMultiSelect',\n\n components: {\n DtRecipeComboboxWithPopover,\n DtInput,\n DtChip,\n DtValidationMessages,\n },\n\n inheritAttrs: false,\n\n props: {\n /**\n * String to use for the input label.\n */\n label: {\n type: String,\n required: true,\n },\n\n /**\n * Determines visibility of input label.\n * @values true, false\n */\n labelVisible: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Description for the input\n */\n description: {\n type: String,\n default: '',\n },\n\n /**\n * Input placeholder\n */\n placeholder: {\n type: String,\n default: 'Select one or start typing',\n },\n\n /**\n * Input validation messages\n */\n inputMessages: {\n type: Array,\n default: () => [],\n validator: inputMessages => {\n return validationMessageValidator(inputMessages);\n },\n },\n\n /**\n * Show input validation message\n */\n showInputMessages: {\n type: Boolean,\n default: true,\n },\n\n // @TODO: https://dialpad.atlassian.net/browse/DP-52324\n // type: {\n // type: String,\n // values: ['input', 'select'],\n // default: 'select',\n // },\n\n /**\n * Determines if the list is loading\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The message when the list is loading\n */\n loadingMessage: {\n type: String,\n default: 'loading...',\n },\n\n /**\n * Determines when to show the list element and also controls the aria-expanded attribute.\n * Leaving this null will have the combobox trigger on input focus by default.\n * If you set this value, the default trigger behavior will be disabled and you can\n * control it as you need.\n */\n showList: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n listMaxHeight: {\n type: String,\n default: '300px',\n },\n\n /**\n * The selected items\n */\n selectedItems: {\n type: Array,\n default: function () { return []; },\n },\n\n /**\n * Would be the maximum number of selections you can make. 0 is unlimited\n */\n maxSelected: {\n type: Number,\n default: 0,\n },\n\n /**\n * Max select message when the max selections is exceeded with the structure:\n * `[{\"message\": string, \"type\": VALIDATION_MESSAGE_TYPES }]`\n */\n maxSelectedMessage: {\n type: Array,\n default: function () { return []; },\n },\n\n /**\n * Displays the list when the combobox is focused, before the user has typed anything.\n * When this is enabled the list will not close after selection.\n */\n hasSuggestionList: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Size of the chip, one of `xs`, `sm`, `md`\n */\n size: {\n type: String,\n default: 'md',\n validator: (t) => Object.values(MULTI_SELECT_SIZES).includes(t),\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTMLElement, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n\n /**\n * Determines whether the combobox should collapse to a single when losing focus.\n * @type {boolean}\n */\n collapseOnFocusOut: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|em\n */\n listMaxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Amount of reserved space (in px) on the right side of the input\n * before the chips and the input caret jump to the next line.\n * default is 64\n */\n reservedRightSpace: {\n type: Number,\n default: 64,\n },\n\n /**\n * Determines the maximum width of a single chip. If the text within this chip exceeds the value\n * it will be truncated with ellipses.\n * Possible units rem|px|em\n */\n chipMaxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Additional class name for the input element.\n * Can accept String, Object, and Array, i.e. has the\n * same API as Vue's built-in handling of the class attribute.\n */\n inputClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * Additional class name for the input wrapper element.\n * Can accept all of String, Object, and Array, i.e. has the\n * same api as Vue's built-in handling of the class attribute.\n */\n inputWrapperClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * When true, disables the underlying input.\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Native input event\n *\n * @event input\n * @type {String }\n */\n 'input',\n\n /**\n * Event fired when item selected\n *\n * @event select\n * @type {Number}\n */\n 'select',\n\n /**\n * Event fired when item removed\n *\n * @event remove\n * @type {String}\n */\n 'remove',\n\n /**\n * Event fired when max selected items limit is reached\n *\n * @event max-selected\n * @type {Object}\n */\n 'max-selected',\n\n /**\n * Native keyup event\n *\n * @event keyup\n * @type {KeyboardEvent}\n */\n 'keyup',\n\n /**\n * Native keydown event\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n\n /**\n * Event fired when combobox item is highlighted\n *\n * @event combobox-highlight\n * @type {Object}\n */\n 'combobox-highlight',\n ],\n\n data () {\n return {\n value: '',\n popoverOffset: [0, 4],\n showValidationMessages: false,\n resizeWindowObserver: null,\n initialInputHeight: null,\n CHIP_SIZES,\n hasSlotContent,\n inputFocused: false,\n hideInputText: false,\n };\n },\n\n computed: {\n inputPlaceHolder () {\n return this.selectedItems?.length > 0 ? '' : this.placeholder;\n },\n\n chipListeners () {\n return {\n keydown: event => {\n this.onChipKeyDown(event);\n this.$emit('keydown', event);\n },\n };\n },\n\n inputListeners () {\n return {\n ...extractVueListeners(this.$attrs),\n onInput: event => {\n this.$emit('input', event);\n if (this.hasSuggestionList) {\n this.showComboboxList();\n }\n },\n\n onKeydown: event => {\n this.onInputKeyDown(event);\n },\n\n onKeyup: event => {\n this.$emit('keyup', event);\n },\n\n onClick: () => {\n if (this.hasSuggestionList) {\n this.showComboboxList();\n }\n },\n };\n },\n\n chipWrapperClass () {\n return {\n [`d-recipe-combobox-multi-select__chip-wrapper-${this.size}--collapsed`]: !this.inputFocused && this.collapseOnFocusOut,\n };\n },\n },\n\n watch: {\n selectedItems: {\n deep: true,\n handler: async function () {\n await this.initSelectedItems();\n },\n },\n\n chipMaxWidth: {\n async handler () {\n await this.initSelectedItems();\n },\n },\n\n async label () {\n await this.$nextTick();\n // Adjust the chips position if label changed\n this.setChipsTopPosition();\n },\n\n async description () {\n await this.$nextTick();\n // Adjust the chips position if description changed\n this.setChipsTopPosition();\n },\n\n size: {\n async handler () {\n await this.$nextTick();\n const input = this.getInput();\n this.revertInputPadding(input);\n this.initialInputHeight = input.getBoundingClientRect().height;\n this.setInputPadding();\n this.setChipsTopPosition();\n },\n },\n },\n\n async mounted () {\n this.setInitialInputHeight();\n // Recalculate chip position and input padding when resizing window\n this.resizeWindowObserver = new ResizeObserver(async () => {\n this.setChipsTopPosition();\n this.setInputPadding();\n });\n this.resizeWindowObserver.observe(document.body);\n\n await this.initSelectedItems();\n },\n\n beforeUnmount () {\n this.resizeWindowObserver?.unobserve(document.body);\n },\n\n methods: {\n extractNonListeners,\n comboboxHighlight (highlightIndex) {\n this.$emit('combobox-highlight', highlightIndex);\n },\n\n async initSelectedItems () {\n await this.$nextTick();\n this.setInputPadding();\n this.setChipsTopPosition();\n this.setInputMinWidth();\n this.checkMaxSelected();\n },\n\n onChipRemove (item) {\n this.$emit('remove', item);\n this.$refs.input?.focus();\n },\n\n onComboboxSelect (i) {\n if (this.loading) return;\n this.value = '';\n this.$emit('select', i);\n },\n\n showComboboxList () {\n if (this.showList != null) { return; }\n this.$refs.comboboxWithPopover?.showComboboxList();\n },\n\n closeComboboxList () {\n if (this.showList != null) { return; }\n this.$refs.comboboxWithPopover?.closeComboboxList();\n },\n\n getChips () {\n if (!this.selectedItems.length || !this.$refs.chips) return null;\n\n // use the order from selectedItems to not rely on DOM order which may be stale\n const chips = this.selectedItems.map(item => {\n return this.$refs.chips.find(chip => {\n const chipLabel = returnFirstEl(chip.$el)?.querySelector('.d-chip__label')?.textContent?.trim();\n return chipLabel === item;\n });\n });\n return chips.filter(Boolean).map(chip => returnFirstEl(chip.$el));\n },\n\n getChipButtons () {\n const chips = this.getChips();\n return chips && chips.map(chip => returnFirstEl(chip).querySelector('button'));\n },\n\n getLastChipButton () {\n const chipButtons = this.getChipButtons();\n return chipButtons && chipButtons[chipButtons.length - 1];\n },\n\n getLastChip () {\n const chips = this.getChips();\n return chips && chips[chips.length - 1];\n },\n\n getFirstChip () {\n const chips = this.getChips();\n return chips && chips[0];\n },\n\n getInput () {\n return this.$refs.input?.$refs.input;\n },\n\n onChipKeyDown (event) {\n const key = event.code?.toLowerCase();\n if (key === 'arrowleft') {\n // Move to the previous chip\n this.navigateBetweenChips(event.target, true);\n } else if (key === 'arrowright') {\n if (event.target.id === this.getLastChipButton().id) {\n // Move to the input if it's the last chip\n this.moveFromChipToInput();\n } else {\n // Move to the next chip\n this.navigateBetweenChips(event.target, false);\n }\n }\n },\n\n onInputKeyDown (event) {\n const key = event.code?.toLowerCase();\n // If the cursor is at the start of the text,\n // press 'backspace' or 'left' focuses the last chip\n if (this.selectedItems.length > 0 && event.target.selectionStart === 0) {\n // if there is selected text, do not focus the last chip\n if (event.target.selectionEnd !== event.target.selectionStart) {\n return;\n }\n if (key === 'backspace' || key === 'arrowleft') {\n this.moveFromInputToChip();\n }\n }\n },\n\n moveFromInputToChip () {\n this.getLastChipButton().focus();\n this.$refs.input?.blur();\n this.closeComboboxList();\n },\n\n moveFromChipToInput () {\n this.getLastChipButton().blur();\n this.$refs.input?.focus();\n this.showComboboxList();\n },\n\n navigateBetweenChips (target, toLeft) {\n const from = this.getChipButtons().indexOf(target);\n const to = toLeft ? from - 1 : from + 1;\n if (to < 0 || to >= this.$refs.chips?.length) {\n return;\n }\n this.getChipButtons()[from].blur();\n this.getChipButtons()[to].focus();\n this.closeComboboxList();\n },\n\n setChipsTopPosition () {\n // To place the chips in the input box\n // The chip \"top\" position should be the same line as the input box\n const input = this.getInput();\n if (!input) return;\n const inputSlotWrapper = this.$refs.inputSlotWrapper;\n const top = input.getBoundingClientRect().top -\n inputSlotWrapper.getBoundingClientRect().top;\n const chipsWrapper = this.$refs.chipsWrapper;\n chipsWrapper.style.top = (top - CHIP_TOP_POSITION[this.size]) + 'px';\n },\n\n setInputPadding () {\n const lastChip = this.getLastChip();\n const input = this.getInput();\n const chipsWrapper = this.$refs.chipsWrapper;\n if (!input) return;\n this.revertInputPadding(input);\n this.popoverOffset = [0, 4];\n if (!lastChip) return;\n // Avoid adding extra padding when the input is not focused if collapseOnFocusOut is true\n // This ensures the input returns to its original state when resizing\n if (this.collapseOnFocusOut && !this.inputFocused) return;\n\n // Get the position of the last chip\n // The input cursor should be the same \"top\" as that chip and next besides it\n const left = lastChip.offsetLeft + this.getFullWidth(lastChip);\n const spaceLeft = input.getBoundingClientRect().width - left;\n // input.style.paddingLeft = left + 'px';\n\n if (spaceLeft > this.reservedRightSpace) {\n input.style.paddingLeft = left + 'px';\n } else {\n input.style.paddingLeft = '4px';\n }\n\n // Get the chip wrapper height minus the 4px padding\n const chipsWrapperHeight = chipsWrapper.getBoundingClientRect().height - 4;\n const lastChipHeight = lastChip.getBoundingClientRect().height - 4;\n\n // Get lastChip offsetTop plus 2px of the input padding.\n const top = spaceLeft > this.reservedRightSpace\n ? lastChip.offsetTop + 2\n : (chipsWrapperHeight + lastChipHeight - 9);\n\n input.style.paddingTop = `${top}px`;\n },\n\n revertInputPadding (input) {\n input.style.paddingLeft = '';\n input.style.paddingTop = '';\n input.style.paddingBottom = '';\n },\n\n getFullWidth (el) {\n const styles = window.getComputedStyle(el);\n return el.offsetWidth + parseInt(styles.marginLeft) + parseInt(styles.marginRight);\n },\n\n setInputMinWidth () {\n // Ensure the width of the input is \"slightly bigger\" than the width of a single chip\n const firstChip = this.getFirstChip();\n const input = this.getInput();\n if (!input) return;\n if (firstChip) {\n // Add 4px buffer for typing room\n input.style.minWidth = (this.getFullWidth(firstChip) + 4) + 'px';\n } else {\n input.style.minWidth = '';\n }\n },\n\n checkMaxSelected () {\n if (this.maxSelected === 0) return;\n if (this.selectedItems.length > this.maxSelected) {\n this.showValidationMessages = true;\n this.$emit('max-selected');\n } else {\n this.showValidationMessages = false;\n }\n },\n\n setInitialInputHeight () {\n const input = this.getInput();\n if (!input) return;\n this.initialInputHeight = input.getBoundingClientRect().height;\n },\n\n async handleInputFocusIn () {\n this.inputFocused = true;\n if (this.collapseOnFocusOut) {\n this.hideInputText = false;\n await this.$nextTick();\n this.setInputPadding();\n }\n },\n\n async handleInputFocusOut () {\n this.inputFocused = false;\n if (this.collapseOnFocusOut) {\n this.hideInputText = true;\n const input = this.getInput();\n if (!input) return;\n // Hide the input text when is not on first line\n if (!input.style.paddingTop) {\n return;\n }\n this.revertInputPadding(input);\n }\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtRecipeComboboxWithPopover","DtInput","DtChip","DtValidationMessages","inputMessages","validationMessageValidator","t","MULTI_SELECT_SIZES","appendTo","POPOVER_APPEND_TO_VALUES","CHIP_SIZES","hasSlotContent","_a","event","extractVueListeners","input","extractNonListeners","highlightIndex","item","i","chip","returnFirstEl","chips","chipButtons","key","target","toLeft","from","to","inputSlotWrapper","top","chipsWrapper","CHIP_TOP_POSITION","lastChip","left","spaceLeft","chipsWrapperHeight","lastChipHeight","el","styles","firstChip","_hoisted_1","_hoisted_3","_openBlock","_createBlock","_component_dt_recipe_combobox_with_popover","_mergeProps","$props","$data","$options","_ctx","_createSlots","_withCtx","onInput","_createElementVNode","args","_normalizeClass","_createElementBlock","_Fragment","_renderList","_component_dt_chip","_toHandlers","_withKeys","$event","_createTextVNode","_toDisplayString","_createVNode","_component_dt_input","_cache","_component_dt_validation_messages","_withModifiers","_hoisted_2","_renderSlot"],"mappings":"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"}
@@ -1,19 +1,19 @@
1
- import v from "../combobox-with-popover/combobox-with-popover.js";
2
- import _ from "../input/input.js";
1
+ import _ from "../combobox-with-popover/combobox-with-popover.js";
2
+ import v from "../input/input.js";
3
3
  import L from "../chip/chip.js";
4
4
  import W from "../validation-messages/validation-messages.js";
5
5
  import { validationMessageValidator as M } from "../../common/validators/index.js";
6
- import { extractNonListeners as O, returnFirstEl as f, extractVueListeners as T, hasSlotContent as B } from "../../common/utils/index.js";
6
+ import { extractNonListeners as B, returnFirstEl as d, extractVueListeners as O, hasSlotContent as T } from "../../common/utils/index.js";
7
7
  import { POPOVER_APPEND_TO_VALUES as P } from "../popover/popover-constants.js";
8
8
  import { CHIP_TOP_POSITION as F, CHIP_SIZES as k, MULTI_SELECT_SIZES as H } from "./combobox-multi-select-constants.js";
9
- import { resolveComponent as h, createBlock as m, openBlock as p, mergeProps as c, createSlots as R, withCtx as a, createElementVNode as r, withModifiers as V, renderSlot as g, createElementBlock as b, toDisplayString as C, createVNode as y, normalizeClass as z, Fragment as E, renderList as D, toHandlers as K, withKeys as N, createTextVNode as A } from "vue";
9
+ import { resolveComponent as p, createBlock as f, openBlock as u, mergeProps as g, createSlots as R, withCtx as r, createElementVNode as h, withModifiers as V, renderSlot as m, createElementBlock as b, toDisplayString as C, createVNode as y, normalizeClass as z, Fragment as E, renderList as D, toHandlers as K, withKeys as N, createTextVNode as A } from "vue";
10
10
  import { _ as U } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
11
11
  const j = {
12
12
  compatConfig: { MODE: 3 },
13
13
  name: "DtRecipeComboboxMultiSelect",
14
14
  components: {
15
- DtRecipeComboboxWithPopover: v,
16
- DtInput: _,
15
+ DtRecipeComboboxWithPopover: _,
16
+ DtInput: v,
17
17
  DtChip: L,
18
18
  DtValidationMessages: W
19
19
  },
@@ -280,7 +280,7 @@ const j = {
280
280
  resizeWindowObserver: null,
281
281
  initialInputHeight: null,
282
282
  CHIP_SIZES: k,
283
- hasSlotContent: B,
283
+ hasSlotContent: T,
284
284
  inputFocused: !1,
285
285
  hideInputText: !1
286
286
  };
@@ -299,7 +299,7 @@ const j = {
299
299
  },
300
300
  inputListeners() {
301
301
  return {
302
- ...T(this.$attrs),
302
+ ...O(this.$attrs),
303
303
  onInput: (t) => {
304
304
  this.$emit("input", t), this.hasSuggestionList && this.showComboboxList();
305
305
  },
@@ -324,12 +324,12 @@ const j = {
324
324
  selectedItems: {
325
325
  deep: !0,
326
326
  handler: async function() {
327
- this.initSelectedItems();
327
+ await this.initSelectedItems();
328
328
  }
329
329
  },
330
330
  chipMaxWidth: {
331
331
  async handler() {
332
- this.initSelectedItems();
332
+ await this.initSelectedItems();
333
333
  }
334
334
  },
335
335
  async label() {
@@ -346,17 +346,17 @@ const j = {
346
346
  }
347
347
  }
348
348
  },
349
- mounted() {
349
+ async mounted() {
350
350
  this.setInitialInputHeight(), this.resizeWindowObserver = new ResizeObserver(async () => {
351
351
  this.setChipsTopPosition(), this.setInputPadding();
352
- }), this.resizeWindowObserver.observe(document.body), this.initSelectedItems();
352
+ }), this.resizeWindowObserver.observe(document.body), await this.initSelectedItems();
353
353
  },
354
354
  beforeUnmount() {
355
355
  var t;
356
356
  (t = this.resizeWindowObserver) == null || t.unobserve(document.body);
357
357
  },
358
358
  methods: {
359
- extractNonListeners: O,
359
+ extractNonListeners: B,
360
360
  comboboxHighlight(t) {
361
361
  this.$emit("combobox-highlight", t);
362
362
  },
@@ -364,8 +364,8 @@ const j = {
364
364
  await this.$nextTick(), this.setInputPadding(), this.setChipsTopPosition(), this.setInputMinWidth(), this.checkMaxSelected();
365
365
  },
366
366
  onChipRemove(t) {
367
- var i;
368
- this.$emit("remove", t), (i = this.$refs.input) == null || i.focus();
367
+ var e;
368
+ this.$emit("remove", t), (e = this.$refs.input) == null || e.focus();
369
369
  },
370
370
  onComboboxSelect(t) {
371
371
  this.loading || (this.value = "", this.$emit("select", t));
@@ -378,37 +378,44 @@ const j = {
378
378
  var t;
379
379
  this.showList == null && ((t = this.$refs.comboboxWithPopover) == null || t.closeComboboxList());
380
380
  },
381
- getChipButtons() {
382
- return this.$refs.chips && this.$refs.chips.map((t) => f(t.$el).querySelector("button"));
383
- },
384
381
  getChips() {
385
- return this.$refs.chips && this.$refs.chips.map((t) => f(t.$el));
382
+ return !this.selectedItems.length || !this.$refs.chips ? null : this.selectedItems.map((e) => this.$refs.chips.find((i) => {
383
+ var o, s, a;
384
+ return ((a = (s = (o = d(i.$el)) == null ? void 0 : o.querySelector(".d-chip__label")) == null ? void 0 : s.textContent) == null ? void 0 : a.trim()) === e;
385
+ })).filter(Boolean).map((e) => d(e.$el));
386
+ },
387
+ getChipButtons() {
388
+ const t = this.getChips();
389
+ return t && t.map((e) => d(e).querySelector("button"));
386
390
  },
387
391
  getLastChipButton() {
388
- return this.$refs.chips && this.getChipButtons()[this.getChipButtons().length - 1];
392
+ const t = this.getChipButtons();
393
+ return t && t[t.length - 1];
389
394
  },
390
395
  getLastChip() {
391
- return this.$refs.chips && this.getChips()[this.getChips().length - 1];
396
+ const t = this.getChips();
397
+ return t && t[t.length - 1];
392
398
  },
393
399
  getFirstChip() {
394
- return this.$refs.chips && this.getChips()[0];
400
+ const t = this.getChips();
401
+ return t && t[0];
395
402
  },
396
403
  getInput() {
397
404
  var t;
398
405
  return (t = this.$refs.input) == null ? void 0 : t.$refs.input;
399
406
  },
400
407
  onChipKeyDown(t) {
401
- var e;
402
- const i = (e = t.code) == null ? void 0 : e.toLowerCase();
403
- i === "arrowleft" ? this.navigateBetweenChips(t.target, !0) : i === "arrowright" && (t.target.id === this.getLastChipButton().id ? this.moveFromChipToInput() : this.navigateBetweenChips(t.target, !1));
408
+ var i;
409
+ const e = (i = t.code) == null ? void 0 : i.toLowerCase();
410
+ e === "arrowleft" ? this.navigateBetweenChips(t.target, !0) : e === "arrowright" && (t.target.id === this.getLastChipButton().id ? this.moveFromChipToInput() : this.navigateBetweenChips(t.target, !1));
404
411
  },
405
412
  onInputKeyDown(t) {
406
- var e;
407
- const i = (e = t.code) == null ? void 0 : e.toLowerCase();
413
+ var i;
414
+ const e = (i = t.code) == null ? void 0 : i.toLowerCase();
408
415
  if (this.selectedItems.length > 0 && t.target.selectionStart === 0) {
409
416
  if (t.target.selectionEnd !== t.target.selectionStart)
410
417
  return;
411
- (i === "backspace" || i === "arrowleft") && this.moveFromInputToChip();
418
+ (e === "backspace" || e === "arrowleft") && this.moveFromInputToChip();
412
419
  }
413
420
  },
414
421
  moveFromInputToChip() {
@@ -419,35 +426,35 @@ const j = {
419
426
  var t;
420
427
  this.getLastChipButton().blur(), (t = this.$refs.input) == null || t.focus(), this.showComboboxList();
421
428
  },
422
- navigateBetweenChips(t, i) {
429
+ navigateBetweenChips(t, e) {
423
430
  var o;
424
- const e = this.getChipButtons().indexOf(t), l = i ? e - 1 : e + 1;
425
- l < 0 || l >= ((o = this.$refs.chips) == null ? void 0 : o.length) || (this.getChipButtons()[e].blur(), this.getChipButtons()[l].focus(), this.closeComboboxList());
431
+ const i = this.getChipButtons().indexOf(t), n = e ? i - 1 : i + 1;
432
+ n < 0 || n >= ((o = this.$refs.chips) == null ? void 0 : o.length) || (this.getChipButtons()[i].blur(), this.getChipButtons()[n].focus(), this.closeComboboxList());
426
433
  },
427
434
  setChipsTopPosition() {
428
435
  const t = this.getInput();
429
436
  if (!t) return;
430
- const i = this.$refs.inputSlotWrapper, e = t.getBoundingClientRect().top - i.getBoundingClientRect().top, l = this.$refs.chipsWrapper;
431
- l.style.top = e - F[this.size] + "px";
437
+ const e = this.$refs.inputSlotWrapper, i = t.getBoundingClientRect().top - e.getBoundingClientRect().top, n = this.$refs.chipsWrapper;
438
+ n.style.top = i - F[this.size] + "px";
432
439
  },
433
440
  setInputPadding() {
434
- const t = this.getLastChip(), i = this.getInput(), e = this.$refs.chipsWrapper;
435
- if (!i || (this.revertInputPadding(i), this.popoverOffset = [0, 4], !t) || this.collapseOnFocusOut && !this.inputFocused) return;
436
- const l = t.offsetLeft + this.getFullWidth(t), o = i.getBoundingClientRect().width - l;
437
- o > this.reservedRightSpace ? i.style.paddingLeft = l + "px" : i.style.paddingLeft = "4px";
438
- const s = e.getBoundingClientRect().height - 4, u = t.getBoundingClientRect().height - 4, d = o > this.reservedRightSpace ? t.offsetTop + 2 : s + u - 9;
439
- i.style.paddingTop = `${d}px`;
441
+ const t = this.getLastChip(), e = this.getInput(), i = this.$refs.chipsWrapper;
442
+ if (!e || (this.revertInputPadding(e), this.popoverOffset = [0, 4], !t) || this.collapseOnFocusOut && !this.inputFocused) return;
443
+ const n = t.offsetLeft + this.getFullWidth(t), o = e.getBoundingClientRect().width - n;
444
+ o > this.reservedRightSpace ? e.style.paddingLeft = n + "px" : e.style.paddingLeft = "4px";
445
+ const s = i.getBoundingClientRect().height - 4, a = t.getBoundingClientRect().height - 4, c = o > this.reservedRightSpace ? t.offsetTop + 2 : s + a - 9;
446
+ e.style.paddingTop = `${c}px`;
440
447
  },
441
448
  revertInputPadding(t) {
442
449
  t.style.paddingLeft = "", t.style.paddingTop = "", t.style.paddingBottom = "";
443
450
  },
444
451
  getFullWidth(t) {
445
- const i = window.getComputedStyle(t);
446
- return t.offsetWidth + parseInt(i.marginLeft) + parseInt(i.marginRight);
452
+ const e = window.getComputedStyle(t);
453
+ return t.offsetWidth + parseInt(e.marginLeft) + parseInt(e.marginRight);
447
454
  },
448
455
  setInputMinWidth() {
449
- const t = this.getFirstChip(), i = this.getInput();
450
- i && (t ? i.style.minWidth = this.getFullWidth(t) + 4 + "px" : i.style.minWidth = "");
456
+ const t = this.getFirstChip(), e = this.getInput();
457
+ e && (t ? e.style.minWidth = this.getFullWidth(t) + 4 + "px" : e.style.minWidth = "");
451
458
  },
452
459
  checkMaxSelected() {
453
460
  this.maxSelected !== 0 && (this.selectedItems.length > this.maxSelected ? (this.showValidationMessages = !0, this.$emit("max-selected")) : this.showValidationMessages = !1);
@@ -469,120 +476,120 @@ const j = {
469
476
  }
470
477
  }
471
478
  }
472
- }, Z = { ref: "header" }, q = {
479
+ }, q = { ref: "header" }, Z = {
473
480
  key: 1,
474
481
  class: "d-recipe-combobox-multi-select__list--loading"
475
- }, $ = { ref: "footer" };
476
- function G(t, i, e, l, o, s) {
477
- const u = h("dt-chip"), d = h("dt-input"), x = h("dt-validation-messages"), I = h("dt-recipe-combobox-with-popover");
478
- return p(), m(I, c({
482
+ }, G = { ref: "footer" };
483
+ function J(t, e, i, n, o, s) {
484
+ const a = p("dt-chip"), c = p("dt-input"), x = p("dt-validation-messages"), I = p("dt-recipe-combobox-with-popover");
485
+ return u(), f(I, g({
479
486
  ref: "comboboxWithPopover",
480
- label: e.label,
481
- "show-list": e.showList,
482
- "max-height": e.listMaxHeight,
483
- "max-width": e.listMaxWidth,
487
+ label: i.label,
488
+ "show-list": i.showList,
489
+ "max-height": i.listMaxHeight,
490
+ "max-width": i.listMaxWidth,
484
491
  "popover-offset": o.popoverOffset,
485
- "has-suggestion-list": e.hasSuggestionList,
492
+ "has-suggestion-list": i.hasSuggestionList,
486
493
  "content-width": "anchor",
487
- "append-to": e.appendTo,
488
- transition: e.transition
494
+ "append-to": i.appendTo,
495
+ transition: i.transition
489
496
  }, s.extractNonListeners(t.$attrs), {
490
497
  onSelect: s.onComboboxSelect,
491
498
  onHighlight: s.comboboxHighlight
492
499
  }), R({
493
- input: a(({ onInput: w }) => [
494
- r("span", {
500
+ input: r(({ onInput: w }) => [
501
+ h("span", {
495
502
  ref: "inputSlotWrapper",
496
503
  class: "d-recipe-combobox-multi-select__input-wrapper",
497
- onFocusin: i[1] || (i[1] = (...n) => s.handleInputFocusIn && s.handleInputFocusIn(...n)),
498
- onFocusout: i[2] || (i[2] = (...n) => s.handleInputFocusOut && s.handleInputFocusOut(...n))
504
+ onFocusin: e[1] || (e[1] = (...l) => s.handleInputFocusIn && s.handleInputFocusIn(...l)),
505
+ onFocusout: e[2] || (e[2] = (...l) => s.handleInputFocusOut && s.handleInputFocusOut(...l))
499
506
  }, [
500
- r("span", {
507
+ h("span", {
501
508
  ref: "chipsWrapper",
502
509
  class: z(["d-recipe-combobox-multi-select__chip-wrapper", s.chipWrapperClass])
503
510
  }, [
504
- (p(!0), b(E, null, D(e.selectedItems, (n) => (p(), m(u, c({
511
+ (u(!0), b(E, null, D(i.selectedItems, (l) => (u(), f(a, g({
505
512
  ref_for: !0,
506
513
  ref: "chips",
507
- key: n,
514
+ key: l,
508
515
  "label-class": ["d-chip__label"],
509
516
  class: [
510
517
  "d-recipe-combobox-multi-select__chip",
511
- { "d-recipe-combobox-multi-select__chip--truncate": !!e.chipMaxWidth }
518
+ { "d-recipe-combobox-multi-select__chip--truncate": !!i.chipMaxWidth }
512
519
  ],
513
- style: { maxWidth: e.chipMaxWidth },
514
- size: o.CHIP_SIZES[e.size],
515
- disabled: e.disabled
520
+ style: { maxWidth: i.chipMaxWidth },
521
+ size: o.CHIP_SIZES[i.size],
522
+ disabled: i.disabled
516
523
  }, K(s.chipListeners), {
517
- onKeydown: N((S) => s.onChipRemove(n), ["backspace"]),
518
- onClose: (S) => s.onChipRemove(n)
524
+ onKeydown: N((S) => s.onChipRemove(l), ["backspace"]),
525
+ onClose: (S) => s.onChipRemove(l)
519
526
  }), {
520
- default: a(() => [
521
- A(C(n), 1)
527
+ default: r(() => [
528
+ A(C(l), 1)
522
529
  ]),
523
530
  _: 2
524
531
  }, 1040, ["class", "style", "size", "disabled", "onKeydown", "onClose"]))), 128))
525
532
  ], 2),
526
- y(d, c({
533
+ y(c, g({
527
534
  ref: "input",
528
535
  modelValue: o.value,
529
- "onUpdate:modelValue": i[0] || (i[0] = (n) => o.value = n),
536
+ "onUpdate:modelValue": e[0] || (e[0] = (l) => o.value = l),
530
537
  class: "d-recipe-combobox-multi-select__input",
531
538
  "input-class": [
532
- e.inputClass,
539
+ i.inputClass,
533
540
  {
534
541
  "d-recipe-combobox-multi-select__input--hidden": o.hideInputText
535
542
  }
536
543
  ],
537
- "input-wrapper-class": e.inputWrapperClass,
538
- disabled: e.disabled,
539
- "aria-label": e.label,
540
- label: e.labelVisible ? e.label : "",
541
- description: e.description,
544
+ "input-wrapper-class": i.inputWrapperClass,
545
+ disabled: i.disabled,
546
+ "aria-label": i.label,
547
+ label: i.labelVisible ? i.label : "",
548
+ description: i.description,
542
549
  placeholder: s.inputPlaceHolder,
543
- "show-messages": e.showInputMessages,
544
- messages: e.inputMessages,
545
- size: e.size
550
+ "show-messages": i.showInputMessages,
551
+ messages: i.inputMessages,
552
+ size: i.size
546
553
  }, s.inputListeners, { onInput: w }), null, 16, ["modelValue", "input-class", "input-wrapper-class", "disabled", "aria-label", "label", "description", "placeholder", "show-messages", "messages", "size", "onInput"]),
547
554
  y(x, {
548
- "validation-messages": e.maxSelectedMessage,
555
+ "validation-messages": i.maxSelectedMessage,
549
556
  "show-messages": o.showValidationMessages
550
557
  }, null, 8, ["validation-messages", "show-messages"])
551
558
  ], 544)
552
559
  ]),
553
- list: a(() => [
554
- r("div", {
560
+ list: r(() => [
561
+ h("div", {
555
562
  ref: "list",
556
563
  class: "d-recipe-combobox-multi-select__list",
557
- onMousedown: i[3] || (i[3] = V(() => {
564
+ onMousedown: e[3] || (e[3] = V(() => {
558
565
  }, ["prevent"]))
559
566
  }, [
560
- e.loading ? (p(), b("div", q, C(e.loadingMessage), 1)) : g(t.$slots, "list", { key: 0 })
567
+ i.loading ? (u(), b("div", Z, C(i.loadingMessage), 1)) : m(t.$slots, "list", { key: 0 })
561
568
  ], 544)
562
569
  ]),
563
570
  _: 2
564
571
  }, [
565
572
  o.hasSlotContent(t.$slots.header) ? {
566
573
  name: "header",
567
- fn: a(() => [
568
- r("div", Z, [
569
- g(t.$slots, "header")
574
+ fn: r(() => [
575
+ h("div", q, [
576
+ m(t.$slots, "header")
570
577
  ], 512)
571
578
  ]),
572
579
  key: "0"
573
580
  } : void 0,
574
581
  o.hasSlotContent(t.$slots.footer) ? {
575
582
  name: "footer",
576
- fn: a(() => [
577
- r("div", $, [
578
- g(t.$slots, "footer")
583
+ fn: r(() => [
584
+ h("div", G, [
585
+ m(t.$slots, "footer")
579
586
  ], 512)
580
587
  ]),
581
588
  key: "1"
582
589
  } : void 0
583
590
  ]), 1040, ["label", "show-list", "max-height", "max-width", "popover-offset", "has-suggestion-list", "append-to", "transition", "onSelect", "onHighlight"]);
584
591
  }
585
- const lt = /* @__PURE__ */ U(j, [["render", G]]);
592
+ const lt = /* @__PURE__ */ U(j, [["render", J]]);
586
593
  export {
587
594
  lt as default
588
595
  };