@dialpad/dialtone-vue 2.142.1 → 2.142.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.
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sources":["../../components/input/input_constants.js","../../components/input/input.vue"],"sourcesContent":["// Valid input types, any other input types (for example: 'radio' or 'checkbox') should\n// use the respective base vue components (radio.vue and checkout.vue).\nexport const INPUT_TYPES = {\n TEXT: 'text',\n TEXTAREA: 'textarea',\n PASSWORD: 'password',\n EMAIL: 'email',\n NUMBER: 'number',\n DATE: 'date',\n TIME: 'time',\n FILE: 'file',\n TEL: 'tel',\n};\n\nexport const INPUT_SIZES = {\n EXTRA_SMALL: 'xs',\n SMALL: 'sm',\n DEFAULT: 'md',\n LARGE: 'lg',\n EXTRA_LARGE: 'xl',\n};\n\nexport const INPUT_ICON_SIZES = {\n xs: '100',\n sm: '200',\n md: '200',\n lg: '400',\n xl: '500',\n};\n\nexport const INPUT_SIZE_CLASSES = {\n input: {\n xs: 'd-input--xs',\n sm: 'd-input--sm',\n lg: 'd-input--lg',\n xl: 'd-input--xl',\n },\n\n textarea: {\n xs: 'd-textarea--xs',\n sm: 'd-textarea--sm',\n lg: 'd-textarea--lg',\n xl: 'd-textarea--xl',\n },\n};\n\nexport const INPUT_STATE_CLASSES = {\n input: {\n error: 'd-input--error',\n warning: 'd-input--warning',\n success: 'd-input--success',\n },\n\n textarea: {\n error: 'd-textarea--error',\n warning: 'd-textarea--warning',\n success: 'd-textarea--success',\n },\n};\n\nexport const DESCRIPTION_SIZE_CLASSES = {\n lg: 'd-description--lg',\n xl: 'd-description--xl',\n};\n\nexport const LABEL_SIZE_CLASSES = {\n xs: 'd-label--xs',\n sm: 'd-label--sm',\n md: 'd-label--md',\n lg: 'd-label--lg',\n xl: 'd-label--xl',\n};\n\nexport default {\n INPUT_TYPES,\n INPUT_SIZES,\n INPUT_ICON_SIZES,\n INPUT_SIZE_CLASSES,\n INPUT_STATE_CLASSES,\n DESCRIPTION_SIZE_CLASSES,\n LABEL_SIZE_CLASSES,\n};\n","<template>\n <div\n ref=\"container\"\n :class=\"{ 'd-input--hidden': hidden }\"\n data-qa=\"dt-input\"\n >\n <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-label',\n labelSizeClasses[size],\n ]\"\n >\n {{ label }}\n </div>\n </slot>\n <div\n v-if=\"$slots.description || description || shouldValidateLength\"\n :id=\"descriptionKey\"\n ref=\"description\"\n :class=\"[\n 'd-description',\n descriptionSizeClasses[size],\n ]\"\n data-qa=\"dt-input-description\"\n >\n <div\n v-if=\"$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\"\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=\"value\"\n :name=\"name\"\n :disabled=\"disabled\"\n :autocomplete=\"$attrs.autocomplete ?? 'off'\"\n :class=\"inputClasses()\"\n :maxlength=\"shouldLimitMaxLength ? validationProps.length.max : null\"\n :data-qa=\"$attrs['data-qa'] ?? 'dt-input-input'\"\n v-bind=\"$attrs\"\n v-on=\"inputListeners\"\n />\n <input\n v-else\n ref=\"input\"\n :value=\"value\"\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=\"$attrs['data-qa'] ?? 'dt-input-input'\"\n v-bind=\"$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 />\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} 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 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\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 value: {\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 * 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 };\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 /* TODO\n Check if any usages of this component leverage $listeners and either remove if unused or scope the removal\n and migration prior to upgrading to Vue 3.x\n */\n ...this.$listeners,\n input: event => this.$emit('input', event.target.value),\n focus: event => {\n this.isInputFocused = true;\n this.$emit('focus', event);\n },\n\n blur: event => {\n this.isInputFocused = false;\n this.onBlur(event);\n },\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.value);\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 // eslint-disable-next-line max-lines\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.inputComponent][this.inputState]];\n },\n },\n\n watch: {\n isInvalid (val) {\n this.$emit('update:invalid', val);\n },\n\n value: {\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 inputClasses () {\n return [\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 clear () {\n this.$emit('input', '');\n this.$emit('clear');\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};\n</script>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.js","sources":["../../components/input/input_constants.js","../../components/input/input.vue"],"sourcesContent":["// Valid input types, any other input types (for example: 'radio' or 'checkbox') should\n// use the respective base vue components (radio.vue and checkout.vue).\nexport const INPUT_TYPES = {\n TEXT: 'text',\n TEXTAREA: 'textarea',\n PASSWORD: 'password',\n EMAIL: 'email',\n NUMBER: 'number',\n DATE: 'date',\n TIME: 'time',\n FILE: 'file',\n TEL: 'tel',\n};\n\nexport const INPUT_SIZES = {\n EXTRA_SMALL: 'xs',\n SMALL: 'sm',\n DEFAULT: 'md',\n LARGE: 'lg',\n EXTRA_LARGE: 'xl',\n};\n\nexport const INPUT_ICON_SIZES = {\n xs: '100',\n sm: '200',\n md: '200',\n lg: '400',\n xl: '500',\n};\n\nexport const INPUT_SIZE_CLASSES = {\n input: {\n xs: 'd-input--xs',\n sm: 'd-input--sm',\n lg: 'd-input--lg',\n xl: 'd-input--xl',\n },\n\n textarea: {\n xs: 'd-textarea--xs',\n sm: 'd-textarea--sm',\n lg: 'd-textarea--lg',\n xl: 'd-textarea--xl',\n },\n};\n\nexport const INPUT_STATE_CLASSES = {\n error: 'd-input--error',\n warning: 'd-input--warning',\n success: 'd-input--success',\n};\n\nexport const DESCRIPTION_SIZE_CLASSES = {\n lg: 'd-description--lg',\n xl: 'd-description--xl',\n};\n\nexport const LABEL_SIZE_CLASSES = {\n xs: 'd-label--xs',\n sm: 'd-label--sm',\n md: 'd-label--md',\n lg: 'd-label--lg',\n xl: 'd-label--xl',\n};\n\nexport default {\n INPUT_TYPES,\n INPUT_SIZES,\n INPUT_ICON_SIZES,\n INPUT_SIZE_CLASSES,\n INPUT_STATE_CLASSES,\n DESCRIPTION_SIZE_CLASSES,\n LABEL_SIZE_CLASSES,\n};\n","<template>\n <div\n ref=\"container\"\n :class=\"['d-input__root', { 'd-input--hidden': hidden }]\"\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=\"$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=\"$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\"\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=\"value\"\n :name=\"name\"\n :disabled=\"disabled\"\n :autocomplete=\"$attrs.autocomplete ?? 'off'\"\n :class=\"inputClasses()\"\n :maxlength=\"shouldLimitMaxLength ? validationProps.length.max : null\"\n :data-qa=\"$attrs['data-qa'] ?? 'dt-input-input'\"\n v-bind=\"$attrs\"\n v-on=\"inputListeners\"\n />\n <input\n v-else\n ref=\"input\"\n :value=\"value\"\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=\"$attrs['data-qa'] ?? 'dt-input-input'\"\n v-bind=\"$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 />\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} 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 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\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 value: {\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 * 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 };\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 /* TODO\n Check if any usages of this component leverage $listeners and either remove if unused or scope the removal\n and migration prior to upgrading to Vue 3.x\n */\n ...this.$listeners,\n input: event => this.$emit('input', event.target.value),\n focus: event => {\n this.isInputFocused = true;\n this.$emit('focus', event);\n },\n\n blur: event => {\n this.isInputFocused = false;\n this.onBlur(event);\n },\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.value);\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 // eslint-disable-next-line max-lines\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 value: {\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 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 clear () {\n this.$emit('input', '');\n this.$emit('clear');\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};\n</script>\n"],"names":[],"mappings":"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"}
package/dist/style.css CHANGED
@@ -273,6 +273,7 @@
273
273
  background-color: var(--dt-color-surface-contrast);
274
274
  color: var(--dt-color-foreground-secondary-inverted);
275
275
  }
276
+ /* stylelint-disable selector-pseudo-class-no-unknown */
276
277
  .dt-leftbar-row[data-v-e6da0c41] {
277
278
  --leftbar-row-color-foreground: var(--dt-theme-sidebar-color-foreground);
278
279
  --leftbar-row-color-background: var(--dt-theme-sidebar-row-color-background);
@@ -295,14 +296,14 @@
295
296
  --leftbar-row-action-width: var(--dt-size-550);
296
297
  --leftbar-row-action-height: var(--leftbar-row-action-width);
297
298
  position: relative;
298
- opacity: var(--leftbar-row-opacity);
299
299
  display: flex;
300
300
  background-color: var(--dt-theme-sidebar-row-color-background);
301
301
  border-radius: var(--leftbar-row-radius);
302
+ cursor: pointer;
303
+ opacity: var(--leftbar-row-opacity);
304
+ transition-timing-function: var(--ttf-out-quint);
302
305
  transition-duration: var(--td200);
303
306
  transition-property: background-color, border, box-shadow;
304
- transition-timing-function: var(--ttf-out-quint);
305
- cursor: pointer;
306
307
  }
307
308
  .dt-leftbar-row[data-v-e6da0c41]:not(.dt-leftbar-row--no-action):hover,
308
309
  .dt-leftbar-row[data-v-e6da0c41]:not(.dt-leftbar-row--no-action):focus-within {
@@ -341,13 +342,13 @@
341
342
  border-bottom-right-radius: var(--dt-size-radius-0);
342
343
  }
343
344
  .dt-leftbar-row__unread-mention-count-badge[data-v-e6da0c41] {
345
+ background-color: var(--dt-color-purple-500);
344
346
  border-top-left-radius: var(--dt-size-radius-0);
345
347
  border-bottom-left-radius: var(--dt-size-radius-0);
346
- background-color: var(--dt-color-purple-500);
347
348
  }
348
349
  .dt-leftbar-row__unread-mention-only-count-badge[data-v-e6da0c41] {
349
- background-color: var(--dt-color-purple-500);
350
350
  color: var(--dt-color-foreground-primary-inverted);
351
+ background-color: var(--dt-color-purple-500);
351
352
  }
352
353
  .dt-leftbar-row--muted[data-v-e6da0c41] {
353
354
  --leftbar-row-opacity: 60%;
@@ -364,25 +365,25 @@
364
365
  }
365
366
  .dt-leftbar-row__is-typing[data-v-e6da0c41] {
366
367
  --is-typing-size-shape: var(--dt-size-550);
367
- height: var(--is-typing-size-shape);
368
- width: var(--is-typing-size-shape);
369
368
  position: absolute;
370
369
  display: flex;
370
+ gap: var(--dt-space-200);
371
371
  align-items: center;
372
372
  justify-content: center;
373
- gap: 2px;
373
+ width: var(--is-typing-size-shape);
374
+ height: var(--is-typing-size-shape);
374
375
  border-radius: var(--dt-size-radius-pill);
375
376
  opacity: 0.75;
376
377
  }
377
378
  .dt-leftbar-row__is-typing span[data-v-e6da0c41] {
378
- transition: all 500ms ease;
379
- background: var(--dt-color-surface-strong);
380
- height: 4px;
381
- width: 4px;
382
379
  display: inline-block;
380
+ width: var(--dt-size-300);
381
+ height: var(--dt-size-300);
383
382
  padding: 0;
384
- opacity: 0.3;
383
+ background: var(--dt-color-surface-strong);
385
384
  border-radius: var(--dt-size-radius-pill);
385
+ opacity: 0.3;
386
+ transition: all 500ms ease;
386
387
  animation: wave-e6da0c41 1.5s ease infinite;
387
388
  }
388
389
  .dt-leftbar-row__is-typing span[data-v-e6da0c41]:nth-child(1) {
@@ -396,20 +397,20 @@
396
397
  }
397
398
  .dt-leftbar-row__primary[data-v-e6da0c41] {
398
399
  display: flex;
399
- align-items: center;
400
400
  flex: 1;
401
+ align-items: center;
401
402
  width: 100%;
402
- text-align: left;
403
- background-color: var(--leftbar-row-color-background);
403
+ margin: 0;
404
+ padding: 0;
404
405
  color: var(--leftbar-row-color-foreground);
405
- text-decoration: none;
406
- appearance: none;
407
406
  font-size: inherit;
408
407
  line-height: inherit;
409
- margin: 0;
408
+ text-align: left;
409
+ text-decoration: none;
410
+ background-color: var(--leftbar-row-color-background);
410
411
  border: 0;
411
- padding: 0;
412
412
  border-radius: var(--leftbar-row-radius);
413
+ appearance: none;
413
414
  }
414
415
  .dt-leftbar-row__primary[data-v-e6da0c41]:active {
415
416
  --leftbar-row-color-background: var(--dt-theme-sidebar-row-color-background-active);
@@ -418,20 +419,20 @@
418
419
  box-shadow: var(--dt-shadow-focus-inset);
419
420
  }
420
421
  .dt-leftbar-row__action-button[data-v-e6da0c41] {
421
- opacity: 0;
422
422
  width: var(--leftbar-row-action-width);
423
423
  height: var(--leftbar-row-action-height);
424
+ opacity: 0;
424
425
  }
425
426
  .dt-leftbar-row__alpha[data-v-e6da0c41] {
426
- color: var(--leftbar-row-alpha-color-foreground);
427
427
  display: flex;
428
- box-sizing: border-box;
429
- justify-content: center;
430
428
  align-items: center;
431
- padding-left: var(--dt-space-400);
432
- padding-right: var(--dt-space-400);
429
+ justify-content: center;
430
+ box-sizing: border-box;
433
431
  width: var(--leftbar-row-alpha-width);
434
432
  height: var(--leftbar-row-alpha-height);
433
+ padding-right: var(--dt-space-400);
434
+ padding-left: var(--dt-space-400);
435
+ color: var(--leftbar-row-alpha-color-foreground);
435
436
  border-radius: var(--leftbar-row-radius) 0 0 var(--leftbar-row-radius);
436
437
  }
437
438
  .dt-leftbar-row__label[data-v-e6da0c41] {
@@ -440,47 +441,47 @@
440
441
  }
441
442
  .dt-leftbar-row__omega[data-v-e6da0c41] {
442
443
  position: absolute;
443
- display: flex;
444
- right: var(--leftbar-row-action-position-right);
445
444
  top: var(--leftbar-row-action-position-bottom);
446
- transform: translateY(calc(var(--leftbar-row-action-position-bottom) * -1));
445
+ right: var(--leftbar-row-action-position-right);
446
+ display: flex;
447
447
  gap: var(--dt-space-300);
448
- justify-content: flex-end;
449
448
  align-items: center;
449
+ justify-content: flex-end;
450
450
  box-sizing: border-box;
451
451
  border-radius: var(--leftbar-row-radius);
452
+ transform: translateY(calc(var(--leftbar-row-action-position-bottom) * -1));
452
453
  }
453
454
  .dt-leftbar-row__unread-badge[data-v-e6da0c41] {
454
455
  display: var(--leftbar-row-unread-badge-display);
455
456
  }
456
457
  .dt-leftbar-row__active-voice[data-v-e6da0c41] {
457
- color: var(--dt-color-purple-400);
458
458
  display: inline-flex;
459
+ color: var(--dt-color-purple-400);
459
460
  -webkit-animation-name: opacity-pulsate-e6da0c41;
460
- -webkit-animation-duration: 1s;
461
- -webkit-animation-iteration-count: infinite;
462
- -webkit-animation-fill-mode: both;
463
461
  -moz-animation-name: opacity-pulsate-e6da0c41;
464
- -moz-animation-duration: 1s;
465
- -moz-animation-iteration-count: infinite;
466
- -moz-animation-fill-mode: both;
467
462
  animation-name: opacity-pulsate-e6da0c41;
463
+ -webkit-animation-duration: 1s;
464
+ -moz-animation-duration: 1s;
468
465
  animation-duration: 1s;
466
+ -webkit-animation-iteration-count: infinite;
467
+ -moz-animation-iteration-count: infinite;
469
468
  animation-iteration-count: infinite;
469
+ -webkit-animation-fill-mode: both;
470
+ -moz-animation-fill-mode: both;
470
471
  animation-fill-mode: both;
471
472
  }
472
473
  .dt-leftbar-row__dnd[data-v-e6da0c41] {
473
474
  padding-top: var(--dt-space-200);
474
475
  padding-right: var(--dt-space-300);
475
476
  color: var(--dt-color-foreground-tertiary);
477
+ font-weight: var(--dt-font-weight-medium);
476
478
  font-size: var(--dt-font-size-100);
477
479
  line-height: var(--dt-font-line-height-400);
478
- font-weight: var(--dt-font-weight-medium);
479
480
  }
480
481
  .dt-leftbar-row__container--off-duty[data-v-e6da0c41] {
481
- border-radius: var(--dt-size-radius-500);
482
482
  background-color: var(--dt-badge-color-background-critical);
483
483
  border: var(--dt-size-100) solid var(--dt-color-border-subtle);
484
+ border-radius: var(--dt-size-radius-500);
484
485
  }
485
486
  .dt-leftbar-row__container--off-duty[data-v-e6da0c41] .dt-leftbar-row__primary {
486
487
  margin: calc(var(--dt-size-100) * -1);
@@ -498,48 +499,48 @@
498
499
  }
499
500
  .dt-leftbar-row[data-v-e6da0c41] .dt-leftbar-row__description {
500
501
  display: block;
502
+ overflow: hidden;
503
+ color: var(--leftbar-row-description-color-foreground);
501
504
  font-weight: var(--leftbar-row-description-font-weight);
502
505
  font-size: var(--leftbar-row-description-font-size);
503
506
  line-height: var(--leftbar-row-description-line-height);
504
- color: var(--leftbar-row-description-color-foreground);
505
- overflow: hidden;
506
- text-overflow: ellipsis;
507
507
  white-space: nowrap;
508
+ text-overflow: ellipsis;
508
509
  }
509
510
  .dt-leftbar-row[data-v-e6da0c41] .dt-leftbar-row__status {
510
511
  display: block;
512
+ padding-bottom: var(--dt-space-100);
513
+ overflow: hidden;
511
514
  color: var(--leftbar-row-status-color-foreground);
512
515
  font-size: var(--leftbar-row-status-font-size);
513
516
  line-height: var(--leftbar-row-status-line-height);
514
- padding-bottom: var(--dt-space-100);
515
- overflow: hidden;
516
- text-overflow: ellipsis;
517
517
  white-space: nowrap;
518
+ text-overflow: ellipsis;
518
519
  }
519
- .dt-leftbar-row[data-v-e6da0c41] .dt-leftbar-row__meta-context ~ .dt-leftbar-row__meta-custom:not(:empty):before {
520
- content: ' • ';
520
+ .dt-leftbar-row[data-v-e6da0c41] .dt-leftbar-row__meta-context ~ .dt-leftbar-row__meta-custom:not(:empty)::before {
521
521
  color: var(--dt-theme-sidebar-status-color-foreground);
522
+ content: ' • ';
522
523
  }
523
524
  .dt-leftbar-row__icon-cc[data-v-e6da0c41] {
524
- border-radius: var(--dt-size-200);
525
525
  width: calc(var(--dt-size-300) * 3.5);
526
526
  height: calc(var(--dt-size-300) * 3.5);
527
+ border-radius: var(--dt-size-200);
527
528
  }
528
529
  .opacity-pulsate[data-v-e6da0c41] {
529
530
  -webkit-animation-name: opacity-pulsate-e6da0c41;
530
- -webkit-animation-duration: 1s;
531
- -webkit-animation-iteration-count: infinite;
532
- -webkit-animation-fill-mode: both;
533
531
  -moz-animation-name: opacity-pulsate-e6da0c41;
534
- -moz-animation-duration: 1s;
535
- -moz-animation-iteration-count: infinite;
536
- -moz-animation-fill-mode: both;
537
532
  animation-name: opacity-pulsate-e6da0c41;
533
+ -webkit-animation-duration: 1s;
534
+ -moz-animation-duration: 1s;
538
535
  animation-duration: 1s;
536
+ -webkit-animation-iteration-count: infinite;
537
+ -moz-animation-iteration-count: infinite;
539
538
  animation-iteration-count: infinite;
539
+ -webkit-animation-fill-mode: both;
540
+ -moz-animation-fill-mode: both;
540
541
  animation-fill-mode: both;
541
542
  }
542
- @-webkit-keyframes opacity-pulsate-e6da0c41 {
543
+ @keyframes opacity-pulsate-e6da0c41 {
543
544
  0%,
544
545
  100% {
545
546
  opacity: 0.2;
@@ -548,7 +549,7 @@
548
549
  opacity: 1;
549
550
  }
550
551
  }
551
- @-moz-keyframes opacity-pulsate-e6da0c41 {
552
+ @keyframes opacity-pulsate-e6da0c41 {
552
553
  0%,
553
554
  100% {
554
555
  opacity: 0.2;
@@ -573,10 +574,11 @@
573
574
  transform: translate(0, 0);
574
575
  }
575
576
  10% {
576
- transform: translate(0, -5px);
577
- opacity: 90%;
577
+ transform: translate(0, -0.5rem);
578
+ opacity: 0.9;
578
579
  }
579
580
  }
581
+ /* stylelint-disable selector-pseudo-class-no-unknown */
580
582
  .dt-leftbar-row[data-v-f44e0386] {
581
583
  --leftbar-row-color-foreground: var(--dt-theme-sidebar-color-foreground);
582
584
  --leftbar-row-color-background: var(--dt-theme-sidebar-row-color-background);
@@ -599,14 +601,14 @@
599
601
  --leftbar-row-action-width: var(--dt-size-550);
600
602
  --leftbar-row-action-height: var(--leftbar-row-action-width);
601
603
  position: relative;
602
- opacity: var(--leftbar-row-opacity);
603
604
  display: flex;
604
605
  background-color: var(--dt-theme-sidebar-row-color-background);
605
606
  border-radius: var(--leftbar-row-radius);
607
+ cursor: pointer;
608
+ opacity: var(--leftbar-row-opacity);
609
+ transition-timing-function: var(--ttf-out-quint);
606
610
  transition-duration: var(--td200);
607
611
  transition-property: background-color, border, box-shadow;
608
- transition-timing-function: var(--ttf-out-quint);
609
- cursor: pointer;
610
612
  }
611
613
  .dt-leftbar-row[data-v-f44e0386]:not(.dt-leftbar-row--no-action):hover,
612
614
  .dt-leftbar-row[data-v-f44e0386]:not(.dt-leftbar-row--no-action):focus-within {
@@ -645,13 +647,13 @@
645
647
  border-bottom-right-radius: var(--dt-size-radius-0);
646
648
  }
647
649
  .dt-leftbar-row__unread-mention-count-badge[data-v-f44e0386] {
650
+ background-color: var(--dt-color-purple-500);
648
651
  border-top-left-radius: var(--dt-size-radius-0);
649
652
  border-bottom-left-radius: var(--dt-size-radius-0);
650
- background-color: var(--dt-color-purple-500);
651
653
  }
652
654
  .dt-leftbar-row__unread-mention-only-count-badge[data-v-f44e0386] {
653
- background-color: var(--dt-color-purple-500);
654
655
  color: var(--dt-color-foreground-primary-inverted);
656
+ background-color: var(--dt-color-purple-500);
655
657
  }
656
658
  .dt-leftbar-row--muted[data-v-f44e0386] {
657
659
  --leftbar-row-opacity: 60%;
@@ -668,25 +670,25 @@
668
670
  }
669
671
  .dt-leftbar-row__is-typing[data-v-f44e0386] {
670
672
  --is-typing-size-shape: var(--dt-size-550);
671
- height: var(--is-typing-size-shape);
672
- width: var(--is-typing-size-shape);
673
673
  position: absolute;
674
674
  display: flex;
675
+ gap: var(--dt-space-200);
675
676
  align-items: center;
676
677
  justify-content: center;
677
- gap: 2px;
678
+ width: var(--is-typing-size-shape);
679
+ height: var(--is-typing-size-shape);
678
680
  border-radius: var(--dt-size-radius-pill);
679
681
  opacity: 0.75;
680
682
  }
681
683
  .dt-leftbar-row__is-typing span[data-v-f44e0386] {
682
- transition: all 500ms ease;
683
- background: var(--dt-color-surface-strong);
684
- height: 4px;
685
- width: 4px;
686
684
  display: inline-block;
685
+ width: var(--dt-size-300);
686
+ height: var(--dt-size-300);
687
687
  padding: 0;
688
- opacity: 0.3;
688
+ background: var(--dt-color-surface-strong);
689
689
  border-radius: var(--dt-size-radius-pill);
690
+ opacity: 0.3;
691
+ transition: all 500ms ease;
690
692
  animation: wave-f44e0386 1.5s ease infinite;
691
693
  }
692
694
  .dt-leftbar-row__is-typing span[data-v-f44e0386]:nth-child(1) {
@@ -700,20 +702,20 @@
700
702
  }
701
703
  .dt-leftbar-row__primary[data-v-f44e0386] {
702
704
  display: flex;
703
- align-items: center;
704
705
  flex: 1;
706
+ align-items: center;
705
707
  width: 100%;
706
- text-align: left;
707
- background-color: var(--leftbar-row-color-background);
708
+ margin: 0;
709
+ padding: 0;
708
710
  color: var(--leftbar-row-color-foreground);
709
- text-decoration: none;
710
- appearance: none;
711
711
  font-size: inherit;
712
712
  line-height: inherit;
713
- margin: 0;
713
+ text-align: left;
714
+ text-decoration: none;
715
+ background-color: var(--leftbar-row-color-background);
714
716
  border: 0;
715
- padding: 0;
716
717
  border-radius: var(--leftbar-row-radius);
718
+ appearance: none;
717
719
  }
718
720
  .dt-leftbar-row__primary[data-v-f44e0386]:active {
719
721
  --leftbar-row-color-background: var(--dt-theme-sidebar-row-color-background-active);
@@ -722,20 +724,20 @@
722
724
  box-shadow: var(--dt-shadow-focus-inset);
723
725
  }
724
726
  .dt-leftbar-row__action-button[data-v-f44e0386] {
725
- opacity: 0;
726
727
  width: var(--leftbar-row-action-width);
727
728
  height: var(--leftbar-row-action-height);
729
+ opacity: 0;
728
730
  }
729
731
  .dt-leftbar-row__alpha[data-v-f44e0386] {
730
- color: var(--leftbar-row-alpha-color-foreground);
731
732
  display: flex;
732
- box-sizing: border-box;
733
- justify-content: center;
734
733
  align-items: center;
735
- padding-left: var(--dt-space-400);
736
- padding-right: var(--dt-space-400);
734
+ justify-content: center;
735
+ box-sizing: border-box;
737
736
  width: var(--leftbar-row-alpha-width);
738
737
  height: var(--leftbar-row-alpha-height);
738
+ padding-right: var(--dt-space-400);
739
+ padding-left: var(--dt-space-400);
740
+ color: var(--leftbar-row-alpha-color-foreground);
739
741
  border-radius: var(--leftbar-row-radius) 0 0 var(--leftbar-row-radius);
740
742
  }
741
743
  .dt-leftbar-row__label[data-v-f44e0386] {
@@ -744,47 +746,47 @@
744
746
  }
745
747
  .dt-leftbar-row__omega[data-v-f44e0386] {
746
748
  position: absolute;
747
- display: flex;
748
- right: var(--leftbar-row-action-position-right);
749
749
  top: var(--leftbar-row-action-position-bottom);
750
- transform: translateY(calc(var(--leftbar-row-action-position-bottom) * -1));
750
+ right: var(--leftbar-row-action-position-right);
751
+ display: flex;
751
752
  gap: var(--dt-space-300);
752
- justify-content: flex-end;
753
753
  align-items: center;
754
+ justify-content: flex-end;
754
755
  box-sizing: border-box;
755
756
  border-radius: var(--leftbar-row-radius);
757
+ transform: translateY(calc(var(--leftbar-row-action-position-bottom) * -1));
756
758
  }
757
759
  .dt-leftbar-row__unread-badge[data-v-f44e0386] {
758
760
  display: var(--leftbar-row-unread-badge-display);
759
761
  }
760
762
  .dt-leftbar-row__active-voice[data-v-f44e0386] {
761
- color: var(--dt-color-purple-400);
762
763
  display: inline-flex;
764
+ color: var(--dt-color-purple-400);
763
765
  -webkit-animation-name: opacity-pulsate-f44e0386;
764
- -webkit-animation-duration: 1s;
765
- -webkit-animation-iteration-count: infinite;
766
- -webkit-animation-fill-mode: both;
767
766
  -moz-animation-name: opacity-pulsate-f44e0386;
768
- -moz-animation-duration: 1s;
769
- -moz-animation-iteration-count: infinite;
770
- -moz-animation-fill-mode: both;
771
767
  animation-name: opacity-pulsate-f44e0386;
768
+ -webkit-animation-duration: 1s;
769
+ -moz-animation-duration: 1s;
772
770
  animation-duration: 1s;
771
+ -webkit-animation-iteration-count: infinite;
772
+ -moz-animation-iteration-count: infinite;
773
773
  animation-iteration-count: infinite;
774
+ -webkit-animation-fill-mode: both;
775
+ -moz-animation-fill-mode: both;
774
776
  animation-fill-mode: both;
775
777
  }
776
778
  .dt-leftbar-row__dnd[data-v-f44e0386] {
777
779
  padding-top: var(--dt-space-200);
778
780
  padding-right: var(--dt-space-300);
779
781
  color: var(--dt-color-foreground-tertiary);
782
+ font-weight: var(--dt-font-weight-medium);
780
783
  font-size: var(--dt-font-size-100);
781
784
  line-height: var(--dt-font-line-height-400);
782
- font-weight: var(--dt-font-weight-medium);
783
785
  }
784
786
  .dt-leftbar-row__container--off-duty[data-v-f44e0386] {
785
- border-radius: var(--dt-size-radius-500);
786
787
  background-color: var(--dt-badge-color-background-critical);
787
788
  border: var(--dt-size-100) solid var(--dt-color-border-subtle);
789
+ border-radius: var(--dt-size-radius-500);
788
790
  }
789
791
  .dt-leftbar-row__container--off-duty[data-v-f44e0386] .dt-leftbar-row__primary {
790
792
  margin: calc(var(--dt-size-100) * -1);
@@ -802,48 +804,48 @@
802
804
  }
803
805
  .dt-leftbar-row[data-v-f44e0386] .dt-leftbar-row__description {
804
806
  display: block;
807
+ overflow: hidden;
808
+ color: var(--leftbar-row-description-color-foreground);
805
809
  font-weight: var(--leftbar-row-description-font-weight);
806
810
  font-size: var(--leftbar-row-description-font-size);
807
811
  line-height: var(--leftbar-row-description-line-height);
808
- color: var(--leftbar-row-description-color-foreground);
809
- overflow: hidden;
810
- text-overflow: ellipsis;
811
812
  white-space: nowrap;
813
+ text-overflow: ellipsis;
812
814
  }
813
815
  .dt-leftbar-row[data-v-f44e0386] .dt-leftbar-row__status {
814
816
  display: block;
817
+ padding-bottom: var(--dt-space-100);
818
+ overflow: hidden;
815
819
  color: var(--leftbar-row-status-color-foreground);
816
820
  font-size: var(--leftbar-row-status-font-size);
817
821
  line-height: var(--leftbar-row-status-line-height);
818
- padding-bottom: var(--dt-space-100);
819
- overflow: hidden;
820
- text-overflow: ellipsis;
821
822
  white-space: nowrap;
823
+ text-overflow: ellipsis;
822
824
  }
823
- .dt-leftbar-row[data-v-f44e0386] .dt-leftbar-row__meta-context ~ .dt-leftbar-row__meta-custom:not(:empty):before {
824
- content: ' • ';
825
+ .dt-leftbar-row[data-v-f44e0386] .dt-leftbar-row__meta-context ~ .dt-leftbar-row__meta-custom:not(:empty)::before {
825
826
  color: var(--dt-theme-sidebar-status-color-foreground);
827
+ content: ' • ';
826
828
  }
827
829
  .dt-leftbar-row__icon-cc[data-v-f44e0386] {
828
- border-radius: var(--dt-size-200);
829
830
  width: calc(var(--dt-size-300) * 3.5);
830
831
  height: calc(var(--dt-size-300) * 3.5);
832
+ border-radius: var(--dt-size-200);
831
833
  }
832
834
  .opacity-pulsate[data-v-f44e0386] {
833
835
  -webkit-animation-name: opacity-pulsate-f44e0386;
834
- -webkit-animation-duration: 1s;
835
- -webkit-animation-iteration-count: infinite;
836
- -webkit-animation-fill-mode: both;
837
836
  -moz-animation-name: opacity-pulsate-f44e0386;
838
- -moz-animation-duration: 1s;
839
- -moz-animation-iteration-count: infinite;
840
- -moz-animation-fill-mode: both;
841
837
  animation-name: opacity-pulsate-f44e0386;
838
+ -webkit-animation-duration: 1s;
839
+ -moz-animation-duration: 1s;
842
840
  animation-duration: 1s;
841
+ -webkit-animation-iteration-count: infinite;
842
+ -moz-animation-iteration-count: infinite;
843
843
  animation-iteration-count: infinite;
844
+ -webkit-animation-fill-mode: both;
845
+ -moz-animation-fill-mode: both;
844
846
  animation-fill-mode: both;
845
847
  }
846
- @-webkit-keyframes opacity-pulsate-f44e0386 {
848
+ @keyframes opacity-pulsate-f44e0386 {
847
849
  0%,
848
850
  100% {
849
851
  opacity: 0.2;
@@ -852,7 +854,7 @@
852
854
  opacity: 1;
853
855
  }
854
856
  }
855
- @-moz-keyframes opacity-pulsate-f44e0386 {
857
+ @keyframes opacity-pulsate-f44e0386 {
856
858
  0%,
857
859
  100% {
858
860
  opacity: 0.2;
@@ -877,8 +879,8 @@
877
879
  transform: translate(0, 0);
878
880
  }
879
881
  10% {
880
- transform: translate(0, -5px);
881
- opacity: 90%;
882
+ transform: translate(0, -0.5rem);
883
+ opacity: 0.9;
882
884
  }
883
885
  }
884
886
  .dt-recipe-callbox[data-v-ef08f46e] {