first commit

This commit is contained in:
2024-07-15 11:28:08 +02:00
commit f52d538ea5
21891 changed files with 6161164 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
<component
:is="tagName"
:class="classesList"
:id="elementId"
:disabled="disabled"
v-bind="tagAtts"
@click="handleClick"
v-if="isVisible()"
>
<span :class="[ this.baseClass + '__content' ]">
<slot name="label"></slot>
</span>
<span v-if="loading" :class="[ this.baseClass + '__loader' ]">
<slot name="loadingIcon">
<svg width="16" class="loader-icon" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.9023 9.06541L14.4611 9.55376C14.3145 10.2375 14.0214 10.8967 13.6305 11.5316L14.2901 12.899C14.3145 12.9478 14.2901 12.9966 14.2656 13.0455L12.971 14.3396C12.9221 14.364 12.8733 14.3884 12.8244 14.364L11.4565 13.7047C10.8458 14.0954 10.1863 14.364 9.47786 14.5105L8.98931 15.9512C8.98931 15.9756 8.96489 16 8.8916 16H7.08397C7.03511 16 6.98626 15.9756 6.96183 15.9267L6.47328 14.4861C5.78931 14.3396 5.12977 14.0466 4.49466 13.6559L3.12672 14.3152C3.07786 14.3396 3.02901 14.3152 2.98015 14.2908L1.6855 12.9966C1.66107 12.9478 1.63664 12.899 1.66107 12.8501L2.32061 11.4828C1.92977 10.8723 1.66107 10.213 1.5145 9.50493L0.0732824 9.01658C0.0244275 8.99216 0 8.96774 0 8.89449L0 7.08759C0 7.03875 0.0244275 6.98992 0.0732824 6.9655L1.5145 6.47715C1.66107 5.79346 1.9542 5.13418 2.34504 4.49933L1.6855 3.13194C1.66107 3.08311 1.6855 3.03427 1.70992 2.98544L3.00458 1.69131C3.05344 1.66689 3.10229 1.64247 3.15114 1.66689L4.51908 2.32616C5.12977 1.93548 5.78931 1.66689 6.49771 1.52038L6.98626 0.0797482C7.01069 0.0309124 7.03511 0.00649452 7.1084 0.00649452L8.91603 0.00649452C8.96489 -0.0179234 9.01374 0.0309124 9.03817 0.0797482L9.52672 1.52038C10.2107 1.66689 10.8702 1.9599 11.5053 2.35058L12.8733 1.69131C12.9221 1.66689 12.971 1.69131 13.0198 1.71572L14.3145 3.00986C14.3389 3.05869 14.3634 3.10753 14.3389 3.15636L13.6794 4.52374C14.0702 5.13418 14.3389 5.79346 14.4855 6.50157L15.9267 6.98992C15.9756 7.01434 16 7.03875 16 7.11201V8.91891C15.9756 8.99216 15.9511 9.04099 15.9023 9.06541ZM11.5786 6.9655C10.9924 4.98768 8.91603 3.86447 6.96183 4.45049C4.98321 5.03651 3.85954 7.11201 4.4458 9.06541C5.03206 11.0432 7.1084 12.1664 9.0626 11.5804C11.0412 11.0188 12.1649 8.94332 11.5786 6.9655Z"/></svg>
</slot>
</span>
</component>

View File

@@ -0,0 +1,65 @@
<cx-vui-component-wrapper
:elementId="currentId"
:label="label"
:description="description"
:wrapper-css="wrapperCss"
:preventWrap="preventWrap"
v-if="isVisible()"
>
<div
:class="{
'cx-vui-checkgroup': true,
'cx-vui-checkgroup--single-item': this.optionsList.length === 1
}"
:id="currentId"
tabindex="0"
@focus="handleParentFocus( $event )"
>
<div
class="cx-vui-checkbox-wrap"
v-for="( option, index ) in optionsList"
>
<div
:key="name + option.value + index"
:class="{
'cx-vui-checkbox': true,
'cx-vui-checkbox--disabled': disabled,
'cx-vui-checkbox--checked': isChecked( option.value ),
'cx-vui-checkbox--focused': isOptionInFocus( option.value ),
}"
@click="handleInput( $event, option.value )"
@focus="handleFocus( $event, option.value )"
@blur="handleBlur( $event, option.value )"
@keyup.enter="handleInput( $event, option.value )"
tabindex="0"
>
<input
:class="{
'cx-vui-checkbox__input': true,
}"
:type="inputType"
:name="name + '[' + option.value + ']'"
:value="inputValue( option.value )"
:checked="isChecked( option.value )"
:disabled="disabled"
>
<div
:class="{
'cx-vui-checkbox__check': true,
'cx-vui-checkbox__check--disabled': disabled,
'cx-vui-checkbox__check--checked': isChecked( option.value ),
'cx-vui-checkbox__check--focused': isOptionInFocus( option.value ),
}"
>
<svg width="12" height="10" viewBox="0 0 12 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.19531 5.05469L1.19531 3.25L0 4.44531L4.19531 9.25L12 1.44531L10.8047 0.25L4.19531 5.05469Z"/></svg>
</div>
<div
:class="{
'cx-vui-checkbox__label': true,
}"
v-html="option.label"
></div>
</div>
</div>
</div>
</cx-vui-component-wrapper>

View File

@@ -0,0 +1,15 @@
<div
:class="{ 'cx-vui-collapse': true, 'cx-vui-collapse--collapsed': 'collapsed' === this.state }"
v-if="isVisible()"
>
<div
class="cx-vui-collapse__heading"
@click="switchState"
>
<span :class="[ 'cx-vui-collapse__heading-icon', 'dashicons', this.iconArrow ]"></span>
<slot name="title"></slot>
</div>
<div class="cx-vui-collapse__content">
<slot name="content"></slot>
</div>
</div>

View File

@@ -0,0 +1,29 @@
<div
:class="wrapperClasses()" v-if="isVisible() && ! preventWrap"
>
<div
class="cx-vui-component__meta"
v-if="this.label || this.description"
>
<label
class="cx-vui-component__label"
v-if="this.label"
:for="elementId"
v-html="this.label"
></label>
<div
class="cx-vui-component__desc"
v-if="this.description"
v-html="this.description"
></div>
</div>
<div class="cx-vui-component__control">
<slot></slot>
</div>
</div>
<div
:class="wrapperClassesRaw"
v-else-if="isVisible()"
>
<slot></slot>
</div>

View File

@@ -0,0 +1,94 @@
<cx-vui-component-wrapper
:elementId="currentId"
:label="label"
:description="description"
:wrapper-css="wrapperCss"
:preventWrap="preventWrap"
v-if="isVisible()"
>
<div class="cx-vui-f-select">
<div :class="{
'cx-vui-f-select__selected': true,
'cx-vui-f-select__selected-not-empty': this.currentValues.length > 0
}">
<div
v-for="option in selectedOptions"
class="cx-vui-f-select__selected-option"
@click="handleResultClick( option.value )"
>
<span class="cx-vui-f-select__selected-option-icon">
<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 1.00671L6.00671 5L10 8.99329L8.99329 10L5 6.00671L1.00671 10L0 8.99329L3.99329 5L0 1.00671L1.00671 0L5 3.99329L8.99329 0L10 1.00671Z"/></svg>
</span>
{{ option.label }}
</div>
</div>
<div
v-click-outside.capture="onClickOutside"
v-click-outside:mousedown.capture="onClickOutside"
v-click-outside:touchstart.capture="onClickOutside"
@keydown.up.prevent="handleOptionsNav"
@keydown.down.prevent="handleOptionsNav"
@keydown.tab="handleOptionsNav"
@keydown.enter="handleEnter"
class="cx-vui-f-select__control"
>
<input
:id="currentId"
:autocomplete="autocomplete"
type="text"
:value="query"
@input="handleInput"
@focus="handleFocus"
:class="{
'cx-vui-f-select__input': true,
'cx-vui-input--in-focus': this.inFocus,
'cx-vui-input': true,
'size-fullwidth': true,
'has-error': error,
}"
>
<div class="cx-vui-f-select__results" v-if="inFocus">
<div v-if="remote && loading" class="cx-vui-f-select__results-loading" v-html="loadingMessage"></div>
<div
v-else-if="remote && charsDiff > 0"
v-html="parsedRemoteTriggerMessage"
class="cx-vui-f-select__results-message"
></div>
<div
v-else-if="! filteredOptions.length"
v-html="notFoundMeassge"
class="cx-vui-f-select__results-message"
></div>
<div v-else>
<div
v-for="( option, optionIndex ) in filteredOptions"
:class="{
'cx-vui-f-select__result': true,
'in-focus': optionIndex === optionInFocus,
'is-selected': isOptionSelected( option )
}"
@click="handleResultClick( option.value )"
>{{ option.label }}</div>
</div>
</div>
</div>
<select
:placeholder="placeholder"
:disabled="disabled"
:readonly="readonly"
:name="name"
:multiple="multiple"
:value="currentValues"
class="cx-vui-f-select__select-tag"
>
<option
v-for="option in currentValues"
:value="option"
selected
></option>
</select>
</div>
</cx-vui-component-wrapper>

View File

@@ -0,0 +1,68 @@
<cx-vui-component-wrapper
:elementId="currentId"
:label="label"
:description="description"
:wrapper-css="wrapperCss"
:preventWrap="preventWrap"
v-if="isVisible()"
>
<div
class="cx-vui-iconpicker"
v-click-outside.capture="onClickOutside"
v-click-outside:mousedown.capture="onClickOutside"
v-click-outside:touchstart.capture="onClickOutside"
>
<div class="cx-vui-iconpicker__fieldgroup">
<div
class="cx-vui-iconpicker__preview"
@click="panelActive = true"
>
<i :class="[ iconBase, currentValue ]"></i>
</div>
<input
:id="currentId"
:class="[ 'cx-vui-iconpicker__input', 'cx-vui-input' ]"
:placeholder="placeholder"
:disabled="disabled"
:autocomplete="autocomplete"
:readonly="readonly"
:name="name"
:value="currentValue"
:autofocus="autofocus"
@keyup.enter="handleEnter"
@keyup.esc="handleEsc"
@focus="handleFocus"
@blur="handleBlur"
@input="handleInput"
@change="handleChange"
ref="iconpicker"
>
</div>
<div class="cx-vui-iconpicker__canvas" v-if="panelActive">
<div class="cx-vui-iconpicker__canvas-content">
<div class="cx-vui-iconpicker__canvas-header">
<input
type="text"
class="cx-vui-iconpicker__canvas-search cx-vui-input size-fullwidth"
v-model="filterQuery"
>
</div>
<div class="cx-vui-iconpicker__canvas-list">
<div
tabindex="0"
v-for="icon in filteredIcons"
:class="{
'cx-vui-iconpicker__canvas-icon': true,
'cx-vui-iconpicker__canvas-icon--selected': icon === currentValue,
}"
@click="seclectIcon( icon )"
@keyup.enter="seclectIcon( icon )"
@keyup.esc="closePanel()"
>
<i :class="[ iconBase, icon ]"></i>
</div>
</div>
</div>
</div>
</div>
</cx-vui-component-wrapper>

View File

@@ -0,0 +1,29 @@
<cx-vui-component-wrapper
:elementId="currentId"
:label="label"
:description="description"
:wrapper-css="wrapperCss"
:preventWrap="preventWrap"
v-if="isVisible()"
>
<input
:id="currentId"
:type="type"
:class="controlClasses"
:placeholder="placeholder"
:disabled="disabled"
:maxlength="maxlength"
:readonly="readonly"
:name="name"
:value="currentValue"
:autofocus="autofocus"
@keyup.enter="handleEnter"
@keyup="handleKeyup"
@keypress="handleKeypress"
@keydown="handleKeydown"
@focus="handleFocus"
@blur="handleBlur"
@input="handleInput"
@change="handleChange"
>
</cx-vui-component-wrapper>

View File

@@ -0,0 +1,14 @@
<div :class="[
'list-table-heading',
className
]">
<div
:class="[
'list-table-heading__cell',
'cell--' + slot
]"
v-for="slot in slots"
>
<slot :name="slot"></slot>
</div>
</div>

View File

@@ -0,0 +1,14 @@
<div :class="[
'list-table-item',
className
]">
<div
:class="[
'list-table-item__cell',
'cell--' + slot
]"
v-for="slot in slots"
>
<slot :name="slot"></slot>
</div>
</div>

View File

@@ -0,0 +1,19 @@
<div class="cx-vue-list-table">
<div class="cx-vue-list-table__heading">
<slot name="heading"></slot>
</div>
<div
class="cx-vue-list-table__items"
v-if="! isEmpty"
>
<slot name="items"></slot>
</div>
<div
class="cx-vue-list-table__items is-empty"
v-else
v-html="emptyMessage"
></div>
<div class="cx-vue-list-table__footer">
<slot name="footer"></slot>
</div>
</div>

View File

@@ -0,0 +1,38 @@
<div class="cx-vui-notices">
<transition-group name="cx-vui-notices" tag="div">
<div
v-for="( item, itemID ) in stack"
:class="[
'cx-vui-notice',
'cx-vui-notice--' + item.type,
]"
:key="'item-' + itemID"
>
<div
:class="[
'cx-vui-notice__icon',
'cx-vui-notice__icon--' + item.type,
]"
v-html="getIcon( item.type )"
></div>
<div class="cx-vui-notice__content">
<div
class="cx-vui-notice__title"
v-if="item.title"
v-html="item.title"
></div>
<div
class="cx-vui-notice__message"
v-if="item.message"
v-html="item.message"
></div>
</div>
<div
class="cx-vui-notice__close"
@click="destroyItem( itemID )"
>
<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M16 1.61074L9.61074 8L16 14.3893L14.3893 16L8 9.61074L1.61074 16L0 14.3893L6.38926 8L0 1.61074L1.61074 0L8 6.38926L14.3893 0L16 1.61074Z"/></svg>
</div>
</div>
</transition-group>
</div>

View File

@@ -0,0 +1,36 @@
<div class="cx-vui-popup" v-if="value">
<div
class="cx-vui-popup__overlay"
v-if="overlay"
@click="handleCancel"
></div>
<div
class="cx-vui-popup__body"
:style="'width:' + bodyWidth"
>
<div
class="cx-vui-popup__close"
v-if="close"
@click="handleCancel"
>
<svg width="20" height="20" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 3.00671L8.00671 7L12 10.9933L10.9933 12L7 8.00671L3.00671 12L2 10.9933L5.99329 7L2 3.00671L3.00671 2L7 5.99329L10.9933 2L12 3.00671Z"/></svg>
</div>
<div class="cx-vui-popup__header" v-if="header">
<slot name="title"></slot>
</div>
<div class="cx-vui-popup__content">
<slot name="content"></slot>
</div>
<div class="cx-vui-popup__footer" v-if="footer">
<cx-vui-button
:button-style="'accent'"
:size="'mini'"
@click="handleOk"
><span slot="label">{{ okLabel }}</span></cx-vui-button>
<cx-vui-button
:size="'mini'"
@click="handleCancel"
><span slot="label">{{ cancelLabel }}</span></cx-vui-button>
</div>
</div>
</div>

View File

@@ -0,0 +1,62 @@
<cx-vui-component-wrapper
:elementId="currentId"
:label="label"
:description="description"
:wrapper-css="wrapperCss"
:preventWrap="preventWrap"
v-if="isVisible()"
>
<div
:class="{
'cx-vui-radiogroup': true,
'cx-vui-radiogroup--single-item': this.optionsList.length === 1
}"
:id="currentId"
tabindex="0"
>
<div
class="cx-vui-radio-wrap"
v-for="( option, index ) in optionsList"
>
<div
:key="name + option.value + index"
:class="{
'cx-vui-radio': true,
'cx-vui-radio--disabled': disabled,
'cx-vui-radio--checked': option.value === currentValue,
'cx-vui-radio--focused': isOptionInFocus( option.value ),
}"
@click="handleInput( $event, option.value )"
@focus="handleFocus( $event, option.value )"
@blur="handleBlur( $event, option.value )"
tabindex="0"
>
<input
:class="{
'cx-vui-radio__input': true,
}"
:name="name + '[' + option.value + ']'"
:value="option.value"
:checked="option.value === currentValue"
:disabled="disabled"
type="radio"
>
<div
:class="{
'cx-vui-radio__mark': true,
'cx-vui-radio__mark--disabled': disabled,
'cx-vui-radio__mark--checked': option.value === currentValue,
'cx-vui-radio__mark--focused': isOptionInFocus( option.value ),
}"
>
</div>
<div
:class="{
'cx-vui-radio__label': true,
}"
v-html="option.label"
></div>
</div>
</div>
</div>
</cx-vui-component-wrapper>

View File

@@ -0,0 +1,77 @@
<div
:class="{
'cx-vui-repeater-item': true,
'cx-vui-panel': true,
'cx-vui-repeater-item--is-collpased': this.isCollapsed
}"
>
<div
:class="{
'cx-vui-repeater-item__heading': true,
'cx-vui-repeater-item__heading--is-collpased': this.isCollapsed
}"
>
<div
class="cx-vui-repeater-item__heading-start"
@click.stop="isCollapsed = ! isCollapsed"
>
<div
v-handle
class="cx-vui-repeater-item__handle"
>
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg"><line x1="2" y1="3" x2="14" y2="3" stroke-width="2"/><line x1="2" y1="11" x2="14" y2="11" stroke-width="2"/><line x1="2" y1="7" x2="14" y2="7" stroke-width="2"/></svg>
</div>
<svg
:class="{
'cx-vui-repeater-item__collapse':true,
'cx-vui-repeater-item__collapse--is-collpased': this.isCollapsed
}"
width="14"
height="14"
viewBox="0 0 14 14"
fill="none"
xmlns="http://www.w3.org/2000/svg"
><rect width="14" height="14" transform="matrix(1 0 0 -1 0 14)" fill="white"/><path d="M13 5.32911L7 11L1 5.32911L2.40625 4L7 8.34177L11.5938 4L13 5.32911Z"/></svg>
<div class="cx-vui-repeater-item__title" v-html="title"></div>
<div class="cx-vui-repeater-item__subtitle" v-html="subtitle"></div>
</div>
<div class="cx-vui-repeater-item__heading-end">
<div
class="cx-vui-repeater-item__copy"
@click="handleCopy"
>
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="16" height="16" transform="matrix(1 0 0 -1 0 16)" fill="white"/><path d="M13.401 14.5362V4.35745H5.47721V14.5362H13.401ZM13.401 2.92766C13.7848 2.92766 14.1234 3.07518 14.4169 3.37021C14.7104 3.64255 14.8571 3.97163 14.8571 4.35745V14.5362C14.8571 14.922 14.7104 15.2624 14.4169 15.5574C14.1234 15.8525 13.7848 16 13.401 16H5.47721C5.09344 16 4.75482 15.8525 4.46134 15.5574C4.16787 15.2624 4.02113 14.922 4.02113 14.5362V4.35745C4.02113 3.97163 4.16787 3.64255 4.46134 3.37021C4.75482 3.07518 5.09344 2.92766 5.47721 2.92766H13.401ZM11.2338 0V1.46383H2.56504V11.6426H1.14282V1.46383C1.14282 1.07801 1.27827 0.737589 1.54917 0.442553C1.84265 0.147518 2.18127 0 2.56504 0H11.2338Z"/></svg>
</div>
<div
class="cx-vui-repeater-item__clean"
@click="handleDelete"
>
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="16" height="16" transform="matrix(1 0 0 -1 0 16)" fill="white"/><path d="M2.28564 14.192V3.42847H13.7142V14.192C13.7142 14.6685 13.5208 15.0889 13.1339 15.4533C12.747 15.8177 12.3005 15.9999 11.7946 15.9999H4.20529C3.69934 15.9999 3.25291 15.8177 2.866 15.4533C2.4791 15.0889 2.28564 14.6685 2.28564 14.192Z"/><path d="M14.8571 1.14286V2.28571H1.14282V1.14286H4.57139L5.56085 0H10.4391L11.4285 1.14286H14.8571Z"/></svg>
<div
class="cx-vui-tooltip"
v-if="showConfirmTip"
>
Are you sure?
<br>
<span
class="cx-vui-repeater-item__confrim-del"
@click.stop="confrimDeletion"
>Yes</span>
/
<span
class="cx-vui-repeater-item__cancel-del"
@click.stop="cancelDeletion"
>No</span>
</div>
</div>
</div>
</div>
<div
:class="{
'cx-vui-repeater-item__content': true,
'cx-vui-repeater-item__content--is-collpased': this.isCollapsed
}"
>
<slot></slot>
</div>
</div>

View File

@@ -0,0 +1,22 @@
<div
class="cx-vui-repeater"
tabindex="0"
@focus="inFocus = true"
@blur="inFocus = false"
@keyup.alt.n.stop="handleClick"
v-if="isVisible()"
>
<div class="cx-vui-repeater__items">
<slot></slot>
</div>
<div class="cx-vui-repeater__actions">
<cx-vui-button
:button-style="buttonStyle"
:size="buttonSize"
@click="handleClick"
><span slot="label">{{ buttonLabel }}</span></cx-vui-button>
<i class="cx-vui-repeater__tip" v-if="inFocus">
Or press <kbd>alt</kbd>+<kbd>n</kbd> to add new item
</i>
</div>
</div>

View File

@@ -0,0 +1,33 @@
<cx-vui-component-wrapper
:elementId="currentId"
:label="label"
:description="description"
:wrapper-css="wrapperCss"
:preventWrap="preventWrap"
v-if="isVisible()"
>
<select
:id="currentId"
:placeholder="placeholder"
:disabled="disabled"
:readonly="readonly"
:name="name"
:multiple="multiple"
v-model="currentValue"
:class="controlClasses()"
@focus="handleFocus"
@blur="handleBlur"
@change="handleInput"
>
<option
v-if="placeholder"
value=""
disabled
>{{ placeholder }}</option>
<option
v-for="option in options"
:value="option.value"
:selected="isOptionSelected( option )"
>{{ option.label }}</option>
</select>
</cx-vui-component-wrapper>

View File

@@ -0,0 +1,34 @@
<cx-vui-component-wrapper
:elementId="currentId"
:label="label"
:description="description"
:wrapper-css="wrapperCss"
:preventWrap="preventWrap"
v-if="isVisible()"
>
<div
tabIndex="0"
:id="currentId"
:class="{
'cx-vui-switcher': true,
'cx-vui-switcher--disabled': this.disabled,
'cx-vui-switcher--on': this.isOn,
'cx-vui-switcher--off': ! this.isOn,
'cx-vui-switcher--in-focus': this.inFocus
}"
@keyup.enter="handleEnter"
@focus="handleFocus"
@blur="handleBlur"
@click="switchState"
>
<input
type="hidden"
checked="checked"
class="cx-vui-switcher__input"
:name="name"
:value="currentValue"
>
<div class="cx-vui-switcher__panel"></div>
<div class="cx-vui-switcher__trigger"></div>
</div>
</cx-vui-component-wrapper>

View File

@@ -0,0 +1,3 @@
<div class="cx-vui-tabs-panel" v-show="show">
<slot></slot>
</div>

View File

@@ -0,0 +1,30 @@
<?php
/**
* Tabs component
*/
?>
<div
:class="{
'cx-vui-tabs': true,
'cx-vui-tabs--invert': invert,
'cx-vui-tabs--layout-vertical': 'vertical' === this.layout,
'cx-vui-tabs--layout-horizontal': 'horizontal' === this.layout,
'cx-vui-tabs--in-panel': inPanel,
}"
>
<div class="cx-vui-tabs__nav">
<div
v-for="item in navList"
:class="{
'cx-vui-tabs__nav-item': true,
'cx-vui-tabs__nav-item--active': isActive( item.name ),
}"
@click="onTabClick( item.name )"
>
{{ item.label }}
</div>
</div>
<div class="cx-vui-tabs__content">
<slot></slot>
</div>
</div>

View File

@@ -0,0 +1,27 @@
<cx-vui-component-wrapper
:elementId="currentId"
:label="label"
:description="description"
:wrapper-css="wrapperCss"
:preventWrap="preventWrap"
v-if="isVisible()"
>
<textarea
:id="currentId"
:class="controlClasses"
:placeholder="placeholder"
:disabled="disabled"
:rows="rows"
:readonly="readonly"
:name="name"
:value="currentValue"
@keyup.enter="handleEnter"
@keyup="handleKeyup"
@keypress="handleKeypress"
@keydown="handleKeydown"
@focus="handleFocus"
@blur="handleBlur"
@input="handleInput"
@change="handleChange"
></textarea>
</cx-vui-component-wrapper>

View File

@@ -0,0 +1,2 @@
<h2 class="cx-vui-title">
</h2>