@dialpad/dialtone-vue
Version:
Vue component library for Dialpad's design system Dialtone
3 lines (2 loc) • 17.4 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("./editor-constants.cjs"),o=require("@dialpad/dialtone-icons/vue2"),d=require("../../localization/index.cjs"),h=require("../../_plugin-vue2_normalizer-e_CkxkSV.cjs"),p=require("../tooltip/tooltip.cjs"),f=require("../input/input.cjs"),k=require("../stack/stack.cjs"),g=require("../popover/popover.cjs"),B=require("../button/button.cjs"),I=require("../rich-text-editor/rich-text-editor.cjs"),a=require("../rich-text-editor/rich-text-editor-constants.cjs"),_={name:"DtRecipeEditor",components:{DtRichTextEditor:I.default,DtButton:B.default,DtPopover:g.default,DtStack:k.default,DtInput:f.default,DtTooltip:p.default,DtIconQuickReply:o.DtIconQuickReply,DtIconBold:o.DtIconBold,DtIconItalic:o.DtIconItalic,DtIconUnderline:o.DtIconUnderline,DtIconStrikethrough:o.DtIconStrikethrough,DtIconListBullet:o.DtIconListBullet,DtIconListOrdered:o.DtIconListOrdered,DtIconAlignLeft:o.DtIconAlignLeft,DtIconAlignCenter:o.DtIconAlignCenter,DtIconAlignRight:o.DtIconAlignRight,DtIconAlignJustify:o.DtIconAlignJustify,DtIconQuote:o.DtIconQuote,DtIconCodeBlock:o.DtIconCodeBlock,DtIconLink2:o.DtIconLink2,DtIconImage:o.DtIconImage},inheritAttrs:!1,props:{value:{type:[Object,String],default:""},editable:{type:Boolean,default:!0},inputAriaLabel:{type:String,required:!0,default:""},inputClass:{type:String,default:""},autoFocus:{type:[Boolean,String,Number],default:!1,validator(e){return typeof e=="string"?a.RICH_TEXT_EDITOR_AUTOFOCUS_TYPES.includes(e):!0}},placeholder:{type:String,default:""},maxHeight:{type:String,default:"unset"},setLinkPlaceholder:{type:String,default:""},showBoldButton:{type:Boolean,default:!0},showItalicsButton:{type:Boolean,default:!0},showUnderlineButton:{type:Boolean,default:!0},showStrikeButton:{type:Boolean,default:!0},showListItemsButton:{type:Boolean,default:!0},showOrderedListButton:{type:Boolean,default:!0},showAlignLeftButton:{type:Boolean,default:!0},showAlignCenterButton:{type:Boolean,default:!0},showAlignRightButton:{type:Boolean,default:!0},showAlignJustifyButton:{type:Boolean,default:!0},showQuoteButton:{type:Boolean,default:!0},showCodeBlockButton:{type:Boolean,default:!0},showQuickRepliesButton:{type:Boolean,default:!0},showInlineImageButton:{type:Boolean,default:!1},showAddLink:{type:Object,default:()=>({showAddLinkButton:!0})},useDivTags:{type:Boolean,default:!1}},emits:["focus","blur","input","quick-replies-click","inline-image-click","text-input"],data(){return{internalInputValue:this.value,hasFocus:!1,linkOptions:{class:"d-recipe-editor__link"},showLinkInput:!1,linkInput:"",currentButtonRefIndex:0,i18n:new d.DialtoneLocalization}},computed:{inputLength(){return this.internalInputValue.length},htmlOutputFormat(){return a.RICH_TEXT_EDITOR_OUTPUT_FORMATS[2]},showingTextFormatButtons(){return this.showBoldButton||this.showItalicsButton||this.showStrikeButton||this.showUnderlineButton},showingAlignmentButtons(){return this.showAlignLeftButton||this.showAlignCenterButton||this.showAlignRightButton||this.showAlignJustifyButton},showingListButtons(){return this.showListItemsButton||this.showOrderedListButton},orderedRefs(){const e=this.buttonGroups.reduce((function(t,i){return i.buttonGroup.forEach(n=>{t.push(this.getButtonRef(i.key,n.selector))},this),t}).bind(this),[]);return e.push(this.getButtonRef("custom","link")),e},buttonGroups(){const e=this.individualButtons.map(t=>({key:t.selector,buttonGroup:[t]}));return[{key:"new",buttonGroup:this.newButtons},{key:"format",buttonGroup:this.textFormatButtons},{key:"alignment",buttonGroup:this.alignmentButtons},{key:"list",buttonGroup:this.listButtons},...e].filter(t=>t.buttonGroup.length>0)},newButtons(){return[{showBtn:this.showQuickRepliesButton,label:this.i18n.$t("DIALTONE_EDITOR_QUICK_REPLY_BUTTON_LABEL"),selector:"quickReplies",icon:o.DtIconQuickReply,dataQA:"dt-recipe-editor-quick-replies-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_QUICK_REPLY_BUTTON_LABEL"),onClick:this.onQuickRepliesClick}].filter(e=>e.showBtn)},textFormatButtons(){return[{showBtn:this.showBoldButton,selector:"bold",icon:o.DtIconBold,dataQA:"dt-recipe-editor-bold-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_BOLD_BUTTON_LABEL"),onClick:this.onBoldTextToggle},{showBtn:this.showItalicsButton,selector:"italic",icon:o.DtIconItalic,dataQA:"dt-recipe-editor-italics-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_ITALICS_BUTTON_LABEL"),onClick:this.onItalicTextToggle},{showBtn:this.showUnderlineButton,selector:"underline",icon:o.DtIconUnderline,dataQA:"dt-recipe-editor-underline-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_UNDERLINE_BUTTON_LABEL"),onClick:this.onUnderlineTextToggle},{showBtn:this.showStrikeButton,selector:"strike",icon:o.DtIconStrikethrough,dataQA:"dt-recipe-editor-strike-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_STRIKE_BUTTON_LABEL"),onClick:this.onStrikethroughTextToggle}].filter(e=>e.showBtn)},alignmentButtons(){return[{showBtn:this.showAlignLeftButton,selector:{textAlign:"left"},icon:o.DtIconAlignLeft,dataQA:"dt-recipe-editor-align-left-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_ALIGN_LEFT_BUTTON_LABEL"),onClick:()=>this.onTextAlign("left")},{showBtn:this.showAlignCenterButton,selector:{textAlign:"center"},icon:o.DtIconAlignCenter,dataQA:"dt-recipe-editor-align-center-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_ALIGN_CENTER_BUTTON_LABEL"),onClick:()=>this.onTextAlign("center")},{showBtn:this.showAlignRightButton,selector:{textAlign:"right"},icon:o.DtIconAlignRight,dataQA:"dt-recipe-editor-align-right-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_ALIGN_RIGHT_BUTTON_LABEL"),onClick:()=>this.onTextAlign("right")},{showBtn:this.showAlignJustifyButton,selector:{textAlign:"justify"},icon:o.DtIconAlignJustify,dataQA:"dt-recipe-editor-align-justify-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_ALIGN_JUSTIFY_BUTTON_LABEL"),onClick:()=>this.onTextAlign("justify")}].filter(e=>e.showBtn)},listButtons(){return[{showBtn:this.showListItemsButton,selector:"bulletList",icon:o.DtIconListBullet,dataQA:"dt-recipe-editor-list-items-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_BULLET_LIST_BUTTON_LABEL"),onClick:this.onBulletListToggle},{showBtn:this.showOrderedListButton,selector:"orderedList",icon:o.DtIconListOrdered,dataQA:"dt-recipe-editor-ordered-list-items-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_ORDERED_LIST_BUTTON_LABEL"),onClick:this.onOrderedListToggle}].filter(e=>e.showBtn)},individualButtons(){return[{showBtn:this.showQuoteButton,selector:"blockquote",icon:o.DtIconQuote,dataQA:"dt-recipe-editor-blockquote-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_QUOTE_BUTTON_LABEL"),onClick:this.onBlockquoteToggle},{showBtn:this.showCodeBlockButton,selector:"codeBlock",icon:o.DtIconCodeBlock,dataQA:"dt-recipe-editor-code-block-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_CODE_BUTTON_LABEL"),onClick:this.onCodeBlockToggle},{showBtn:this.showInlineImageButton,selector:"image",icon:o.DtIconImage,dataQA:"dt-recipe-editor-inline-image-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_IMAGE_BUTTON_LABEL"),onClick:this.onInsertInlineImageClick}].filter(e=>e.showBtn)},linkButton(){return{showBtn:this.showAddLink.showAddLinkButton,selector:"link",icon:o.DtIconLink2,dataQA:"dt-recipe-editor-add-link-btn",tooltipMessage:this.i18n.$t("DIALTONE_EDITOR_LINK_BUTTON_LABEL"),onClick:this.openLinkInput}},confirmSetLinkButtonLabels(){return this.i18n.$ta("DIALTONE_EDITOR_CONFIRM_SET_LINK_BUTTON")},cancelSetLinkButtonLabels(){return this.i18n.$ta("DIALTONE_EDITOR_CANCEL_SET_LINK_BUTTON")},removeLinkButtonLabels(){return this.i18n.$ta("DIALTONE_EDITOR_REMOVE_LINK_BUTTON")},showAddLinkButtonLabels(){return this.i18n.$ta("DIALTONE_EDITOR_ADD_LINK_BUTTON")}},watch:{value(e){this.internalInputValue=e}},methods:{onInputFocus(e){e==null||e.stopPropagation()},removeLink(){var e,t,i,n,r;(r=(n=(i=(t=(e=this.$refs.richTextEditor)==null?void 0:e.editor)==null?void 0:t.chain())==null?void 0:i.focus())==null?void 0:n.unsetLink())==null||r.run(),this.closeLinkInput()},setLink(e){var r,s,u;const t=(r=this.$refs.richTextEditor)==null?void 0:r.editor;if(e==null||e.preventDefault(),e==null||e.stopPropagation(),!this.linkInput){this.removeLink();return}c.EDITOR_SUPPORTED_LINK_PROTOCOLS.find(l=>l.test(this.linkInput))||(this.linkInput=`${c.EDITOR_DEFAULT_LINK_PREFIX}${this.linkInput}`);const n=(u=(s=t==null?void 0:t.view)==null?void 0:s.state)==null?void 0:u.selection;n.anchor===n.head?t.chain().focus().insertContentAt(n.anchor,`<a class="${this.linkOptions.class}" href=${this.linkInput}>${this.linkInput}</a>`).run():t.chain().focus().extendMarkRange("link").setLink({href:this.linkInput,class:this.linkOptions.class}).run(),this.closeLinkInput()},openLinkInput(){this.showLinkInput=!0},updateInput(e){var t,i,n;if(!e)return this.closeLinkInput();this.linkInput=(n=(i=(t=this.$refs.richTextEditor)==null?void 0:t.editor)==null?void 0:i.getAttributes("link"))==null?void 0:n.href},closeLinkInput(){var e;this.showLinkInput=!1,this.linkInput="",(e=this.$refs.richTextEditor.editor)==null||e.chain().focus()},onBoldTextToggle(){var e,t;(t=(e=this.$refs.richTextEditor)==null?void 0:e.editor)==null||t.chain().focus().toggleBold().run()},onItalicTextToggle(){var e;(e=this.$refs.richTextEditor)==null||e.editor.chain().focus().toggleItalic().run()},onUnderlineTextToggle(){var e;(e=this.$refs.richTextEditor)==null||e.editor.chain().focus().toggleUnderline().run()},onStrikethroughTextToggle(){var e;(e=this.$refs.richTextEditor)==null||e.editor.chain().focus().toggleStrike().run()},onTextAlign(e){var t,i,n,r;if((i=(t=this.$refs.richTextEditor)==null?void 0:t.editor)!=null&&i.isActive({textAlign:e}))return(n=this.$refs.richTextEditor)==null?void 0:n.editor.chain().focus().unsetTextAlign().run();(r=this.$refs.richTextEditor)==null||r.editor.chain().focus().setTextAlign(e).run()},onBulletListToggle(){var e;(e=this.$refs.richTextEditor)==null||e.editor.chain().focus().toggleBulletList().run()},onOrderedListToggle(){var e;(e=this.$refs.richTextEditor)==null||e.editor.chain().focus().toggleOrderedList().run()},onCodeBlockToggle(){var e;(e=this.$refs.richTextEditor)==null||e.editor.chain().focus().toggleCodeBlock().run()},onQuickRepliesClick(){this.$emit("quick-replies-click")},onInsertInlineImageClick(){this.$emit("inline-image-click")},insertInlineImage(e){var t;(t=this.$refs.richTextEditor)==null||t.editor.chain().focus().setImage({src:e}).run()},onBlockquoteToggle(){var e;(e=this.$refs.richTextEditor)==null||e.editor.chain().focus().toggleBlockquote().run()},insertInMessageBody(e){var t;(t=this.$refs.richTextEditor)==null||t.editor.chain().focus().insertContent(e).run()},setCursorPosition(e=null){var t;(t=this.$refs.richTextEditor)==null||t.editor.chain().focus(e).run()},onTextInput(e){this.$emit("text-input",e)},onFocus(e){this.hasFocus=!0,this.$emit("focus",e)},onBlur(e){this.hasFocus=!1,this.$emit("blur",e)},onInput(e){this.$emit("input",e)},getButtonKey(e,t){return`${e}-${JSON.stringify(t)}`},getButtonRef(e,t){return`${this.getButtonKey(e,t)}-ref`},canFocus(e){return e===this.orderedRefs[this.currentButtonRefIndex]},shiftActionBarFocusRight(){this.shiftButtonRefIndex(1)},shiftActionBarFocusLeft(){this.shiftButtonRefIndex(-1)},shiftButtonRefIndex(e){const t=this.$refs[this.orderedRefs[this.currentButtonRefIndex]],i=Array.isArray(t)?t[0]:t,n=(this.currentButtonRefIndex+e)%this.orderedRefs.length;this.currentButtonRefIndex=n>=0?n:this.orderedRefs.length+n;const r=this.$refs[this.orderedRefs[this.currentButtonRefIndex]],s=Array.isArray(r)?r[0]:r;i.$el.blur(),s.$el.focus()}}};var T=function(){var t=this,i=t._self._c;return i("div",{staticClass:"d-recipe-editor",attrs:{"data-qa":"dt-recipe-editor",role:"presentation"},on:{click:function(n){return t.$refs.richTextEditor.focusEditor()}}},[i("dt-stack",{staticClass:"d-recipe-editor__top-bar",attrs:{direction:"row",gap:"450"}},[t._l(t.buttonGroups,function(n){return i("dt-stack",{key:n.key,attrs:{direction:"row",gap:"300"}},[t._l(n.buttonGroup,function(r){return i("dt-tooltip",{key:t.getButtonKey(n.key,r.selector),attrs:{message:r.tooltipMessage,placement:"top"},scopedSlots:t._u([{key:"anchor",fn:function(){var s,u;return[i("dt-button",{ref:t.getButtonRef(n.key,r.selector),refInFor:!0,attrs:{active:(u=(s=t.$refs.richTextEditor)==null?void 0:s.editor)==null?void 0:u.isActive(r.selector),"aria-label":r.tooltipMessage,"data-qa":r.dataQA,tabindex:t.canFocus(t.getButtonRef(n.key,r.selector))?0:-1,importance:"clear",kind:"muted",size:"xs"},on:{click:function(l){return r.onClick()},keydown:[function(l){return!l.type.indexOf("key")&&t._k(l.keyCode,"right",39,l.key,["Right","ArrowRight"])||"button"in l&&l.button!==2?null:(l.stopPropagation(),t.shiftActionBarFocusRight.apply(null,arguments))},function(l){return!l.type.indexOf("key")&&t._k(l.keyCode,"left",37,l.key,["Left","ArrowLeft"])||"button"in l&&l.button!==0?null:(l.stopPropagation(),t.shiftActionBarFocusLeft.apply(null,arguments))}]},scopedSlots:t._u([{key:"icon",fn:function(){return[i(r.icon,{tag:"component",attrs:{size:"200"}})]},proxy:!0}],null,!0)},[r.label?i("span",[t._v(t._s(r.label))]):t._e()])]},proxy:!0}],null,!0)})}),i("div",{staticClass:"d-recipe-editor__button-group-divider"})],2)}),t.linkButton.showBtn?i("dt-stack",{attrs:{direction:"row",gap:"300"}},[i("dt-popover",{attrs:{open:t.showLinkInput,"show-close-button":!1,"data-qa":"dt-recipe-editor-link-input-popover",padding:"none",placement:"bottom-start"},on:{"update:open":function(n){t.showLinkInput=n},click:t.onInputFocus,opened:t.updateInput},nativeOn:{click:function(n){return n.stopPropagation(),t.onInputFocus.apply(null,arguments)}},scopedSlots:t._u([{key:"anchor",fn:function(){return[i("dt-tooltip",{key:t.linkButton.key,attrs:{message:t.linkButton.tooltipMessage,placement:"top"},scopedSlots:t._u([{key:"anchor",fn:function(){var n,r;return[i("dt-button",{ref:t.getButtonRef("custom","link"),attrs:{active:(r=(n=t.$refs.richTextEditor)==null?void 0:n.editor)==null?void 0:r.isActive(t.linkButton.selector),"aria-label":t.linkButton.tooltipMessage,"data-qa":t.linkButton.dataQA,tabindex:t.canFocus(t.getButtonRef("custom","link"))?0:-1,importance:"clear",kind:"muted",size:"xs"},on:{click:function(s){return t.linkButton.onClick()},keydown:[function(s){return!s.type.indexOf("key")&&t._k(s.keyCode,"right",39,s.key,["Right","ArrowRight"])||"button"in s&&s.button!==2?null:(s.stopPropagation(),t.shiftActionBarFocusRight.apply(null,arguments))},function(s){return!s.type.indexOf("key")&&t._k(s.keyCode,"left",37,s.key,["Left","ArrowLeft"])||"button"in s&&s.button!==0?null:(s.stopPropagation(),t.shiftActionBarFocusLeft.apply(null,arguments))}]},scopedSlots:t._u([{key:"icon",fn:function(){return[i(t.linkButton.icon,{tag:"component",attrs:{size:"200"}})]},proxy:!0}],null,!1,3601441856)})]},proxy:!0}],null,!1,1067010212)})]},proxy:!0},{key:"content",fn:function(){return[i("div",{staticClass:"d-recipe-editor__popover-content"},[i("span",[t._v(" "+t._s(t.showAddLinkButtonLabels.title)+" ")]),i("dt-input",{attrs:{"input-aria-label":t.showAddLinkButtonLabels["aria-label"],placeholder:t.setLinkPlaceholder,"data-qa":"dt-recipe-editor-link-input","input-wrapper-class":"d-recipe-editor-link__input-wrapper"},on:{click:t.onInputFocus,focus:t.onInputFocus,keydown:function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"enter",13,n.key,"Enter")?null:t.setLink.apply(null,arguments)}},nativeOn:{click:function(n){return n.stopPropagation(),t.onInputFocus.apply(null,arguments)}},model:{value:t.linkInput,callback:function(n){t.linkInput=n},expression:"linkInput"}})],1)]},proxy:!0},{key:"footerContent",fn:function(){return[i("dt-stack",{staticClass:"d-recipe-editor__popover-footer",attrs:{direction:"row",gap:"300"}},[i("dt-button",t._b({attrs:{"data-qa":"dt-recipe-editor-remove-link-btn",importance:"clear",kind:"muted",size:"sm"},on:{click:t.removeLink}},"dt-button",t.removeLinkButtonLabels,!1),[t._v(" "+t._s(t.removeLinkButtonLabels.title)+" ")]),i("dt-button",t._b({attrs:{"data-qa":"dt-recipe-editor-set-link-cancel-btn",importance:"clear",kind:"muted",size:"sm"},on:{click:t.closeLinkInput}},"dt-button",t.cancelSetLinkButtonLabels,!1),[t._v(" "+t._s(t.cancelSetLinkButtonLabels.title)+" ")]),i("dt-button",t._b({attrs:{"data-qa":"dt-recipe-editor-set-link-confirm-btn",size:"sm"},on:{click:t.setLink}},"dt-button",t.confirmSetLinkButtonLabels,!1),[t._v(" "+t._s(t.confirmSetLinkButtonLabels.title)+" ")])],1)]},proxy:!0}],null,!1,2563529431)})],1):t._e()],2),i("div",{staticClass:"d-recipe-editor__content",style:{"max-height":t.maxHeight}},[i("dt-rich-text-editor",t._b({ref:"richTextEditor",attrs:{"allow-font-color":!0,"allow-font-family":!0,"allow-inline-images":!0,"allow-line-breaks":!0,"hide-link-bubble-menu":!0,"auto-focus":t.autoFocus,editable:t.editable,"input-aria-label":t.inputAriaLabel,"input-class":`d-recipe-editor__content-input ${t.inputClass}`,link:!0,"output-format":t.htmlOutputFormat,placeholder:t.placeholder,"use-div-tags":t.useDivTags,"data-qa":"dt-rich-text-editor"},on:{"text-input":t.onTextInput,blur:t.onBlur,focus:t.onFocus,input:function(n){return t.onInput(n)}},model:{value:t.internalInputValue,callback:function(n){t.internalInputValue=n},expression:"internalInputValue"}},"dt-rich-text-editor",t.$attrs,!1))],1)],1)},L=[],A=h.n(_,T,L);const E=A.exports;exports.default=E;
//# sourceMappingURL=editor.cjs.map