UNPKG

@dialpad/dialtone

Version:

Dialpad's Dialtone design system monorepo

1 lines 7.89 kB
{"version":3,"file":"toggle.vue.cjs","sources":["../../../components/toggle/toggle.vue"],"sourcesContent":["<template>\n <div\n class=\"d-toggle-wrapper\"\n v-bind=\"addClassStyleAttrs($attrs)\"\n >\n <label\n v-if=\"hasSlotContent($slots.default)\"\n :class=\"labelClass\"\n :for=\"id\"\n v-bind=\"labelChildProps\"\n data-qa=\"toggle-label\"\n >\n <!-- @slot Slot for the main content -->\n <slot />\n </label>\n <button\n :id=\"id\"\n :role=\"toggleRole\"\n type=\"button\"\n :aria-checked=\"internalChecked.toString()\"\n :disabled=\"disabled\"\n :aria-disabled=\"disabled.toString()\"\n :class=\"toggleClasses\"\n v-bind=\"inputListeners\"\n >\n <span\n v-if=\"showIcon\"\n class=\"d-toggle__inner\"\n />\n </button>\n </div>\n</template>\n\n<script>\nimport { warn } from 'vue';\nimport { getUniqueString, hasSlotContent, removeClassStyleAttrs, addClassStyleAttrs } from '@/common/utils';\nimport { TOGGLE_CHECKED_VALUES, TOGGLE_SIZE_MODIFIERS } from '@/components/toggle/toggle_constants';\n\n/**\n * A toggle (or \"switch\") is a button control element that allows the user to make a binary (on/off) selection.\n * @see https://dialtone.dialpad.com/components/toggle.html\n */\nexport default {\n compatConfig: { MODE: 3 },\n\n name: 'DtToggle',\n\n inheritAttrs: false,\n\n model: {\n prop: 'checked',\n event: 'change',\n },\n\n props: {\n\n /**\n * The id of the toggle\n */\n id: {\n type: String,\n default () { return getUniqueString(); },\n },\n\n /**\n * Disables the toggle interactions\n * @values true, false\n */\n disabled: {\n type: Boolean,\n default: false,\n },\n\n /**\n * Value of the toggle\n * @model checked\n * @values true, false, 'mixed'\n */\n checked: {\n type: [Boolean, String],\n default: false,\n validator: (v) => TOGGLE_CHECKED_VALUES.includes(v),\n },\n\n /**\n * Whether the component toggles on click. If you set this to false it means you will handle the toggling manually\n * via the checked prop or v-model. Change events will still be triggered.\n * @values true, false\n */\n toggleOnClick: {\n type: Boolean,\n default: true,\n },\n\n /**\n * The size of the toggle.\n * @values sm, md\n */\n size: {\n type: String,\n default: 'md',\n validator: (s) => Object.keys(TOGGLE_SIZE_MODIFIERS).includes(s),\n },\n\n /**\n * Shows the icon\n * @values true, false\n */\n showIcon: {\n type: Boolean,\n default: true,\n },\n\n /**\n * Used to customize the label container\n */\n labelClass: {\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 emits: [\n /**\n * Toggle change event\n *\n * @event change\n * @type {Boolean}\n * @model change\n */\n 'change',\n ],\n\n data () {\n return {\n internalChecked: this.checked,\n hasSlotContent,\n };\n },\n\n computed: {\n inputListeners () {\n return {\n ...removeClassStyleAttrs(this.$attrs),\n onClick: _ => this.toggleCheckedValue(),\n };\n },\n\n isIndeterminate () {\n return this.internalChecked === 'mixed';\n },\n\n toggleRole () {\n return this.isIndeterminate ? 'checkbox' : 'switch';\n },\n\n toggleClasses () {\n return [\n 'd-toggle',\n TOGGLE_SIZE_MODIFIERS[this.size],\n {\n 'd-toggle--checked': this.internalChecked === true,\n 'd-toggle--disabled': this.disabled,\n 'd-toggle--indeterminate': this.isIndeterminate,\n },\n ];\n },\n },\n\n watch: {\n checked (newChecked) {\n this.internalChecked = newChecked;\n },\n },\n\n mounted () {\n this.runValidations();\n },\n\n methods: {\n addClassStyleAttrs,\n toggleCheckedValue () {\n this.$emit('change', !this.internalChecked);\n\n if (this.toggleOnClick) {\n this.internalChecked = !this.internalChecked;\n }\n },\n\n hasSlotLabel () {\n return !!(this.$slots.default);\n },\n\n runValidations () {\n this.validateInputLabels(this.hasSlotLabel(), this.$attrs['aria-label']);\n },\n\n validateInputLabels (hasLabel, ariaLabel) {\n if (!hasLabel && !ariaLabel) {\n warn(\n 'You must provide an aria-label when there is no label passed',\n this,\n );\n }\n },\n },\n};\n</script>\n"],"names":["getUniqueString","TOGGLE_CHECKED_VALUES","TOGGLE_SIZE_MODIFIERS","hasSlotContent","removeClassStyleAttrs","addClassStyleAttrs","warn","_createElementBlock","_mergeProps","_openBlock","_renderSlot","_createCommentVNode","_createElementVNode"],"mappings":"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"}