@dialpad/dialtone-vue 3.190.0 → 3.190.2

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 (53) hide show
  1. package/dist/component-documentation.json +1 -1
  2. package/dist/lib/dropdown/dropdown.cjs +1 -1
  3. package/dist/lib/dropdown/dropdown.cjs.map +1 -1
  4. package/dist/lib/dropdown/dropdown.js +4 -6
  5. package/dist/lib/dropdown/dropdown.js.map +1 -1
  6. package/dist/lib/input/input.cjs +1 -1
  7. package/dist/lib/input/input.cjs.map +1 -1
  8. package/dist/lib/input/input.js +21 -13
  9. package/dist/lib/input/input.js.map +1 -1
  10. package/dist/lib/loader/loader.cjs +1 -1
  11. package/dist/lib/loader/loader.cjs.map +1 -1
  12. package/dist/lib/loader/loader.js +1 -1
  13. package/dist/lib/loader/loader.js.map +1 -1
  14. package/dist/localization/de-DE.cjs +16 -1
  15. package/dist/localization/de-DE.cjs.map +1 -1
  16. package/dist/localization/de-DE.js +16 -1
  17. package/dist/localization/de-DE.js.map +1 -1
  18. package/dist/localization/es-LA.cjs +13 -5
  19. package/dist/localization/es-LA.cjs.map +1 -1
  20. package/dist/localization/es-LA.js +13 -5
  21. package/dist/localization/es-LA.js.map +1 -1
  22. package/dist/localization/fr-FR.cjs +16 -1
  23. package/dist/localization/fr-FR.cjs.map +1 -1
  24. package/dist/localization/fr-FR.js +16 -1
  25. package/dist/localization/fr-FR.js.map +1 -1
  26. package/dist/localization/it-IT.cjs +16 -1
  27. package/dist/localization/it-IT.cjs.map +1 -1
  28. package/dist/localization/it-IT.js +16 -1
  29. package/dist/localization/it-IT.js.map +1 -1
  30. package/dist/localization/ja-JP.cjs +9 -1
  31. package/dist/localization/ja-JP.cjs.map +1 -1
  32. package/dist/localization/ja-JP.js +9 -1
  33. package/dist/localization/ja-JP.js.map +1 -1
  34. package/dist/localization/nl-NL.cjs +16 -1
  35. package/dist/localization/nl-NL.cjs.map +1 -1
  36. package/dist/localization/nl-NL.js +16 -1
  37. package/dist/localization/nl-NL.js.map +1 -1
  38. package/dist/localization/pt-BR.cjs +16 -1
  39. package/dist/localization/pt-BR.cjs.map +1 -1
  40. package/dist/localization/pt-BR.js +16 -1
  41. package/dist/localization/pt-BR.js.map +1 -1
  42. package/dist/localization/ru-RU.cjs +26 -1
  43. package/dist/localization/ru-RU.cjs.map +1 -1
  44. package/dist/localization/ru-RU.js +26 -1
  45. package/dist/localization/ru-RU.js.map +1 -1
  46. package/dist/localization/zh-CN.cjs +11 -1
  47. package/dist/localization/zh-CN.cjs.map +1 -1
  48. package/dist/localization/zh-CN.js +11 -1
  49. package/dist/localization/zh-CN.js.map +1 -1
  50. package/dist/types/components/dropdown/dropdown.vue.d.ts +1 -0
  51. package/dist/types/components/input/input.vue.d.ts +9 -0
  52. package/dist/types/components/input/input.vue.d.ts.map +1 -1
  53. package/package.json +3 -3
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const p=require("../../common/mixins/keyboard-list-navigation.cjs"),l=require("./dropdown-constants.cjs"),g=require("../../common/utils/index.cjs"),o=require("../../common/constants/index.cjs"),t=require("vue"),c=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),d=require("../list-item/list-item-constants.cjs"),E=require("../popover/popover.cjs"),f=require("../popover/popover-constants.cjs"),m={compatConfig:{MODE:3},name:"DtDropdown",components:{DtPopover:E.default},mixins:[p.default({indexKey:"highlightIndex",idKey:"highlightId",listElementKey:"getListElement",listItemRole:"menuitem",afterHighlightMethod:"afterHighlight",beginningOfListMethod:"beginningOfListMethod",endOfListMethod:"endOfListMethod",activeItemKey:"activeItemEl",focusOnKeyboardNavigation:!0})],inheritAttrs:!1,props:{open:{type:Boolean,default:null},openOnContext:{type:Boolean,default:!1},padding:{type:String,default:"small",validator:e=>Object.keys(l.DROPDOWN_PADDING_CLASSES).some(i=>i===e)},modal:{type:Boolean,default:!0},contentWidth:{type:String,default:null},maxHeight:{type:String,default:""},maxWidth:{type:String,default:""},listId:{type:String,default(){return g.getUniqueString()}},navigationType:{type:String,default:d.LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS,validator:e=>Object.values(d.LIST_ITEM_NAVIGATION_TYPES).includes(e)},fallbackPlacements:{type:Array,default:()=>["auto"]},placement:{type:String,default:"bottom"},onBeginningOfList:{type:Function,default:null},onEndOfList:{type:Function,default:null},listClass:{type:[String,Array,Object],default:""},appendTo:{type:[HTMLElement,String],default:"body",validator:e=>f.POPOVER_APPEND_TO_VALUES.includes(e)||e instanceof HTMLElement},tether:{type:Boolean,default:!0},transition:{type:String,default:"fade"}},emits:["keydown","highlight","update:open","opened","update:open"],data(){return{LIST_ITEM_NAVIGATION_TYPES:d.LIST_ITEM_NAVIGATION_TYPES,DROPDOWN_PADDING_CLASSES:l.DROPDOWN_PADDING_CLASSES,EVENT_KEYNAMES:o.EVENT_KEYNAMES,openedWithKeyboard:!1,isOpen:null}},computed:{dropdownListeners(){return{opened:e=>{this.updateInitialHighlightIndex(e)},keydown:e=>{switch(e.code){case o.EVENT_KEYNAMES.up:case o.EVENT_KEYNAMES.arrowup:this.onUpKeyPress(e),e.stopPropagation(),e.preventDefault();break;case o.EVENT_KEYNAMES.down:case o.EVENT_KEYNAMES.arrowdown:this.onDownKeyPress(e),e.stopPropagation(),e.preventDefault();break;case o.EVENT_KEYNAMES.space:case o.EVENT_KEYNAMES.spacebar:this.onSpaceKey();break;case o.EVENT_KEYNAMES.enter:this.onEnterKey();break;case o.EVENT_KEYNAMES.home:this.onHomeKeyPress(e),e.stopPropagation(),e.preventDefault();break;case o.EVENT_KEYNAMES.end:this.onEndKeyPress(e),e.stopPropagation(),e.preventDefault();break;default:this.onKeyPress(e);break}this.$emit("keydown",e)}}},beginningOfListMethod(){return this.onBeginningOfList||this.jumpToEnd},endOfListMethod(){return this.onEndOfList||this.jumpToBeginning},activeItemEl(){return this.getListElement().querySelector("#"+this.highlightId)},isArrowKeyNav(){return this.navigationType===this.LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS},listClasses(){return["d-dropdown-list",l.DROPDOWN_PADDING_CLASSES[this.padding],this.listClass,{"d-context-menu-list":this.openOnContext}]},shouldOpenWithArrowKeys(){return!this.openOnContext}},methods:{onMouseHighlight(e){const i=e.target.closest("li");i&&i.role&&this.highlightId!==i.id&&(this.setHighlightId(i.id),i.focus())},getListElement(){return this.$refs.listWrapper},clearHighlightIndex(){this.setHighlightIndex(-1)},afterHighlight(){this.highlightIndex!==this._itemsLength()-1&&this.$emit("highlight",this.highlightIndex)},updateInitialHighlightIndex(e){this.isOpen=e,e?(this.openedWithKeyboard&&this.isArrowKeyNav&&this.setHighlightIndex(0),this.$emit("opened",!0)):(this.clearHighlightIndex(),this.openedWithKeyboard=!1,this.$emit("opened",!1))},onSpaceKey(){this.open||(this.openedWithKeyboard=!0)},onEnterKey(){this.open||(this.openedWithKeyboard=!0)},onUpKeyPress(){if(!this.isOpen){this.openedWithKeyboard=!0;return}if(this.isArrowKeyNav)return this.onUpKey()},onDownKeyPress(){if(!this.isOpen){this.openedWithKeyboard=!0;return}if(this.isArrowKeyNav)return this.onDownKey()},onHomeKeyPress(){if(!(!this.isOpen||!this.isArrowKeyNav))return this.onHomeKey()},onEndKeyPress(){if(!(!this.isOpen||!this.isArrowKeyNav))return this.onEndKey()},onKeyPress(e){if(!(!this.isOpen||!this.isArrowKeyNav||!this.isValidLetter(e.key)))return e.stopPropagation(),e.preventDefault(),this.onNavigationKey(e.key)}}},y=["id"];function _(e,i,n,K,h,s){const u=t.resolveComponent("dt-popover");return t.openBlock(),t.createBlock(u,t.mergeProps({ref:"popover","content-width":n.contentWidth,open:n.open,placement:n.placement,"initial-focus-element":h.openedWithKeyboard?"first":"dialog","fallback-placements":n.fallbackPlacements,padding:"none",role:"menu","append-to":n.appendTo,modal:n.modal,"max-height":n.maxHeight,"max-width":n.maxWidth,"open-with-arrow-keys":s.shouldOpenWithArrowKeys,"open-on-context":n.openOnContext},e.$attrs,{tether:n.tether,transition:n.transition},t.toHandlers(s.dropdownListeners)),{anchor:t.withCtx(({attrs:r})=>[t.renderSlot(e.$slots,"anchor",t.mergeProps({ref:"anchor"},r))]),content:t.withCtx(({close:r})=>[t.createElementVNode("ul",{id:n.listId,ref:"listWrapper",class:t.normalizeClass(s.listClasses),"data-qa":"dt-dropdown-list-wrapper",onMouseleave:i[0]||(i[0]=(...a)=>s.clearHighlightIndex&&s.clearHighlightIndex(...a)),onMousemoveCapture:i[1]||(i[1]=(...a)=>s.onMouseHighlight&&s.onMouseHighlight(...a))},[t.renderSlot(e.$slots,"list",{close:r})],42,y)]),footerContent:t.withCtx(({close:r})=>[t.renderSlot(e.$slots,"footer",{close:r})]),_:3},16,["content-width","open","placement","initial-focus-element","fallback-placements","append-to","modal","max-height","max-width","open-with-arrow-keys","open-on-context","tether","transition"])}const S=c._(m,[["render",_]]);exports.default=S;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const p=require("../../common/mixins/keyboard-list-navigation.cjs"),l=require("./dropdown-constants.cjs"),g=require("../../common/utils/index.cjs"),o=require("../../common/constants/index.cjs"),t=require("vue"),c=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),d=require("../list-item/list-item-constants.cjs"),E=require("../popover/popover.cjs"),f=require("../popover/popover-constants.cjs"),m={compatConfig:{MODE:3},name:"DtDropdown",components:{DtPopover:E.default},mixins:[p.default({indexKey:"highlightIndex",idKey:"highlightId",listElementKey:"getListElement",listItemRole:"menuitem",afterHighlightMethod:"afterHighlight",beginningOfListMethod:"beginningOfListMethod",endOfListMethod:"endOfListMethod",activeItemKey:"activeItemEl",focusOnKeyboardNavigation:!0})],inheritAttrs:!1,props:{open:{type:Boolean,default:null},openOnContext:{type:Boolean,default:!1},padding:{type:String,default:"small",validator:e=>Object.keys(l.DROPDOWN_PADDING_CLASSES).some(i=>i===e)},modal:{type:Boolean,default:!0},contentWidth:{type:String,default:null},maxHeight:{type:String,default:""},maxWidth:{type:String,default:""},listId:{type:String,default(){return g.getUniqueString()}},navigationType:{type:String,default:d.LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS,validator:e=>Object.values(d.LIST_ITEM_NAVIGATION_TYPES).includes(e)},fallbackPlacements:{type:Array,default:()=>["auto"]},placement:{type:String,default:"bottom"},onBeginningOfList:{type:Function,default:null},onEndOfList:{type:Function,default:null},listClass:{type:[String,Array,Object],default:""},appendTo:{type:[HTMLElement,String],default:"body",validator:e=>f.POPOVER_APPEND_TO_VALUES.includes(e)||e instanceof HTMLElement},tether:{type:Boolean,default:!0},transition:{type:String,default:"fade"}},emits:["keydown","highlight","update:open","opened"],data(){return{LIST_ITEM_NAVIGATION_TYPES:d.LIST_ITEM_NAVIGATION_TYPES,DROPDOWN_PADDING_CLASSES:l.DROPDOWN_PADDING_CLASSES,EVENT_KEYNAMES:o.EVENT_KEYNAMES,openedWithKeyboard:!1,isOpen:null}},computed:{dropdownListeners(){return{"update:open":e=>{this.$emit("update:open",e)},opened:e=>{this.updateInitialHighlightIndex(e)},keydown:e=>{switch(e.code){case o.EVENT_KEYNAMES.up:case o.EVENT_KEYNAMES.arrowup:this.onUpKeyPress(e),e.stopPropagation(),e.preventDefault();break;case o.EVENT_KEYNAMES.down:case o.EVENT_KEYNAMES.arrowdown:this.onDownKeyPress(e),e.stopPropagation(),e.preventDefault();break;case o.EVENT_KEYNAMES.space:case o.EVENT_KEYNAMES.spacebar:this.onSpaceKey();break;case o.EVENT_KEYNAMES.enter:this.onEnterKey();break;case o.EVENT_KEYNAMES.home:this.onHomeKeyPress(e),e.stopPropagation(),e.preventDefault();break;case o.EVENT_KEYNAMES.end:this.onEndKeyPress(e),e.stopPropagation(),e.preventDefault();break;default:this.onKeyPress(e);break}this.$emit("keydown",e)}}},beginningOfListMethod(){return this.onBeginningOfList||this.jumpToEnd},endOfListMethod(){return this.onEndOfList||this.jumpToBeginning},activeItemEl(){return this.getListElement().querySelector("#"+this.highlightId)},isArrowKeyNav(){return this.navigationType===this.LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS},listClasses(){return["d-dropdown-list",l.DROPDOWN_PADDING_CLASSES[this.padding],this.listClass,{"d-context-menu-list":this.openOnContext}]},shouldOpenWithArrowKeys(){return!this.openOnContext}},methods:{onMouseHighlight(e){const i=e.target.closest("li");i&&i.role&&this.highlightId!==i.id&&(this.setHighlightId(i.id),i.focus())},getListElement(){return this.$refs.listWrapper},clearHighlightIndex(){this.setHighlightIndex(-1)},afterHighlight(){this.highlightIndex!==this._itemsLength()-1&&this.$emit("highlight",this.highlightIndex)},updateInitialHighlightIndex(e){this.isOpen=e,e?(this.openedWithKeyboard&&this.isArrowKeyNav&&this.setHighlightIndex(0),this.$emit("opened",!0)):(this.clearHighlightIndex(),this.openedWithKeyboard=!1,this.$emit("opened",!1))},onSpaceKey(){this.open||(this.openedWithKeyboard=!0)},onEnterKey(){this.open||(this.openedWithKeyboard=!0)},onUpKeyPress(){if(!this.isOpen){this.openedWithKeyboard=!0;return}if(this.isArrowKeyNav)return this.onUpKey()},onDownKeyPress(){if(!this.isOpen){this.openedWithKeyboard=!0;return}if(this.isArrowKeyNav)return this.onDownKey()},onHomeKeyPress(){if(!(!this.isOpen||!this.isArrowKeyNav))return this.onHomeKey()},onEndKeyPress(){if(!(!this.isOpen||!this.isArrowKeyNav))return this.onEndKey()},onKeyPress(e){if(!(!this.isOpen||!this.isArrowKeyNav||!this.isValidLetter(e.key)))return e.stopPropagation(),e.preventDefault(),this.onNavigationKey(e.key)}}},y=["id"];function _(e,i,n,K,h,s){const u=t.resolveComponent("dt-popover");return t.openBlock(),t.createBlock(u,t.mergeProps({ref:"popover","content-width":n.contentWidth,open:n.open,placement:n.placement,"initial-focus-element":h.openedWithKeyboard?"first":"dialog","fallback-placements":n.fallbackPlacements,padding:"none",role:"menu","append-to":n.appendTo,modal:n.modal,"max-height":n.maxHeight,"max-width":n.maxWidth,"open-with-arrow-keys":s.shouldOpenWithArrowKeys,"open-on-context":n.openOnContext},e.$attrs,{tether:n.tether,transition:n.transition},t.toHandlers(s.dropdownListeners)),{anchor:t.withCtx(({attrs:r})=>[t.renderSlot(e.$slots,"anchor",t.mergeProps({ref:"anchor"},r))]),content:t.withCtx(({close:r})=>[t.createElementVNode("ul",{id:n.listId,ref:"listWrapper",class:t.normalizeClass(s.listClasses),"data-qa":"dt-dropdown-list-wrapper",onMouseleave:i[0]||(i[0]=(...a)=>s.clearHighlightIndex&&s.clearHighlightIndex(...a)),onMousemoveCapture:i[1]||(i[1]=(...a)=>s.onMouseHighlight&&s.onMouseHighlight(...a))},[t.renderSlot(e.$slots,"list",{close:r})],42,y)]),footerContent:t.withCtx(({close:r})=>[t.renderSlot(e.$slots,"footer",{close:r})]),_:3},16,["content-width","open","placement","initial-focus-element","fallback-placements","append-to","modal","max-height","max-width","open-with-arrow-keys","open-on-context","tether","transition"])}const S=c._(m,[["render",_]]);exports.default=S;
2
2
  //# sourceMappingURL=dropdown.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.cjs","sources":["../../../components/dropdown/dropdown.vue"],"sourcesContent":["<!-- eslint-disable max-lines -->\n<template>\n <dt-popover\n ref=\"popover\"\n :content-width=\"contentWidth\"\n :open=\"open\"\n :placement=\"placement\"\n :initial-focus-element=\"openedWithKeyboard ? 'first' : 'dialog'\"\n :fallback-placements=\"fallbackPlacements\"\n padding=\"none\"\n role=\"menu\"\n :append-to=\"appendTo\"\n :modal=\"modal\"\n :max-height=\"maxHeight\"\n :max-width=\"maxWidth\"\n :open-with-arrow-keys=\"shouldOpenWithArrowKeys\"\n :open-on-context=\"openOnContext\"\n v-bind=\"$attrs\"\n :tether=\"tether\"\n :transition=\"transition\"\n v-on=\"dropdownListeners\"\n >\n <template #anchor=\"{ attrs }\">\n <!-- @slot Anchor element that activates the dropdown -->\n <slot\n ref=\"anchor\"\n name=\"anchor\"\n v-bind=\"attrs\"\n />\n </template>\n <template #content=\"{ close }\">\n <!-- eslint-disable-next-line max-len -->\n <!-- eslint-disable-next-line vuejs-accessibility/mouse-events-have-key-events vuejs-accessibility/no-static-element-interactions -->\n <ul\n :id=\"listId\"\n ref=\"listWrapper\"\n :class=\"listClasses\"\n data-qa=\"dt-dropdown-list-wrapper\"\n @mouseleave=\"clearHighlightIndex\"\n @mousemove.capture=\"onMouseHighlight\"\n >\n <!-- @slot Slot for the list component -->\n <slot\n name=\"list\"\n :close=\"close\"\n />\n </ul>\n </template>\n <template #footerContent=\"{ close }\">\n <!-- @slot Slot for the footer content -->\n <slot\n name=\"footer\"\n :close=\"close\"\n />\n </template>\n </dt-popover>\n</template>\n\n<script>\nimport KeyboardNavigation from '@/common/mixins/keyboard_list_navigation';\nimport { DtPopover, POPOVER_APPEND_TO_VALUES } from '@/components/popover';\nimport { LIST_ITEM_NAVIGATION_TYPES } from '@/components/list_item';\nimport { DROPDOWN_PADDING_CLASSES } from './dropdown_constants';\nimport { getUniqueString } from '@/common/utils';\nimport { EVENT_KEYNAMES } from '@/common/constants';\n\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtDropdown',\n\n components: {\n DtPopover,\n },\n\n mixins: [\n KeyboardNavigation({\n indexKey: 'highlightIndex',\n idKey: 'highlightId',\n listElementKey: 'getListElement',\n listItemRole: 'menuitem',\n afterHighlightMethod: 'afterHighlight',\n beginningOfListMethod: 'beginningOfListMethod',\n endOfListMethod: 'endOfListMethod',\n activeItemKey: 'activeItemEl',\n focusOnKeyboardNavigation: true,\n }),\n ],\n\n inheritAttrs: false,\n\n props: {\n /**\n * Controls whether the dropdown is shown. Leaving this null will have the dropdown trigger on click by default.\n * If you set this value, the default trigger behavior will be disabled and you can control it as you need.\n * Supports v-model\n */\n open: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Opens the dropdown on right click (context menu). If you set this value to `true`,\n * the default trigger behavior will be disabled.\n */\n openOnContext: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Vertical padding size around the list element.\n * @values none, small, large\n */\n padding: {\n type: String,\n default: 'small',\n validator: (padding) => {\n return Object.keys(DROPDOWN_PADDING_CLASSES).some((item) => item === padding);\n },\n },\n\n /**\n * Determines modal state, dropdown has a modal overlay preventing interaction with elements\n * below it, but it is invisible.\n */\n modal: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Width configuration for the popover content. When its value is 'anchor',\n * the popover content will have the same width as the anchor.\n * @values null, anchor\n */\n contentWidth: {\n type: String,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n maxHeight: {\n type: String,\n default: '',\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|%|em\n */\n maxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Sets an ID on the list element of the component. Used by several aria attributes\n * as well as when deriving the IDs for each item.\n */\n listId: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * The type of navigation that this component should support.\n * - \"arrow-keys\" for items that are navigated with UP/DOWN keys.\n * - \"tab\" for items that are navigated using the TAB key.\n * - \"none\" for static items that are not interactive.\n * @values arrow-keys, tab, none\n */\n navigationType: {\n type: String,\n default: LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS,\n validator: (t) => Object.values(LIST_ITEM_NAVIGATION_TYPES).includes(t),\n },\n\n /**\n * If the dropdown does not fit in the direction described by \"placement\",\n * it will attempt to change it's direction to the \"fallbackPlacements\".\n *\n * @values top, top-start, top-end,\n * right, right-start, right-end,\n * left, left-start, left-end,\n * bottom, bottom-start, bottom-end,\n * auto, auto-start, auto-end\n * */\n fallbackPlacements: {\n type: Array,\n default: () => {\n return ['auto'];\n },\n },\n\n /**\n * The direction the dropdown displays relative to the anchor.\n */\n placement: {\n type: String,\n default: 'bottom',\n },\n\n /**\n * A method that will be called when the selection goes past the beginning of the list.\n */\n onBeginningOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * A method that will be called when the selection goes past the end of the list.\n */\n onEndOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * Additional class for the wrapper list element.\n */\n listClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTMLElement, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * If set to false the dialog will display over top of the anchor when there is insufficient space.\n * If set to true it will never move from its position relative to the anchor and will clip instead.\n * <a\n * class=\"d-link\"\n * href=\"https://popper.js.org/docs/v2/modifiers/prevent-overflow/#tether\"\n * target=\"_blank\"\n * >\n * Popper.js docs\n * </a>\n * @values true, false\n */\n tether: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n },\n\n emits: [\n /**\n * Native keydown event\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n\n /**\n * Event fired when the highlight changes\n *\n * @event highlight\n * @type {Number}\n */\n 'highlight',\n\n /**\n * Event fired to sync the open prop with the parent component\n * @event update:open\n */\n 'update:open',\n\n /**\n * Event fired when dropdown is shown or hidden\n *\n * @event opened\n * @type {Boolean | Array}\n */\n 'opened',\n\n /**\n * Event fired to sync the open prop with the parent component\n * @event update:open\n */\n 'update:open',\n ],\n\n data () {\n return {\n LIST_ITEM_NAVIGATION_TYPES,\n DROPDOWN_PADDING_CLASSES,\n EVENT_KEYNAMES,\n openedWithKeyboard: false,\n isOpen: null,\n };\n },\n\n computed: {\n dropdownListeners () {\n return {\n opened: isPopoverOpen => {\n this.updateInitialHighlightIndex(isPopoverOpen);\n },\n\n keydown: event => {\n const eventCode = event.code;\n\n switch (eventCode) {\n case EVENT_KEYNAMES.up:\n case EVENT_KEYNAMES.arrowup:\n this.onUpKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.down:\n case EVENT_KEYNAMES.arrowdown:\n this.onDownKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.space:\n case EVENT_KEYNAMES.spacebar:\n this.onSpaceKey();\n break;\n case EVENT_KEYNAMES.enter:\n this.onEnterKey();\n break;\n case EVENT_KEYNAMES.home:\n this.onHomeKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.end:\n this.onEndKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n default:\n this.onKeyPress(event);\n break;\n }\n\n this.$emit('keydown', event);\n },\n };\n },\n\n beginningOfListMethod () {\n return this.onBeginningOfList || this.jumpToEnd;\n },\n\n endOfListMethod () {\n return this.onEndOfList || this.jumpToBeginning;\n },\n\n activeItemEl () {\n return this.getListElement().querySelector('#' + this.highlightId);\n },\n\n isArrowKeyNav () {\n return this.navigationType === this.LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS;\n },\n\n listClasses () {\n return [\n 'd-dropdown-list',\n DROPDOWN_PADDING_CLASSES[this.padding],\n this.listClass,\n { 'd-context-menu-list': this.openOnContext },\n ];\n },\n\n shouldOpenWithArrowKeys () {\n return !this.openOnContext;\n },\n },\n\n methods: {\n onMouseHighlight (e) {\n const liElement = e.target.closest('li');\n\n if (liElement && liElement.role && this.highlightId !== liElement.id) {\n this.setHighlightId(liElement.id);\n liElement.focus();\n }\n },\n\n getListElement () {\n return this.$refs.listWrapper;\n },\n\n clearHighlightIndex () {\n this.setHighlightIndex(-1);\n },\n\n afterHighlight () {\n if (this.highlightIndex === this._itemsLength() - 1) {\n return;\n }\n\n this.$emit('highlight', this.highlightIndex);\n },\n\n updateInitialHighlightIndex (isPopoverOpen) {\n this.isOpen = isPopoverOpen;\n\n if (isPopoverOpen) {\n if (this.openedWithKeyboard && this.isArrowKeyNav) {\n this.setHighlightIndex(0);\n }\n this.$emit('opened', true);\n } else {\n this.clearHighlightIndex();\n this.openedWithKeyboard = false;\n this.$emit('opened', false);\n }\n },\n\n onSpaceKey () {\n if (!this.open) {\n this.openedWithKeyboard = true;\n }\n },\n\n onEnterKey () {\n if (!this.open) {\n this.openedWithKeyboard = true;\n }\n },\n\n onUpKeyPress () {\n if (!this.isOpen) {\n this.openedWithKeyboard = true;\n return;\n }\n if (this.isArrowKeyNav) {\n return this.onUpKey();\n }\n },\n\n onDownKeyPress () {\n if (!this.isOpen) {\n this.openedWithKeyboard = true;\n return;\n }\n if (this.isArrowKeyNav) {\n return this.onDownKey();\n }\n },\n\n onHomeKeyPress () {\n if (!this.isOpen || !this.isArrowKeyNav) {\n return;\n }\n\n return this.onHomeKey();\n },\n\n onEndKeyPress () {\n if (!this.isOpen || !this.isArrowKeyNav) {\n return;\n }\n\n return this.onEndKey();\n },\n\n onKeyPress (e) {\n if (!this.isOpen || !this.isArrowKeyNav || !this.isValidLetter(e.key)) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n return this.onNavigationKey(e.key);\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtPopover","KeyboardNavigation","padding","DROPDOWN_PADDING_CLASSES","item","getUniqueString","LIST_ITEM_NAVIGATION_TYPES","t","appendTo","POPOVER_APPEND_TO_VALUES","EVENT_KEYNAMES","isPopoverOpen","event","liElement","_hoisted_1","_openBlock","_createBlock","_component_dt_popover","_mergeProps","$props","$data","$options","_ctx","_toHandlers","_withCtx","attrs","_renderSlot","close","_createElementVNode","_normalizeClass","args","_cache"],"mappings":"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"}
1
+ {"version":3,"file":"dropdown.cjs","sources":["../../../components/dropdown/dropdown.vue"],"sourcesContent":["<!-- eslint-disable max-lines -->\n<template>\n <dt-popover\n ref=\"popover\"\n :content-width=\"contentWidth\"\n :open=\"open\"\n :placement=\"placement\"\n :initial-focus-element=\"openedWithKeyboard ? 'first' : 'dialog'\"\n :fallback-placements=\"fallbackPlacements\"\n padding=\"none\"\n role=\"menu\"\n :append-to=\"appendTo\"\n :modal=\"modal\"\n :max-height=\"maxHeight\"\n :max-width=\"maxWidth\"\n :open-with-arrow-keys=\"shouldOpenWithArrowKeys\"\n :open-on-context=\"openOnContext\"\n v-bind=\"$attrs\"\n :tether=\"tether\"\n :transition=\"transition\"\n v-on=\"dropdownListeners\"\n >\n <template #anchor=\"{ attrs }\">\n <!-- @slot Anchor element that activates the dropdown -->\n <slot\n ref=\"anchor\"\n name=\"anchor\"\n v-bind=\"attrs\"\n />\n </template>\n <template #content=\"{ close }\">\n <!-- eslint-disable-next-line max-len -->\n <!-- eslint-disable-next-line vuejs-accessibility/mouse-events-have-key-events vuejs-accessibility/no-static-element-interactions -->\n <ul\n :id=\"listId\"\n ref=\"listWrapper\"\n :class=\"listClasses\"\n data-qa=\"dt-dropdown-list-wrapper\"\n @mouseleave=\"clearHighlightIndex\"\n @mousemove.capture=\"onMouseHighlight\"\n >\n <!-- @slot Slot for the list component -->\n <slot\n name=\"list\"\n :close=\"close\"\n />\n </ul>\n </template>\n <template #footerContent=\"{ close }\">\n <!-- @slot Slot for the footer content -->\n <slot\n name=\"footer\"\n :close=\"close\"\n />\n </template>\n </dt-popover>\n</template>\n\n<script>\nimport KeyboardNavigation from '@/common/mixins/keyboard_list_navigation';\nimport { DtPopover, POPOVER_APPEND_TO_VALUES } from '@/components/popover';\nimport { LIST_ITEM_NAVIGATION_TYPES } from '@/components/list_item';\nimport { DROPDOWN_PADDING_CLASSES } from './dropdown_constants';\nimport { getUniqueString } from '@/common/utils';\nimport { EVENT_KEYNAMES } from '@/common/constants';\n\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtDropdown',\n\n components: {\n DtPopover,\n },\n\n mixins: [\n KeyboardNavigation({\n indexKey: 'highlightIndex',\n idKey: 'highlightId',\n listElementKey: 'getListElement',\n listItemRole: 'menuitem',\n afterHighlightMethod: 'afterHighlight',\n beginningOfListMethod: 'beginningOfListMethod',\n endOfListMethod: 'endOfListMethod',\n activeItemKey: 'activeItemEl',\n focusOnKeyboardNavigation: true,\n }),\n ],\n\n inheritAttrs: false,\n\n props: {\n /**\n * Controls whether the dropdown is shown. Leaving this null will have the dropdown trigger on click by default.\n * If you set this value, the default trigger behavior will be disabled and you can control it as you need.\n * Supports v-model\n */\n open: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Opens the dropdown on right click (context menu). If you set this value to `true`,\n * the default trigger behavior will be disabled.\n */\n openOnContext: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Vertical padding size around the list element.\n * @values none, small, large\n */\n padding: {\n type: String,\n default: 'small',\n validator: (padding) => {\n return Object.keys(DROPDOWN_PADDING_CLASSES).some((item) => item === padding);\n },\n },\n\n /**\n * Determines modal state, dropdown has a modal overlay preventing interaction with elements\n * below it, but it is invisible.\n */\n modal: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Width configuration for the popover content. When its value is 'anchor',\n * the popover content will have the same width as the anchor.\n * @values null, anchor\n */\n contentWidth: {\n type: String,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n maxHeight: {\n type: String,\n default: '',\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|%|em\n */\n maxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Sets an ID on the list element of the component. Used by several aria attributes\n * as well as when deriving the IDs for each item.\n */\n listId: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * The type of navigation that this component should support.\n * - \"arrow-keys\" for items that are navigated with UP/DOWN keys.\n * - \"tab\" for items that are navigated using the TAB key.\n * - \"none\" for static items that are not interactive.\n * @values arrow-keys, tab, none\n */\n navigationType: {\n type: String,\n default: LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS,\n validator: (t) => Object.values(LIST_ITEM_NAVIGATION_TYPES).includes(t),\n },\n\n /**\n * If the dropdown does not fit in the direction described by \"placement\",\n * it will attempt to change it's direction to the \"fallbackPlacements\".\n *\n * @values top, top-start, top-end,\n * right, right-start, right-end,\n * left, left-start, left-end,\n * bottom, bottom-start, bottom-end,\n * auto, auto-start, auto-end\n * */\n fallbackPlacements: {\n type: Array,\n default: () => {\n return ['auto'];\n },\n },\n\n /**\n * The direction the dropdown displays relative to the anchor.\n */\n placement: {\n type: String,\n default: 'bottom',\n },\n\n /**\n * A method that will be called when the selection goes past the beginning of the list.\n */\n onBeginningOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * A method that will be called when the selection goes past the end of the list.\n */\n onEndOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * Additional class for the wrapper list element.\n */\n listClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTMLElement, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * If set to false the dialog will display over top of the anchor when there is insufficient space.\n * If set to true it will never move from its position relative to the anchor and will clip instead.\n * <a\n * class=\"d-link\"\n * href=\"https://popper.js.org/docs/v2/modifiers/prevent-overflow/#tether\"\n * target=\"_blank\"\n * >\n * Popper.js docs\n * </a>\n * @values true, false\n */\n tether: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n },\n\n emits: [\n /**\n * Native keydown event\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n\n /**\n * Event fired when the highlight changes\n *\n * @event highlight\n * @type {Number}\n */\n 'highlight',\n\n /**\n * Event fired to sync the open prop with the parent component\n * @event update:open\n */\n 'update:open',\n\n /**\n * Event fired when dropdown is shown or hidden\n *\n * @event opened\n * @type {Boolean | Array}\n */\n 'opened',\n ],\n\n data () {\n return {\n LIST_ITEM_NAVIGATION_TYPES,\n DROPDOWN_PADDING_CLASSES,\n EVENT_KEYNAMES,\n openedWithKeyboard: false,\n isOpen: null,\n };\n },\n\n computed: {\n dropdownListeners () {\n return {\n\n 'update:open': value => {\n this.$emit('update:open', value);\n },\n\n opened: isPopoverOpen => {\n this.updateInitialHighlightIndex(isPopoverOpen);\n },\n\n keydown: event => {\n const eventCode = event.code;\n\n switch (eventCode) {\n case EVENT_KEYNAMES.up:\n case EVENT_KEYNAMES.arrowup:\n this.onUpKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.down:\n case EVENT_KEYNAMES.arrowdown:\n this.onDownKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.space:\n case EVENT_KEYNAMES.spacebar:\n this.onSpaceKey();\n break;\n case EVENT_KEYNAMES.enter:\n this.onEnterKey();\n break;\n case EVENT_KEYNAMES.home:\n this.onHomeKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.end:\n this.onEndKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n default:\n this.onKeyPress(event);\n break;\n }\n\n this.$emit('keydown', event);\n },\n };\n },\n\n beginningOfListMethod () {\n return this.onBeginningOfList || this.jumpToEnd;\n },\n\n endOfListMethod () {\n return this.onEndOfList || this.jumpToBeginning;\n },\n\n activeItemEl () {\n return this.getListElement().querySelector('#' + this.highlightId);\n },\n\n isArrowKeyNav () {\n return this.navigationType === this.LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS;\n },\n\n listClasses () {\n return [\n 'd-dropdown-list',\n DROPDOWN_PADDING_CLASSES[this.padding],\n this.listClass,\n { 'd-context-menu-list': this.openOnContext },\n ];\n },\n\n shouldOpenWithArrowKeys () {\n return !this.openOnContext;\n },\n },\n\n methods: {\n onMouseHighlight (e) {\n const liElement = e.target.closest('li');\n\n if (liElement && liElement.role && this.highlightId !== liElement.id) {\n this.setHighlightId(liElement.id);\n liElement.focus();\n }\n },\n\n getListElement () {\n return this.$refs.listWrapper;\n },\n\n clearHighlightIndex () {\n this.setHighlightIndex(-1);\n },\n\n afterHighlight () {\n if (this.highlightIndex === this._itemsLength() - 1) {\n return;\n }\n\n this.$emit('highlight', this.highlightIndex);\n },\n\n updateInitialHighlightIndex (isPopoverOpen) {\n this.isOpen = isPopoverOpen;\n\n if (isPopoverOpen) {\n if (this.openedWithKeyboard && this.isArrowKeyNav) {\n this.setHighlightIndex(0);\n }\n this.$emit('opened', true);\n } else {\n this.clearHighlightIndex();\n this.openedWithKeyboard = false;\n this.$emit('opened', false);\n }\n },\n\n onSpaceKey () {\n if (!this.open) {\n this.openedWithKeyboard = true;\n }\n },\n\n onEnterKey () {\n if (!this.open) {\n this.openedWithKeyboard = true;\n }\n },\n\n onUpKeyPress () {\n if (!this.isOpen) {\n this.openedWithKeyboard = true;\n return;\n }\n if (this.isArrowKeyNav) {\n return this.onUpKey();\n }\n },\n\n onDownKeyPress () {\n if (!this.isOpen) {\n this.openedWithKeyboard = true;\n return;\n }\n if (this.isArrowKeyNav) {\n return this.onDownKey();\n }\n },\n\n onHomeKeyPress () {\n if (!this.isOpen || !this.isArrowKeyNav) {\n return;\n }\n\n return this.onHomeKey();\n },\n\n onEndKeyPress () {\n if (!this.isOpen || !this.isArrowKeyNav) {\n return;\n }\n\n return this.onEndKey();\n },\n\n onKeyPress (e) {\n if (!this.isOpen || !this.isArrowKeyNav || !this.isValidLetter(e.key)) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n return this.onNavigationKey(e.key);\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtPopover","KeyboardNavigation","padding","DROPDOWN_PADDING_CLASSES","item","getUniqueString","LIST_ITEM_NAVIGATION_TYPES","t","appendTo","POPOVER_APPEND_TO_VALUES","EVENT_KEYNAMES","value","isPopoverOpen","event","liElement","_hoisted_1","_openBlock","_createBlock","_component_dt_popover","_mergeProps","$props","$data","$options","_ctx","_toHandlers","_withCtx","attrs","_renderSlot","close","_createElementVNode","_normalizeClass","args","_cache"],"mappings":"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"}
@@ -212,12 +212,7 @@ const P = {
212
212
  * @event opened
213
213
  * @type {Boolean | Array}
214
214
  */
215
- "opened",
216
- /**
217
- * Event fired to sync the open prop with the parent component
218
- * @event update:open
219
- */
220
- "update:open"
215
+ "opened"
221
216
  ],
222
217
  data() {
223
218
  return {
@@ -231,6 +226,9 @@ const P = {
231
226
  computed: {
232
227
  dropdownListeners() {
233
228
  return {
229
+ "update:open": (e) => {
230
+ this.$emit("update:open", e);
231
+ },
234
232
  opened: (e) => {
235
233
  this.updateInitialHighlightIndex(e);
236
234
  },
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.js","sources":["../../../components/dropdown/dropdown.vue"],"sourcesContent":["<!-- eslint-disable max-lines -->\n<template>\n <dt-popover\n ref=\"popover\"\n :content-width=\"contentWidth\"\n :open=\"open\"\n :placement=\"placement\"\n :initial-focus-element=\"openedWithKeyboard ? 'first' : 'dialog'\"\n :fallback-placements=\"fallbackPlacements\"\n padding=\"none\"\n role=\"menu\"\n :append-to=\"appendTo\"\n :modal=\"modal\"\n :max-height=\"maxHeight\"\n :max-width=\"maxWidth\"\n :open-with-arrow-keys=\"shouldOpenWithArrowKeys\"\n :open-on-context=\"openOnContext\"\n v-bind=\"$attrs\"\n :tether=\"tether\"\n :transition=\"transition\"\n v-on=\"dropdownListeners\"\n >\n <template #anchor=\"{ attrs }\">\n <!-- @slot Anchor element that activates the dropdown -->\n <slot\n ref=\"anchor\"\n name=\"anchor\"\n v-bind=\"attrs\"\n />\n </template>\n <template #content=\"{ close }\">\n <!-- eslint-disable-next-line max-len -->\n <!-- eslint-disable-next-line vuejs-accessibility/mouse-events-have-key-events vuejs-accessibility/no-static-element-interactions -->\n <ul\n :id=\"listId\"\n ref=\"listWrapper\"\n :class=\"listClasses\"\n data-qa=\"dt-dropdown-list-wrapper\"\n @mouseleave=\"clearHighlightIndex\"\n @mousemove.capture=\"onMouseHighlight\"\n >\n <!-- @slot Slot for the list component -->\n <slot\n name=\"list\"\n :close=\"close\"\n />\n </ul>\n </template>\n <template #footerContent=\"{ close }\">\n <!-- @slot Slot for the footer content -->\n <slot\n name=\"footer\"\n :close=\"close\"\n />\n </template>\n </dt-popover>\n</template>\n\n<script>\nimport KeyboardNavigation from '@/common/mixins/keyboard_list_navigation';\nimport { DtPopover, POPOVER_APPEND_TO_VALUES } from '@/components/popover';\nimport { LIST_ITEM_NAVIGATION_TYPES } from '@/components/list_item';\nimport { DROPDOWN_PADDING_CLASSES } from './dropdown_constants';\nimport { getUniqueString } from '@/common/utils';\nimport { EVENT_KEYNAMES } from '@/common/constants';\n\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtDropdown',\n\n components: {\n DtPopover,\n },\n\n mixins: [\n KeyboardNavigation({\n indexKey: 'highlightIndex',\n idKey: 'highlightId',\n listElementKey: 'getListElement',\n listItemRole: 'menuitem',\n afterHighlightMethod: 'afterHighlight',\n beginningOfListMethod: 'beginningOfListMethod',\n endOfListMethod: 'endOfListMethod',\n activeItemKey: 'activeItemEl',\n focusOnKeyboardNavigation: true,\n }),\n ],\n\n inheritAttrs: false,\n\n props: {\n /**\n * Controls whether the dropdown is shown. Leaving this null will have the dropdown trigger on click by default.\n * If you set this value, the default trigger behavior will be disabled and you can control it as you need.\n * Supports v-model\n */\n open: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Opens the dropdown on right click (context menu). If you set this value to `true`,\n * the default trigger behavior will be disabled.\n */\n openOnContext: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Vertical padding size around the list element.\n * @values none, small, large\n */\n padding: {\n type: String,\n default: 'small',\n validator: (padding) => {\n return Object.keys(DROPDOWN_PADDING_CLASSES).some((item) => item === padding);\n },\n },\n\n /**\n * Determines modal state, dropdown has a modal overlay preventing interaction with elements\n * below it, but it is invisible.\n */\n modal: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Width configuration for the popover content. When its value is 'anchor',\n * the popover content will have the same width as the anchor.\n * @values null, anchor\n */\n contentWidth: {\n type: String,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n maxHeight: {\n type: String,\n default: '',\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|%|em\n */\n maxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Sets an ID on the list element of the component. Used by several aria attributes\n * as well as when deriving the IDs for each item.\n */\n listId: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * The type of navigation that this component should support.\n * - \"arrow-keys\" for items that are navigated with UP/DOWN keys.\n * - \"tab\" for items that are navigated using the TAB key.\n * - \"none\" for static items that are not interactive.\n * @values arrow-keys, tab, none\n */\n navigationType: {\n type: String,\n default: LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS,\n validator: (t) => Object.values(LIST_ITEM_NAVIGATION_TYPES).includes(t),\n },\n\n /**\n * If the dropdown does not fit in the direction described by \"placement\",\n * it will attempt to change it's direction to the \"fallbackPlacements\".\n *\n * @values top, top-start, top-end,\n * right, right-start, right-end,\n * left, left-start, left-end,\n * bottom, bottom-start, bottom-end,\n * auto, auto-start, auto-end\n * */\n fallbackPlacements: {\n type: Array,\n default: () => {\n return ['auto'];\n },\n },\n\n /**\n * The direction the dropdown displays relative to the anchor.\n */\n placement: {\n type: String,\n default: 'bottom',\n },\n\n /**\n * A method that will be called when the selection goes past the beginning of the list.\n */\n onBeginningOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * A method that will be called when the selection goes past the end of the list.\n */\n onEndOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * Additional class for the wrapper list element.\n */\n listClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTMLElement, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * If set to false the dialog will display over top of the anchor when there is insufficient space.\n * If set to true it will never move from its position relative to the anchor and will clip instead.\n * <a\n * class=\"d-link\"\n * href=\"https://popper.js.org/docs/v2/modifiers/prevent-overflow/#tether\"\n * target=\"_blank\"\n * >\n * Popper.js docs\n * </a>\n * @values true, false\n */\n tether: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n },\n\n emits: [\n /**\n * Native keydown event\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n\n /**\n * Event fired when the highlight changes\n *\n * @event highlight\n * @type {Number}\n */\n 'highlight',\n\n /**\n * Event fired to sync the open prop with the parent component\n * @event update:open\n */\n 'update:open',\n\n /**\n * Event fired when dropdown is shown or hidden\n *\n * @event opened\n * @type {Boolean | Array}\n */\n 'opened',\n\n /**\n * Event fired to sync the open prop with the parent component\n * @event update:open\n */\n 'update:open',\n ],\n\n data () {\n return {\n LIST_ITEM_NAVIGATION_TYPES,\n DROPDOWN_PADDING_CLASSES,\n EVENT_KEYNAMES,\n openedWithKeyboard: false,\n isOpen: null,\n };\n },\n\n computed: {\n dropdownListeners () {\n return {\n opened: isPopoverOpen => {\n this.updateInitialHighlightIndex(isPopoverOpen);\n },\n\n keydown: event => {\n const eventCode = event.code;\n\n switch (eventCode) {\n case EVENT_KEYNAMES.up:\n case EVENT_KEYNAMES.arrowup:\n this.onUpKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.down:\n case EVENT_KEYNAMES.arrowdown:\n this.onDownKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.space:\n case EVENT_KEYNAMES.spacebar:\n this.onSpaceKey();\n break;\n case EVENT_KEYNAMES.enter:\n this.onEnterKey();\n break;\n case EVENT_KEYNAMES.home:\n this.onHomeKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.end:\n this.onEndKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n default:\n this.onKeyPress(event);\n break;\n }\n\n this.$emit('keydown', event);\n },\n };\n },\n\n beginningOfListMethod () {\n return this.onBeginningOfList || this.jumpToEnd;\n },\n\n endOfListMethod () {\n return this.onEndOfList || this.jumpToBeginning;\n },\n\n activeItemEl () {\n return this.getListElement().querySelector('#' + this.highlightId);\n },\n\n isArrowKeyNav () {\n return this.navigationType === this.LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS;\n },\n\n listClasses () {\n return [\n 'd-dropdown-list',\n DROPDOWN_PADDING_CLASSES[this.padding],\n this.listClass,\n { 'd-context-menu-list': this.openOnContext },\n ];\n },\n\n shouldOpenWithArrowKeys () {\n return !this.openOnContext;\n },\n },\n\n methods: {\n onMouseHighlight (e) {\n const liElement = e.target.closest('li');\n\n if (liElement && liElement.role && this.highlightId !== liElement.id) {\n this.setHighlightId(liElement.id);\n liElement.focus();\n }\n },\n\n getListElement () {\n return this.$refs.listWrapper;\n },\n\n clearHighlightIndex () {\n this.setHighlightIndex(-1);\n },\n\n afterHighlight () {\n if (this.highlightIndex === this._itemsLength() - 1) {\n return;\n }\n\n this.$emit('highlight', this.highlightIndex);\n },\n\n updateInitialHighlightIndex (isPopoverOpen) {\n this.isOpen = isPopoverOpen;\n\n if (isPopoverOpen) {\n if (this.openedWithKeyboard && this.isArrowKeyNav) {\n this.setHighlightIndex(0);\n }\n this.$emit('opened', true);\n } else {\n this.clearHighlightIndex();\n this.openedWithKeyboard = false;\n this.$emit('opened', false);\n }\n },\n\n onSpaceKey () {\n if (!this.open) {\n this.openedWithKeyboard = true;\n }\n },\n\n onEnterKey () {\n if (!this.open) {\n this.openedWithKeyboard = true;\n }\n },\n\n onUpKeyPress () {\n if (!this.isOpen) {\n this.openedWithKeyboard = true;\n return;\n }\n if (this.isArrowKeyNav) {\n return this.onUpKey();\n }\n },\n\n onDownKeyPress () {\n if (!this.isOpen) {\n this.openedWithKeyboard = true;\n return;\n }\n if (this.isArrowKeyNav) {\n return this.onDownKey();\n }\n },\n\n onHomeKeyPress () {\n if (!this.isOpen || !this.isArrowKeyNav) {\n return;\n }\n\n return this.onHomeKey();\n },\n\n onEndKeyPress () {\n if (!this.isOpen || !this.isArrowKeyNav) {\n return;\n }\n\n return this.onEndKey();\n },\n\n onKeyPress (e) {\n if (!this.isOpen || !this.isArrowKeyNav || !this.isValidLetter(e.key)) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n return this.onNavigationKey(e.key);\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtPopover","KeyboardNavigation","padding","DROPDOWN_PADDING_CLASSES","item","getUniqueString","LIST_ITEM_NAVIGATION_TYPES","t","appendTo","POPOVER_APPEND_TO_VALUES","EVENT_KEYNAMES","isPopoverOpen","event","liElement","_hoisted_1","_openBlock","_createBlock","_component_dt_popover","_mergeProps","$props","$data","$options","_ctx","_toHandlers","_withCtx","attrs","_renderSlot","close","_createElementVNode","_normalizeClass","args","_cache"],"mappings":"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"}
1
+ {"version":3,"file":"dropdown.js","sources":["../../../components/dropdown/dropdown.vue"],"sourcesContent":["<!-- eslint-disable max-lines -->\n<template>\n <dt-popover\n ref=\"popover\"\n :content-width=\"contentWidth\"\n :open=\"open\"\n :placement=\"placement\"\n :initial-focus-element=\"openedWithKeyboard ? 'first' : 'dialog'\"\n :fallback-placements=\"fallbackPlacements\"\n padding=\"none\"\n role=\"menu\"\n :append-to=\"appendTo\"\n :modal=\"modal\"\n :max-height=\"maxHeight\"\n :max-width=\"maxWidth\"\n :open-with-arrow-keys=\"shouldOpenWithArrowKeys\"\n :open-on-context=\"openOnContext\"\n v-bind=\"$attrs\"\n :tether=\"tether\"\n :transition=\"transition\"\n v-on=\"dropdownListeners\"\n >\n <template #anchor=\"{ attrs }\">\n <!-- @slot Anchor element that activates the dropdown -->\n <slot\n ref=\"anchor\"\n name=\"anchor\"\n v-bind=\"attrs\"\n />\n </template>\n <template #content=\"{ close }\">\n <!-- eslint-disable-next-line max-len -->\n <!-- eslint-disable-next-line vuejs-accessibility/mouse-events-have-key-events vuejs-accessibility/no-static-element-interactions -->\n <ul\n :id=\"listId\"\n ref=\"listWrapper\"\n :class=\"listClasses\"\n data-qa=\"dt-dropdown-list-wrapper\"\n @mouseleave=\"clearHighlightIndex\"\n @mousemove.capture=\"onMouseHighlight\"\n >\n <!-- @slot Slot for the list component -->\n <slot\n name=\"list\"\n :close=\"close\"\n />\n </ul>\n </template>\n <template #footerContent=\"{ close }\">\n <!-- @slot Slot for the footer content -->\n <slot\n name=\"footer\"\n :close=\"close\"\n />\n </template>\n </dt-popover>\n</template>\n\n<script>\nimport KeyboardNavigation from '@/common/mixins/keyboard_list_navigation';\nimport { DtPopover, POPOVER_APPEND_TO_VALUES } from '@/components/popover';\nimport { LIST_ITEM_NAVIGATION_TYPES } from '@/components/list_item';\nimport { DROPDOWN_PADDING_CLASSES } from './dropdown_constants';\nimport { getUniqueString } from '@/common/utils';\nimport { EVENT_KEYNAMES } from '@/common/constants';\n\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtDropdown',\n\n components: {\n DtPopover,\n },\n\n mixins: [\n KeyboardNavigation({\n indexKey: 'highlightIndex',\n idKey: 'highlightId',\n listElementKey: 'getListElement',\n listItemRole: 'menuitem',\n afterHighlightMethod: 'afterHighlight',\n beginningOfListMethod: 'beginningOfListMethod',\n endOfListMethod: 'endOfListMethod',\n activeItemKey: 'activeItemEl',\n focusOnKeyboardNavigation: true,\n }),\n ],\n\n inheritAttrs: false,\n\n props: {\n /**\n * Controls whether the dropdown is shown. Leaving this null will have the dropdown trigger on click by default.\n * If you set this value, the default trigger behavior will be disabled and you can control it as you need.\n * Supports v-model\n */\n open: {\n type: Boolean,\n default: null,\n },\n\n /**\n * Opens the dropdown on right click (context menu). If you set this value to `true`,\n * the default trigger behavior will be disabled.\n */\n openOnContext: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Vertical padding size around the list element.\n * @values none, small, large\n */\n padding: {\n type: String,\n default: 'small',\n validator: (padding) => {\n return Object.keys(DROPDOWN_PADDING_CLASSES).some((item) => item === padding);\n },\n },\n\n /**\n * Determines modal state, dropdown has a modal overlay preventing interaction with elements\n * below it, but it is invisible.\n */\n modal: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Width configuration for the popover content. When its value is 'anchor',\n * the popover content will have the same width as the anchor.\n * @values null, anchor\n */\n contentWidth: {\n type: String,\n default: null,\n },\n\n /**\n * Determines maximum height for the popover before overflow.\n * Possible units rem|px|em\n */\n maxHeight: {\n type: String,\n default: '',\n },\n\n /**\n * Determines maximum width for the popover before overflow.\n * Possible units rem|px|%|em\n */\n maxWidth: {\n type: String,\n default: '',\n },\n\n /**\n * Sets an ID on the list element of the component. Used by several aria attributes\n * as well as when deriving the IDs for each item.\n */\n listId: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * The type of navigation that this component should support.\n * - \"arrow-keys\" for items that are navigated with UP/DOWN keys.\n * - \"tab\" for items that are navigated using the TAB key.\n * - \"none\" for static items that are not interactive.\n * @values arrow-keys, tab, none\n */\n navigationType: {\n type: String,\n default: LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS,\n validator: (t) => Object.values(LIST_ITEM_NAVIGATION_TYPES).includes(t),\n },\n\n /**\n * If the dropdown does not fit in the direction described by \"placement\",\n * it will attempt to change it's direction to the \"fallbackPlacements\".\n *\n * @values top, top-start, top-end,\n * right, right-start, right-end,\n * left, left-start, left-end,\n * bottom, bottom-start, bottom-end,\n * auto, auto-start, auto-end\n * */\n fallbackPlacements: {\n type: Array,\n default: () => {\n return ['auto'];\n },\n },\n\n /**\n * The direction the dropdown displays relative to the anchor.\n */\n placement: {\n type: String,\n default: 'bottom',\n },\n\n /**\n * A method that will be called when the selection goes past the beginning of the list.\n */\n onBeginningOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * A method that will be called when the selection goes past the end of the list.\n */\n onEndOfList: {\n type: Function,\n default: null,\n },\n\n /**\n * Additional class for the wrapper list element.\n */\n listClass: {\n type: [String, Array, Object],\n default: '',\n },\n\n /**\n * Sets the element to which the popover is going to append to.\n * 'body' will append to the nearest body (supports shadow DOM).\n * @values 'body', 'parent', HTMLElement,\n */\n appendTo: {\n type: [HTMLElement, String],\n default: 'body',\n validator: appendTo => {\n return POPOVER_APPEND_TO_VALUES.includes(appendTo) ||\n (appendTo instanceof HTMLElement);\n },\n },\n\n /**\n * If set to false the dialog will display over top of the anchor when there is insufficient space.\n * If set to true it will never move from its position relative to the anchor and will clip instead.\n * <a\n * class=\"d-link\"\n * href=\"https://popper.js.org/docs/v2/modifiers/prevent-overflow/#tether\"\n * target=\"_blank\"\n * >\n * Popper.js docs\n * </a>\n * @values true, false\n */\n tether: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Named transition when the content display is toggled.\n * @see DtLazyShow\n */\n transition: {\n type: String,\n default: 'fade',\n },\n },\n\n emits: [\n /**\n * Native keydown event\n *\n * @event keydown\n * @type {KeyboardEvent}\n */\n 'keydown',\n\n /**\n * Event fired when the highlight changes\n *\n * @event highlight\n * @type {Number}\n */\n 'highlight',\n\n /**\n * Event fired to sync the open prop with the parent component\n * @event update:open\n */\n 'update:open',\n\n /**\n * Event fired when dropdown is shown or hidden\n *\n * @event opened\n * @type {Boolean | Array}\n */\n 'opened',\n ],\n\n data () {\n return {\n LIST_ITEM_NAVIGATION_TYPES,\n DROPDOWN_PADDING_CLASSES,\n EVENT_KEYNAMES,\n openedWithKeyboard: false,\n isOpen: null,\n };\n },\n\n computed: {\n dropdownListeners () {\n return {\n\n 'update:open': value => {\n this.$emit('update:open', value);\n },\n\n opened: isPopoverOpen => {\n this.updateInitialHighlightIndex(isPopoverOpen);\n },\n\n keydown: event => {\n const eventCode = event.code;\n\n switch (eventCode) {\n case EVENT_KEYNAMES.up:\n case EVENT_KEYNAMES.arrowup:\n this.onUpKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.down:\n case EVENT_KEYNAMES.arrowdown:\n this.onDownKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.space:\n case EVENT_KEYNAMES.spacebar:\n this.onSpaceKey();\n break;\n case EVENT_KEYNAMES.enter:\n this.onEnterKey();\n break;\n case EVENT_KEYNAMES.home:\n this.onHomeKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n case EVENT_KEYNAMES.end:\n this.onEndKeyPress(event);\n event.stopPropagation();\n event.preventDefault();\n break;\n default:\n this.onKeyPress(event);\n break;\n }\n\n this.$emit('keydown', event);\n },\n };\n },\n\n beginningOfListMethod () {\n return this.onBeginningOfList || this.jumpToEnd;\n },\n\n endOfListMethod () {\n return this.onEndOfList || this.jumpToBeginning;\n },\n\n activeItemEl () {\n return this.getListElement().querySelector('#' + this.highlightId);\n },\n\n isArrowKeyNav () {\n return this.navigationType === this.LIST_ITEM_NAVIGATION_TYPES.ARROW_KEYS;\n },\n\n listClasses () {\n return [\n 'd-dropdown-list',\n DROPDOWN_PADDING_CLASSES[this.padding],\n this.listClass,\n { 'd-context-menu-list': this.openOnContext },\n ];\n },\n\n shouldOpenWithArrowKeys () {\n return !this.openOnContext;\n },\n },\n\n methods: {\n onMouseHighlight (e) {\n const liElement = e.target.closest('li');\n\n if (liElement && liElement.role && this.highlightId !== liElement.id) {\n this.setHighlightId(liElement.id);\n liElement.focus();\n }\n },\n\n getListElement () {\n return this.$refs.listWrapper;\n },\n\n clearHighlightIndex () {\n this.setHighlightIndex(-1);\n },\n\n afterHighlight () {\n if (this.highlightIndex === this._itemsLength() - 1) {\n return;\n }\n\n this.$emit('highlight', this.highlightIndex);\n },\n\n updateInitialHighlightIndex (isPopoverOpen) {\n this.isOpen = isPopoverOpen;\n\n if (isPopoverOpen) {\n if (this.openedWithKeyboard && this.isArrowKeyNav) {\n this.setHighlightIndex(0);\n }\n this.$emit('opened', true);\n } else {\n this.clearHighlightIndex();\n this.openedWithKeyboard = false;\n this.$emit('opened', false);\n }\n },\n\n onSpaceKey () {\n if (!this.open) {\n this.openedWithKeyboard = true;\n }\n },\n\n onEnterKey () {\n if (!this.open) {\n this.openedWithKeyboard = true;\n }\n },\n\n onUpKeyPress () {\n if (!this.isOpen) {\n this.openedWithKeyboard = true;\n return;\n }\n if (this.isArrowKeyNav) {\n return this.onUpKey();\n }\n },\n\n onDownKeyPress () {\n if (!this.isOpen) {\n this.openedWithKeyboard = true;\n return;\n }\n if (this.isArrowKeyNav) {\n return this.onDownKey();\n }\n },\n\n onHomeKeyPress () {\n if (!this.isOpen || !this.isArrowKeyNav) {\n return;\n }\n\n return this.onHomeKey();\n },\n\n onEndKeyPress () {\n if (!this.isOpen || !this.isArrowKeyNav) {\n return;\n }\n\n return this.onEndKey();\n },\n\n onKeyPress (e) {\n if (!this.isOpen || !this.isArrowKeyNav || !this.isValidLetter(e.key)) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n return this.onNavigationKey(e.key);\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtPopover","KeyboardNavigation","padding","DROPDOWN_PADDING_CLASSES","item","getUniqueString","LIST_ITEM_NAVIGATION_TYPES","t","appendTo","POPOVER_APPEND_TO_VALUES","EVENT_KEYNAMES","value","isPopoverOpen","event","liElement","_hoisted_1","_openBlock","_createBlock","_component_dt_popover","_mergeProps","$props","$data","$options","_ctx","_toHandlers","_withCtx","attrs","_renderSlot","close","_createElementVNode","_normalizeClass","args","_cache"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const h=require("../../common/constants/index.cjs"),n=require("./input-constants.cjs"),d=require("../../common/utils/index.cjs"),m=require("../../common/mixins/input.cjs"),t=require("vue"),g=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),S=require("../validation-messages/validation-messages.cjs"),f={compatConfig:{MODE:3},name:"DtInput",components:{DtValidationMessages:S.default},mixins:[m.MessagesMixin],inheritAttrs:!1,props:{name:{type:String,default:""},type:{type:String,default:n.INPUT_TYPES.TEXT,validator:e=>Object.values(n.INPUT_TYPES).includes(e)},modelValue:{type:[String,Number],default:""},disabled:{type:Boolean,default:!1},label:{type:String,default:""},labelVisible:{type:Boolean,default:!0},description:{type:String,default:""},size:{type:String,default:"md",validator:e=>Object.values(n.INPUT_SIZES).includes(e)},inputClass:{type:[String,Object,Array],default:""},inputWrapperClass:{type:[String,Object,Array],default:""},currentLength:{type:Number,default:null},retainWarning:{type:Boolean,default:!1},validate:{type:Object,default:null},hidden:{type:Boolean,default:!1}},emits:["input","blur","clear","focus","focusin","focusout","update:modelValue","update:length","update:invalid"],data(){return{isInputFocused:!1,isInvalid:!1,defaultLength:0,hasSlotContent:d.hasSlotContent}},computed:{isTextarea(){return this.type===n.INPUT_TYPES.TEXTAREA},isDefaultSize(){return this.size===n.INPUT_SIZES.DEFAULT},iconSize(){return n.INPUT_ICON_SIZES[this.size]},isValidSize(){return Object.values(n.INPUT_SIZES).includes(this.size)},isValidDescriptionSize(){return Object.values(h.DESCRIPTION_SIZE_TYPES).includes(this.size)},inputComponent(){return this.isTextarea?"textarea":"input"},inputListeners(){return{input:async e=>{let a=e.target.value;this.type===n.INPUT_TYPES.FILE&&(a=Array.from(e.target.files).map(r=>r.name)),this.$emit("input",a),this.$emit("update:modelValue",a)},blur:e=>{this.isInputFocused=!1,this.onBlur(e)},focus:e=>{this.isInputFocused=!0,this.$emit("focus",e)},focusin:e=>this.$emit("focusin",e),focusout:e=>this.$emit("focusout",e)}},descriptionKey(){return`input-description-${d.getUniqueString()}`},inputState(){return d.getValidationState(this.validationMessages)},defaultLengthCalculation(){return this.calculateLength(this.modelValue)},validationProps(){var e,a,s,r,u,i,o,l,c,p;return{length:{description:(a=(e=this==null?void 0:this.validate)==null?void 0:e.length)==null?void 0:a.description,max:(r=(s=this==null?void 0:this.validate)==null?void 0:s.length)==null?void 0:r.max,warn:(i=(u=this==null?void 0:this.validate)==null?void 0:u.length)==null?void 0:i.warn,message:(l=(o=this==null?void 0:this.validate)==null?void 0:o.length)==null?void 0:l.message,limitMaxLength:(p=(c=this==null?void 0:this.validate)==null?void 0:c.length)!=null&&p.limitMaxLength?this.validate.length.limitMaxLength:!1}}},validationMessages(){return this.showLengthLimitValidation?this.formattedMessages.concat([this.inputLengthErrorMessage()]):this.formattedMessages},showInputState(){return this.showMessages&&this.inputState},inputLength(){return this.currentLength?this.currentLength:this.defaultLengthCalculation},inputLengthState(){return this.inputLength<this.validationProps.length.warn?null:this.inputLength<=this.validationProps.length.max?this.validationProps.length.warn?h.VALIDATION_MESSAGE_TYPES.WARNING:null:h.VALIDATION_MESSAGE_TYPES.ERROR},shouldValidateLength(){return!!(this.validationProps.length.description&&this.validationProps.length.max)},shouldLimitMaxLength(){return this.shouldValidateLength&&this.validationProps.length.limitMaxLength},showLengthLimitValidation(){return this.shouldValidateLength&&this.inputLengthState!==null&&this.validationProps.length.message&&(this.retainWarning||this.isInputFocused||this.isInvalid)},sizeModifierClass(){return this.isDefaultSize||!this.isValidSize?"":n.INPUT_SIZE_CLASSES[this.inputComponent][this.size]},stateClass(){return[n.INPUT_STATE_CLASSES[this.inputState]]}},watch:{isInvalid(e){this.$emit("update:invalid",e)},modelValue:{immediate:!0,handler(e){this.shouldValidateLength&&this.validateLength(this.inputLength),this.currentLength==null&&this.$emit("update:length",this.calculateLength(e))}}},beforeMount(){this.descriptionSizeClasses=n.DESCRIPTION_SIZE_CLASSES,this.labelSizeClasses=n.LABEL_SIZE_CLASSES},methods:{removeClassStyleAttrs:d.removeClassStyleAttrs,addClassStyleAttrs:d.addClassStyleAttrs,inputClasses(){return["d-input__input",this.inputComponent==="input"?"d-input":"d-textarea",{[this.stateClass]:this.showInputState,"d-input-icon--left":this.$slots.leftIcon,"d-input-icon--right":this.$slots.rightIcon},this.sizeModifierClass,this.inputClass]},inputWrapperClasses(){return this.hidden?[]:["d-input__wrapper",{[this.stateClass]:this.showInputState},this.inputWrapperClass]},calculateLength(e){return typeof e!="string"?0:[...e].length},inputLengthErrorMessage(){return{message:this.validationProps.length.message,type:this.inputLengthState}},onBlur(e){var a;(a=this.$refs.container)!=null&&a.contains(e.relatedTarget)||this.$emit("blur",e)},emitClearEvents(){this.$emit("input",""),this.$emit("clear"),this.$emit("update:modelValue","")},blur(){this.$refs.input.blur()},focus(){this.$refs.input.focus()},select(){this.$refs.input.select()},getMessageKey(e,a){return`message-${e}-${a}`},validateLength(e){this.isInvalid=e>this.validationProps.length.max},clearInput(){this.$refs.input.value="",this.$refs.input.focus(),this.emitClearEvents()}}},v=["aria-details"],C=["id"],_={key:0},L={key:1,"data-qa":"dt-input-length-description",class:"d-input__length-description"},y=["read-only"],E=["value","name","disabled","autocomplete","maxlength"],I=["value","name","type","disabled","autocomplete","maxlength"];function b(e,a,s,r,u,i){const o=t.resolveComponent("dt-validation-messages");return t.openBlock(),t.createElementBlock("div",t.mergeProps({ref:"container",class:["d-input__root",{"d-input--hidden":s.hidden}]},i.addClassStyleAttrs(e.$attrs),{"data-qa":"dt-input"}),[t.createElementVNode("label",{class:"d-input__label","aria-details":e.$slots.description||s.description?i.descriptionKey:void 0,"data-qa":"dt-input-label-wrapper"},[t.renderSlot(e.$slots,"labelSlot",{},()=>[s.labelVisible&&s.label?(t.openBlock(),t.createElementBlock("div",{key:0,ref:"label","data-qa":"dt-input-label",class:t.normalizeClass(["d-input__label-text","d-label",e.labelSizeClasses[s.size]])},t.toDisplayString(s.label),3)):t.createCommentVNode("",!0)]),u.hasSlotContent(e.$slots.description)||s.description||i.shouldValidateLength?(t.openBlock(),t.createElementBlock("div",{key:0,id:i.descriptionKey,ref:"description",class:t.normalizeClass(["d-input__description","d-description",e.descriptionSizeClasses[s.size]]),"data-qa":"dt-input-description"},[u.hasSlotContent(e.$slots.description)||s.description?(t.openBlock(),t.createElementBlock("div",_,[t.renderSlot(e.$slots,"description",{},()=>[t.createTextVNode(t.toDisplayString(s.description),1)])])):t.createCommentVNode("",!0),i.shouldValidateLength?(t.openBlock(),t.createElementBlock("div",L,t.toDisplayString(i.validationProps.length.description),1)):t.createCommentVNode("",!0)],10,C)):t.createCommentVNode("",!0),t.createElementVNode("div",{class:t.normalizeClass(i.inputWrapperClasses()),"read-only":s.disabled===!0?!0:void 0},[t.createElementVNode("span",{class:"d-input-icon d-input-icon--left","data-qa":"dt-input-left-icon-wrapper",onFocusout:a[0]||(a[0]=(...l)=>i.onBlur&&i.onBlur(...l))},[t.renderSlot(e.$slots,"leftIcon",{iconSize:i.iconSize})],32),i.isTextarea?(t.openBlock(),t.createElementBlock("textarea",t.mergeProps({key:0,ref:"input",value:s.modelValue,name:s.name,disabled:s.disabled,autocomplete:e.$attrs.autocomplete??"off",class:i.inputClasses(),maxlength:i.shouldLimitMaxLength?i.validationProps.length.max:null,"data-qa":"dt-input-input"},i.removeClassStyleAttrs(e.$attrs),t.toHandlers(i.inputListeners,!0)),null,16,E)):(t.openBlock(),t.createElementBlock("input",t.mergeProps({key:1,ref:"input",value:s.modelValue,name:s.name,type:s.type,disabled:s.disabled,autocomplete:e.$attrs.autocomplete??"off",class:i.inputClasses(),maxlength:i.shouldLimitMaxLength?i.validationProps.length.max:null,"data-qa":"dt-input-input"},i.removeClassStyleAttrs(e.$attrs),t.toHandlers(i.inputListeners,!0)),null,16,I)),t.createElementVNode("span",{class:"d-input-icon d-input-icon--right","data-qa":"dt-input-right-icon-wrapper",onFocusout:a[1]||(a[1]=(...l)=>i.onBlur&&i.onBlur(...l))},[t.renderSlot(e.$slots,"rightIcon",{iconSize:i.iconSize,clear:i.clearInput})],32)],10,y)],8,v),t.createVNode(o,t.mergeProps({"validation-messages":i.validationMessages,"show-messages":e.showMessages,class:e.messagesClass},e.messagesChildProps,{"data-qa":"dt-input-messages"}),null,16,["validation-messages","show-messages","class"])],16)}const P=g._(f,[["render",b]]);exports.default=P;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const h=require("../../common/constants/index.cjs"),n=require("./input-constants.cjs"),d=require("../../common/utils/index.cjs"),m=require("../../common/mixins/input.cjs"),t=require("vue"),g=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),S=require("../validation-messages/validation-messages.cjs"),f={compatConfig:{MODE:3},name:"DtInput",components:{DtValidationMessages:S.default},mixins:[m.MessagesMixin],inheritAttrs:!1,props:{name:{type:String,default:""},type:{type:String,default:n.INPUT_TYPES.TEXT,validator:e=>Object.values(n.INPUT_TYPES).includes(e)},modelValue:{type:[String,Number],default:""},disabled:{type:Boolean,default:!1},label:{type:String,default:""},labelVisible:{type:Boolean,default:!0},description:{type:String,default:""},size:{type:String,default:"md",validator:e=>Object.values(n.INPUT_SIZES).includes(e)},inputClass:{type:[String,Object,Array],default:""},inputWrapperClass:{type:[String,Object,Array],default:""},rootClass:{type:[String,Object,Array],default:""},currentLength:{type:Number,default:null},retainWarning:{type:Boolean,default:!1},validate:{type:Object,default:null},hidden:{type:Boolean,default:!1}},emits:["input","blur","clear","focus","focusin","focusout","update:modelValue","update:length","update:invalid"],data(){return{isInputFocused:!1,isInvalid:!1,defaultLength:0,hasSlotContent:d.hasSlotContent}},computed:{isTextarea(){return this.type===n.INPUT_TYPES.TEXTAREA},isDefaultSize(){return this.size===n.INPUT_SIZES.DEFAULT},iconSize(){return n.INPUT_ICON_SIZES[this.size]},isValidSize(){return Object.values(n.INPUT_SIZES).includes(this.size)},isValidDescriptionSize(){return Object.values(h.DESCRIPTION_SIZE_TYPES).includes(this.size)},inputComponent(){return this.isTextarea?"textarea":"input"},inputListeners(){return{input:async e=>{let a=e.target.value;this.type===n.INPUT_TYPES.FILE&&(a=Array.from(e.target.files).map(r=>r.name)),this.$emit("input",a),this.$emit("update:modelValue",a)},blur:e=>{this.isInputFocused=!1,this.onBlur(e)},focus:e=>{this.isInputFocused=!0,this.$emit("focus",e)},focusin:e=>this.$emit("focusin",e),focusout:e=>this.$emit("focusout",e)}},descriptionKey(){return`input-description-${d.getUniqueString()}`},inputState(){return d.getValidationState(this.validationMessages)},defaultLengthCalculation(){return this.calculateLength(this.modelValue)},validationProps(){var e,a,s,r,u,i,o,l,c,p;return{length:{description:(a=(e=this==null?void 0:this.validate)==null?void 0:e.length)==null?void 0:a.description,max:(r=(s=this==null?void 0:this.validate)==null?void 0:s.length)==null?void 0:r.max,warn:(i=(u=this==null?void 0:this.validate)==null?void 0:u.length)==null?void 0:i.warn,message:(l=(o=this==null?void 0:this.validate)==null?void 0:o.length)==null?void 0:l.message,limitMaxLength:(p=(c=this==null?void 0:this.validate)==null?void 0:c.length)!=null&&p.limitMaxLength?this.validate.length.limitMaxLength:!1}}},validationMessages(){return this.showLengthLimitValidation?this.formattedMessages.concat([this.inputLengthErrorMessage()]):this.formattedMessages},showInputState(){return this.showMessages&&this.inputState},inputLength(){return this.currentLength?this.currentLength:this.defaultLengthCalculation},inputLengthState(){return this.inputLength<this.validationProps.length.warn?null:this.inputLength<=this.validationProps.length.max?this.validationProps.length.warn?h.VALIDATION_MESSAGE_TYPES.WARNING:null:h.VALIDATION_MESSAGE_TYPES.ERROR},shouldValidateLength(){return!!(this.validationProps.length.description&&this.validationProps.length.max)},shouldLimitMaxLength(){return this.shouldValidateLength&&this.validationProps.length.limitMaxLength},showLengthLimitValidation(){return this.shouldValidateLength&&this.inputLengthState!==null&&this.validationProps.length.message&&(this.retainWarning||this.isInputFocused||this.isInvalid)},sizeModifierClass(){return this.isDefaultSize||!this.isValidSize?"":n.INPUT_SIZE_CLASSES[this.inputComponent][this.size]},stateClass(){return[n.INPUT_STATE_CLASSES[this.inputState]]}},watch:{isInvalid(e){this.$emit("update:invalid",e)},modelValue:{immediate:!0,handler(e){this.shouldValidateLength&&this.validateLength(this.inputLength),this.currentLength==null&&this.$emit("update:length",this.calculateLength(e))}}},beforeMount(){this.descriptionSizeClasses=n.DESCRIPTION_SIZE_CLASSES,this.labelSizeClasses=n.LABEL_SIZE_CLASSES},methods:{removeClassStyleAttrs:d.removeClassStyleAttrs,addClassStyleAttrs:d.addClassStyleAttrs,inputClasses(){return["d-input__input",this.inputComponent==="input"?"d-input":"d-textarea",{[this.stateClass]:this.showInputState,"d-input-icon--left":this.$slots.leftIcon,"d-input-icon--right":this.$slots.rightIcon},this.sizeModifierClass,this.inputClass]},inputWrapperClasses(){return this.hidden?[]:["d-input__wrapper",{[this.stateClass]:this.showInputState},this.inputWrapperClass]},calculateLength(e){return typeof e!="string"?0:[...e].length},inputLengthErrorMessage(){return{message:this.validationProps.length.message,type:this.inputLengthState}},onBlur(e){var a;(a=this.$refs.container)!=null&&a.contains(e.relatedTarget)||this.$emit("blur",e)},emitClearEvents(){this.$emit("input",""),this.$emit("clear"),this.$emit("update:modelValue","")},blur(){this.$refs.input.blur()},focus(){this.$refs.input.focus()},select(){this.$refs.input.select()},getMessageKey(e,a){return`message-${e}-${a}`},validateLength(e){this.isInvalid=e>this.validationProps.length.max},clearInput(){this.$refs.input.value="",this.$refs.input.focus(),this.emitClearEvents()}}},v=["aria-details"],C=["id"],_={key:0},L={key:1,"data-qa":"dt-input-length-description",class:"d-input__length-description"},y=["read-only"],E=["value","name","disabled","autocomplete","maxlength"],I=["value","name","type","disabled","autocomplete","maxlength"];function b(e,a,s,r,u,i){const o=t.resolveComponent("dt-validation-messages");return t.openBlock(),t.createElementBlock("div",t.mergeProps({ref:"container",class:[s.rootClass,"d-input__root",{"d-input--hidden":s.hidden}]},i.addClassStyleAttrs(e.$attrs),{"data-qa":"dt-input"}),[t.createElementVNode("label",{class:"d-input__label","aria-details":e.$slots.description||s.description?i.descriptionKey:void 0,"data-qa":"dt-input-label-wrapper"},[t.renderSlot(e.$slots,"labelSlot",{},()=>[s.labelVisible&&s.label?(t.openBlock(),t.createElementBlock("div",{key:0,ref:"label","data-qa":"dt-input-label",class:t.normalizeClass(["d-input__label-text","d-label",e.labelSizeClasses[s.size]])},t.toDisplayString(s.label),3)):t.createCommentVNode("",!0)]),u.hasSlotContent(e.$slots.description)||s.description||i.shouldValidateLength?(t.openBlock(),t.createElementBlock("div",{key:0,id:i.descriptionKey,ref:"description",class:t.normalizeClass(["d-input__description","d-description",e.descriptionSizeClasses[s.size]]),"data-qa":"dt-input-description"},[u.hasSlotContent(e.$slots.description)||s.description?(t.openBlock(),t.createElementBlock("div",_,[t.renderSlot(e.$slots,"description",{},()=>[t.createTextVNode(t.toDisplayString(s.description),1)])])):t.createCommentVNode("",!0),i.shouldValidateLength?(t.openBlock(),t.createElementBlock("div",L,t.toDisplayString(i.validationProps.length.description),1)):t.createCommentVNode("",!0)],10,C)):t.createCommentVNode("",!0),t.createElementVNode("div",{class:t.normalizeClass(i.inputWrapperClasses()),"read-only":s.disabled===!0?!0:void 0},[t.createElementVNode("span",{class:"d-input-icon d-input-icon--left","data-qa":"dt-input-left-icon-wrapper",onFocusout:a[0]||(a[0]=(...l)=>i.onBlur&&i.onBlur(...l))},[t.renderSlot(e.$slots,"leftIcon",{iconSize:i.iconSize})],32),i.isTextarea?(t.openBlock(),t.createElementBlock("textarea",t.mergeProps({key:0,ref:"input",value:s.modelValue,name:s.name,disabled:s.disabled,autocomplete:e.$attrs.autocomplete??"off",class:i.inputClasses(),maxlength:i.shouldLimitMaxLength?i.validationProps.length.max:null,"data-qa":"dt-input-input"},i.removeClassStyleAttrs(e.$attrs),t.toHandlers(i.inputListeners,!0)),null,16,E)):(t.openBlock(),t.createElementBlock("input",t.mergeProps({key:1,ref:"input",value:s.modelValue,name:s.name,type:s.type,disabled:s.disabled,autocomplete:e.$attrs.autocomplete??"off",class:i.inputClasses(),maxlength:i.shouldLimitMaxLength?i.validationProps.length.max:null,"data-qa":"dt-input-input"},i.removeClassStyleAttrs(e.$attrs),t.toHandlers(i.inputListeners,!0)),null,16,I)),t.createElementVNode("span",{class:"d-input-icon d-input-icon--right","data-qa":"dt-input-right-icon-wrapper",onFocusout:a[1]||(a[1]=(...l)=>i.onBlur&&i.onBlur(...l))},[t.renderSlot(e.$slots,"rightIcon",{iconSize:i.iconSize,clear:i.clearInput})],32)],10,y)],8,v),t.createVNode(o,t.mergeProps({"validation-messages":i.validationMessages,"show-messages":e.showMessages,class:e.messagesClass},e.messagesChildProps,{"data-qa":"dt-input-messages"}),null,16,["validation-messages","show-messages","class"])],16)}const P=g._(f,[["render",b]]);exports.default=P;
2
2
  //# sourceMappingURL=input.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.cjs","sources":["../../../components/input/input.vue"],"sourcesContent":["<template>\n <div\n ref=\"container\"\n :class=\"['d-input__root', { 'd-input--hidden': hidden }]\"\n v-bind=\"addClassStyleAttrs($attrs)\"\n data-qa=\"dt-input\"\n >\n <label\n class=\"d-input__label\"\n :aria-details=\"$slots.description || description ? descriptionKey : undefined\"\n data-qa=\"dt-input-label-wrapper\"\n >\n <!-- @slot Slot for label, defaults to label prop -->\n <slot name=\"labelSlot\">\n <div\n v-if=\"labelVisible && label\"\n ref=\"label\"\n data-qa=\"dt-input-label\"\n :class=\"[\n 'd-input__label-text',\n 'd-label',\n labelSizeClasses[size],\n ]\"\n >\n {{ label }}\n </div>\n </slot>\n <div\n v-if=\"hasSlotContent($slots.description) || description || shouldValidateLength\"\n :id=\"descriptionKey\"\n ref=\"description\"\n :class=\"[\n 'd-input__description',\n 'd-description',\n descriptionSizeClasses[size],\n ]\"\n data-qa=\"dt-input-description\"\n >\n <div\n v-if=\"hasSlotContent($slots.description) || description\"\n >\n <!-- @slot Slot for description, defaults to description prop -->\n <slot name=\"description\">{{ description }}</slot>\n </div>\n <div\n v-if=\"shouldValidateLength\"\n data-qa=\"dt-input-length-description\"\n class=\"d-input__length-description\"\n >\n {{ validationProps.length.description }}\n </div>\n </div>\n <div\n :class=\"inputWrapperClasses()\"\n :read-only=\"disabled === true ? true : undefined\"\n >\n <span\n class=\"d-input-icon d-input-icon--left\"\n data-qa=\"dt-input-left-icon-wrapper\"\n @focusout=\"onBlur\"\n >\n <!-- @slot Slot for left icon -->\n <slot\n name=\"leftIcon\"\n :icon-size=\"iconSize\"\n />\n </span>\n <textarea\n v-if=\"isTextarea\"\n ref=\"input\"\n :value=\"modelValue\"\n :name=\"name\"\n :disabled=\"disabled\"\n :autocomplete=\"$attrs.autocomplete ?? 'off'\"\n :class=\"inputClasses()\"\n :maxlength=\"shouldLimitMaxLength ? validationProps.length.max : null\"\n data-qa=\"dt-input-input\"\n v-bind=\"removeClassStyleAttrs($attrs)\"\n v-on=\"inputListeners\"\n />\n <input\n v-else\n ref=\"input\"\n :value=\"modelValue\"\n :name=\"name\"\n :type=\"type\"\n :disabled=\"disabled\"\n :autocomplete=\"$attrs.autocomplete ?? 'off'\"\n :class=\"inputClasses()\"\n :maxlength=\"shouldLimitMaxLength ? validationProps.length.max : null\"\n data-qa=\"dt-input-input\"\n v-bind=\"removeClassStyleAttrs($attrs)\"\n v-on=\"inputListeners\"\n >\n <span\n class=\"d-input-icon d-input-icon--right\"\n data-qa=\"dt-input-right-icon-wrapper\"\n @focusout=\"onBlur\"\n >\n <!-- @slot Slot for right icon -->\n <slot\n name=\"rightIcon\"\n :icon-size=\"iconSize\"\n :clear=\"clearInput\"\n />\n </span>\n </div>\n </label>\n <dt-validation-messages\n :validation-messages=\"validationMessages\"\n :show-messages=\"showMessages\"\n :class=\"messagesClass\"\n v-bind=\"messagesChildProps\"\n data-qa=\"dt-input-messages\"\n />\n </div>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport { DESCRIPTION_SIZE_TYPES, VALIDATION_MESSAGE_TYPES } from '@/common/constants';\nimport {\n INPUT_TYPES,\n INPUT_SIZES,\n INPUT_SIZE_CLASSES,\n INPUT_ICON_SIZES,\n INPUT_STATE_CLASSES,\n DESCRIPTION_SIZE_CLASSES,\n LABEL_SIZE_CLASSES,\n} from './input_constants';\nimport {\n getUniqueString,\n getValidationState,\n hasSlotContent,\n removeClassStyleAttrs,\n addClassStyleAttrs,\n} from '@/common/utils';\nimport { DtValidationMessages } from '@/components/validation_messages';\nimport { MessagesMixin } from '@/common/mixins/input';\n\n/**\n * An input field is an input control that allows users to enter alphanumeric information.\n * It can have a range of options and supports single line and multi-line lengths,\n * as well as varying formats, including numbers, masked passwords, etc.\n * @property {Boolean} placeholder attribute\n * @see https://dialtone.dialpad.com/components/input.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtInput',\n\n components: { DtValidationMessages },\n\n mixins: [MessagesMixin],\n\n inheritAttrs: false,\n\n props: {\n /**\n * Name property of the input element\n */\n name: {\n type: String,\n default: '',\n },\n\n /**\n * Type of the input.\n * When `textarea` a `<textarea>` element will be rendered instead of an `<input>` element.\n * @values text, password, email, number, textarea, date, time, file, tel, search\n * @default 'text'\n */\n type: {\n type: String,\n default: INPUT_TYPES.TEXT,\n validator: (t) => Object.values(INPUT_TYPES).includes(t),\n },\n\n /**\n * Value of the input\n */\n modelValue: {\n type: [String, Number],\n default: '',\n },\n\n /**\n * Disables the input\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Label for the input\n */\n label: {\n type: String,\n default: '',\n },\n\n /**\n * Determines visibility of input label.\n * @values true, false\n */\n labelVisible: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Description for the input\n */\n description: {\n type: String,\n default: '',\n },\n\n /**\n * Size of the input, one of `xs`, `sm`, `md`, `lg`, `xl`\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (t) => Object.values(INPUT_SIZES).includes(t),\n },\n\n /**\n * Additional class name for the input element.\n * Can accept String, Object, and Array, i.e. has the\n * same API as Vue's built-in handling of the class attribute.\n */\n inputClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * Additional class name for the input wrapper element.\n * Can accept all of String, Object, and Array, i.e. has the\n * same api as Vue's built-in handling of the class attribute.\n */\n inputWrapperClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * The current character length that the user has entered into the input.\n * This will only need to be used if you are using `validate.length` and\n * the string contains abnormal characters.\n * For example, an emoji could take up many characters in the input, but should only count as 1 character.\n * If no number is provided, a built-in length calculation will be used for the length validation.\n */\n currentLength: {\n type: Number,\n default: null,\n },\n\n /**\n * Whether the input will continue to display a warning validation message even if the input has lost focus.\n */\n retainWarning: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Validation for the input. Supports maximum length validation with the structure:\n * `{ \"length\": {\"description\": string, \"max\": number, \"warn\": number, \"message\": string,\n * \"limitMaxLength\": boolean }}`\n */\n validate: {\n type: Object,\n default: null,\n },\n\n /**\n * hidden allows to use input without the element visually present in DOM\n */\n hidden: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Native input event\n *\n * @event input\n * @type {String}\n */\n 'input',\n\n /**\n * Native input blur event\n *\n * @event blur\n * @type {FocusEvent}\n */\n 'blur',\n\n /**\n * Input clear event\n *\n * @event clear\n */\n 'clear',\n\n /**\n * Native input focus event\n *\n * @event focus\n * @type {FocusEvent}\n */\n 'focus',\n\n /**\n * Native input focusin event\n *\n * @event focusin\n * @type {FocusEvent}\n */\n 'focusin',\n\n /**\n * Native input focusout event\n *\n * @event focusout\n * @type {FocusEvent}\n */\n 'focusout',\n\n /**\n * Event fired to sync the modelValue prop with the parent component\n * @event update:modelValue\n */\n 'update:modelValue',\n\n /**\n * Length of the input when currentLength prop is not passed\n *\n * @event update:length\n * @type {Number}\n */\n 'update:length',\n\n /**\n * Result of the input validation\n *\n * @event update:invalid\n * @type {Boolean}\n */\n 'update:invalid',\n ],\n\n data () {\n return {\n isInputFocused: false,\n isInvalid: false,\n defaultLength: 0,\n hasSlotContent,\n };\n },\n\n computed: {\n\n isTextarea () {\n return this.type === INPUT_TYPES.TEXTAREA;\n },\n\n isDefaultSize () {\n return this.size === INPUT_SIZES.DEFAULT;\n },\n\n iconSize () {\n return INPUT_ICON_SIZES[this.size];\n },\n\n isValidSize () {\n return Object.values(INPUT_SIZES).includes(this.size);\n },\n\n isValidDescriptionSize () {\n return Object.values(DESCRIPTION_SIZE_TYPES).includes(this.size);\n },\n\n inputComponent () {\n if (this.isTextarea) {\n return 'textarea';\n }\n\n return 'input';\n },\n\n inputListeners () {\n return {\n input: async event => {\n let val = event.target.value;\n if (this.type === INPUT_TYPES.FILE) {\n const files = Array.from(event.target.files);\n val = files.map(file => file.name);\n }\n this.$emit('input', val);\n this.$emit('update:modelValue', val);\n },\n\n blur: event => {\n this.isInputFocused = false;\n this.onBlur(event);\n },\n\n focus: event => {\n this.isInputFocused = true;\n this.$emit('focus', event);\n },\n\n focusin: event => this.$emit('focusin', event),\n focusout: event => this.$emit('focusout', event),\n };\n },\n\n descriptionKey () {\n return `input-description-${getUniqueString()}`;\n },\n\n inputState () {\n return getValidationState(this.validationMessages);\n },\n\n defaultLengthCalculation () {\n return this.calculateLength(this.modelValue);\n },\n\n validationProps () {\n return {\n length: {\n description: this?.validate?.length?.description,\n max: this?.validate?.length?.max,\n warn: this?.validate?.length?.warn,\n message: this?.validate?.length?.message,\n limitMaxLength: this?.validate?.length?.limitMaxLength ? this.validate.length.limitMaxLength : false,\n },\n };\n },\n\n validationMessages () {\n // Add length validation message if exists\n if (this.showLengthLimitValidation) {\n return this.formattedMessages.concat([this.inputLengthErrorMessage()]);\n }\n\n return this.formattedMessages;\n },\n\n showInputState () {\n return this.showMessages && this.inputState;\n },\n\n inputLength () {\n return this.currentLength ? this.currentLength : this.defaultLengthCalculation;\n },\n\n inputLengthState () {\n if (this.inputLength < this.validationProps.length.warn) {\n return null;\n } else if (this.inputLength <= this.validationProps.length.max) {\n return this.validationProps.length.warn ? VALIDATION_MESSAGE_TYPES.WARNING : null;\n } else {\n return VALIDATION_MESSAGE_TYPES.ERROR;\n }\n },\n\n shouldValidateLength () {\n return !!(\n this.validationProps.length.description &&\n this.validationProps.length.max\n );\n },\n\n shouldLimitMaxLength () {\n return this.shouldValidateLength && this.validationProps.length.limitMaxLength;\n },\n\n // eslint-disable-next-line complexity\n showLengthLimitValidation () {\n return (\n this.shouldValidateLength &&\n this.inputLengthState !== null &&\n this.validationProps.length.message &&\n (this.retainWarning || this.isInputFocused || this.isInvalid)\n );\n },\n\n sizeModifierClass () {\n if (this.isDefaultSize || !this.isValidSize) {\n return '';\n }\n\n return INPUT_SIZE_CLASSES[this.inputComponent][this.size];\n },\n\n stateClass () {\n return [INPUT_STATE_CLASSES[this.inputState]];\n },\n },\n\n watch: {\n isInvalid (val) {\n this.$emit('update:invalid', val);\n },\n\n modelValue: {\n immediate: true,\n handler (newValue) {\n if (this.shouldValidateLength) {\n this.validateLength(this.inputLength);\n }\n\n if (this.currentLength == null) {\n this.$emit('update:length', this.calculateLength(newValue));\n }\n },\n },\n },\n\n beforeMount () {\n this.descriptionSizeClasses = DESCRIPTION_SIZE_CLASSES;\n this.labelSizeClasses = LABEL_SIZE_CLASSES;\n },\n\n methods: {\n removeClassStyleAttrs,\n addClassStyleAttrs,\n inputClasses () {\n return [\n 'd-input__input',\n this.inputComponent === 'input' ? 'd-input' : 'd-textarea',\n {\n [this.stateClass]: this.showInputState,\n 'd-input-icon--left': this.$slots.leftIcon,\n 'd-input-icon--right': this.$slots.rightIcon,\n },\n this.sizeModifierClass,\n this.inputClass,\n ];\n },\n\n inputWrapperClasses () {\n if (this.hidden) {\n return [];\n }\n return [\n 'd-input__wrapper',\n { [this.stateClass]: this.showInputState },\n this.inputWrapperClass,\n ];\n },\n\n calculateLength (value) {\n if (typeof value !== 'string') {\n return 0;\n }\n\n return [...value].length;\n },\n\n inputLengthErrorMessage () {\n return {\n message: this.validationProps.length.message,\n type: this.inputLengthState,\n };\n },\n\n onBlur (e) {\n // Do not emit a blur event if the target element is a child of this component\n if (!this.$refs.container?.contains(e.relatedTarget)) {\n this.$emit('blur', e);\n }\n },\n\n emitClearEvents () {\n this.$emit('input', '');\n this.$emit('clear');\n this.$emit('update:modelValue', '');\n },\n\n blur () {\n this.$refs.input.blur();\n },\n\n focus () {\n this.$refs.input.focus();\n },\n\n select () {\n this.$refs.input.select();\n },\n\n getMessageKey (type, index) {\n return `message-${type}-${index}`;\n },\n\n validateLength (length) {\n this.isInvalid = (length > this.validationProps.length.max);\n },\n\n clearInput () {\n this.$refs.input.value = '';\n this.$refs.input.focus();\n this.emitClearEvents();\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtValidationMessages","MessagesMixin","INPUT_TYPES","t","INPUT_SIZES","hasSlotContent","INPUT_ICON_SIZES","DESCRIPTION_SIZE_TYPES","event","val","file","getUniqueString","getValidationState","_b","_a","_d","_c","_f","_e","_h","_g","_j","_i","VALIDATION_MESSAGE_TYPES","INPUT_SIZE_CLASSES","INPUT_STATE_CLASSES","newValue","DESCRIPTION_SIZE_CLASSES","LABEL_SIZE_CLASSES","removeClassStyleAttrs","addClassStyleAttrs","value","type","index","length","_hoisted_1","_hoisted_2","_hoisted_5","_hoisted_6","_hoisted_7","_openBlock","_createElementBlock","_mergeProps","$props","$options","_ctx","_createElementVNode","_renderSlot","_normalizeClass","_createCommentVNode","$data","_hoisted_3","_createTextVNode","_toDisplayString","_hoisted_4","args","_toHandlers","_createVNode","_component_dt_validation_messages"],"mappings":"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"}
1
+ {"version":3,"file":"input.cjs","sources":["../../../components/input/input.vue"],"sourcesContent":["<template>\n <div\n ref=\"container\"\n :class=\"[rootClass, 'd-input__root', { 'd-input--hidden': hidden }]\"\n v-bind=\"addClassStyleAttrs($attrs)\"\n data-qa=\"dt-input\"\n >\n <label\n class=\"d-input__label\"\n :aria-details=\"$slots.description || description ? descriptionKey : undefined\"\n data-qa=\"dt-input-label-wrapper\"\n >\n <!-- @slot Slot for label, defaults to label prop -->\n <slot name=\"labelSlot\">\n <div\n v-if=\"labelVisible && label\"\n ref=\"label\"\n data-qa=\"dt-input-label\"\n :class=\"[\n 'd-input__label-text',\n 'd-label',\n labelSizeClasses[size],\n ]\"\n >\n {{ label }}\n </div>\n </slot>\n <div\n v-if=\"hasSlotContent($slots.description) || description || shouldValidateLength\"\n :id=\"descriptionKey\"\n ref=\"description\"\n :class=\"[\n 'd-input__description',\n 'd-description',\n descriptionSizeClasses[size],\n ]\"\n data-qa=\"dt-input-description\"\n >\n <div\n v-if=\"hasSlotContent($slots.description) || description\"\n >\n <!-- @slot Slot for description, defaults to description prop -->\n <slot name=\"description\">{{ description }}</slot>\n </div>\n <div\n v-if=\"shouldValidateLength\"\n data-qa=\"dt-input-length-description\"\n class=\"d-input__length-description\"\n >\n {{ validationProps.length.description }}\n </div>\n </div>\n <div\n :class=\"inputWrapperClasses()\"\n :read-only=\"disabled === true ? true : undefined\"\n >\n <span\n class=\"d-input-icon d-input-icon--left\"\n data-qa=\"dt-input-left-icon-wrapper\"\n @focusout=\"onBlur\"\n >\n <!-- @slot Slot for left icon -->\n <slot\n name=\"leftIcon\"\n :icon-size=\"iconSize\"\n />\n </span>\n <textarea\n v-if=\"isTextarea\"\n ref=\"input\"\n :value=\"modelValue\"\n :name=\"name\"\n :disabled=\"disabled\"\n :autocomplete=\"$attrs.autocomplete ?? 'off'\"\n :class=\"inputClasses()\"\n :maxlength=\"shouldLimitMaxLength ? validationProps.length.max : null\"\n data-qa=\"dt-input-input\"\n v-bind=\"removeClassStyleAttrs($attrs)\"\n v-on=\"inputListeners\"\n />\n <input\n v-else\n ref=\"input\"\n :value=\"modelValue\"\n :name=\"name\"\n :type=\"type\"\n :disabled=\"disabled\"\n :autocomplete=\"$attrs.autocomplete ?? 'off'\"\n :class=\"inputClasses()\"\n :maxlength=\"shouldLimitMaxLength ? validationProps.length.max : null\"\n data-qa=\"dt-input-input\"\n v-bind=\"removeClassStyleAttrs($attrs)\"\n v-on=\"inputListeners\"\n >\n <span\n class=\"d-input-icon d-input-icon--right\"\n data-qa=\"dt-input-right-icon-wrapper\"\n @focusout=\"onBlur\"\n >\n <!-- @slot Slot for right icon -->\n <slot\n name=\"rightIcon\"\n :icon-size=\"iconSize\"\n :clear=\"clearInput\"\n />\n </span>\n </div>\n </label>\n <dt-validation-messages\n :validation-messages=\"validationMessages\"\n :show-messages=\"showMessages\"\n :class=\"messagesClass\"\n v-bind=\"messagesChildProps\"\n data-qa=\"dt-input-messages\"\n />\n </div>\n</template>\n\n<script>\n/* eslint-disable max-lines */\nimport { DESCRIPTION_SIZE_TYPES, VALIDATION_MESSAGE_TYPES } from '@/common/constants';\nimport {\n INPUT_TYPES,\n INPUT_SIZES,\n INPUT_SIZE_CLASSES,\n INPUT_ICON_SIZES,\n INPUT_STATE_CLASSES,\n DESCRIPTION_SIZE_CLASSES,\n LABEL_SIZE_CLASSES,\n} from './input_constants';\nimport {\n getUniqueString,\n getValidationState,\n hasSlotContent,\n removeClassStyleAttrs,\n addClassStyleAttrs,\n} from '@/common/utils';\nimport { DtValidationMessages } from '@/components/validation_messages';\nimport { MessagesMixin } from '@/common/mixins/input';\n\n/**\n * An input field is an input control that allows users to enter alphanumeric information.\n * It can have a range of options and supports single line and multi-line lengths,\n * as well as varying formats, including numbers, masked passwords, etc.\n * @property {Boolean} placeholder attribute\n * @see https://dialtone.dialpad.com/components/input.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n name: 'DtInput',\n\n components: { DtValidationMessages },\n\n mixins: [MessagesMixin],\n\n inheritAttrs: false,\n\n props: {\n /**\n * Name property of the input element\n */\n name: {\n type: String,\n default: '',\n },\n\n /**\n * Type of the input.\n * When `textarea` a `<textarea>` element will be rendered instead of an `<input>` element.\n * @values text, password, email, number, textarea, date, time, file, tel, search\n * @default 'text'\n */\n type: {\n type: String,\n default: INPUT_TYPES.TEXT,\n validator: (t) => Object.values(INPUT_TYPES).includes(t),\n },\n\n /**\n * Value of the input\n */\n modelValue: {\n type: [String, Number],\n default: '',\n },\n\n /**\n * Disables the input\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Label for the input\n */\n label: {\n type: String,\n default: '',\n },\n\n /**\n * Determines visibility of input label.\n * @values true, false\n */\n labelVisible: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Description for the input\n */\n description: {\n type: String,\n default: '',\n },\n\n /**\n * Size of the input, one of `xs`, `sm`, `md`, `lg`, `xl`\n * @values xs, sm, md, lg, xl\n */\n size: {\n type: String,\n default: 'md',\n validator: (t) => Object.values(INPUT_SIZES).includes(t),\n },\n\n /**\n * Additional class name for the input element.\n * Can accept String, Object, and Array, i.e. has the\n * same API as Vue's built-in handling of the class attribute.\n */\n inputClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * Additional class name for the input wrapper element.\n * Can accept all of String, Object, and Array, i.e. has the\n * same api as Vue's built-in handling of the class attribute.\n */\n inputWrapperClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * Additional class name for the root element.\n * Can accept all of String, Object, and Array, i.e. has the\n * same api as Vue's built-in handling of the class attribute.\n */\n rootClass: {\n type: [String, Object, Array],\n default: '',\n },\n\n /**\n * The current character length that the user has entered into the input.\n * This will only need to be used if you are using `validate.length` and\n * the string contains abnormal characters.\n * For example, an emoji could take up many characters in the input, but should only count as 1 character.\n * If no number is provided, a built-in length calculation will be used for the length validation.\n */\n currentLength: {\n type: Number,\n default: null,\n },\n\n /**\n * Whether the input will continue to display a warning validation message even if the input has lost focus.\n */\n retainWarning: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Validation for the input. Supports maximum length validation with the structure:\n * `{ \"length\": {\"description\": string, \"max\": number, \"warn\": number, \"message\": string,\n * \"limitMaxLength\": boolean }}`\n */\n validate: {\n type: Object,\n default: null,\n },\n\n /**\n * hidden allows to use input without the element visually present in DOM\n */\n hidden: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: [\n /**\n * Native input event\n *\n * @event input\n * @type {String}\n */\n 'input',\n\n /**\n * Native input blur event\n *\n * @event blur\n * @type {FocusEvent}\n */\n 'blur',\n\n /**\n * Input clear event\n *\n * @event clear\n */\n 'clear',\n\n /**\n * Native input focus event\n *\n * @event focus\n * @type {FocusEvent}\n */\n 'focus',\n\n /**\n * Native input focusin event\n *\n * @event focusin\n * @type {FocusEvent}\n */\n 'focusin',\n\n /**\n * Native input focusout event\n *\n * @event focusout\n * @type {FocusEvent}\n */\n 'focusout',\n\n /**\n * Event fired to sync the modelValue prop with the parent component\n * @event update:modelValue\n */\n 'update:modelValue',\n\n /**\n * Length of the input when currentLength prop is not passed\n *\n * @event update:length\n * @type {Number}\n */\n 'update:length',\n\n /**\n * Result of the input validation\n *\n * @event update:invalid\n * @type {Boolean}\n */\n 'update:invalid',\n ],\n\n data () {\n return {\n isInputFocused: false,\n isInvalid: false,\n defaultLength: 0,\n hasSlotContent,\n };\n },\n\n computed: {\n\n isTextarea () {\n return this.type === INPUT_TYPES.TEXTAREA;\n },\n\n isDefaultSize () {\n return this.size === INPUT_SIZES.DEFAULT;\n },\n\n iconSize () {\n return INPUT_ICON_SIZES[this.size];\n },\n\n isValidSize () {\n return Object.values(INPUT_SIZES).includes(this.size);\n },\n\n isValidDescriptionSize () {\n return Object.values(DESCRIPTION_SIZE_TYPES).includes(this.size);\n },\n\n inputComponent () {\n if (this.isTextarea) {\n return 'textarea';\n }\n\n return 'input';\n },\n\n inputListeners () {\n return {\n input: async event => {\n let val = event.target.value;\n if (this.type === INPUT_TYPES.FILE) {\n const files = Array.from(event.target.files);\n val = files.map(file => file.name);\n }\n this.$emit('input', val);\n this.$emit('update:modelValue', val);\n },\n\n blur: event => {\n this.isInputFocused = false;\n this.onBlur(event);\n },\n\n focus: event => {\n this.isInputFocused = true;\n this.$emit('focus', event);\n },\n\n focusin: event => this.$emit('focusin', event),\n focusout: event => this.$emit('focusout', event),\n };\n },\n\n descriptionKey () {\n return `input-description-${getUniqueString()}`;\n },\n\n inputState () {\n return getValidationState(this.validationMessages);\n },\n\n defaultLengthCalculation () {\n return this.calculateLength(this.modelValue);\n },\n\n validationProps () {\n return {\n length: {\n description: this?.validate?.length?.description,\n max: this?.validate?.length?.max,\n warn: this?.validate?.length?.warn,\n message: this?.validate?.length?.message,\n limitMaxLength: this?.validate?.length?.limitMaxLength ? this.validate.length.limitMaxLength : false,\n },\n };\n },\n\n validationMessages () {\n // Add length validation message if exists\n if (this.showLengthLimitValidation) {\n return this.formattedMessages.concat([this.inputLengthErrorMessage()]);\n }\n\n return this.formattedMessages;\n },\n\n showInputState () {\n return this.showMessages && this.inputState;\n },\n\n inputLength () {\n return this.currentLength ? this.currentLength : this.defaultLengthCalculation;\n },\n\n inputLengthState () {\n if (this.inputLength < this.validationProps.length.warn) {\n return null;\n } else if (this.inputLength <= this.validationProps.length.max) {\n return this.validationProps.length.warn ? VALIDATION_MESSAGE_TYPES.WARNING : null;\n } else {\n return VALIDATION_MESSAGE_TYPES.ERROR;\n }\n },\n\n shouldValidateLength () {\n return !!(\n this.validationProps.length.description &&\n this.validationProps.length.max\n );\n },\n\n shouldLimitMaxLength () {\n return this.shouldValidateLength && this.validationProps.length.limitMaxLength;\n },\n\n showLengthLimitValidation () {\n return (\n this.shouldValidateLength &&\n this.inputLengthState !== null &&\n this.validationProps.length.message &&\n (this.retainWarning || this.isInputFocused || this.isInvalid)\n );\n },\n\n sizeModifierClass () {\n if (this.isDefaultSize || !this.isValidSize) {\n return '';\n }\n\n return INPUT_SIZE_CLASSES[this.inputComponent][this.size];\n },\n\n stateClass () {\n return [INPUT_STATE_CLASSES[this.inputState]];\n },\n },\n\n watch: {\n isInvalid (val) {\n this.$emit('update:invalid', val);\n },\n\n modelValue: {\n immediate: true,\n handler (newValue) {\n if (this.shouldValidateLength) {\n this.validateLength(this.inputLength);\n }\n\n if (this.currentLength == null) {\n this.$emit('update:length', this.calculateLength(newValue));\n }\n },\n },\n },\n\n beforeMount () {\n this.descriptionSizeClasses = DESCRIPTION_SIZE_CLASSES;\n this.labelSizeClasses = LABEL_SIZE_CLASSES;\n },\n\n methods: {\n removeClassStyleAttrs,\n addClassStyleAttrs,\n inputClasses () {\n return [\n 'd-input__input',\n this.inputComponent === 'input' ? 'd-input' : 'd-textarea',\n {\n [this.stateClass]: this.showInputState,\n 'd-input-icon--left': this.$slots.leftIcon,\n 'd-input-icon--right': this.$slots.rightIcon,\n },\n this.sizeModifierClass,\n this.inputClass,\n ];\n },\n\n inputWrapperClasses () {\n if (this.hidden) {\n return [];\n }\n return [\n 'd-input__wrapper',\n { [this.stateClass]: this.showInputState },\n this.inputWrapperClass,\n ];\n },\n\n calculateLength (value) {\n if (typeof value !== 'string') {\n return 0;\n }\n\n return [...value].length;\n },\n\n inputLengthErrorMessage () {\n return {\n message: this.validationProps.length.message,\n type: this.inputLengthState,\n };\n },\n\n onBlur (e) {\n // Do not emit a blur event if the target element is a child of this component\n if (!this.$refs.container?.contains(e.relatedTarget)) {\n this.$emit('blur', e);\n }\n },\n\n emitClearEvents () {\n this.$emit('input', '');\n this.$emit('clear');\n this.$emit('update:modelValue', '');\n },\n\n blur () {\n this.$refs.input.blur();\n },\n\n focus () {\n this.$refs.input.focus();\n },\n\n select () {\n this.$refs.input.select();\n },\n\n getMessageKey (type, index) {\n return `message-${type}-${index}`;\n },\n\n validateLength (length) {\n this.isInvalid = (length > this.validationProps.length.max);\n },\n\n clearInput () {\n this.$refs.input.value = '';\n this.$refs.input.focus();\n this.emitClearEvents();\n },\n },\n};\n</script>\n"],"names":["_sfc_main","DtValidationMessages","MessagesMixin","INPUT_TYPES","t","INPUT_SIZES","hasSlotContent","INPUT_ICON_SIZES","DESCRIPTION_SIZE_TYPES","event","val","file","getUniqueString","getValidationState","_b","_a","_d","_c","_f","_e","_h","_g","_j","_i","VALIDATION_MESSAGE_TYPES","INPUT_SIZE_CLASSES","INPUT_STATE_CLASSES","newValue","DESCRIPTION_SIZE_CLASSES","LABEL_SIZE_CLASSES","removeClassStyleAttrs","addClassStyleAttrs","value","type","index","length","_hoisted_1","_hoisted_2","_hoisted_5","_hoisted_6","_hoisted_7","_openBlock","_createElementBlock","_mergeProps","$props","$options","_ctx","_createElementVNode","_renderSlot","_normalizeClass","_createCommentVNode","$data","_hoisted_3","_createTextVNode","_toDisplayString","_hoisted_4","args","_toHandlers","_createVNode","_component_dt_validation_messages"],"mappings":"+ZAmJKA,EAAU,CACb,aAAc,CAAE,KAAM,GACtB,KAAM,UAEN,WAAY,CAAA,qBAAEC,EAAAA,SAEd,OAAQ,CAACC,EAAAA,aAAa,EAEtB,aAAc,GAEd,MAAO,CAIL,KAAM,CACJ,KAAM,OACN,QAAS,IASX,KAAM,CACJ,KAAM,OACN,QAASC,EAAAA,YAAY,KACrB,UAAYC,GAAM,OAAO,OAAOD,aAAW,EAAE,SAASC,CAAC,GAMzD,WAAY,CACV,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,IAOX,SAAU,CACR,KAAM,QACN,QAAS,IAMX,MAAO,CACL,KAAM,OACN,QAAS,IAOX,aAAc,CACZ,KAAM,QACN,QAAS,IAMX,YAAa,CACX,KAAM,OACN,QAAS,IAOX,KAAM,CACJ,KAAM,OACN,QAAS,KACT,UAAYA,GAAM,OAAO,OAAOC,aAAW,EAAE,SAASD,CAAC,GAQzD,WAAY,CACV,KAAM,CAAC,OAAQ,OAAQ,KAAK,EAC5B,QAAS,IAQX,kBAAmB,CACjB,KAAM,CAAC,OAAQ,OAAQ,KAAK,EAC5B,QAAS,IAQX,UAAW,CACT,KAAM,CAAC,OAAQ,OAAQ,KAAK,EAC5B,QAAS,IAUX,cAAe,CACb,KAAM,OACN,QAAS,MAMX,cAAe,CACb,KAAM,QACN,QAAS,IAQX,SAAU,CACR,KAAM,OACN,QAAS,MAMX,OAAQ,CACN,KAAM,QACN,QAAS,KAIb,MAAO,CAOL,QAQA,OAOA,QAQA,QAQA,UAQA,WAMA,oBAQA,gBAQA,kBAGF,MAAQ,CACN,MAAO,CACL,eAAgB,GAChB,UAAW,GACX,cAAe,EACf,eAAAE,EAAAA,eAEJ,EAEA,SAAU,CAER,YAAc,CACZ,OAAO,KAAK,OAASH,EAAAA,YAAY,QACnC,EAEA,eAAiB,CACf,OAAO,KAAK,OAASE,EAAAA,YAAY,OACnC,EAEA,UAAY,CACV,OAAOE,EAAAA,iBAAiB,KAAK,IAAI,CACnC,EAEA,aAAe,CACb,OAAO,OAAO,OAAOF,EAAAA,WAAW,EAAE,SAAS,KAAK,IAAI,CACtD,EAEA,wBAA0B,CACxB,OAAO,OAAO,OAAOG,EAAAA,sBAAsB,EAAE,SAAS,KAAK,IAAI,CACjE,EAEA,gBAAkB,CAChB,OAAI,KAAK,WACA,WAGF,OACT,EAEA,gBAAkB,CAChB,MAAO,CACL,MAAO,MAAMC,GAAS,CACpB,IAAIC,EAAMD,EAAM,OAAO,MACnB,KAAK,OAASN,EAAAA,YAAY,OAE5BO,EADc,MAAM,KAAKD,EAAM,OAAO,KAAK,EAC/B,IAAIE,GAAQA,EAAK,IAAI,GAEnC,KAAK,MAAM,QAASD,CAAG,EACvB,KAAK,MAAM,oBAAqBA,CAAG,CACrC,EAEA,KAAMD,GAAS,CACb,KAAK,eAAiB,GACtB,KAAK,OAAOA,CAAK,CACnB,EAEA,MAAOA,GAAS,CACd,KAAK,eAAiB,GACtB,KAAK,MAAM,QAASA,CAAK,CAC3B,EAEA,QAASA,GAAS,KAAK,MAAM,UAAWA,CAAK,EAC7C,SAAUA,GAAS,KAAK,MAAM,WAAYA,CAAK,EAEnD,EAEA,gBAAkB,CAChB,MAAO,qBAAqBG,EAAAA,gBAAe,CAAE,EAC/C,EAEA,YAAc,CACZ,OAAOC,EAAAA,mBAAmB,KAAK,kBAAkB,CACnD,EAEA,0BAA4B,CAC1B,OAAO,KAAK,gBAAgB,KAAK,UAAU,CAC7C,EAEA,iBAAmB,yBACjB,MAAO,CACL,OAAQ,CACN,aAAaC,GAAAC,EAAA,uBAAM,WAAN,YAAAA,EAAgB,SAAhB,YAAAD,EAAwB,YACrC,KAAKE,GAAAC,EAAA,uBAAM,WAAN,YAAAA,EAAgB,SAAhB,YAAAD,EAAwB,IAC7B,MAAME,GAAAC,EAAA,uBAAM,WAAN,YAAAA,EAAgB,SAAhB,YAAAD,EAAwB,KAC9B,SAASE,GAAAC,EAAA,uBAAM,WAAN,YAAAA,EAAgB,SAAhB,YAAAD,EAAwB,QACjC,gBAAgBE,GAAAC,EAAA,uBAAM,WAAN,YAAAA,EAAgB,SAAhB,MAAAD,EAAwB,eAAiB,KAAK,SAAS,OAAO,eAAiB,IAGrG,EAEA,oBAAsB,CAEpB,OAAI,KAAK,0BACA,KAAK,kBAAkB,OAAO,CAAC,KAAK,wBAAuB,CAAE,CAAC,EAGhE,KAAK,iBACd,EAEA,gBAAkB,CAChB,OAAO,KAAK,cAAgB,KAAK,UACnC,EAEA,aAAe,CACb,OAAO,KAAK,cAAgB,KAAK,cAAgB,KAAK,wBACxD,EAEA,kBAAoB,CAClB,OAAI,KAAK,YAAc,KAAK,gBAAgB,OAAO,KAC1C,KACE,KAAK,aAAe,KAAK,gBAAgB,OAAO,IAClD,KAAK,gBAAgB,OAAO,KAAOE,EAAAA,yBAAyB,QAAU,KAEtEA,EAAAA,yBAAyB,KAEpC,EAEA,sBAAwB,CACtB,MAAO,CAAC,EACN,KAAK,gBAAgB,OAAO,aAC5B,KAAK,gBAAgB,OAAO,IAEhC,EAEA,sBAAwB,CACtB,OAAO,KAAK,sBAAwB,KAAK,gBAAgB,OAAO,cAClE,EAEA,2BAA6B,CAC3B,OACE,KAAK,sBACL,KAAK,mBAAqB,MAC1B,KAAK,gBAAgB,OAAO,UAC3B,KAAK,eAAiB,KAAK,gBAAkB,KAAK,UAEvD,EAEA,mBAAqB,CACnB,OAAI,KAAK,eAAiB,CAAC,KAAK,YACvB,GAGFC,EAAAA,mBAAmB,KAAK,cAAc,EAAE,KAAK,IAAI,CAC1D,EAEA,YAAc,CACZ,MAAO,CAACC,EAAAA,oBAAoB,KAAK,UAAU,CAAC,CAC9C,GAGF,MAAO,CACL,UAAWhB,EAAK,CACd,KAAK,MAAM,iBAAkBA,CAAG,CAClC,EAEA,WAAY,CACV,UAAW,GACX,QAASiB,EAAU,CACb,KAAK,sBACP,KAAK,eAAe,KAAK,WAAW,EAGlC,KAAK,eAAiB,MACxB,KAAK,MAAM,gBAAiB,KAAK,gBAAgBA,CAAQ,CAAC,CAE9D,IAIJ,aAAe,CACb,KAAK,uBAAyBC,EAAAA,yBAC9B,KAAK,iBAAmBC,EAAAA,kBAC1B,EAEA,QAAS,CACP,sBAAAC,EAAAA,sBACA,mBAAAC,EAAAA,mBACA,cAAgB,CACd,MAAO,CACL,iBACA,KAAK,iBAAmB,QAAU,UAAY,aAC9C,CACE,CAAC,KAAK,UAAU,EAAG,KAAK,eACxB,qBAAsB,KAAK,OAAO,SAClC,sBAAuB,KAAK,OAAO,WAErC,KAAK,kBACL,KAAK,WAET,EAEA,qBAAuB,CACrB,OAAI,KAAK,OACA,CAAA,EAEF,CACL,mBACA,CAAE,CAAC,KAAK,UAAU,EAAG,KAAK,gBAC1B,KAAK,kBAET,EAEA,gBAAiBC,EAAO,CACtB,OAAI,OAAOA,GAAU,SACZ,EAGF,CAAC,GAAGA,CAAK,EAAE,MACpB,EAEA,yBAA2B,CACzB,MAAO,CACL,QAAS,KAAK,gBAAgB,OAAO,QACrC,KAAM,KAAK,iBAEf,EAEA,OAAQ,EAAG,QAEJjB,EAAA,KAAK,MAAM,YAAX,MAAAA,EAAsB,SAAS,EAAE,gBACpC,KAAK,MAAM,OAAQ,CAAC,CAExB,EAEA,iBAAmB,CACjB,KAAK,MAAM,QAAS,EAAE,EACtB,KAAK,MAAM,OAAO,EAClB,KAAK,MAAM,oBAAqB,EAAE,CACpC,EAEA,MAAQ,CACN,KAAK,MAAM,MAAM,KAAI,CACvB,EAEA,OAAS,CACP,KAAK,MAAM,MAAM,MAAK,CACxB,EAEA,QAAU,CACR,KAAK,MAAM,MAAM,OAAM,CACzB,EAEA,cAAekB,EAAMC,EAAO,CAC1B,MAAO,WAAWD,CAAI,IAAIC,CAAK,EACjC,EAEA,eAAgBC,EAAQ,CACtB,KAAK,UAAaA,EAAS,KAAK,gBAAgB,OAAO,GACzD,EAEA,YAAc,CACZ,KAAK,MAAM,MAAM,MAAQ,GACzB,KAAK,MAAM,MAAM,MAAK,EACtB,KAAK,gBAAe,CACtB,EAEJ,EAlnBAC,EAAA,CAAA,cAAA,EAAAC,EAAA,CAAA,IAAA,KAAA,IAAA,CAAA,KAAA,IAAA,EA8CU,UAAQ,8BACR,MAAM,+BA/ChBC,EAAA,CAAA,WAAA,EAAAC,EAAA,CAAA,QAAA,OAAA,WAAA,eAAA,WAAA,EAAAC,EAAA,CAAA,QAAA,OAAA,OAAA,WAAA,eAAA,WAAA,+EACE,OAAAC,YAAA,EAAAC,qBAkHM,MAlHNC,EAAAA,WAkHM,CAjHJ,IAAI,YACH,MAAK,CAAGC,EAAA,UAAS,gBAAA,CAAA,kBAAwCA,EAAA,MAAM,CAAA,CACxD,EAAAC,EAAA,mBAAmBC,EAAA,MAAM,EAAA,CACjC,UAAQ,UAAU,CAAA,EAAA,CAElBC,EAAAA,mBAoGQ,QAAA,CAnGN,MAAM,iBACL,eAAcD,SAAO,aAAeF,EAAA,YAAcC,EAAA,eAAiB,OACpE,UAAQ,2BAGRG,EAAAA,WAaOF,wBAbP,IAaO,CAXGF,EAAA,cAAgBA,EAAA,qBADxBF,EAAAA,mBAWM,MAAA,CAzBd,IAAA,EAgBU,IAAI,QACJ,UAAQ,iBACP,MAlBXO,EAAAA,eAAA,iCAkB0FH,EAAA,iBAAiBF,EAAA,IAAI,uBAMlGA,EAAA,KAAK,EAAA,CAAA,GAxBlBM,EAAAA,mBAAA,GAAA,EAAA,IA4BcC,EAAA,eAAeL,EAAA,OAAO,WAAW,GAAKF,EAAA,aAAeC,EAAA,oCAD7DH,EAAAA,mBAwBM,MAAA,CAnDZ,IAAA,EA6BS,GAAIG,EAAA,eACL,IAAI,cACH,MA/BTI,EAAAA,eAAA,wCA+ByFH,EAAA,uBAAuBF,EAAA,IAAI,IAK5G,UAAQ,yBAGAO,EAAA,eAAeL,EAAA,OAAO,WAAW,GAAKF,EAAA,aAD9CH,EAAAA,YAAAC,EAAAA,mBAKM,MA3CdU,EAAA,CA0CUJ,EAAAA,WAAiDF,0BAAjD,IAAiD,CA1C3DO,EAAAA,gBAAAC,EAAAA,gBA0CsCV,EAAA,WAAW,EAAA,CAAA,OA1CjDM,EAAAA,mBAAA,GAAA,EAAA,EA6CgBL,EAAA,sBADRJ,EAAAA,YAAAC,EAAAA,mBAMM,MANNa,EAMMD,EAAAA,gBADDT,kBAAgB,OAAO,WAAW,EAAA,CAAA,GAjD/CK,EAAAA,mBAAA,GAAA,EAAA,CAAA,EAAA,GAAAb,CAAA,GAAAa,EAAAA,mBAAA,GAAA,EAAA,EAoDMH,EAAAA,mBAsDM,MAAA,CArDH,MArDTE,EAAAA,eAqDgBJ,EAAA,qBAAmB,EAC1B,YAAWD,EAAA,WAAQ,GAAA,GAAmB,SAEvCG,EAAAA,mBAUO,OAAA,CATL,MAAM,kCACN,UAAQ,6BACP,+BAAUF,EAAA,QAAAA,EAAA,OAAA,GAAAW,CAAA,KAGXR,EAAAA,WAGEF,EAAA,OAAA,WAAA,CADC,SAAWD,EAAA,QAAQ,CAAA,OAIhBA,EAAA,YADRJ,EAAAA,YAAAC,EAAAA,mBAYE,WAZFC,aAYE,CA/EV,IAAA,EAqEU,IAAI,QACH,MAAOC,EAAA,WACP,KAAMA,EAAA,KACN,SAAUA,EAAA,SACV,aAAcE,EAAA,OAAO,cAAY,MACjC,MAAOD,EAAA,aAAY,EACnB,UAAWA,EAAA,qBAAuBA,kBAAgB,OAAO,IAAG,KAC7D,UAAQ,gBACA,EAAAA,EAAA,sBAAsBC,EAAA,MAAM,EACpCW,EAAAA,WAAMZ,iBAAc,EAAA,CAAA,EAAA,KAAA,GA9E9BN,CAAA,IAgFQE,EAAAA,YAAAC,EAAAA,mBAaC,QAbDC,aAaC,CA7FT,IAAA,EAkFU,IAAI,QACH,MAAOC,EAAA,WACP,KAAMA,EAAA,KACN,KAAMA,EAAA,KACN,SAAUA,EAAA,SACV,aAAcE,EAAA,OAAO,cAAY,MACjC,MAAOD,EAAA,aAAY,EACnB,UAAWA,EAAA,qBAAuBA,kBAAgB,OAAO,IAAG,KAC7D,UAAQ,gBACA,EAAAA,EAAA,sBAAsBC,EAAA,MAAM,EACpCW,EAAAA,WAAMZ,iBAAc,EAAA,CAAA,EAAA,KAAA,GA5F9BL,CAAA,GA8FQO,EAAAA,mBAWO,OAAA,CAVL,MAAM,mCACN,UAAQ,8BACP,+BAAUF,EAAA,QAAAA,EAAA,OAAA,GAAAW,CAAA,KAGXR,aAIEF,EAAA,OAAA,YAAA,CAFC,SAAWD,EAAA,SACX,MAAOA,EAAA,iBAvGpB,EAAA,GAAAP,CAAA,CAAA,EAAA,EAAAF,CAAA,EA4GIsB,EAAAA,YAMEC,EANFhB,aAME,CALC,sBAAqBE,EAAA,mBACrB,gBAAeC,EAAA,aACf,MAAOA,EAAA,eACAA,EAAA,mBAAkB,CAC1B,UAAQ,mBAAmB,CAAA,EAAA,KAAA,GAAA,CAAA,sBAAA,gBAAA,OAAA,CAAA"}
@@ -1,11 +1,11 @@
1
1
  import { VALIDATION_MESSAGE_TYPES as C, DESCRIPTION_SIZE_TYPES as b } from "../../common/constants/index.js";
2
2
  import { INPUT_TYPES as o, DESCRIPTION_SIZE_CLASSES as I, LABEL_SIZE_CLASSES as _, INPUT_STATE_CLASSES as E, INPUT_SIZE_CLASSES as V, INPUT_SIZES as m, INPUT_ICON_SIZES as z } from "./input-constants.js";
3
- import { addClassStyleAttrs as M, removeClassStyleAttrs as P, getValidationState as T, getUniqueString as A, hasSlotContent as w } from "../../common/utils/index.js";
3
+ import { addClassStyleAttrs as M, removeClassStyleAttrs as P, getValidationState as A, getUniqueString as T, hasSlotContent as w } from "../../common/utils/index.js";
4
4
  import { MessagesMixin as N } from "../../common/mixins/input.js";
5
- import { resolveComponent as x, createElementBlock as a, openBlock as n, mergeProps as h, createElementVNode as p, createVNode as B, renderSlot as c, createCommentVNode as g, normalizeClass as f, toDisplayString as S, createTextVNode as O, toHandlers as y } from "vue";
5
+ import { resolveComponent as x, createElementBlock as a, openBlock as n, mergeProps as h, createElementVNode as p, createVNode as O, renderSlot as c, createCommentVNode as g, normalizeClass as f, toDisplayString as S, createTextVNode as B, toHandlers as y } from "vue";
6
6
  import { _ as D } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
7
7
  import q from "../validation-messages/validation-messages.js";
8
- const k = {
8
+ const j = {
9
9
  compatConfig: { MODE: 3 },
10
10
  name: "DtInput",
11
11
  components: { DtValidationMessages: q },
@@ -94,6 +94,15 @@ const k = {
94
94
  type: [String, Object, Array],
95
95
  default: ""
96
96
  },
97
+ /**
98
+ * Additional class name for the root element.
99
+ * Can accept all of String, Object, and Array, i.e. has the
100
+ * same api as Vue's built-in handling of the class attribute.
101
+ */
102
+ rootClass: {
103
+ type: [String, Object, Array],
104
+ default: ""
105
+ },
97
106
  /**
98
107
  * The current character length that the user has entered into the input.
99
108
  * This will only need to be used if you are using `validate.length` and
@@ -235,10 +244,10 @@ const k = {
235
244
  };
236
245
  },
237
246
  descriptionKey() {
238
- return `input-description-${A()}`;
247
+ return `input-description-${T()}`;
239
248
  },
240
249
  inputState() {
241
- return T(this.validationMessages);
250
+ return A(this.validationMessages);
242
251
  },
243
252
  defaultLengthCalculation() {
244
253
  return this.calculateLength(this.modelValue);
@@ -273,7 +282,6 @@ const k = {
273
282
  shouldLimitMaxLength() {
274
283
  return this.shouldValidateLength && this.validationProps.length.limitMaxLength;
275
284
  },
276
- // eslint-disable-next-line complexity
277
285
  showLengthLimitValidation() {
278
286
  return this.shouldValidateLength && this.inputLengthState !== null && this.validationProps.length.message && (this.retainWarning || this.isInputFocused || this.isInvalid);
279
287
  },
@@ -356,7 +364,7 @@ const k = {
356
364
  this.$refs.input.value = "", this.$refs.input.focus(), this.emitClearEvents();
357
365
  }
358
366
  }
359
- }, F = ["aria-details"], j = ["id"], R = { key: 0 }, U = {
367
+ }, k = ["aria-details"], F = ["id"], R = { key: 0 }, U = {
360
368
  key: 1,
361
369
  "data-qa": "dt-input-length-description",
362
370
  class: "d-input__length-description"
@@ -365,7 +373,7 @@ function Y(t, s, i, r, u, e) {
365
373
  const d = x("dt-validation-messages");
366
374
  return n(), a("div", h({
367
375
  ref: "container",
368
- class: ["d-input__root", { "d-input--hidden": i.hidden }]
376
+ class: [i.rootClass, "d-input__root", { "d-input--hidden": i.hidden }]
369
377
  }, e.addClassStyleAttrs(t.$attrs), { "data-qa": "dt-input" }), [
370
378
  p("label", {
371
379
  class: "d-input__label",
@@ -397,11 +405,11 @@ function Y(t, s, i, r, u, e) {
397
405
  }, [
398
406
  u.hasSlotContent(t.$slots.description) || i.description ? (n(), a("div", R, [
399
407
  c(t.$slots, "description", {}, () => [
400
- O(S(i.description), 1)
408
+ B(S(i.description), 1)
401
409
  ])
402
410
  ])) : g("", !0),
403
411
  e.shouldValidateLength ? (n(), a("div", U, S(e.validationProps.length.description), 1)) : g("", !0)
404
- ], 10, j)) : g("", !0),
412
+ ], 10, F)) : g("", !0),
405
413
  p("div", {
406
414
  class: f(e.inputWrapperClasses()),
407
415
  "read-only": i.disabled === !0 ? !0 : void 0
@@ -446,15 +454,15 @@ function Y(t, s, i, r, u, e) {
446
454
  })
447
455
  ], 32)
448
456
  ], 10, W)
449
- ], 8, F),
450
- B(d, h({
457
+ ], 8, k),
458
+ O(d, h({
451
459
  "validation-messages": e.validationMessages,
452
460
  "show-messages": t.showMessages,
453
461
  class: t.messagesClass
454
462
  }, t.messagesChildProps, { "data-qa": "dt-input-messages" }), null, 16, ["validation-messages", "show-messages", "class"])
455
463
  ], 16);
456
464
  }
457
- const et = /* @__PURE__ */ D(k, [["render", Y]]);
465
+ const et = /* @__PURE__ */ D(j, [["render", Y]]);
458
466
  export {
459
467
  et as default
460
468
  };