{"version":3,"file":"input.cjs","sources":["../../../common/mixins/input.js"],"sourcesContent":["import { warn } from 'vue';\nimport { VALIDATION_MESSAGE_TYPES } from '@/common/constants';\nimport { validationMessageValidator } from '@/common/validators';\nimport { formatMessages } from '@/common/utils';\n\n/**\n * This mixin provides a base set of props, watchers and data attributes that are commonly used in our input components.\n * @displayName Input Mixin\n */\nexport const InputMixin = {\n  inheritAttrs: false,\n\n  props: {\n    /**\n     * A provided label for the input\n     */\n    label: {\n      type: String,\n      default: '',\n    },\n\n    /**\n     * The name of the input\n     */\n    name: {\n      type: String,\n      default: '',\n    },\n\n    /**\n     * The value of the input\n     * @model value\n     */\n    value: {\n      type: [String, Number, Boolean, Object],\n      default: null,\n    },\n\n    /**\n     * Describes the input\n     */\n    description: {\n      type: String,\n      default: '',\n    },\n\n    /**\n     * Disables the input\n     */\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n\n    /**\n     * The validation state of the input\n     */\n    validationState: {\n      type: String,\n      default: '',\n      validator: validationState => {\n        if (!validationState) {\n          return true;\n        }\n\n        return Object.values(VALIDATION_MESSAGE_TYPES).includes(validationState);\n      },\n    },\n\n    /**\n     * Used to customize the input element\n     */\n    inputClass: {\n      type: [String, Array, Object],\n      default: '',\n    },\n\n    /**\n     * Used to customize the label container\n     */\n    labelClass: {\n      type: [String, Array, Object],\n      default: '',\n    },\n\n    /**\n     * Used to customize the description container\n     */\n    descriptionClass: {\n      type: [String, Array, Object],\n      default: '',\n    },\n\n    /**\n     * A set of props that are passed into the label container\n     */\n    labelChildProps: {\n      type: Object,\n      default: () => ({}),\n    },\n\n    /**\n     * A set of props that are passed into the description container\n     */\n    descriptionChildProps: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n\n  data () {\n    return {\n      internalDisabled: this.disabled,\n      internalValidationState: this.validationState,\n    };\n  },\n\n  watch: {\n    disabled (newDisabled) {\n      // update internal disabled when the prop changes\n      this.internalDisabled = newDisabled;\n    },\n\n    validationState (newValidationState) {\n      // update internal validation state when the prop changes\n      this.internalValidationState = newValidationState;\n    },\n  },\n\n  methods: {\n    /**\n     * @param {Boolean | String} hasLabelOrLabel either a boolean indicating the label exists or the label itself\n     * @param {String} ariaLabel the aria-label passed (null/undefined if it's not passed)\n     */\n    validateInputLabels (hasLabelOrLabel, ariaLabel) {\n      if (!hasLabelOrLabel && !ariaLabel) {\n        warn(\n          'You must provide an aria-label when there is no label passed',\n          this,\n        );\n      }\n    },\n  },\n};\n\n/**\n * This mixin provides common logic shared amongst our checkable inputs.\n *\n * This includes the group context, checked model & prop, internal data attributes as well as a set common computed\n * properties and watchers. It also includes the group name warning logic.\n * @displayName Checkable Mixin\n */\nexport const CheckableMixin = {\n  model: {\n    prop: 'checked',\n  },\n\n  props: {\n    /**\n     * Used to set the state of the checkable input\n     * @model checked\n     */\n    checked: {\n      type: Boolean,\n      default: false,\n    },\n    /**\n     * Indeterminate State, toggling indeterminate checkbox will uncheck\n     */\n    indeterminate: {\n      type: Boolean,\n      default: false,\n    },\n    /**\n     * The value of the input\n     */\n    value: {\n      type: [String, Number, Boolean],\n      default: null,\n    },\n  },\n\n  data () {\n    return {\n      internalChecked: this.checked,\n      internalIndeterminate: this.indeterminate,\n    };\n  },\n\n  watch: {\n    checked (newChecked) {\n      // update internal checked when the prop changes\n      this.internalChecked = newChecked;\n    },\n\n    indeterminate (newValue) {\n      this.internalIndeterminate = newValue;\n    },\n  },\n};\n\n/**\n * This mixin provides common logic shared amongst our groupable inputs.\n *\n * This includes the group context and internal data attributes as well as a set common computed\n * properties and watchers. It also includes the group name warning logic.\n * @displayName Groupable Mixin\n */\nexport const GroupableMixin = {\n  inject: {\n    // Object used to pass data from the group\n    groupContext: {\n      default: {},\n    },\n\n    // Method used to update the group value\n    setGroupValue: {\n      default: () => { return () => {}; },\n    },\n  },\n\n  data () {\n    return {\n      internalValue: this.value,\n    };\n  },\n\n  computed: {\n    hasGroup () {\n      return Object.prototype.hasOwnProperty.call(this.groupContext, 'name');\n    },\n\n    groupName () {\n      return this.groupContext?.name ?? '';\n    },\n\n    groupValue () {\n      return this.groupContext?.value;\n    },\n\n    groupDisabled () {\n      return this.groupContext?.disabled ?? false;\n    },\n\n    groupValidationState () {\n      return this.groupContext?.validationState ?? null;\n    },\n\n    internalName () {\n      return this.name || this.groupName;\n    },\n  },\n\n  watch: {\n    value (newValue) {\n      // update internal value when the prop changes\n      this.internalValue = newValue;\n    },\n\n    groupValue: {\n      immediate: true,\n      handler (newGroupValue) {\n        if (this.hasGroup) {\n          // update internal value when the group disabled changes\n          this.internalValue = newGroupValue;\n        }\n      },\n    },\n\n    groupDisabled: {\n      immediate: true,\n      handler (newGroupDisabled) {\n        if (this.hasGroup) {\n          // update internal disabled when the group disabled changes\n          this.internalDisabled = this.disabled || newGroupDisabled;\n        }\n      },\n    },\n\n    groupValidationState: {\n      immediate: true,\n      handler (newGroupValidationState) {\n        if (this.hasGroup) {\n          // update internal validation state when the group validation state changes\n          this.internalValidationState = newGroupValidationState || this.validationState;\n        }\n      },\n    },\n  },\n\n  created () {\n    const hasGroupName = Object.prototype.hasOwnProperty.call(this.groupContext, 'name');\n    const reactiveGroupName = this.groupContext?.name;\n\n    if (!!this.name && hasGroupName && reactiveGroupName !== this.name) {\n      warn(\n        'Component is being used inside a Group. Did you mean to override the name prop value ' +\n        `(${reactiveGroupName}) with (${this.name})? It is recommended to only set name at the Group level.`,\n        this,\n      );\n    }\n  },\n};\n\n/**\n * This mixin provides common logic shared amongst our validation messages inputs.\n * @displayName Messages Mixin\n */\nexport const MessagesMixin = {\n  props: {\n    /**\n     * Used to customize the validation messages component\n     */\n    messagesClass: {\n      type: [String, Array, Object],\n      default: '',\n    },\n\n    /**\n     * A set of props that are passed into the validation messages component\n     */\n    messagesChildProps: {\n      type: Object,\n      default: () => ({}),\n    },\n\n    /**\n     * Used to hide / show the validation messages\n     * @values true, false\n     */\n    showMessages: {\n      type: Boolean,\n      default: true,\n    },\n\n    /**\n     * Validation messages\n     */\n    messages: {\n      type: Array,\n      default: () => [],\n      validator: messages => {\n        return validationMessageValidator(messages);\n      },\n    },\n  },\n\n  computed: {\n    formattedMessages () {\n      return formatMessages(this.messages);\n    },\n  },\n};\n\nexport default {\n  InputMixin,\n  CheckableMixin,\n  GroupableMixin,\n  MessagesMixin,\n};\n"],"names":["VALIDATION_MESSAGE_TYPES","warn","validationMessageValidator","formatMessages"],"mappings":"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"}