@dialpad/dialtone-vue 3.212.0 → 3.213.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/lib/button/button.cjs +1 -1
  2. package/dist/lib/button/button.cjs.map +1 -1
  3. package/dist/lib/button/button.js +56 -44
  4. package/dist/lib/button/button.js.map +1 -1
  5. package/dist/lib/editor/EditorToolbarButton.cjs +1 -1
  6. package/dist/lib/editor/EditorToolbarButton.cjs.map +1 -1
  7. package/dist/lib/editor/EditorToolbarButton.js +18 -17
  8. package/dist/lib/editor/EditorToolbarButton.js.map +1 -1
  9. package/dist/lib/editor/EditorToolbarDropdownButton.cjs +1 -1
  10. package/dist/lib/editor/EditorToolbarDropdownButton.cjs.map +1 -1
  11. package/dist/lib/editor/EditorToolbarDropdownButton.js +38 -35
  12. package/dist/lib/editor/EditorToolbarDropdownButton.js.map +1 -1
  13. package/dist/lib/editor/EditorToolbarPopoverButton.cjs +1 -1
  14. package/dist/lib/editor/EditorToolbarPopoverButton.cjs.map +1 -1
  15. package/dist/lib/editor/EditorToolbarPopoverButton.js +38 -35
  16. package/dist/lib/editor/EditorToolbarPopoverButton.js.map +1 -1
  17. package/dist/lib/editor/editor.cjs +1 -1
  18. package/dist/lib/editor/editor.cjs.map +1 -1
  19. package/dist/lib/editor/editor.js +114 -106
  20. package/dist/lib/editor/editor.js.map +1 -1
  21. package/dist/types/common/sr_only_close_button.vue.d.ts +27 -1
  22. package/dist/types/components/banner/banner.vue.d.ts +54 -2
  23. package/dist/types/components/banner/banner.vue.d.ts.map +1 -1
  24. package/dist/types/components/button/button.vue.d.ts +27 -1
  25. package/dist/types/components/button/button.vue.d.ts.map +1 -1
  26. package/dist/types/components/chip/chip.vue.d.ts +27 -1
  27. package/dist/types/components/chip/chip.vue.d.ts.map +1 -1
  28. package/dist/types/components/collapsible/collapsible.vue.d.ts +27 -1
  29. package/dist/types/components/collapsible/collapsible.vue.d.ts.map +1 -1
  30. package/dist/types/components/dropdown/dropdown.vue.d.ts +54 -2
  31. package/dist/types/components/dropdown/dropdown.vue.d.ts.map +1 -1
  32. package/dist/types/components/hovercard/hovercard.vue.d.ts +108 -4
  33. package/dist/types/components/hovercard/hovercard.vue.d.ts.map +1 -1
  34. package/dist/types/components/image_viewer/image_viewer.vue.d.ts +54 -2
  35. package/dist/types/components/image_viewer/image_viewer.vue.d.ts.map +1 -1
  36. package/dist/types/components/modal/modal.vue.d.ts +54 -2
  37. package/dist/types/components/modal/modal.vue.d.ts.map +1 -1
  38. package/dist/types/components/notice/notice.vue.d.ts +54 -2
  39. package/dist/types/components/notice/notice.vue.d.ts.map +1 -1
  40. package/dist/types/components/notice/notice_action.vue.d.ts +54 -2
  41. package/dist/types/components/notice/notice_action.vue.d.ts.map +1 -1
  42. package/dist/types/components/pagination/pagination.vue.d.ts +27 -1
  43. package/dist/types/components/pagination/pagination.vue.d.ts.map +1 -1
  44. package/dist/types/components/popover/popover.vue.d.ts +54 -2
  45. package/dist/types/components/popover/popover.vue.d.ts.map +1 -1
  46. package/dist/types/components/popover/popover_header_footer.vue.d.ts +27 -1
  47. package/dist/types/components/popover/popover_header_footer.vue.d.ts.map +1 -1
  48. package/dist/types/components/rich_text_editor/extensions/variable/VariableComponent.vue.d.ts +81 -3
  49. package/dist/types/components/rich_text_editor/extensions/variable/VariableComponent.vue.d.ts.map +1 -1
  50. package/dist/types/components/split_button/split_button-alpha.vue.d.ts +27 -1
  51. package/dist/types/components/split_button/split_button-omega.vue.d.ts +27 -1
  52. package/dist/types/components/split_button/split_button-omega.vue.d.ts.map +1 -1
  53. package/dist/types/components/split_button/split_button.vue.d.ts +108 -4
  54. package/dist/types/components/split_button/split_button.vue.d.ts.map +1 -1
  55. package/dist/types/components/tab/tab.vue.d.ts +27 -1
  56. package/dist/types/components/toast/layouts/toast_layout_alternate.vue.d.ts +54 -2
  57. package/dist/types/components/toast/layouts/toast_layout_alternate.vue.d.ts.map +1 -1
  58. package/dist/types/components/toast/layouts/toast_layout_default.vue.d.ts +54 -2
  59. package/dist/types/components/toast/layouts/toast_layout_default.vue.d.ts.map +1 -1
  60. package/dist/types/components/toast/toast.vue.d.ts +216 -8
  61. package/dist/types/components/toast/toast.vue.d.ts.map +1 -1
  62. package/dist/types/recipes/buttons/callbar_button/callbar_button.vue.d.ts +27 -1
  63. package/dist/types/recipes/buttons/callbar_button/callbar_button.vue.d.ts.map +1 -1
  64. package/dist/types/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts +108 -4
  65. package/dist/types/recipes/buttons/callbar_button_with_dropdown/callbar_button_with_dropdown.vue.d.ts.map +1 -1
  66. package/dist/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +108 -4
  67. package/dist/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts.map +1 -1
  68. package/dist/types/recipes/cards/ivr_node/ivr_node.vue.d.ts +81 -3
  69. package/dist/types/recipes/cards/ivr_node/ivr_node.vue.d.ts.map +1 -1
  70. package/dist/types/recipes/chips/grouped_chip/grouped_chip.vue.d.ts +27 -1
  71. package/dist/types/recipes/chips/grouped_chip/grouped_chip.vue.d.ts.map +1 -1
  72. package/dist/types/recipes/comboboxes/combobox_with_popover/combobox_with_popover.vue.d.ts +54 -2
  73. package/dist/types/recipes/comboboxes/combobox_with_popover/combobox_with_popover.vue.d.ts.map +1 -1
  74. package/dist/types/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts +108 -4
  75. package/dist/types/recipes/conversation_view/attachment_carousel/attachment_carousel.vue.d.ts.map +1 -1
  76. package/dist/types/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts +81 -3
  77. package/dist/types/recipes/conversation_view/attachment_carousel/media_components/image_carousel.vue.d.ts.map +1 -1
  78. package/dist/types/recipes/conversation_view/editor/EditorToolbarButton.vue.d.ts +27 -1
  79. package/dist/types/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts +81 -3
  80. package/dist/types/recipes/conversation_view/editor/EditorToolbarDropdownButton.vue.d.ts.map +1 -1
  81. package/dist/types/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts +81 -3
  82. package/dist/types/recipes/conversation_view/editor/EditorToolbarPopoverButton.vue.d.ts.map +1 -1
  83. package/dist/types/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts +27 -1
  84. package/dist/types/recipes/conversation_view/emoji_row/emoji_row.vue.d.ts.map +1 -1
  85. package/dist/types/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts +27 -1
  86. package/dist/types/recipes/conversation_view/feed_item_pill/feed_item_pill.vue.d.ts.map +1 -1
  87. package/dist/types/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts +27 -1
  88. package/dist/types/recipes/conversation_view/message_input/extensions/meeting_pill/MeetingPill.vue.d.ts.map +1 -1
  89. package/dist/types/recipes/conversation_view/message_input/message_input_button.vue.d.ts +27 -1
  90. package/dist/types/recipes/conversation_view/message_input/message_input_button.vue.d.ts.map +1 -1
  91. package/dist/types/recipes/conversation_view/message_input/message_input_link.vue.d.ts +108 -4
  92. package/dist/types/recipes/conversation_view/message_input/message_input_link.vue.d.ts.map +1 -1
  93. package/dist/types/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts +27 -1
  94. package/dist/types/recipes/conversation_view/message_input/message_input_topbar.vue.d.ts.map +1 -1
  95. package/dist/types/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts +27 -1
  96. package/dist/types/recipes/header/settings_menu_button/settings_menu_button.vue.d.ts.map +1 -1
  97. package/dist/types/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts +27 -1
  98. package/dist/types/recipes/leftbar/contact_centers_row/contact_centers_row.vue.d.ts.map +1 -1
  99. package/dist/types/recipes/leftbar/contact_row/contact_row.vue.d.ts +27 -1
  100. package/dist/types/recipes/leftbar/contact_row/contact_row.vue.d.ts.map +1 -1
  101. package/dist/types/recipes/leftbar/general_row/general_row.vue.d.ts +27 -1
  102. package/dist/types/recipes/leftbar/general_row/general_row.vue.d.ts.map +1 -1
  103. package/dist/types/recipes/leftbar/group_row/group_row.vue.d.ts +27 -1
  104. package/dist/types/recipes/leftbar/group_row/group_row.vue.d.ts.map +1 -1
  105. package/package.json +4 -4
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),r=require("../../common/utils/index.cjs"),n=require("./button-constants.cjs"),d=require("../../localization/index.cjs"),c=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),u=require("../link/link-constants.cjs"),h={compatConfig:{MODE:3},name:"DtButton",props:{circle:{type:Boolean,default:!1},iconPosition:{type:String,default:"left",validator:t=>Object.keys(n.ICON_POSITION_MODIFIERS).includes(t)},importance:{type:String,default:"primary",validator:t=>Object.keys(n.BUTTON_IMPORTANCE_MODIFIERS).includes(t)},link:{type:Boolean,default:!1},linkKind:{type:String,default:"default",validator:t=>Object.keys(u.LINK_KIND_MODIFIERS).includes(t)},linkInverted:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},type:{type:String,default:"button",validator:t=>n.BUTTON_TYPES.includes(t)},width:{type:String,default:null},size:{type:String,default:"md",validator:t=>Object.keys(n.BUTTON_SIZE_MODIFIERS).includes(t)},labelClass:{type:[String,Array,Object],default:""},loading:{type:Boolean,default:!1},kind:{type:String,default:"default",validator:t=>Object.keys(n.BUTTON_KIND_MODIFIERS).includes(t)},assertiveOnFocus:{type:Boolean,default:!1},active:{type:Boolean,default:!1},to:{type:[String,Object],default:null},href:{type:String,default:null},target:{type:String,default:null},rel:{type:String,default:null},replace:{type:Boolean,default:!1}},emits:["focusin","focusout"],data(){return{ICON_POSITION_MODIFIERS:n.ICON_POSITION_MODIFIERS,isInFocus:!1,hasSlotContent:r.hasSlotContent,i18n:new d.DialtoneLocalization}},computed:{computedTag(){return this.to?this.resolveRouterLink():this.href?"a":"button"},isNativeButton(){return!this.to&&!this.href},computedAttrs(){return this.to?{to:this.to,replace:this.replace,...this.disabled&&{"aria-disabled":"true",tabindex:"-1"}}:this.href?{href:this.disabled?null:this.href,target:this.target,rel:this.rel,...this.disabled&&{"aria-disabled":"true",tabindex:"-1"}}:{type:this.type,disabled:this.disabled}},computedListeners(){const t={focusin:i=>{this.isInFocus=this.assertiveOnFocus,this.$emit("focusin",i)},focusout:i=>{this.isInFocus=!1,this.$emit("focusout",i)}};return this.isNativeButton||(this.disabled&&(t.click=i=>{i.preventDefault(),i.stopImmediatePropagation()}),t.keydown=i=>{(i.key===" "||i.code==="Space")&&(i.preventDefault(),this.disabled||i.target.click())}),t},computedAriaLive(){return this.assertiveOnFocus&&this.isInFocus?"assertive":this.$attrs.ariaLive},iconSize(){return n.BUTTON_ICON_SIZES[this.size]}},watch:{$props:{deep:!0,immediate:!0,handler(){process.env.NODE_ENV!=="production"&&(this.circle&&this.link&&e.warn("You cannot enable circle and link at the same time",this),this.isInvalidPropCombination(this.circle,this.kind,this.importance))}}},methods:{resolveRouterLink(){try{return e.resolveComponent("RouterLink")}catch{return e.warn('DtButton: "to" prop requires vue-router. Falling back to <a>.'),"a"}},buttonClasses(){return this.link?["d-link",u.getLinkKindModifier(this.linkKind,this.linkInverted),n.BUTTON_SIZE_MODIFIERS[this.size]]:this.kind==="unstyled"?["d-btn--unstyled"]:["d-btn",n.BUTTON_IMPORTANCE_MODIFIERS[this.importance],n.BUTTON_KIND_MODIFIERS[this.kind],n.BUTTON_SIZE_MODIFIERS[this.size],{"d-btn--circle":this.circle,"d-btn--loading":this.loading,"d-btn--icon-only":this.isIconOnly(),"d-btn--vertical":this.isVerticalIconLayout(),"d-btn--active":this.active}]},isInvalidPropCombination(t,i,s){if(this.kind==="unstyled")return!0;for(const l of n.INVALID_COMBINATION)if(t===l.circle&&i===l.kind&&s===l.importance)return e.warn(l.message),!1;return!0},shouldRenderIcon(){return r.hasSlotContent(this.$slots.icon)&&!this.link},isIconOnly(){return this.shouldRenderIcon()&&!r.hasSlotContent(this.$slots.default)},isVerticalIconLayout(){return!this.isIconOnly()&&["top","bottom"].includes(this.iconPosition)}}};function f(t,i,s,l,o,a){return e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.computedTag),e.mergeProps({class:["base-button__button",a.buttonClasses()],"data-qa":"dt-button",style:{width:s.width},"aria-live":a.computedAriaLive,"aria-label":s.loading?o.i18n.$t("DIALTONE_LOADING"):t.$attrs["aria-label"]},a.computedAttrs,e.toHandlers(a.computedListeners)),{default:e.withCtx(()=>[a.shouldRenderIcon()?(e.openBlock(),e.createElementBlock("span",{key:0,"data-qa":"dt-button-icon",class:e.normalizeClass(["base-button__icon",{"d-btn__icon":s.kind!=="unstyled",[o.ICON_POSITION_MODIFIERS[s.iconPosition]]:s.kind!=="unstyled"}])},[e.renderSlot(t.$slots,"icon",{iconSize:a.iconSize})],2)):e.createCommentVNode("",!0),o.hasSlotContent(t.$slots.default)?(e.openBlock(),e.createElementBlock("span",{key:1,"data-qa":"dt-button-label",class:e.normalizeClass(["base-button__label",{"d-btn__label":s.kind!=="unstyled"},s.labelClass])},[e.renderSlot(t.$slots,"default")],2)):e.createCommentVNode("",!0)]),_:3},16,["class","style","aria-live","aria-label"])}const I=c._(h,[["render",f]]);exports.default=I;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue"),r=require("../../common/utils/index.cjs"),c=require("../loader/loader.cjs"),n=require("./button-constants.cjs"),h=require("../../localization/index.cjs"),f=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),d=require("../link/link-constants.cjs"),I={compatConfig:{MODE:3},name:"DtButton",components:{DtLoader:c.default},props:{circle:{type:Boolean,default:!1},iconPosition:{type:String,default:"left",validator:e=>Object.keys(n.ICON_POSITION_MODIFIERS).includes(e)},importance:{type:String,default:"primary",validator:e=>Object.keys(n.BUTTON_IMPORTANCE_MODIFIERS).includes(e)},link:{type:Boolean,default:!1},linkKind:{type:String,default:"default",validator:e=>Object.keys(d.LINK_KIND_MODIFIERS).includes(e)},linkInverted:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},type:{type:String,default:"button",validator:e=>n.BUTTON_TYPES.includes(e)},width:{type:String,default:null},size:{type:String,default:"md",validator:e=>Object.keys(n.BUTTON_SIZE_MODIFIERS).includes(e)},labelClass:{type:[String,Array,Object],default:""},loading:{type:Boolean,default:!1},kind:{type:String,default:"default",validator:e=>Object.keys(n.BUTTON_KIND_MODIFIERS).includes(e)},assertiveOnFocus:{type:Boolean,default:!1},active:{type:Boolean,default:!1},to:{type:[String,Object],default:null},href:{type:String,default:null},target:{type:String,default:null},rel:{type:String,default:null},replace:{type:Boolean,default:!1}},emits:["focusin","focusout"],data(){return{ICON_POSITION_MODIFIERS:n.ICON_POSITION_MODIFIERS,isInFocus:!1,hasSlotContent:r.hasSlotContent,i18n:new h.DialtoneLocalization}},computed:{computedTag(){return this.to?this.resolveRouterLink():this.href?"a":"button"},isNativeButton(){return!this.to&&!this.href},computedAttrs(){return this.to?{to:this.to,replace:this.replace,...this.disabled&&{"aria-disabled":"true",tabindex:"-1"}}:this.href?{href:this.disabled?null:this.href,target:this.target,rel:this.rel,...this.disabled&&{"aria-disabled":"true",tabindex:"-1"}}:{type:this.type,disabled:this.disabled}},computedListeners(){const e={focusin:i=>{this.isInFocus=this.assertiveOnFocus,this.$emit("focusin",i)},focusout:i=>{this.isInFocus=!1,this.$emit("focusout",i)}};return this.isNativeButton||(this.disabled&&(e.click=i=>{i.preventDefault(),i.stopImmediatePropagation()}),e.keydown=i=>{(i.key===" "||i.code==="Space")&&(i.preventDefault(),this.disabled||i.target.click())}),e},computedAriaLive(){return this.assertiveOnFocus&&this.isInFocus?"assertive":this.$attrs.ariaLive},iconSize(){return n.BUTTON_ICON_SIZES[this.size]},loaderSize(){return n.BUTTON_ICON_SIZES[this.size]}},watch:{$props:{deep:!0,immediate:!0,handler(){process.env.NODE_ENV!=="production"&&(this.circle&&this.link&&t.warn("You cannot enable circle and link at the same time",this),this.isInvalidPropCombination(this.circle,this.kind,this.importance))}}},methods:{resolveRouterLink(){try{return t.resolveComponent("RouterLink")}catch{return t.warn('DtButton: "to" prop requires vue-router. Falling back to <a>.'),"a"}},buttonClasses(){return this.link?["d-link",d.getLinkKindModifier(this.linkKind,this.linkInverted),n.BUTTON_SIZE_MODIFIERS[this.size]]:this.kind==="unstyled"?["d-btn--unstyled"]:["d-btn",n.BUTTON_IMPORTANCE_MODIFIERS[this.importance],n.BUTTON_KIND_MODIFIERS[this.kind],n.BUTTON_SIZE_MODIFIERS[this.size],{"d-btn--circle":this.circle,"d-btn--loading":this.loading,"d-btn--icon-only":this.isIconOnly(),"d-btn--vertical":this.isVerticalIconLayout(),"d-btn--active":this.active}]},isInvalidPropCombination(e,i,s){if(this.kind==="unstyled")return!0;for(const a of n.INVALID_COMBINATION)if(e===a.circle&&i===a.kind&&s===a.importance)return t.warn(a.message),!1;return!0},shouldRenderIcon(){return r.hasSlotContent(this.$slots.icon)&&!this.link},isIconOnly(){return this.shouldRenderIcon()&&!r.hasSlotContent(this.$slots.default)},isVerticalIconLayout(){return!this.isIconOnly()&&["top","bottom"].includes(this.iconPosition)}}};function _(e,i,s,a,o,l){const u=t.resolveComponent("dt-loader");return t.openBlock(),t.createBlock(t.resolveDynamicComponent(l.computedTag),t.mergeProps({class:["base-button__button",l.buttonClasses()],"data-qa":"dt-button",style:{width:s.width},"aria-live":l.computedAriaLive,"aria-label":s.loading?o.i18n.$t("DIALTONE_LOADING"):e.$attrs["aria-label"]},l.computedAttrs,t.toHandlers(l.computedListeners)),{default:t.withCtx(()=>[s.loading&&s.kind!=="unstyled"?(t.openBlock(),t.createBlock(u,{key:0,class:"d-btn__loader",size:l.loaderSize,"aria-hidden":"true"},null,8,["size"])):t.createCommentVNode("",!0),l.shouldRenderIcon()?(t.openBlock(),t.createElementBlock("span",{key:1,"data-qa":"dt-button-icon",class:t.normalizeClass(["base-button__icon",{"d-btn__icon":s.kind!=="unstyled",[o.ICON_POSITION_MODIFIERS[s.iconPosition]]:s.kind!=="unstyled"}])},[t.renderSlot(e.$slots,"icon",{iconSize:l.iconSize})],2)):t.createCommentVNode("",!0),o.hasSlotContent(e.$slots.default)?(t.openBlock(),t.createElementBlock("span",{key:2,"data-qa":"dt-button-label",class:t.normalizeClass(["base-button__label",{"d-btn__label":s.kind!=="unstyled"},s.labelClass])},[t.renderSlot(e.$slots,"default")],2)):t.createCommentVNode("",!0)]),_:3},16,["class","style","aria-live","aria-label"])}const b=f._(I,[["render",_]]);exports.default=b;
2
2
  //# sourceMappingURL=button.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.cjs","sources":["../../../components/button/button.vue"],"sourcesContent":["<template>\n <component\n :is=\"computedTag\"\n :class=\"[\n 'base-button__button',\n buttonClasses(),\n ]\"\n data-qa=\"dt-button\"\n :style=\"{ width: width }\"\n :aria-live=\"computedAriaLive\"\n :aria-label=\"loading ? i18n.$t('DIALTONE_LOADING') : $attrs['aria-label']\"\n v-bind=\"computedAttrs\"\n v-on=\"computedListeners\"\n >\n <!-- NOTE(cormac): This span is needed since we can't apply styles to slots. -->\n <span\n v-if=\"shouldRenderIcon()\"\n data-qa=\"dt-button-icon\"\n :class=\"[\n 'base-button__icon',\n {\n 'd-btn__icon': kind !== 'unstyled',\n [ICON_POSITION_MODIFIERS[iconPosition]]: kind !== 'unstyled',\n },\n ]\"\n >\n <!-- @slot Button icon -->\n <slot\n name=\"icon\"\n :icon-size=\"iconSize\"\n />\n </span>\n <span\n v-if=\"hasSlotContent($slots.default)\"\n data-qa=\"dt-button-label\"\n :class=\"[\n 'base-button__label',\n { 'd-btn__label': kind !== 'unstyled' },\n labelClass,\n ]\"\n >\n <!-- @slot Content within button -->\n <slot />\n </span>\n </component>\n</template>\n\n<script>\nimport { warn, resolveComponent } from 'vue';\nimport { hasSlotContent } from '@/common/utils';\n\nimport {\n BUTTON_SIZE_MODIFIERS,\n BUTTON_KIND_MODIFIERS,\n BUTTON_IMPORTANCE_MODIFIERS,\n BUTTON_ICON_SIZES,\n BUTTON_TYPES,\n ICON_POSITION_MODIFIERS,\n INVALID_COMBINATION,\n} from './button_constants';\n\nimport { LINK_KIND_MODIFIERS, getLinkKindModifier } from '@/components/link';\nimport { DialtoneLocalization } from '@/localization';\n\n/**\n * A button is a UI element which allows users to take an action throughout the app.\n * It is important a button is identifiable, consistent, and communicates its actions clearly,\n * and is appropriately sized to its action.\n * @see https://dialtone.dialpad.com/components/button.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtButton',\n\n props: {\n /**\n * Whether the button is a circle or not.\n * @values true, false\n */\n circle: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The position of the icon slot within the button.\n * @values left, right, top, bottom\n */\n iconPosition: {\n type: String,\n default: 'left',\n validator: (position) => Object.keys(ICON_POSITION_MODIFIERS).includes(position),\n },\n\n /**\n * The fill and outline of the button associated with its visual importance.\n * @values clear, outlined, primary\n */\n importance: {\n type: String,\n default: 'primary',\n validator: (i) => Object.keys(BUTTON_IMPORTANCE_MODIFIERS).includes(i),\n },\n\n /**\n * Whether the button should be styled as a link or not.\n * @values true, false\n * @see DtLink\n */\n link: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The color of the link and button if the button is styled as a link.\n * @values default, warning, danger, success, muted\n * @see DtLink\n */\n linkKind: {\n type: String,\n default: 'default',\n validator: (lk) => Object.keys(LINK_KIND_MODIFIERS).includes(lk),\n },\n\n /**\n * Determines whether the link should have inverted styling if the button is styled as a link.\n * @values true, false\n * @see DtLink\n */\n linkInverted: {\n type: Boolean,\n default: false,\n },\n\n /**\n * HTML button disabled attribute\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#disabled\" target=\"_blank\"> (Reference) </a>\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * HTML button type attribute\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-type\" target=\"_blank\">(Reference)</a>\n * @values button, submit, reset\n */\n type: {\n type: String,\n default: 'button',\n validator: (t) => BUTTON_TYPES.includes(t),\n },\n\n /**\n * Button width, accepts\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/width\" target=\"_blank\">CSS width attribute</a> values\n */\n width: {\n type: String,\n default: null,\n },\n\n /**\n * The size of the button.\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (s) => Object.keys(BUTTON_SIZE_MODIFIERS).includes(s),\n },\n\n /**\n * Used to customize the label container\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Whether the button should display a loading animation or not.\n * @values true, false\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The color of the button.\n * @values default, unstyled, muted, danger, positive, inverted\n */\n kind: {\n type: String,\n default: 'default',\n validator: (k) => Object.keys(BUTTON_KIND_MODIFIERS).includes(k),\n },\n\n /**\n * Determines whether a screenreader reads live updates of\n * the button content to the user while the button\n * is in focus. default is to not.\n * @values true, false\n */\n assertiveOnFocus: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Determines whether the button should have active styling\n * default is false.\n * @values true, false\n */\n active: {\n type: Boolean,\n default: false,\n },\n\n /**\n * vue-router `to` prop. When provided, renders a `<router-link>`\n * for client-side SPA navigation.\n * @see https://router.vuejs.org/api/interfaces/RouterLinkProps.html#to\n */\n to: {\n type: [String, Object],\n default: null,\n },\n\n /**\n * When provided, renders an `<a>` element for standard browser navigation.\n */\n href: {\n type: String,\n default: null,\n },\n\n /**\n * HTML anchor target attribute. Only applied when using the `href` prop.\n * @values _self, _blank, _parent, _top\n */\n target: {\n type: String,\n default: null,\n },\n\n /**\n * HTML anchor rel attribute. Only applied when using the `href` prop.\n */\n rel: {\n type: String,\n default: null,\n },\n\n /**\n * vue-router `replace` prop. When true, navigation will not leave a\n * history entry. Only applied when using the `to` prop.\n * @values true, false\n */\n replace: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Native button focus in event\n *\n * @event focusin\n * @type {FocusEvent}\n */\n 'focusin',\n\n /**\n * Native button focus out event\n *\n * @event focusout\n * @type {FocusEvent}\n */\n 'focusout',\n ],\n\n data () {\n return {\n ICON_POSITION_MODIFIERS,\n // whether the button is currently in focus\n isInFocus: false,\n hasSlotContent,\n i18n: new DialtoneLocalization(),\n };\n },\n\n computed: {\n computedTag () {\n if (this.to) return this.resolveRouterLink();\n if (this.href) return 'a';\n return 'button';\n },\n\n isNativeButton () {\n return !this.to && !this.href;\n },\n\n computedAttrs () {\n if (this.to) {\n return {\n to: this.to,\n replace: this.replace,\n ...(this.disabled && { 'aria-disabled': 'true', tabindex: '-1' }),\n };\n }\n if (this.href) {\n return {\n href: this.disabled ? null : this.href,\n target: this.target,\n rel: this.rel,\n ...(this.disabled && { 'aria-disabled': 'true', tabindex: '-1' }),\n };\n }\n return {\n type: this.type,\n disabled: this.disabled,\n };\n },\n\n computedListeners () {\n const listeners = {\n focusin: (e) => {\n this.isInFocus = this.assertiveOnFocus;\n this.$emit('focusin', e);\n },\n\n focusout: (e) => {\n this.isInFocus = false;\n this.$emit('focusout', e);\n },\n };\n\n if (!this.isNativeButton) {\n // Prevent click when disabled for link elements.\n // stopImmediatePropagation prevents parent onClick attrs from firing.\n if (this.disabled) {\n listeners.click = (e) => {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n }\n\n // Space key handler: <a> only responds to Enter natively,\n // but buttons respond to both Enter and Space.\n listeners.keydown = (e) => {\n if (e.key === ' ' || e.code === 'Space') {\n e.preventDefault();\n if (!this.disabled) {\n e.target.click();\n }\n }\n };\n }\n\n return listeners;\n },\n\n computedAriaLive () {\n return this.assertiveOnFocus && this.isInFocus ? 'assertive' : this.$attrs.ariaLive;\n },\n\n iconSize () {\n return BUTTON_ICON_SIZES[this.size];\n },\n },\n\n watch: {\n $props: {\n deep: true,\n immediate: true,\n handler () {\n if (process.env.NODE_ENV === 'production') return;\n\n if (this.circle && this.link) {\n warn('You cannot enable circle and link at the same time', this);\n }\n\n this.isInvalidPropCombination(this.circle, this.kind, this.importance);\n },\n },\n },\n\n methods: {\n resolveRouterLink () {\n try {\n return resolveComponent('RouterLink');\n } catch {\n warn('DtButton: \"to\" prop requires vue-router. Falling back to <a>.');\n return 'a';\n }\n },\n\n buttonClasses () {\n if (this.link) {\n return [\n 'd-link',\n getLinkKindModifier(this.linkKind, this.linkInverted),\n BUTTON_SIZE_MODIFIERS[this.size],\n ];\n }\n if (this.kind === 'unstyled') {\n return ['d-btn--unstyled'];\n }\n return [\n 'd-btn',\n BUTTON_IMPORTANCE_MODIFIERS[this.importance],\n BUTTON_KIND_MODIFIERS[this.kind],\n BUTTON_SIZE_MODIFIERS[this.size],\n {\n 'd-btn--circle': this.circle,\n 'd-btn--loading': this.loading,\n 'd-btn--icon-only': this.isIconOnly(),\n 'd-btn--vertical': this.isVerticalIconLayout(),\n 'd-btn--active': this.active,\n },\n ];\n },\n\n isInvalidPropCombination (circle, kind, importance) {\n // Skip validation if unstyled is true\n if (this.kind === 'unstyled') {\n return true;\n }\n\n for (const row of INVALID_COMBINATION) {\n if (circle === row.circle && kind === row.kind && importance === row.importance) {\n warn(row.message);\n return false;\n }\n }\n return true;\n },\n\n shouldRenderIcon () {\n return hasSlotContent(this.$slots.icon) && !this.link;\n },\n\n isIconOnly () {\n return this.shouldRenderIcon() && !hasSlotContent(this.$slots.default);\n },\n\n isVerticalIconLayout () {\n return !this.isIconOnly() && ['top', 'bottom'].includes(this.iconPosition);\n },\n },\n};\n</script>\n"],"names":["_sfc_main","position","ICON_POSITION_MODIFIERS","i","BUTTON_IMPORTANCE_MODIFIERS","lk","LINK_KIND_MODIFIERS","BUTTON_TYPES","s","BUTTON_SIZE_MODIFIERS","k","BUTTON_KIND_MODIFIERS","hasSlotContent","DialtoneLocalization","listeners","e","BUTTON_ICON_SIZES","warn","resolveComponent","getLinkKindModifier","circle","kind","importance","row","INVALID_COMBINATION","_createBlock","_resolveDynamicComponent","$options","_mergeProps","$props","$data","_ctx","_toHandlers","_createElementBlock","_normalizeClass","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"button.cjs","sources":["../../../components/button/button.vue"],"sourcesContent":["<template>\n <component\n :is=\"computedTag\"\n :class=\"[\n 'base-button__button',\n buttonClasses(),\n ]\"\n data-qa=\"dt-button\"\n :style=\"{ width: width }\"\n :aria-live=\"computedAriaLive\"\n :aria-label=\"loading ? i18n.$t('DIALTONE_LOADING') : $attrs['aria-label']\"\n v-bind=\"computedAttrs\"\n v-on=\"computedListeners\"\n >\n <dt-loader\n v-if=\"loading && kind !== 'unstyled'\"\n class=\"d-btn__loader\"\n :size=\"loaderSize\"\n aria-hidden=\"true\"\n />\n <!-- NOTE(cormac): This span is needed since we can't apply styles to slots. -->\n <span\n v-if=\"shouldRenderIcon()\"\n data-qa=\"dt-button-icon\"\n :class=\"[\n 'base-button__icon',\n {\n 'd-btn__icon': kind !== 'unstyled',\n [ICON_POSITION_MODIFIERS[iconPosition]]: kind !== 'unstyled',\n },\n ]\"\n >\n <!-- @slot Button icon -->\n <slot\n name=\"icon\"\n :icon-size=\"iconSize\"\n />\n </span>\n <span\n v-if=\"hasSlotContent($slots.default)\"\n data-qa=\"dt-button-label\"\n :class=\"[\n 'base-button__label',\n { 'd-btn__label': kind !== 'unstyled' },\n labelClass,\n ]\"\n >\n <!-- @slot Content within button -->\n <slot />\n </span>\n </component>\n</template>\n\n<script>\nimport { warn, resolveComponent } from 'vue';\nimport { hasSlotContent } from '@/common/utils';\nimport DtLoader from '@/components/loader/loader.vue';\n\nimport {\n BUTTON_SIZE_MODIFIERS,\n BUTTON_KIND_MODIFIERS,\n BUTTON_IMPORTANCE_MODIFIERS,\n BUTTON_ICON_SIZES,\n BUTTON_TYPES,\n ICON_POSITION_MODIFIERS,\n INVALID_COMBINATION,\n} from './button_constants';\n\nimport { LINK_KIND_MODIFIERS, getLinkKindModifier } from '@/components/link';\nimport { DialtoneLocalization } from '@/localization';\n\n/**\n * A button is a UI element which allows users to take an action throughout the app.\n * It is important a button is identifiable, consistent, and communicates its actions clearly,\n * and is appropriately sized to its action.\n * @see https://dialtone.dialpad.com/components/button.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtButton',\n\n components: { DtLoader },\n\n props: {\n /**\n * Whether the button is a circle or not.\n * @values true, false\n */\n circle: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The position of the icon slot within the button.\n * @values left, right, top, bottom\n */\n iconPosition: {\n type: String,\n default: 'left',\n validator: (position) => Object.keys(ICON_POSITION_MODIFIERS).includes(position),\n },\n\n /**\n * The fill and outline of the button associated with its visual importance.\n * @values clear, outlined, primary\n */\n importance: {\n type: String,\n default: 'primary',\n validator: (i) => Object.keys(BUTTON_IMPORTANCE_MODIFIERS).includes(i),\n },\n\n /**\n * Whether the button should be styled as a link or not.\n * @values true, false\n * @see DtLink\n */\n link: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The color of the link and button if the button is styled as a link.\n * @values default, warning, danger, success, muted\n * @see DtLink\n */\n linkKind: {\n type: String,\n default: 'default',\n validator: (lk) => Object.keys(LINK_KIND_MODIFIERS).includes(lk),\n },\n\n /**\n * Determines whether the link should have inverted styling if the button is styled as a link.\n * @values true, false\n * @see DtLink\n */\n linkInverted: {\n type: Boolean,\n default: false,\n },\n\n /**\n * HTML button disabled attribute\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#disabled\" target=\"_blank\"> (Reference) </a>\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * HTML button type attribute\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-type\" target=\"_blank\">(Reference)</a>\n * @values button, submit, reset\n */\n type: {\n type: String,\n default: 'button',\n validator: (t) => BUTTON_TYPES.includes(t),\n },\n\n /**\n * Button width, accepts\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/width\" target=\"_blank\">CSS width attribute</a> values\n */\n width: {\n type: String,\n default: null,\n },\n\n /**\n * The size of the button.\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (s) => Object.keys(BUTTON_SIZE_MODIFIERS).includes(s),\n },\n\n /**\n * Used to customize the label container\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Whether the button should display a loading animation or not.\n * @values true, false\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The color of the button.\n * @values default, unstyled, muted, danger, positive, inverted\n */\n kind: {\n type: String,\n default: 'default',\n validator: (k) => Object.keys(BUTTON_KIND_MODIFIERS).includes(k),\n },\n\n /**\n * Determines whether a screenreader reads live updates of\n * the button content to the user while the button\n * is in focus. default is to not.\n * @values true, false\n */\n assertiveOnFocus: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Determines whether the button should have active styling\n * default is false.\n * @values true, false\n */\n active: {\n type: Boolean,\n default: false,\n },\n\n /**\n * vue-router `to` prop. When provided, renders a `<router-link>`\n * for client-side SPA navigation.\n * @see https://router.vuejs.org/api/interfaces/RouterLinkProps.html#to\n */\n to: {\n type: [String, Object],\n default: null,\n },\n\n /**\n * When provided, renders an `<a>` element for standard browser navigation.\n */\n href: {\n type: String,\n default: null,\n },\n\n /**\n * HTML anchor target attribute. Only applied when using the `href` prop.\n * @values _self, _blank, _parent, _top\n */\n target: {\n type: String,\n default: null,\n },\n\n /**\n * HTML anchor rel attribute. Only applied when using the `href` prop.\n */\n rel: {\n type: String,\n default: null,\n },\n\n /**\n * vue-router `replace` prop. When true, navigation will not leave a\n * history entry. Only applied when using the `to` prop.\n * @values true, false\n */\n replace: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Native button focus in event\n *\n * @event focusin\n * @type {FocusEvent}\n */\n 'focusin',\n\n /**\n * Native button focus out event\n *\n * @event focusout\n * @type {FocusEvent}\n */\n 'focusout',\n ],\n\n data () {\n return {\n ICON_POSITION_MODIFIERS,\n // whether the button is currently in focus\n isInFocus: false,\n hasSlotContent,\n i18n: new DialtoneLocalization(),\n };\n },\n\n computed: {\n computedTag () {\n if (this.to) return this.resolveRouterLink();\n if (this.href) return 'a';\n return 'button';\n },\n\n isNativeButton () {\n return !this.to && !this.href;\n },\n\n computedAttrs () {\n if (this.to) {\n return {\n to: this.to,\n replace: this.replace,\n ...(this.disabled && { 'aria-disabled': 'true', tabindex: '-1' }),\n };\n }\n if (this.href) {\n return {\n href: this.disabled ? null : this.href,\n target: this.target,\n rel: this.rel,\n ...(this.disabled && { 'aria-disabled': 'true', tabindex: '-1' }),\n };\n }\n return {\n type: this.type,\n disabled: this.disabled,\n };\n },\n\n computedListeners () {\n const listeners = {\n focusin: (e) => {\n this.isInFocus = this.assertiveOnFocus;\n this.$emit('focusin', e);\n },\n\n focusout: (e) => {\n this.isInFocus = false;\n this.$emit('focusout', e);\n },\n };\n\n if (!this.isNativeButton) {\n // Prevent click when disabled for link elements.\n // stopImmediatePropagation prevents parent onClick attrs from firing.\n if (this.disabled) {\n listeners.click = (e) => {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n }\n\n // Space key handler: <a> only responds to Enter natively,\n // but buttons respond to both Enter and Space.\n listeners.keydown = (e) => {\n if (e.key === ' ' || e.code === 'Space') {\n e.preventDefault();\n if (!this.disabled) {\n e.target.click();\n }\n }\n };\n }\n\n return listeners;\n },\n\n computedAriaLive () {\n return this.assertiveOnFocus && this.isInFocus ? 'assertive' : this.$attrs.ariaLive;\n },\n\n iconSize () {\n return BUTTON_ICON_SIZES[this.size];\n },\n\n loaderSize () {\n return BUTTON_ICON_SIZES[this.size];\n },\n },\n\n watch: {\n $props: {\n deep: true,\n immediate: true,\n handler () {\n if (process.env.NODE_ENV === 'production') return;\n\n if (this.circle && this.link) {\n warn('You cannot enable circle and link at the same time', this);\n }\n\n this.isInvalidPropCombination(this.circle, this.kind, this.importance);\n },\n },\n },\n\n methods: {\n resolveRouterLink () {\n try {\n return resolveComponent('RouterLink');\n } catch {\n warn('DtButton: \"to\" prop requires vue-router. Falling back to <a>.');\n return 'a';\n }\n },\n\n buttonClasses () {\n if (this.link) {\n return [\n 'd-link',\n getLinkKindModifier(this.linkKind, this.linkInverted),\n BUTTON_SIZE_MODIFIERS[this.size],\n ];\n }\n if (this.kind === 'unstyled') {\n return ['d-btn--unstyled'];\n }\n return [\n 'd-btn',\n BUTTON_IMPORTANCE_MODIFIERS[this.importance],\n BUTTON_KIND_MODIFIERS[this.kind],\n BUTTON_SIZE_MODIFIERS[this.size],\n {\n 'd-btn--circle': this.circle,\n 'd-btn--loading': this.loading,\n 'd-btn--icon-only': this.isIconOnly(),\n 'd-btn--vertical': this.isVerticalIconLayout(),\n 'd-btn--active': this.active,\n },\n ];\n },\n\n isInvalidPropCombination (circle, kind, importance) {\n // Skip validation if unstyled is true\n if (this.kind === 'unstyled') {\n return true;\n }\n\n for (const row of INVALID_COMBINATION) {\n if (circle === row.circle && kind === row.kind && importance === row.importance) {\n warn(row.message);\n return false;\n }\n }\n return true;\n },\n\n shouldRenderIcon () {\n return hasSlotContent(this.$slots.icon) && !this.link;\n },\n\n isIconOnly () {\n return this.shouldRenderIcon() && !hasSlotContent(this.$slots.default);\n },\n\n isVerticalIconLayout () {\n return !this.isIconOnly() && ['top', 'bottom'].includes(this.iconPosition);\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtLoader","position","ICON_POSITION_MODIFIERS","i","BUTTON_IMPORTANCE_MODIFIERS","lk","LINK_KIND_MODIFIERS","t","BUTTON_TYPES","s","BUTTON_SIZE_MODIFIERS","k","BUTTON_KIND_MODIFIERS","hasSlotContent","DialtoneLocalization","listeners","e","BUTTON_ICON_SIZES","warn","resolveComponent","getLinkKindModifier","circle","kind","importance","row","INVALID_COMBINATION","_createBlock","_resolveDynamicComponent","$options","_mergeProps","$props","$data","_ctx","_toHandlers","_component_dt_loader","_createElementBlock","_normalizeClass","_renderSlot"],"mappings":"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"}
@@ -1,12 +1,14 @@
1
- import { warn as l, resolveComponent as y, openBlock as r, createBlock as I, resolveDynamicComponent as k, mergeProps as O, toHandlers as _, withCtx as v, createElementBlock as u, normalizeClass as c, renderSlot as f, createCommentVNode as h } from "vue";
2
- import { hasSlotContent as o } from "../../common/utils/index.js";
3
- import { INVALID_COMBINATION as S, BUTTON_SIZE_MODIFIERS as d, BUTTON_IMPORTANCE_MODIFIERS as b, BUTTON_KIND_MODIFIERS as p, BUTTON_ICON_SIZES as g, ICON_POSITION_MODIFIERS as m, BUTTON_TYPES as N } from "./button-constants.js";
4
- import { DialtoneLocalization as B } from "../../localization/index.js";
5
- import { _ as D } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
6
- import { getLinkKindModifier as C, LINK_KIND_MODIFIERS as T } from "../link/link-constants.js";
7
- const L = {
1
+ import { warn as r, resolveComponent as k, openBlock as a, createBlock as c, resolveDynamicComponent as O, mergeProps as v, toHandlers as S, withCtx as g, createCommentVNode as o, createElementBlock as f, normalizeClass as h, renderSlot as b } from "vue";
2
+ import { hasSlotContent as d } from "../../common/utils/index.js";
3
+ import N from "../loader/loader.js";
4
+ import { INVALID_COMBINATION as B, BUTTON_SIZE_MODIFIERS as u, BUTTON_IMPORTANCE_MODIFIERS as m, BUTTON_KIND_MODIFIERS as p, BUTTON_ICON_SIZES as y, ICON_POSITION_MODIFIERS as I, BUTTON_TYPES as D } from "./button-constants.js";
5
+ import { DialtoneLocalization as C } from "../../localization/index.js";
6
+ import { _ as T } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
7
+ import { getLinkKindModifier as L, LINK_KIND_MODIFIERS as E } from "../link/link-constants.js";
8
+ const z = {
8
9
  compatConfig: { MODE: 3 },
9
10
  name: "DtButton",
11
+ components: { DtLoader: N },
10
12
  props: {
11
13
  /**
12
14
  * Whether the button is a circle or not.
@@ -23,7 +25,7 @@ const L = {
23
25
  iconPosition: {
24
26
  type: String,
25
27
  default: "left",
26
- validator: (t) => Object.keys(m).includes(t)
28
+ validator: (t) => Object.keys(I).includes(t)
27
29
  },
28
30
  /**
29
31
  * The fill and outline of the button associated with its visual importance.
@@ -32,7 +34,7 @@ const L = {
32
34
  importance: {
33
35
  type: String,
34
36
  default: "primary",
35
- validator: (t) => Object.keys(b).includes(t)
37
+ validator: (t) => Object.keys(m).includes(t)
36
38
  },
37
39
  /**
38
40
  * Whether the button should be styled as a link or not.
@@ -51,7 +53,7 @@ const L = {
51
53
  linkKind: {
52
54
  type: String,
53
55
  default: "default",
54
- validator: (t) => Object.keys(T).includes(t)
56
+ validator: (t) => Object.keys(E).includes(t)
55
57
  },
56
58
  /**
57
59
  * Determines whether the link should have inverted styling if the button is styled as a link.
@@ -79,7 +81,7 @@ const L = {
79
81
  type: {
80
82
  type: String,
81
83
  default: "button",
82
- validator: (t) => N.includes(t)
84
+ validator: (t) => D.includes(t)
83
85
  },
84
86
  /**
85
87
  * Button width, accepts
@@ -96,7 +98,7 @@ const L = {
96
98
  size: {
97
99
  type: String,
98
100
  default: "md",
99
- validator: (t) => Object.keys(d).includes(t)
101
+ validator: (t) => Object.keys(u).includes(t)
100
102
  },
101
103
  /**
102
104
  * Used to customize the label container
@@ -200,11 +202,11 @@ const L = {
200
202
  ],
201
203
  data() {
202
204
  return {
203
- ICON_POSITION_MODIFIERS: m,
205
+ ICON_POSITION_MODIFIERS: I,
204
206
  // whether the button is currently in focus
205
207
  isInFocus: !1,
206
- hasSlotContent: o,
207
- i18n: new B()
208
+ hasSlotContent: d,
209
+ i18n: new C()
208
210
  };
209
211
  },
210
212
  computed: {
@@ -248,7 +250,10 @@ const L = {
248
250
  return this.assertiveOnFocus && this.isInFocus ? "assertive" : this.$attrs.ariaLive;
249
251
  },
250
252
  iconSize() {
251
- return g[this.size];
253
+ return y[this.size];
254
+ },
255
+ loaderSize() {
256
+ return y[this.size];
252
257
  }
253
258
  },
254
259
  watch: {
@@ -256,28 +261,28 @@ const L = {
256
261
  deep: !0,
257
262
  immediate: !0,
258
263
  handler() {
259
- process.env.NODE_ENV !== "production" && (this.circle && this.link && l("You cannot enable circle and link at the same time", this), this.isInvalidPropCombination(this.circle, this.kind, this.importance));
264
+ process.env.NODE_ENV !== "production" && (this.circle && this.link && r("You cannot enable circle and link at the same time", this), this.isInvalidPropCombination(this.circle, this.kind, this.importance));
260
265
  }
261
266
  }
262
267
  },
263
268
  methods: {
264
269
  resolveRouterLink() {
265
270
  try {
266
- return y("RouterLink");
271
+ return k("RouterLink");
267
272
  } catch {
268
- return l('DtButton: "to" prop requires vue-router. Falling back to <a>.'), "a";
273
+ return r('DtButton: "to" prop requires vue-router. Falling back to <a>.'), "a";
269
274
  }
270
275
  },
271
276
  buttonClasses() {
272
277
  return this.link ? [
273
278
  "d-link",
274
- C(this.linkKind, this.linkInverted),
275
- d[this.size]
279
+ L(this.linkKind, this.linkInverted),
280
+ u[this.size]
276
281
  ] : this.kind === "unstyled" ? ["d-btn--unstyled"] : [
277
282
  "d-btn",
278
- b[this.importance],
283
+ m[this.importance],
279
284
  p[this.kind],
280
- d[this.size],
285
+ u[this.size],
281
286
  {
282
287
  "d-btn--circle": this.circle,
283
288
  "d-btn--loading": this.loading,
@@ -290,24 +295,25 @@ const L = {
290
295
  isInvalidPropCombination(t, e, i) {
291
296
  if (this.kind === "unstyled")
292
297
  return !0;
293
- for (const s of S)
298
+ for (const s of B)
294
299
  if (t === s.circle && e === s.kind && i === s.importance)
295
- return l(s.message), !1;
300
+ return r(s.message), !1;
296
301
  return !0;
297
302
  },
298
303
  shouldRenderIcon() {
299
- return o(this.$slots.icon) && !this.link;
304
+ return d(this.$slots.icon) && !this.link;
300
305
  },
301
306
  isIconOnly() {
302
- return this.shouldRenderIcon() && !o(this.$slots.default);
307
+ return this.shouldRenderIcon() && !d(this.$slots.default);
303
308
  },
304
309
  isVerticalIconLayout() {
305
310
  return !this.isIconOnly() && ["top", "bottom"].includes(this.iconPosition);
306
311
  }
307
312
  }
308
313
  };
309
- function E(t, e, i, s, a, n) {
310
- return r(), I(k(n.computedTag), O({
314
+ function F(t, e, i, s, l, n) {
315
+ const _ = k("dt-loader");
316
+ return a(), c(O(n.computedTag), v({
311
317
  class: [
312
318
  "base-button__button",
313
319
  n.buttonClasses()
@@ -315,39 +321,45 @@ function E(t, e, i, s, a, n) {
315
321
  "data-qa": "dt-button",
316
322
  style: { width: i.width },
317
323
  "aria-live": n.computedAriaLive,
318
- "aria-label": i.loading ? a.i18n.$t("DIALTONE_LOADING") : t.$attrs["aria-label"]
319
- }, n.computedAttrs, _(n.computedListeners)), {
320
- default: v(() => [
321
- n.shouldRenderIcon() ? (r(), u("span", {
324
+ "aria-label": i.loading ? l.i18n.$t("DIALTONE_LOADING") : t.$attrs["aria-label"]
325
+ }, n.computedAttrs, S(n.computedListeners)), {
326
+ default: g(() => [
327
+ i.loading && i.kind !== "unstyled" ? (a(), c(_, {
322
328
  key: 0,
329
+ class: "d-btn__loader",
330
+ size: n.loaderSize,
331
+ "aria-hidden": "true"
332
+ }, null, 8, ["size"])) : o("", !0),
333
+ n.shouldRenderIcon() ? (a(), f("span", {
334
+ key: 1,
323
335
  "data-qa": "dt-button-icon",
324
- class: c([
336
+ class: h([
325
337
  "base-button__icon",
326
338
  {
327
339
  "d-btn__icon": i.kind !== "unstyled",
328
- [a.ICON_POSITION_MODIFIERS[i.iconPosition]]: i.kind !== "unstyled"
340
+ [l.ICON_POSITION_MODIFIERS[i.iconPosition]]: i.kind !== "unstyled"
329
341
  }
330
342
  ])
331
343
  }, [
332
- f(t.$slots, "icon", { iconSize: n.iconSize })
333
- ], 2)) : h("", !0),
334
- a.hasSlotContent(t.$slots.default) ? (r(), u("span", {
335
- key: 1,
344
+ b(t.$slots, "icon", { iconSize: n.iconSize })
345
+ ], 2)) : o("", !0),
346
+ l.hasSlotContent(t.$slots.default) ? (a(), f("span", {
347
+ key: 2,
336
348
  "data-qa": "dt-button-label",
337
- class: c([
349
+ class: h([
338
350
  "base-button__label",
339
351
  { "d-btn__label": i.kind !== "unstyled" },
340
352
  i.labelClass
341
353
  ])
342
354
  }, [
343
- f(t.$slots, "default")
344
- ], 2)) : h("", !0)
355
+ b(t.$slots, "default")
356
+ ], 2)) : o("", !0)
345
357
  ]),
346
358
  _: 3
347
359
  }, 16, ["class", "style", "aria-live", "aria-label"]);
348
360
  }
349
- const z = /* @__PURE__ */ D(L, [["render", E]]);
361
+ const U = /* @__PURE__ */ T(z, [["render", F]]);
350
362
  export {
351
- z as default
363
+ U as default
352
364
  };
353
365
  //# sourceMappingURL=button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","sources":["../../../components/button/button.vue"],"sourcesContent":["<template>\n <component\n :is=\"computedTag\"\n :class=\"[\n 'base-button__button',\n buttonClasses(),\n ]\"\n data-qa=\"dt-button\"\n :style=\"{ width: width }\"\n :aria-live=\"computedAriaLive\"\n :aria-label=\"loading ? i18n.$t('DIALTONE_LOADING') : $attrs['aria-label']\"\n v-bind=\"computedAttrs\"\n v-on=\"computedListeners\"\n >\n <!-- NOTE(cormac): This span is needed since we can't apply styles to slots. -->\n <span\n v-if=\"shouldRenderIcon()\"\n data-qa=\"dt-button-icon\"\n :class=\"[\n 'base-button__icon',\n {\n 'd-btn__icon': kind !== 'unstyled',\n [ICON_POSITION_MODIFIERS[iconPosition]]: kind !== 'unstyled',\n },\n ]\"\n >\n <!-- @slot Button icon -->\n <slot\n name=\"icon\"\n :icon-size=\"iconSize\"\n />\n </span>\n <span\n v-if=\"hasSlotContent($slots.default)\"\n data-qa=\"dt-button-label\"\n :class=\"[\n 'base-button__label',\n { 'd-btn__label': kind !== 'unstyled' },\n labelClass,\n ]\"\n >\n <!-- @slot Content within button -->\n <slot />\n </span>\n </component>\n</template>\n\n<script>\nimport { warn, resolveComponent } from 'vue';\nimport { hasSlotContent } from '@/common/utils';\n\nimport {\n BUTTON_SIZE_MODIFIERS,\n BUTTON_KIND_MODIFIERS,\n BUTTON_IMPORTANCE_MODIFIERS,\n BUTTON_ICON_SIZES,\n BUTTON_TYPES,\n ICON_POSITION_MODIFIERS,\n INVALID_COMBINATION,\n} from './button_constants';\n\nimport { LINK_KIND_MODIFIERS, getLinkKindModifier } from '@/components/link';\nimport { DialtoneLocalization } from '@/localization';\n\n/**\n * A button is a UI element which allows users to take an action throughout the app.\n * It is important a button is identifiable, consistent, and communicates its actions clearly,\n * and is appropriately sized to its action.\n * @see https://dialtone.dialpad.com/components/button.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtButton',\n\n props: {\n /**\n * Whether the button is a circle or not.\n * @values true, false\n */\n circle: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The position of the icon slot within the button.\n * @values left, right, top, bottom\n */\n iconPosition: {\n type: String,\n default: 'left',\n validator: (position) => Object.keys(ICON_POSITION_MODIFIERS).includes(position),\n },\n\n /**\n * The fill and outline of the button associated with its visual importance.\n * @values clear, outlined, primary\n */\n importance: {\n type: String,\n default: 'primary',\n validator: (i) => Object.keys(BUTTON_IMPORTANCE_MODIFIERS).includes(i),\n },\n\n /**\n * Whether the button should be styled as a link or not.\n * @values true, false\n * @see DtLink\n */\n link: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The color of the link and button if the button is styled as a link.\n * @values default, warning, danger, success, muted\n * @see DtLink\n */\n linkKind: {\n type: String,\n default: 'default',\n validator: (lk) => Object.keys(LINK_KIND_MODIFIERS).includes(lk),\n },\n\n /**\n * Determines whether the link should have inverted styling if the button is styled as a link.\n * @values true, false\n * @see DtLink\n */\n linkInverted: {\n type: Boolean,\n default: false,\n },\n\n /**\n * HTML button disabled attribute\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#disabled\" target=\"_blank\"> (Reference) </a>\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * HTML button type attribute\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-type\" target=\"_blank\">(Reference)</a>\n * @values button, submit, reset\n */\n type: {\n type: String,\n default: 'button',\n validator: (t) => BUTTON_TYPES.includes(t),\n },\n\n /**\n * Button width, accepts\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/width\" target=\"_blank\">CSS width attribute</a> values\n */\n width: {\n type: String,\n default: null,\n },\n\n /**\n * The size of the button.\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (s) => Object.keys(BUTTON_SIZE_MODIFIERS).includes(s),\n },\n\n /**\n * Used to customize the label container\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Whether the button should display a loading animation or not.\n * @values true, false\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The color of the button.\n * @values default, unstyled, muted, danger, positive, inverted\n */\n kind: {\n type: String,\n default: 'default',\n validator: (k) => Object.keys(BUTTON_KIND_MODIFIERS).includes(k),\n },\n\n /**\n * Determines whether a screenreader reads live updates of\n * the button content to the user while the button\n * is in focus. default is to not.\n * @values true, false\n */\n assertiveOnFocus: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Determines whether the button should have active styling\n * default is false.\n * @values true, false\n */\n active: {\n type: Boolean,\n default: false,\n },\n\n /**\n * vue-router `to` prop. When provided, renders a `<router-link>`\n * for client-side SPA navigation.\n * @see https://router.vuejs.org/api/interfaces/RouterLinkProps.html#to\n */\n to: {\n type: [String, Object],\n default: null,\n },\n\n /**\n * When provided, renders an `<a>` element for standard browser navigation.\n */\n href: {\n type: String,\n default: null,\n },\n\n /**\n * HTML anchor target attribute. Only applied when using the `href` prop.\n * @values _self, _blank, _parent, _top\n */\n target: {\n type: String,\n default: null,\n },\n\n /**\n * HTML anchor rel attribute. Only applied when using the `href` prop.\n */\n rel: {\n type: String,\n default: null,\n },\n\n /**\n * vue-router `replace` prop. When true, navigation will not leave a\n * history entry. Only applied when using the `to` prop.\n * @values true, false\n */\n replace: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Native button focus in event\n *\n * @event focusin\n * @type {FocusEvent}\n */\n 'focusin',\n\n /**\n * Native button focus out event\n *\n * @event focusout\n * @type {FocusEvent}\n */\n 'focusout',\n ],\n\n data () {\n return {\n ICON_POSITION_MODIFIERS,\n // whether the button is currently in focus\n isInFocus: false,\n hasSlotContent,\n i18n: new DialtoneLocalization(),\n };\n },\n\n computed: {\n computedTag () {\n if (this.to) return this.resolveRouterLink();\n if (this.href) return 'a';\n return 'button';\n },\n\n isNativeButton () {\n return !this.to && !this.href;\n },\n\n computedAttrs () {\n if (this.to) {\n return {\n to: this.to,\n replace: this.replace,\n ...(this.disabled && { 'aria-disabled': 'true', tabindex: '-1' }),\n };\n }\n if (this.href) {\n return {\n href: this.disabled ? null : this.href,\n target: this.target,\n rel: this.rel,\n ...(this.disabled && { 'aria-disabled': 'true', tabindex: '-1' }),\n };\n }\n return {\n type: this.type,\n disabled: this.disabled,\n };\n },\n\n computedListeners () {\n const listeners = {\n focusin: (e) => {\n this.isInFocus = this.assertiveOnFocus;\n this.$emit('focusin', e);\n },\n\n focusout: (e) => {\n this.isInFocus = false;\n this.$emit('focusout', e);\n },\n };\n\n if (!this.isNativeButton) {\n // Prevent click when disabled for link elements.\n // stopImmediatePropagation prevents parent onClick attrs from firing.\n if (this.disabled) {\n listeners.click = (e) => {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n }\n\n // Space key handler: <a> only responds to Enter natively,\n // but buttons respond to both Enter and Space.\n listeners.keydown = (e) => {\n if (e.key === ' ' || e.code === 'Space') {\n e.preventDefault();\n if (!this.disabled) {\n e.target.click();\n }\n }\n };\n }\n\n return listeners;\n },\n\n computedAriaLive () {\n return this.assertiveOnFocus && this.isInFocus ? 'assertive' : this.$attrs.ariaLive;\n },\n\n iconSize () {\n return BUTTON_ICON_SIZES[this.size];\n },\n },\n\n watch: {\n $props: {\n deep: true,\n immediate: true,\n handler () {\n if (process.env.NODE_ENV === 'production') return;\n\n if (this.circle && this.link) {\n warn('You cannot enable circle and link at the same time', this);\n }\n\n this.isInvalidPropCombination(this.circle, this.kind, this.importance);\n },\n },\n },\n\n methods: {\n resolveRouterLink () {\n try {\n return resolveComponent('RouterLink');\n } catch {\n warn('DtButton: \"to\" prop requires vue-router. Falling back to <a>.');\n return 'a';\n }\n },\n\n buttonClasses () {\n if (this.link) {\n return [\n 'd-link',\n getLinkKindModifier(this.linkKind, this.linkInverted),\n BUTTON_SIZE_MODIFIERS[this.size],\n ];\n }\n if (this.kind === 'unstyled') {\n return ['d-btn--unstyled'];\n }\n return [\n 'd-btn',\n BUTTON_IMPORTANCE_MODIFIERS[this.importance],\n BUTTON_KIND_MODIFIERS[this.kind],\n BUTTON_SIZE_MODIFIERS[this.size],\n {\n 'd-btn--circle': this.circle,\n 'd-btn--loading': this.loading,\n 'd-btn--icon-only': this.isIconOnly(),\n 'd-btn--vertical': this.isVerticalIconLayout(),\n 'd-btn--active': this.active,\n },\n ];\n },\n\n isInvalidPropCombination (circle, kind, importance) {\n // Skip validation if unstyled is true\n if (this.kind === 'unstyled') {\n return true;\n }\n\n for (const row of INVALID_COMBINATION) {\n if (circle === row.circle && kind === row.kind && importance === row.importance) {\n warn(row.message);\n return false;\n }\n }\n return true;\n },\n\n shouldRenderIcon () {\n return hasSlotContent(this.$slots.icon) && !this.link;\n },\n\n isIconOnly () {\n return this.shouldRenderIcon() && !hasSlotContent(this.$slots.default);\n },\n\n isVerticalIconLayout () {\n return !this.isIconOnly() && ['top', 'bottom'].includes(this.iconPosition);\n },\n },\n};\n</script>\n"],"names":["_sfc_main","position","ICON_POSITION_MODIFIERS","i","BUTTON_IMPORTANCE_MODIFIERS","lk","LINK_KIND_MODIFIERS","BUTTON_TYPES","s","BUTTON_SIZE_MODIFIERS","k","BUTTON_KIND_MODIFIERS","hasSlotContent","DialtoneLocalization","listeners","BUTTON_ICON_SIZES","warn","resolveComponent","getLinkKindModifier","circle","kind","importance","row","INVALID_COMBINATION","_createBlock","_resolveDynamicComponent","$options","_mergeProps","$props","$data","_ctx","_toHandlers","_createElementBlock","_normalizeClass","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"button.js","sources":["../../../components/button/button.vue"],"sourcesContent":["<template>\n <component\n :is=\"computedTag\"\n :class=\"[\n 'base-button__button',\n buttonClasses(),\n ]\"\n data-qa=\"dt-button\"\n :style=\"{ width: width }\"\n :aria-live=\"computedAriaLive\"\n :aria-label=\"loading ? i18n.$t('DIALTONE_LOADING') : $attrs['aria-label']\"\n v-bind=\"computedAttrs\"\n v-on=\"computedListeners\"\n >\n <dt-loader\n v-if=\"loading && kind !== 'unstyled'\"\n class=\"d-btn__loader\"\n :size=\"loaderSize\"\n aria-hidden=\"true\"\n />\n <!-- NOTE(cormac): This span is needed since we can't apply styles to slots. -->\n <span\n v-if=\"shouldRenderIcon()\"\n data-qa=\"dt-button-icon\"\n :class=\"[\n 'base-button__icon',\n {\n 'd-btn__icon': kind !== 'unstyled',\n [ICON_POSITION_MODIFIERS[iconPosition]]: kind !== 'unstyled',\n },\n ]\"\n >\n <!-- @slot Button icon -->\n <slot\n name=\"icon\"\n :icon-size=\"iconSize\"\n />\n </span>\n <span\n v-if=\"hasSlotContent($slots.default)\"\n data-qa=\"dt-button-label\"\n :class=\"[\n 'base-button__label',\n { 'd-btn__label': kind !== 'unstyled' },\n labelClass,\n ]\"\n >\n <!-- @slot Content within button -->\n <slot />\n </span>\n </component>\n</template>\n\n<script>\nimport { warn, resolveComponent } from 'vue';\nimport { hasSlotContent } from '@/common/utils';\nimport DtLoader from '@/components/loader/loader.vue';\n\nimport {\n BUTTON_SIZE_MODIFIERS,\n BUTTON_KIND_MODIFIERS,\n BUTTON_IMPORTANCE_MODIFIERS,\n BUTTON_ICON_SIZES,\n BUTTON_TYPES,\n ICON_POSITION_MODIFIERS,\n INVALID_COMBINATION,\n} from './button_constants';\n\nimport { LINK_KIND_MODIFIERS, getLinkKindModifier } from '@/components/link';\nimport { DialtoneLocalization } from '@/localization';\n\n/**\n * A button is a UI element which allows users to take an action throughout the app.\n * It is important a button is identifiable, consistent, and communicates its actions clearly,\n * and is appropriately sized to its action.\n * @see https://dialtone.dialpad.com/components/button.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtButton',\n\n components: { DtLoader },\n\n props: {\n /**\n * Whether the button is a circle or not.\n * @values true, false\n */\n circle: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The position of the icon slot within the button.\n * @values left, right, top, bottom\n */\n iconPosition: {\n type: String,\n default: 'left',\n validator: (position) => Object.keys(ICON_POSITION_MODIFIERS).includes(position),\n },\n\n /**\n * The fill and outline of the button associated with its visual importance.\n * @values clear, outlined, primary\n */\n importance: {\n type: String,\n default: 'primary',\n validator: (i) => Object.keys(BUTTON_IMPORTANCE_MODIFIERS).includes(i),\n },\n\n /**\n * Whether the button should be styled as a link or not.\n * @values true, false\n * @see DtLink\n */\n link: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The color of the link and button if the button is styled as a link.\n * @values default, warning, danger, success, muted\n * @see DtLink\n */\n linkKind: {\n type: String,\n default: 'default',\n validator: (lk) => Object.keys(LINK_KIND_MODIFIERS).includes(lk),\n },\n\n /**\n * Determines whether the link should have inverted styling if the button is styled as a link.\n * @values true, false\n * @see DtLink\n */\n linkInverted: {\n type: Boolean,\n default: false,\n },\n\n /**\n * HTML button disabled attribute\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#disabled\" target=\"_blank\"> (Reference) </a>\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * HTML button type attribute\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-type\" target=\"_blank\">(Reference)</a>\n * @values button, submit, reset\n */\n type: {\n type: String,\n default: 'button',\n validator: (t) => BUTTON_TYPES.includes(t),\n },\n\n /**\n * Button width, accepts\n * <a class=\"d-link\" href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/width\" target=\"_blank\">CSS width attribute</a> values\n */\n width: {\n type: String,\n default: null,\n },\n\n /**\n * The size of the button.\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (s) => Object.keys(BUTTON_SIZE_MODIFIERS).includes(s),\n },\n\n /**\n * Used to customize the label container\n */\n labelClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Whether the button should display a loading animation or not.\n * @values true, false\n */\n loading: {\n type: Boolean,\n default: false,\n },\n\n /**\n * The color of the button.\n * @values default, unstyled, muted, danger, positive, inverted\n */\n kind: {\n type: String,\n default: 'default',\n validator: (k) => Object.keys(BUTTON_KIND_MODIFIERS).includes(k),\n },\n\n /**\n * Determines whether a screenreader reads live updates of\n * the button content to the user while the button\n * is in focus. default is to not.\n * @values true, false\n */\n assertiveOnFocus: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Determines whether the button should have active styling\n * default is false.\n * @values true, false\n */\n active: {\n type: Boolean,\n default: false,\n },\n\n /**\n * vue-router `to` prop. When provided, renders a `<router-link>`\n * for client-side SPA navigation.\n * @see https://router.vuejs.org/api/interfaces/RouterLinkProps.html#to\n */\n to: {\n type: [String, Object],\n default: null,\n },\n\n /**\n * When provided, renders an `<a>` element for standard browser navigation.\n */\n href: {\n type: String,\n default: null,\n },\n\n /**\n * HTML anchor target attribute. Only applied when using the `href` prop.\n * @values _self, _blank, _parent, _top\n */\n target: {\n type: String,\n default: null,\n },\n\n /**\n * HTML anchor rel attribute. Only applied when using the `href` prop.\n */\n rel: {\n type: String,\n default: null,\n },\n\n /**\n * vue-router `replace` prop. When true, navigation will not leave a\n * history entry. Only applied when using the `to` prop.\n * @values true, false\n */\n replace: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Native button focus in event\n *\n * @event focusin\n * @type {FocusEvent}\n */\n 'focusin',\n\n /**\n * Native button focus out event\n *\n * @event focusout\n * @type {FocusEvent}\n */\n 'focusout',\n ],\n\n data () {\n return {\n ICON_POSITION_MODIFIERS,\n // whether the button is currently in focus\n isInFocus: false,\n hasSlotContent,\n i18n: new DialtoneLocalization(),\n };\n },\n\n computed: {\n computedTag () {\n if (this.to) return this.resolveRouterLink();\n if (this.href) return 'a';\n return 'button';\n },\n\n isNativeButton () {\n return !this.to && !this.href;\n },\n\n computedAttrs () {\n if (this.to) {\n return {\n to: this.to,\n replace: this.replace,\n ...(this.disabled && { 'aria-disabled': 'true', tabindex: '-1' }),\n };\n }\n if (this.href) {\n return {\n href: this.disabled ? null : this.href,\n target: this.target,\n rel: this.rel,\n ...(this.disabled && { 'aria-disabled': 'true', tabindex: '-1' }),\n };\n }\n return {\n type: this.type,\n disabled: this.disabled,\n };\n },\n\n computedListeners () {\n const listeners = {\n focusin: (e) => {\n this.isInFocus = this.assertiveOnFocus;\n this.$emit('focusin', e);\n },\n\n focusout: (e) => {\n this.isInFocus = false;\n this.$emit('focusout', e);\n },\n };\n\n if (!this.isNativeButton) {\n // Prevent click when disabled for link elements.\n // stopImmediatePropagation prevents parent onClick attrs from firing.\n if (this.disabled) {\n listeners.click = (e) => {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n }\n\n // Space key handler: <a> only responds to Enter natively,\n // but buttons respond to both Enter and Space.\n listeners.keydown = (e) => {\n if (e.key === ' ' || e.code === 'Space') {\n e.preventDefault();\n if (!this.disabled) {\n e.target.click();\n }\n }\n };\n }\n\n return listeners;\n },\n\n computedAriaLive () {\n return this.assertiveOnFocus && this.isInFocus ? 'assertive' : this.$attrs.ariaLive;\n },\n\n iconSize () {\n return BUTTON_ICON_SIZES[this.size];\n },\n\n loaderSize () {\n return BUTTON_ICON_SIZES[this.size];\n },\n },\n\n watch: {\n $props: {\n deep: true,\n immediate: true,\n handler () {\n if (process.env.NODE_ENV === 'production') return;\n\n if (this.circle && this.link) {\n warn('You cannot enable circle and link at the same time', this);\n }\n\n this.isInvalidPropCombination(this.circle, this.kind, this.importance);\n },\n },\n },\n\n methods: {\n resolveRouterLink () {\n try {\n return resolveComponent('RouterLink');\n } catch {\n warn('DtButton: \"to\" prop requires vue-router. Falling back to <a>.');\n return 'a';\n }\n },\n\n buttonClasses () {\n if (this.link) {\n return [\n 'd-link',\n getLinkKindModifier(this.linkKind, this.linkInverted),\n BUTTON_SIZE_MODIFIERS[this.size],\n ];\n }\n if (this.kind === 'unstyled') {\n return ['d-btn--unstyled'];\n }\n return [\n 'd-btn',\n BUTTON_IMPORTANCE_MODIFIERS[this.importance],\n BUTTON_KIND_MODIFIERS[this.kind],\n BUTTON_SIZE_MODIFIERS[this.size],\n {\n 'd-btn--circle': this.circle,\n 'd-btn--loading': this.loading,\n 'd-btn--icon-only': this.isIconOnly(),\n 'd-btn--vertical': this.isVerticalIconLayout(),\n 'd-btn--active': this.active,\n },\n ];\n },\n\n isInvalidPropCombination (circle, kind, importance) {\n // Skip validation if unstyled is true\n if (this.kind === 'unstyled') {\n return true;\n }\n\n for (const row of INVALID_COMBINATION) {\n if (circle === row.circle && kind === row.kind && importance === row.importance) {\n warn(row.message);\n return false;\n }\n }\n return true;\n },\n\n shouldRenderIcon () {\n return hasSlotContent(this.$slots.icon) && !this.link;\n },\n\n isIconOnly () {\n return this.shouldRenderIcon() && !hasSlotContent(this.$slots.default);\n },\n\n isVerticalIconLayout () {\n return !this.isIconOnly() && ['top', 'bottom'].includes(this.iconPosition);\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtLoader","position","ICON_POSITION_MODIFIERS","i","BUTTON_IMPORTANCE_MODIFIERS","lk","LINK_KIND_MODIFIERS","BUTTON_TYPES","s","BUTTON_SIZE_MODIFIERS","k","BUTTON_KIND_MODIFIERS","hasSlotContent","DialtoneLocalization","listeners","BUTTON_ICON_SIZES","warn","resolveComponent","getLinkKindModifier","circle","kind","importance","row","INVALID_COMBINATION","_createBlock","_resolveDynamicComponent","$options","_mergeProps","$props","$data","_ctx","_toHandlers","_component_dt_loader","_createElementBlock","_normalizeClass","_renderSlot"],"mappings":";;;;;;;AA6EA,MAAKA,IAAU;AAAA,EACb,cAAc,EAAE,MAAM;EACtB,MAAM;AAAA,EAEN,YAAY,EAAE,UAAAC;EAEd,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;;;;;IAOX,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAACC,MAAa,OAAO,KAAKC,CAAuB,EAAE,SAASD,CAAQ;AAAA;;;;;IAOjF,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAACE,MAAM,OAAO,KAAKC,CAA2B,EAAE,SAASD,CAAC;AAAA;;;;;;IAQvE,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA;;;;;;IAQX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAACE,MAAO,OAAO,KAAKC,CAAmB,EAAE,SAASD,CAAE;AAAA;;;;;;IAQjE,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA;;;;;;IAQX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;;;;;;IAQX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAAC,MAAME,EAAa,SAAS,CAAC;AAAA;;;;;IAO3C,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA;;;;;IAOX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAACC,MAAM,OAAO,KAAKC,CAAqB,EAAE,SAASD,CAAC;AAAA;;;;IAMjE,YAAY;AAAA,MACV,MAAM,CAAC,QAAQ,OAAO,MAAM;AAAA,MAC5B,SAAS;AAAA;;;;;IAOX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA;;;;;IAOX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW,CAACE,MAAM,OAAO,KAAKC,CAAqB,EAAE,SAASD,CAAC;AAAA;;;;;;;IASjE,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS;AAAA;;;;;;IAQX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;;;;;;IAQX,IAAI;AAAA,MACF,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA;;;;IAMX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA;;;;;IAOX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA;;;;;;IAQX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA;;EAIb,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA;EAGF,OAAQ;AACN,WAAO;AAAA,MACL,yBAAAR;AAAA;AAAA,MAEA,WAAW;AAAA,MACX,gBAAAU;AAAA,MACA,MAAM,IAAIC,EAAoB;AAAA;EAElC;AAAA,EAEA,UAAU;AAAA,IACR,cAAe;AACb,aAAI,KAAK,KAAW,KAAK,kBAAiB,IACtC,KAAK,OAAa,MACf;AAAA,IACT;AAAA,IAEA,iBAAkB;AAChB,aAAO,CAAC,KAAK,MAAM,CAAC,KAAK;AAAA,IAC3B;AAAA,IAEA,gBAAiB;AACf,aAAI,KAAK,KACA;AAAA,QACL,IAAI,KAAK;AAAA,QACT,SAAS,KAAK;AAAA,QACd,GAAI,KAAK,YAAY,EAAE,iBAAiB,QAAQ,UAAU;UAG1D,KAAK,OACA;AAAA,QACL,MAAM,KAAK,WAAW,OAAO,KAAK;AAAA,QAClC,QAAQ,KAAK;AAAA,QACb,KAAK,KAAK;AAAA,QACV,GAAI,KAAK,YAAY,EAAE,iBAAiB,QAAQ,UAAU;UAGvD;AAAA,QACL,MAAM,KAAK;AAAA,QACX,UAAU,KAAK;AAAA;IAEnB;AAAA,IAEA,oBAAqB;AACnB,YAAMC,IAAY;AAAA,QAChB,SAAS,CAAC,MAAM;AACd,eAAK,YAAY,KAAK,kBACtB,KAAK,MAAM,WAAW,CAAC;AAAA,QACzB;AAAA,QAEA,UAAU,CAAC,MAAM;AACf,eAAK,YAAY,IACjB,KAAK,MAAM,YAAY,CAAC;AAAA,QAC1B;AAAA;AAGF,aAAK,KAAK,mBAGJ,KAAK,aACPA,EAAU,QAAQ,CAAC,MAAM;AACvB,UAAE,eAAc,GAChB,EAAE,yBAAwB;AAAA,MAC5B,IAKFA,EAAU,UAAU,CAAC,MAAM;AACzB,SAAI,EAAE,QAAQ,OAAO,EAAE,SAAS,aAC9B,EAAE,eAAc,GACX,KAAK,YACR,EAAE,OAAO,MAAK;AAAA,MAGpB,IAGKA;AAAA,IACT;AAAA,IAEA,mBAAoB;AAClB,aAAO,KAAK,oBAAoB,KAAK,YAAY,cAAc,KAAK,OAAO;AAAA,IAC7E;AAAA,IAEA,WAAY;AACV,aAAOC,EAAkB,KAAK,IAAI;AAAA,IACpC;AAAA,IAEA,aAAc;AACZ,aAAOA,EAAkB,KAAK,IAAI;AAAA,IACpC;AAAA;EAGF,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,WAAW;AAAA,MACX,UAAW;AACT,QAAI,QAAQ,IAAI,aAAa,iBAEzB,KAAK,UAAU,KAAK,QACtBC,EAAK,sDAAsD,IAAI,GAGjE,KAAK,yBAAyB,KAAK,QAAQ,KAAK,MAAM,KAAK,UAAU;AAAA,MACvE;AAAA;;EAIJ,SAAS;AAAA,IACP,oBAAqB;AACnB,UAAI;AACF,eAAOC,EAAiB,YAAY;AAAA,MACtC,QAAQ;AACN,eAAAD,EAAK,+DAA+D,GAC7D;AAAA,MACT;AAAA,IACF;AAAA,IAEA,gBAAiB;AACf,aAAI,KAAK,OACA;AAAA,QACL;AAAA,QACAE,EAAoB,KAAK,UAAU,KAAK,YAAY;AAAA,QACpDT,EAAsB,KAAK,IAAI;AAAA,UAG/B,KAAK,SAAS,aACT,CAAC,iBAAiB,IAEpB;AAAA,QACL;AAAA,QACAL,EAA4B,KAAK,UAAU;AAAA,QAC3CO,EAAsB,KAAK,IAAI;AAAA,QAC/BF,EAAsB,KAAK,IAAI;AAAA,QAC/B;AAAA,UACE,iBAAiB,KAAK;AAAA,UACtB,kBAAkB,KAAK;AAAA,UACvB,oBAAoB,KAAK,WAAU;AAAA,UACnC,mBAAmB,KAAK,qBAAoB;AAAA,UAC5C,iBAAiB,KAAK;AAAA;;IAG5B;AAAA,IAEA,yBAA0BU,GAAQC,GAAMC,GAAY;AAElD,UAAI,KAAK,SAAS;AAChB,eAAO;AAGT,iBAAWC,KAAOC;AAChB,YAAIJ,MAAWG,EAAI,UAAUF,MAASE,EAAI,QAAQD,MAAeC,EAAI;AACnE,iBAAAN,EAAKM,EAAI,OAAO,GACT;AAGX,aAAO;AAAA,IACT;AAAA,IAEA,mBAAoB;AAClB,aAAOV,EAAe,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK;AAAA,IACnD;AAAA,IAEA,aAAc;AACZ,aAAO,KAAK,sBAAsB,CAACA,EAAe,KAAK,OAAO,OAAO;AAAA,IACvE;AAAA,IAEA,uBAAwB;AACtB,aAAO,CAAC,KAAK,WAAU,KAAM,CAAC,OAAO,QAAQ,EAAE,SAAS,KAAK,YAAY;AAAA,IAC3E;AAAA;AAEJ;;;cApdEY,EAiDYC,EAhDLC,EAAA,WAAW,GADlBC,EAiDY;AAAA,IA/CT,OAAK;AAAA;MAAuCD,EAAA,cAAa;AAAA;IAI1D,WAAQ;AAAA,IACP,gBAAgBE,EAAA,MAAK;AAAA,IACrB,aAAWF,EAAA;AAAA,IACX,cAAYE,EAAA,UAAUC,OAAK,yBAAyBC,EAAA,OAAM,YAAA;AAAA,KACnDJ,EAAA,eACRK,EAAML,EAAA,iBAAiB,CAAA,GAAA;AAAA,eAEvB,MAKE;AAAA,MAJME,EAAA,WAAWA,EAAA,SAAI,mBADvBJ,EAKEQ,GAAA;AAAA;QAHA,OAAM;AAAA,QACL,MAAMN,EAAA;AAAA,QACP,eAAY;AAAA;MAINA,EAAA,iBAAgB,UADxBO,EAgBO,QAAA;AAAA;QAdL,WAAQ;AAAA,QACP,OAAKC,EAAA;AAAA;;2BAAoEN,EAAA,SAAI;AAAA,aAA4BC,EAAA,wBAAwBD,EAAA,YAAY,CAAA,GAAIA,EAAA,SAAI;AAAA;;;QAStJO,EAGEL,EAAA,QAAA,QAAA,EADC,UAAWJ,EAAA,SAAQ,CAAA;AAAA;MAIhBG,EAAA,eAAeC,EAAA,OAAO,OAAO,UADrCG,EAWO,QAAA;AAAA;QATL,WAAQ;AAAA,QACP,OAAKC,EAAA;AAAA;4BAA4DN,EAAA,SAAI,WAAA;AAAA,UAA2BA,EAAA;AAAA;;QAOjGO,EAAQL,EAAA,QAAA,SAAA;AAAA;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue"),l=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),s=require("../button/button.cjs"),u={name:"EditorToolbarButton",components:{DtButton:s.default},props:{isActive:{type:Boolean,default:!1},tooltipMessage:{type:String,required:!0},dataQA:{type:String,default:""},tabindex:{type:Number,default:-1},icon:{type:Object,required:!0},label:{type:String,default:""},onClick:{type:Function,required:!0}},emits:["shift-focus-right","shift-focus-left"]};function d(o,i,e,f,b,p){const n=t.resolveComponent("dt-button"),r=t.resolveDirective("dt-tooltip");return t.withDirectives((t.openBlock(),t.createBlock(n,{ref:"buttonRef",active:e.isActive,"aria-label":e.tooltipMessage,"data-qa":e.dataQA,tabindex:e.tabindex,importance:"clear",kind:"muted",size:"xs",onClick:e.onClick,onKeydown:[i[0]||(i[0]=t.withKeys(t.withModifiers(a=>o.$emit("shift-focus-right"),["stop"]),["right"])),i[1]||(i[1]=t.withKeys(t.withModifiers(a=>o.$emit("shift-focus-left"),["stop"]),["left"]))]},{icon:t.withCtx(()=>[(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.icon),{size:"200"})),t.renderSlot(o.$slots,"extra")]),default:t.withCtx(()=>[t.createTextVNode(" "+t.toDisplayString(e.label),1)]),_:3},8,["active","aria-label","data-qa","tabindex","onClick"])),[[r,{message:e.tooltipMessage,placement:"top"}]])}const c=l._(u,[["render",d]]);exports.default=c;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),s=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),u=require("../button/button.cjs"),d={name:"EditorToolbarButton",components:{DtButton:u.default},props:{isActive:{type:Boolean,default:!1},tooltipMessage:{type:String,required:!0},dataQA:{type:String,default:""},tabindex:{type:Number,default:-1},icon:{type:Object,required:!0},label:{type:String,default:""},onClick:{type:Function,required:!0}},emits:["shift-focus-right","shift-focus-left"]};function c(i,o,t,b,p,m){var n;const r=e.resolveComponent("dt-button"),l=e.resolveDirective("dt-tooltip");return e.withDirectives((e.openBlock(),e.createBlock(r,{ref:"buttonRef",active:t.isActive,"aria-label":t.tooltipMessage,"data-qa":t.dataQA,tabindex:t.tabindex,importance:"clear",kind:"muted",size:"xs",onClick:t.onClick,onKeydown:[o[0]||(o[0]=e.withKeys(e.withModifiers(a=>i.$emit("shift-focus-right"),["stop"]),["right"])),o[1]||(o[1]=e.withKeys(e.withModifiers(a=>i.$emit("shift-focus-left"),["stop"]),["left"]))]},{icon:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon),{size:"200"})),e.renderSlot(i.$slots,"extra")]),default:e.withCtx(()=>[e.createTextVNode(" "+e.toDisplayString(t.label),1)]),_:3},8,["active","aria-label","data-qa","tabindex","onClick"])),[[l,{message:t.tooltipMessage,placement:"top",externalAnchorElement:(n=i.$refs.buttonRef)==null?void 0:n.$el}]])}const f=s._(d,[["render",c]]);exports.default=f;
2
2
  //# sourceMappingURL=EditorToolbarButton.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorToolbarButton.cjs","sources":["../../../recipes/conversation_view/editor/EditorToolbarButton.vue"],"sourcesContent":["<template>\n <dt-button\n ref=\"buttonRef\"\n v-dt-tooltip=\"{ message: tooltipMessage, placement: 'top' }\"\n :active=\"isActive\"\n :aria-label=\"tooltipMessage\"\n :data-qa=\"dataQA\"\n :tabindex=\"tabindex\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n @click=\"onClick\"\n @keydown.right.stop=\"$emit('shift-focus-right')\"\n @keydown.left.stop=\"$emit('shift-focus-left')\"\n >\n <template #icon>\n <component\n :is=\"icon\"\n size=\"200\"\n />\n <slot name=\"extra\" />\n </template>\n {{ label }}\n </dt-button>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\n\nexport default {\n name: 'EditorToolbarButton',\n\n components: {\n DtButton,\n },\n\n props: {\n /**\n * Whether the button is active\n */\n isActive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Tooltip message\n */\n tooltipMessage: {\n type: String,\n required: true,\n },\n\n /**\n * Data QA attribute for testing\n */\n dataQA: {\n type: String,\n default: '',\n },\n\n /**\n * Tab index for keyboard navigation\n */\n tabindex: {\n type: Number,\n default: -1,\n },\n\n /**\n * Icon component\n */\n icon: {\n type: Object,\n required: true,\n },\n\n /**\n * Button label text\n */\n label: {\n type: String,\n default: '',\n },\n\n /**\n * Click handler function\n */\n onClick: {\n type: Function,\n required: true,\n },\n },\n\n emits: [\n /**\n * Emitted when right arrow key is pressed\n */\n 'shift-focus-right',\n\n /**\n * Emitted when left arrow key is pressed\n */\n 'shift-focus-left',\n ],\n};\n</script>\n"],"names":["_sfc_main","DtButton","_createBlock","_component_dt_button","$props","_ctx","_openBlock","_resolveDynamicComponent","_renderSlot","_createTextVNode"],"mappings":"+NA6BKA,EAAU,CACb,KAAM,sBAEN,WAAY,CACV,SAAAC,EAAAA,SAGF,MAAO,CAIL,SAAU,CACR,KAAM,QACN,QAAS,IAMX,eAAgB,CACd,KAAM,OACN,SAAU,IAMZ,OAAQ,CACN,KAAM,OACN,QAAS,IAMX,SAAU,CACR,KAAM,OACN,QAAS,IAMX,KAAM,CACJ,KAAM,OACN,SAAU,IAMZ,MAAO,CACL,KAAM,OACN,QAAS,IAMX,QAAS,CACP,KAAM,SACN,SAAU,KAId,MAAO,CAIL,oBAKA,mBAEJ,4IAxGEC,EAAAA,YAsBYC,EAAA,CArBV,IAAI,YAEH,OAAQC,EAAA,SACR,aAAYA,EAAA,eACZ,UAASA,EAAA,OACT,SAAUA,EAAA,SACX,WAAW,QACX,KAAK,QACL,KAAK,KACJ,QAAOA,EAAA,QACP,UAAO,2CAAaC,EAAA,MAAK,mBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,6CACNA,EAAA,MAAK,kBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAEd,eACT,IAGE,EAHFC,YAAA,EAAAJ,EAAAA,YAGEK,0BAFKH,EAAA,IAAI,EAAA,CACT,KAAK,MAAK,GAEZI,aAAqBH,EAAA,OAAA,OAAA,sBACZ,IACX,CADWI,EAAAA,gBAAA,sBACRL,EAAA,KAAK,EAAA,CAAA,iFAnBiBA,EAAA,eAAc,UAAA,KAAA,CAAA"}
1
+ {"version":3,"file":"EditorToolbarButton.cjs","sources":["../../../recipes/conversation_view/editor/EditorToolbarButton.vue"],"sourcesContent":["<template>\n <dt-button\n ref=\"buttonRef\"\n v-dt-tooltip=\"{ message: tooltipMessage, placement: 'top', externalAnchorElement: $refs.buttonRef?.$el }\"\n :active=\"isActive\"\n :aria-label=\"tooltipMessage\"\n :data-qa=\"dataQA\"\n :tabindex=\"tabindex\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n @click=\"onClick\"\n @keydown.right.stop=\"$emit('shift-focus-right')\"\n @keydown.left.stop=\"$emit('shift-focus-left')\"\n >\n <template #icon>\n <component\n :is=\"icon\"\n size=\"200\"\n />\n <slot name=\"extra\" />\n </template>\n {{ label }}\n </dt-button>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\n\nexport default {\n name: 'EditorToolbarButton',\n\n components: {\n DtButton,\n },\n\n props: {\n /**\n * Whether the button is active\n */\n isActive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Tooltip message\n */\n tooltipMessage: {\n type: String,\n required: true,\n },\n\n /**\n * Data QA attribute for testing\n */\n dataQA: {\n type: String,\n default: '',\n },\n\n /**\n * Tab index for keyboard navigation\n */\n tabindex: {\n type: Number,\n default: -1,\n },\n\n /**\n * Icon component\n */\n icon: {\n type: Object,\n required: true,\n },\n\n /**\n * Button label text\n */\n label: {\n type: String,\n default: '',\n },\n\n /**\n * Click handler function\n */\n onClick: {\n type: Function,\n required: true,\n },\n },\n\n emits: [\n /**\n * Emitted when right arrow key is pressed\n */\n 'shift-focus-right',\n\n /**\n * Emitted when left arrow key is pressed\n */\n 'shift-focus-left',\n ],\n};\n</script>\n"],"names":["_sfc_main","DtButton","_createBlock","_component_dt_button","$props","_ctx","_openBlock","_resolveDynamicComponent","_renderSlot","_createTextVNode","_directive_dt_tooltip","_a"],"mappings":"+NA6BKA,EAAU,CACb,KAAM,sBAEN,WAAY,CACV,SAAAC,EAAAA,SAGF,MAAO,CAIL,SAAU,CACR,KAAM,QACN,QAAS,IAMX,eAAgB,CACd,KAAM,OACN,SAAU,IAMZ,OAAQ,CACN,KAAM,OACN,QAAS,IAMX,SAAU,CACR,KAAM,OACN,QAAS,IAMX,KAAM,CACJ,KAAM,OACN,SAAU,IAMZ,MAAO,CACL,KAAM,OACN,QAAS,IAMX,QAAS,CACP,KAAM,SACN,SAAU,KAId,MAAO,CAIL,oBAKA,mBAEJ,kJAxGEC,EAAAA,YAsBYC,EAAA,CArBV,IAAI,YAEH,OAAQC,EAAA,SACR,aAAYA,EAAA,eACZ,UAASA,EAAA,OACT,SAAUA,EAAA,SACX,WAAW,QACX,KAAK,QACL,KAAK,KACJ,QAAOA,EAAA,QACP,UAAO,2CAAaC,EAAA,MAAK,mBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,6CACNA,EAAA,MAAK,kBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAEd,eACT,IAGE,EAHFC,YAAA,EAAAJ,EAAAA,YAGEK,0BAFKH,EAAA,IAAI,EAAA,CACT,KAAK,MAAK,GAEZI,aAAqBH,EAAA,OAAA,OAAA,sBACZ,IACX,CADWI,EAAAA,gBAAA,sBACRL,EAAA,KAAK,EAAA,CAAA,qEAnBiB,CAAAM,EAAA,CAAA,QAAAN,EAAA,eAAc,UAAA,MAAA,uBAA2CO,EAAAN,EAAA,MAAM,YAAN,YAAAM,EAAiB,GAAG,CAAA"}
@@ -1,10 +1,10 @@
1
- import { resolveComponent as f, resolveDirective as u, withDirectives as m, openBlock as i, createBlock as n, withKeys as a, withModifiers as r, withCtx as l, createTextVNode as p, toDisplayString as b, resolveDynamicComponent as v, renderSlot as g } from "vue";
2
- import { _ as y } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
3
- import _ from "../button/button.js";
4
- const h = {
1
+ import { resolveComponent as u, resolveDirective as m, withDirectives as p, openBlock as n, createBlock as a, withKeys as r, withModifiers as l, withCtx as s, createTextVNode as b, toDisplayString as v, resolveDynamicComponent as g, renderSlot as y } from "vue";
2
+ import { _ as h } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
3
+ import x from "../button/button.js";
4
+ const _ = {
5
5
  name: "EditorToolbarButton",
6
6
  components: {
7
- DtButton: _
7
+ DtButton: x
8
8
  },
9
9
  props: {
10
10
  /**
@@ -68,9 +68,10 @@ const h = {
68
68
  "shift-focus-left"
69
69
  ]
70
70
  };
71
- function x(o, e, t, k, C, B) {
72
- const s = f("dt-button"), d = u("dt-tooltip");
73
- return m((i(), n(s, {
71
+ function k(e, o, t, C, B, q) {
72
+ var i;
73
+ const d = u("dt-button"), c = m("dt-tooltip");
74
+ return p((n(), a(d, {
74
75
  ref: "buttonRef",
75
76
  active: t.isActive,
76
77
  "aria-label": t.tooltipMessage,
@@ -81,23 +82,23 @@ function x(o, e, t, k, C, B) {
81
82
  size: "xs",
82
83
  onClick: t.onClick,
83
84
  onKeydown: [
84
- e[0] || (e[0] = a(r((c) => o.$emit("shift-focus-right"), ["stop"]), ["right"])),
85
- e[1] || (e[1] = a(r((c) => o.$emit("shift-focus-left"), ["stop"]), ["left"]))
85
+ o[0] || (o[0] = r(l((f) => e.$emit("shift-focus-right"), ["stop"]), ["right"])),
86
+ o[1] || (o[1] = r(l((f) => e.$emit("shift-focus-left"), ["stop"]), ["left"]))
86
87
  ]
87
88
  }, {
88
- icon: l(() => [
89
- (i(), n(v(t.icon), { size: "200" })),
90
- g(o.$slots, "extra")
89
+ icon: s(() => [
90
+ (n(), a(g(t.icon), { size: "200" })),
91
+ y(e.$slots, "extra")
91
92
  ]),
92
- default: l(() => [
93
- p(" " + b(t.label), 1)
93
+ default: s(() => [
94
+ b(" " + v(t.label), 1)
94
95
  ]),
95
96
  _: 3
96
97
  }, 8, ["active", "aria-label", "data-qa", "tabindex", "onClick"])), [
97
- [d, { message: t.tooltipMessage, placement: "top" }]
98
+ [c, { message: t.tooltipMessage, placement: "top", externalAnchorElement: (i = e.$refs.buttonRef) == null ? void 0 : i.$el }]
98
99
  ]);
99
100
  }
100
- const S = /* @__PURE__ */ y(h, [["render", x]]);
101
+ const S = /* @__PURE__ */ h(_, [["render", k]]);
101
102
  export {
102
103
  S as default
103
104
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EditorToolbarButton.js","sources":["../../../recipes/conversation_view/editor/EditorToolbarButton.vue"],"sourcesContent":["<template>\n <dt-button\n ref=\"buttonRef\"\n v-dt-tooltip=\"{ message: tooltipMessage, placement: 'top' }\"\n :active=\"isActive\"\n :aria-label=\"tooltipMessage\"\n :data-qa=\"dataQA\"\n :tabindex=\"tabindex\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n @click=\"onClick\"\n @keydown.right.stop=\"$emit('shift-focus-right')\"\n @keydown.left.stop=\"$emit('shift-focus-left')\"\n >\n <template #icon>\n <component\n :is=\"icon\"\n size=\"200\"\n />\n <slot name=\"extra\" />\n </template>\n {{ label }}\n </dt-button>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\n\nexport default {\n name: 'EditorToolbarButton',\n\n components: {\n DtButton,\n },\n\n props: {\n /**\n * Whether the button is active\n */\n isActive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Tooltip message\n */\n tooltipMessage: {\n type: String,\n required: true,\n },\n\n /**\n * Data QA attribute for testing\n */\n dataQA: {\n type: String,\n default: '',\n },\n\n /**\n * Tab index for keyboard navigation\n */\n tabindex: {\n type: Number,\n default: -1,\n },\n\n /**\n * Icon component\n */\n icon: {\n type: Object,\n required: true,\n },\n\n /**\n * Button label text\n */\n label: {\n type: String,\n default: '',\n },\n\n /**\n * Click handler function\n */\n onClick: {\n type: Function,\n required: true,\n },\n },\n\n emits: [\n /**\n * Emitted when right arrow key is pressed\n */\n 'shift-focus-right',\n\n /**\n * Emitted when left arrow key is pressed\n */\n 'shift-focus-left',\n ],\n};\n</script>\n"],"names":["_sfc_main","DtButton","_createBlock","_component_dt_button","$props","_ctx","_openBlock","_resolveDynamicComponent","_renderSlot","_createTextVNode"],"mappings":";;;AA6BA,MAAKA,IAAU;AAAA,EACb,MAAM;AAAA,EAEN,YAAY;AAAA,IACV,UAAAC;AAAA;EAGF,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA;;;;IAMZ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA;;;;IAMZ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA;;EAId,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA;AAEJ;;;iBAxGEC,EAsBYC,GAAA;AAAA,IArBV,KAAI;AAAA,IAEH,QAAQC,EAAA;AAAA,IACR,cAAYA,EAAA;AAAA,IACZ,WAASA,EAAA;AAAA,IACT,UAAUA,EAAA;AAAA,IACX,YAAW;AAAA,IACX,MAAK;AAAA,IACL,MAAK;AAAA,IACJ,SAAOA,EAAA;AAAA,IACP,WAAO;AAAA,iCAAaC,EAAA,MAAK,mBAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,iCACNA,EAAA,MAAK,kBAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA;AAAA;;IAEd,QACT,MAGE;AAAA,OAHFC,EAAA,GAAAJ,EAGEK,EAFKH,EAAA,IAAI,GAAA,EACT,MAAK,OAAK;AAAA,MAEZI,EAAqBH,EAAA,QAAA,OAAA;AAAA;eACZ,MACX;AAAA,MADWI,EAAA,QACRL,EAAA,KAAK,GAAA,CAAA;AAAA;;;mBAnBiBA,EAAA,gBAAc,WAAA,MAAA,CAAA;AAAA;;;"}
1
+ {"version":3,"file":"EditorToolbarButton.js","sources":["../../../recipes/conversation_view/editor/EditorToolbarButton.vue"],"sourcesContent":["<template>\n <dt-button\n ref=\"buttonRef\"\n v-dt-tooltip=\"{ message: tooltipMessage, placement: 'top', externalAnchorElement: $refs.buttonRef?.$el }\"\n :active=\"isActive\"\n :aria-label=\"tooltipMessage\"\n :data-qa=\"dataQA\"\n :tabindex=\"tabindex\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n @click=\"onClick\"\n @keydown.right.stop=\"$emit('shift-focus-right')\"\n @keydown.left.stop=\"$emit('shift-focus-left')\"\n >\n <template #icon>\n <component\n :is=\"icon\"\n size=\"200\"\n />\n <slot name=\"extra\" />\n </template>\n {{ label }}\n </dt-button>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\n\nexport default {\n name: 'EditorToolbarButton',\n\n components: {\n DtButton,\n },\n\n props: {\n /**\n * Whether the button is active\n */\n isActive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Tooltip message\n */\n tooltipMessage: {\n type: String,\n required: true,\n },\n\n /**\n * Data QA attribute for testing\n */\n dataQA: {\n type: String,\n default: '',\n },\n\n /**\n * Tab index for keyboard navigation\n */\n tabindex: {\n type: Number,\n default: -1,\n },\n\n /**\n * Icon component\n */\n icon: {\n type: Object,\n required: true,\n },\n\n /**\n * Button label text\n */\n label: {\n type: String,\n default: '',\n },\n\n /**\n * Click handler function\n */\n onClick: {\n type: Function,\n required: true,\n },\n },\n\n emits: [\n /**\n * Emitted when right arrow key is pressed\n */\n 'shift-focus-right',\n\n /**\n * Emitted when left arrow key is pressed\n */\n 'shift-focus-left',\n ],\n};\n</script>\n"],"names":["_sfc_main","DtButton","_createBlock","_component_dt_button","$props","_ctx","_openBlock","_resolveDynamicComponent","_renderSlot","_createTextVNode","_directive_dt_tooltip","_a"],"mappings":";;;AA6BA,MAAKA,IAAU;AAAA,EACb,MAAM;AAAA,EAEN,YAAY;AAAA,IACV,UAAAC;AAAA;EAGF,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA;;;;IAMZ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA;;;;IAMZ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA;;;;IAMX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA;;EAId,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA;AAEJ;;;;iBAxGEC,EAsBYC,GAAA;AAAA,IArBV,KAAI;AAAA,IAEH,QAAQC,EAAA;AAAA,IACR,cAAYA,EAAA;AAAA,IACZ,WAASA,EAAA;AAAA,IACT,UAAUA,EAAA;AAAA,IACX,YAAW;AAAA,IACX,MAAK;AAAA,IACL,MAAK;AAAA,IACJ,SAAOA,EAAA;AAAA,IACP,WAAO;AAAA,iCAAaC,EAAA,MAAK,mBAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,iCACNA,EAAA,MAAK,kBAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA;AAAA;;IAEd,QACT,MAGE;AAAA,OAHFC,EAAA,GAAAJ,EAGEK,EAFKH,EAAA,IAAI,GAAA,EACT,MAAK,OAAK;AAAA,MAEZI,EAAqBH,EAAA,QAAA,OAAA;AAAA;eACZ,MACX;AAAA,MADWI,EAAA,QACRL,EAAA,KAAK,GAAA,CAAA;AAAA;;;IAnBiB,CAAAM,GAAA,EAAA,SAAAN,EAAA,gBAAc,WAAA,OAAA,wBAA2CO,IAAAN,EAAA,MAAM,cAAN,gBAAAM,EAAiB,IAAG,CAAA;AAAA;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue"),l=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),u=require("../dropdown/dropdown.cjs"),c=require("../button/button.cjs"),p={name:"EditorToolbardropdownButton",components:{DtButton:c.default,DtDropdown:u.default},props:{isActive:{type:Boolean,default:!1},tooltipMessage:{type:String,required:!0},dataQa:{type:String,default:""},dropdownDataQa:{type:String,default:""},tabindex:{type:Number,default:-1},icon:{type:Object,required:!0}},emits:["shift-focus-right","shift-focus-left"]};function f(i,o,e,b,w,_){const a=t.resolveComponent("dt-button"),r=t.resolveComponent("dt-dropdown"),d=t.resolveDirective("dt-tooltip");return t.openBlock(),t.createBlock(r,{"data-qa":e.dropdownDataQa||`${e.dataQa}-dropdown`,padding:"small","navigation-type":"arrow-keys",placement:"bottom-start"},{anchor:t.withCtx(({attrs:n})=>[t.withDirectives((t.openBlock(),t.createBlock(a,t.mergeProps({ref:"buttonRef"},n,{active:e.isActive,"aria-label":e.tooltipMessage,"data-qa":e.dataQa,tabindex:e.tabindex,importance:"clear",kind:"muted",size:"xs",onKeydown:[o[0]||(o[0]=t.withKeys(t.withModifiers(s=>i.$emit("shift-focus-right"),["stop"]),["right"])),o[1]||(o[1]=t.withKeys(t.withModifiers(s=>i.$emit("shift-focus-left"),["stop"]),["left"]))]}),{icon:t.withCtx(()=>[(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.icon),{size:"200"}))]),_:1},16,["active","aria-label","data-qa","tabindex"])),[[d,{message:e.tooltipMessage,placement:"top"}]])]),list:t.withCtx(({close:n})=>[t.renderSlot(i.$slots,"list",{close:n})]),_:3},8,["data-qa"])}const m=l._(p,[["render",f]]);exports.default=m;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue"),u=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),c=require("../dropdown/dropdown.cjs"),p=require("../button/button.cjs"),f={name:"EditorToolbardropdownButton",components:{DtButton:p.default,DtDropdown:c.default},props:{isActive:{type:Boolean,default:!1},tooltipMessage:{type:String,required:!0},dataQa:{type:String,default:""},dropdownDataQa:{type:String,default:""},tabindex:{type:Number,default:-1},icon:{type:Object,required:!0}},emits:["shift-focus-right","shift-focus-left"]};function m(o,n,e,w,_,v){const r=t.resolveComponent("dt-button"),d=t.resolveComponent("dt-dropdown"),s=t.resolveDirective("dt-tooltip");return t.openBlock(),t.createBlock(d,{"data-qa":e.dropdownDataQa||`${e.dataQa}-dropdown`,padding:"small","navigation-type":"arrow-keys",placement:"bottom-start"},{anchor:t.withCtx(({attrs:i})=>{var a;return[t.withDirectives((t.openBlock(),t.createBlock(r,t.mergeProps({ref:"buttonRef"},i,{active:e.isActive,"aria-label":e.tooltipMessage,"data-qa":e.dataQa,tabindex:e.tabindex,importance:"clear",kind:"muted",size:"xs",onKeydown:[n[0]||(n[0]=t.withKeys(t.withModifiers(l=>o.$emit("shift-focus-right"),["stop"]),["right"])),n[1]||(n[1]=t.withKeys(t.withModifiers(l=>o.$emit("shift-focus-left"),["stop"]),["left"]))]}),{icon:t.withCtx(()=>[(t.openBlock(),t.createBlock(t.resolveDynamicComponent(e.icon),{size:"200"}))]),_:1},16,["active","aria-label","data-qa","tabindex"])),[[s,{message:e.tooltipMessage,placement:"top",externalAnchorElement:(a=o.$refs.buttonRef)==null?void 0:a.$el}]])]}),list:t.withCtx(({close:i})=>[t.renderSlot(o.$slots,"list",{close:i})]),_:3},8,["data-qa"])}const b=u._(f,[["render",m]]);exports.default=b;
2
2
  //# sourceMappingURL=EditorToolbarDropdownButton.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorToolbarDropdownButton.cjs","sources":["../../../recipes/conversation_view/editor/EditorToolbarDropdownButton.vue"],"sourcesContent":["<template>\n <dt-dropdown\n :data-qa=\"dropdownDataQa || `${dataQa}-dropdown`\"\n padding=\"small\"\n navigation-type=\"arrow-keys\"\n placement=\"bottom-start\"\n >\n <template #anchor=\"{ attrs }\">\n <dt-button\n ref=\"buttonRef\"\n v-dt-tooltip=\"{ message: tooltipMessage, placement: 'top' }\"\n v-bind=\"attrs\"\n :active=\"isActive\"\n :aria-label=\"tooltipMessage\"\n :data-qa=\"dataQa\"\n :tabindex=\"tabindex\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n @keydown.right.stop=\"$emit('shift-focus-right')\"\n @keydown.left.stop=\"$emit('shift-focus-left')\"\n >\n <template #icon>\n <component\n :is=\"icon\"\n size=\"200\"\n />\n </template>\n </dt-button>\n </template>\n <template #list=\"{ close }\">\n <slot\n name=\"list\"\n :close=\"close\"\n />\n </template>\n </dt-dropdown>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\nimport { DtDropdown } from '@/components/dropdown';\n\nexport default {\n name: 'EditorToolbardropdownButton',\n\n components: {\n DtButton,\n DtDropdown,\n },\n\n props: {\n /**\n * Whether the button is active\n */\n isActive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Tooltip message\n */\n tooltipMessage: {\n type: String,\n required: true,\n },\n\n /**\n * Data QA attribute for testing\n */\n dataQa: {\n type: String,\n default: '',\n },\n\n /**\n * dropdown specific data QA attribute\n */\n dropdownDataQa: {\n type: String,\n default: '',\n },\n\n /**\n * Tab index for keyboard navigation\n */\n tabindex: {\n type: Number,\n default: -1,\n },\n\n /**\n * Icon component\n */\n icon: {\n type: Object,\n required: true,\n },\n },\n\n emits: [\n /**\n * Emitted when right arrow key is pressed\n */\n 'shift-focus-right',\n\n /**\n * Emitted when left arrow key is pressed\n */\n 'shift-focus-left',\n ],\n};\n</script>\n"],"names":["_sfc_main","DtButton","DtDropdown","_createBlock","_component_dt_dropdown","$props","_withCtx","attrs","_withDirectives","_openBlock","_component_dt_button","_mergeProps","_ctx","_resolveDynamicComponent","close","_renderSlot"],"mappings":"qQA2CKA,EAAU,CACb,KAAM,8BAEN,WAAY,CACV,SAAAC,EAAAA,mBACAC,EAAAA,SAGF,MAAO,CAIL,SAAU,CACR,KAAM,QACN,QAAS,IAMX,eAAgB,CACd,KAAM,OACN,SAAU,IAMZ,OAAQ,CACN,KAAM,OACN,QAAS,IAMX,eAAgB,CACd,KAAM,OACN,QAAS,IAMX,SAAU,CACR,KAAM,OACN,QAAS,IAMX,KAAM,CACJ,KAAM,OACN,SAAU,KAId,MAAO,CAIL,oBAKA,mBAEJ,8JA/GEC,EAAAA,YAmCcC,EAAA,CAlCX,UAASC,EAAA,gBAAc,GAAOA,EAAA,MAAM,YACrC,QAAQ,QACR,kBAAgB,aAChB,UAAU,iBAEC,OAAMC,EAAAA,QACf,CAoBY,CArBO,MAAAC,KAAK,CACxBC,kBAAAC,EAAAA,YAAAN,EAAAA,YAoBYO,EApBZC,EAAAA,WAoBY,CAnBV,IAAI,WAAW,EAEPJ,EAAK,CACZ,OAAQF,EAAA,SACR,aAAYA,EAAA,eACZ,UAASA,EAAA,OACT,SAAUA,EAAA,SACX,WAAW,QACX,KAAK,QACL,KAAK,KACJ,UAAO,2CAAaO,EAAA,MAAK,mBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,6CACNA,EAAA,MAAK,kBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAEd,eACT,IAGE,EAHFH,YAAA,EAAAN,EAAAA,YAGEU,0BAFKR,EAAA,IAAI,EAAA,CACT,KAAK,MAAK,yEAfWA,EAAA,eAAc,UAAA,KAAA,CAAA,MAoBhC,KAAIC,EAAAA,QACb,CAGE,CAJe,MAAAQ,KAAK,CACtBC,EAAAA,WAGEH,EAAA,OAAA,OAAA,CADC,MAAOE,CAAK,CAAA"}
1
+ {"version":3,"file":"EditorToolbarDropdownButton.cjs","sources":["../../../recipes/conversation_view/editor/EditorToolbarDropdownButton.vue"],"sourcesContent":["<template>\n <dt-dropdown\n :data-qa=\"dropdownDataQa || `${dataQa}-dropdown`\"\n padding=\"small\"\n navigation-type=\"arrow-keys\"\n placement=\"bottom-start\"\n >\n <template #anchor=\"{ attrs }\">\n <dt-button\n ref=\"buttonRef\"\n v-dt-tooltip=\"{ message: tooltipMessage, placement: 'top', externalAnchorElement: $refs.buttonRef?.$el }\"\n v-bind=\"attrs\"\n :active=\"isActive\"\n :aria-label=\"tooltipMessage\"\n :data-qa=\"dataQa\"\n :tabindex=\"tabindex\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n @keydown.right.stop=\"$emit('shift-focus-right')\"\n @keydown.left.stop=\"$emit('shift-focus-left')\"\n >\n <template #icon>\n <component\n :is=\"icon\"\n size=\"200\"\n />\n </template>\n </dt-button>\n </template>\n <template #list=\"{ close }\">\n <slot\n name=\"list\"\n :close=\"close\"\n />\n </template>\n </dt-dropdown>\n</template>\n\n<script>\nimport { DtButton } from '@/components/button';\nimport { DtDropdown } from '@/components/dropdown';\n\nexport default {\n name: 'EditorToolbardropdownButton',\n\n components: {\n DtButton,\n DtDropdown,\n },\n\n props: {\n /**\n * Whether the button is active\n */\n isActive: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Tooltip message\n */\n tooltipMessage: {\n type: String,\n required: true,\n },\n\n /**\n * Data QA attribute for testing\n */\n dataQa: {\n type: String,\n default: '',\n },\n\n /**\n * dropdown specific data QA attribute\n */\n dropdownDataQa: {\n type: String,\n default: '',\n },\n\n /**\n * Tab index for keyboard navigation\n */\n tabindex: {\n type: Number,\n default: -1,\n },\n\n /**\n * Icon component\n */\n icon: {\n type: Object,\n required: true,\n },\n },\n\n emits: [\n /**\n * Emitted when right arrow key is pressed\n */\n 'shift-focus-right',\n\n /**\n * Emitted when left arrow key is pressed\n */\n 'shift-focus-left',\n ],\n};\n</script>\n"],"names":["_sfc_main","DtButton","DtDropdown","_createBlock","_component_dt_dropdown","$props","_withCtx","attrs","_withDirectives","_openBlock","_component_dt_button","_mergeProps","_ctx","_resolveDynamicComponent","_directive_dt_tooltip","_a","close","_renderSlot"],"mappings":"qQA2CKA,EAAU,CACb,KAAM,8BAEN,WAAY,CACV,SAAAC,EAAAA,mBACAC,EAAAA,SAGF,MAAO,CAIL,SAAU,CACR,KAAM,QACN,QAAS,IAMX,eAAgB,CACd,KAAM,OACN,SAAU,IAMZ,OAAQ,CACN,KAAM,OACN,QAAS,IAMX,eAAgB,CACd,KAAM,OACN,QAAS,IAMX,SAAU,CACR,KAAM,OACN,QAAS,IAMX,KAAM,CACJ,KAAM,OACN,SAAU,KAId,MAAO,CAIL,oBAKA,mBAEJ,8JA/GEC,EAAAA,YAmCcC,EAAA,CAlCX,UAASC,EAAA,gBAAc,GAAOA,EAAA,MAAM,YACrC,QAAQ,QACR,kBAAgB,aAChB,UAAU,iBAEC,OAAMC,EAAAA,QACf,CAoBY,CArBO,MAAAC,KAAK,OAAA,OACxBC,kBAAAC,EAAAA,YAAAN,EAAAA,YAoBYO,EApBZC,EAAAA,WAoBY,CAnBV,IAAI,WAAW,EAEPJ,EAAK,CACZ,OAAQF,EAAA,SACR,aAAYA,EAAA,eACZ,UAASA,EAAA,OACT,SAAUA,EAAA,SACX,WAAW,QACX,KAAK,QACL,KAAK,KACJ,UAAO,2CAAaO,EAAA,MAAK,mBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,6CACNA,EAAA,MAAK,kBAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAEd,eACT,IAGE,EAHFH,YAAA,EAAAN,EAAAA,YAGEU,0BAFKR,EAAA,IAAI,EAAA,CACT,KAAK,MAAK,6DAfW,CAAAS,EAAA,CAAA,QAAAT,EAAA,eAAc,UAAA,MAAA,uBAA2CU,EAAAH,EAAA,MAAM,YAAN,YAAAG,EAAiB,GAAG,CAAA,OAoB/F,KAAIT,EAAAA,QACb,CAGE,CAJe,MAAAU,KAAK,CACtBC,EAAAA,WAGEL,EAAA,OAAA,OAAA,CADC,MAAOI,CAAK,CAAA"}