vfg-next
Version:
A schema-based form generator component for Vue.js 3
425 lines (424 loc) • 12.3 kB
CSS
.vue-form-generator .field-checkbox input {
margin-left: 12px;
}
.vue-form-generator .field-checklist .list-selected {
margin: 15px 0px;
}
.vue-form-generator .field-checklist .list-selected .item-selected {
margin-right: 4px;
margin-bottom: 5px;
padding: 4px 8px;
border: 1px solid #ddd;
border-radius: 8px;
}
.vue-form-generator .field-checklist .listbox,
.vue-form-generator .field-checklist .dropList {
height: auto;
max-height: 150px;
overflow: auto;
}
.vue-form-generator .field-checklist .listbox .list-row label,
.vue-form-generator .field-checklist .dropList .list-row label {
font-weight: normal;
font-weight: initial;
}
.vue-form-generator .field-checklist .listbox .list-row input,
.vue-form-generator .field-checklist .dropList .list-row input {
margin-right: 0.3em;
}
.vue-form-generator .field-checklist .combobox {
width: auto ;
min-width: 0;
display: table;
height: auto;
height: initial;
overflow: hidden;
}
.vue-form-generator .field-checklist .combobox .mainRow {
cursor: pointer;
position: relative;
padding-right: 10px;
}
.vue-form-generator .field-checklist .combobox .mainRow .arrow {
position: absolute;
right: -9px;
top: 3px;
width: 16px;
height: 16px;
transform: rotate(0deg);
transition: transform 0.5s;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAGdJREFUOI3tzjsOwjAURNGDUqSgTxU5K2AVrJtswjUsgHSR0qdxAZZFPrS+3ZvRzBsqf9MUtBtazJk+oMe0VTriiZCFX8nbpENMgfARjsn74vKj5IFruhfc8d6zIF9S/Hyk5HS4spMVeFcOjszaOwMAAAAASUVORK5CYII=");
background-repeat: no-repeat;
}
.vue-form-generator .field-checklist .combobox .mainRow.expanded .arrow {
transform: rotate(-180deg);
}
.vue-form-generator .field-checklist .combobox .dropList {
transition: height 0.5s;
}
.vue-form-generator .field-input .wrapper {
width: 100%;
}
.vue-form-generator .field-input input[type=radio] {
width: 100%;
}
.vue-form-generator .field-input input[type=color] {
width: 60px;
}
.vue-form-generator .field-input input[type=range] {
padding: 0;
}
.vue-form-generator .field-input .helper {
margin: auto 0.5em;
}
.vue-form-generator .field-label .wrapper {
display: block;
width: 100%;
margin-left: 12px;
}
.vue-form-generator .field-radios .radio-list label {
display: block;
}
.vue-form-generator .field-radios .radio-list label input[type=radio] {
margin-right: 5px;
}
.vue-form-generator .field-submit input {
color: #fff ;
background-color: #337ab7 ;
border-color: #2e6da4 ;
}
.vue-form-generator .field-input .wrapper {
width: 100%;
}
.vue-form-generator .field-input .helper {
margin: auto 0.5em;
}
.vue-form-generator .field-image .wrapper {
width: 100%;
}
.vue-form-generator .field-image .preview {
position: relative;
margin-top: 5px;
height: 100px;
background-repeat: no-repeat;
background-size: contain;
background-position: center center;
border: 1px solid #ccc;
border-radius: 3px;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.vue-form-generator .field-image .preview .remove {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAXUlEQVR42u2SwQoAIAhD88vVLy8KBlaS0i1oJwP3piGVg0Skmpq8HjqZrWl9uwCbGAmwKYGZs/6iqgMyAdJuM8W2QmYKpLt/0AG9ASCv/oAnANd3AEjmAlFT1BypAV+PnRH5YehvAAAAAElFTkSuQmCC");
width: 16px;
height: 16px;
font-size: 1.2em;
position: absolute;
right: 0.2em;
bottom: 0.2em;
opacity: 0.7;
}
.vue-form-generator .field-image .preview .remove:hover {
opacity: 1;
cursor: pointer;
}
.vue-form-generator .field-noUiSlider .field-wrap {
display: block;
}
.vue-form-generator .field-noUiSlider .contain-pips {
margin-bottom: 30px;
}
.vue-form-generator .field-noUiSlider .contain-tooltip {
margin-top: 30px;
}
.vue-form-generator .field-noUiSlider .noUi-vertical {
height: 200px;
margin: 10px 0;
}
.vue-form-generator .field-rangeSlider .irs {
width: 100%;
}
.vue-form-generator .field-selectEx .bootstrap-select .dropdown-menu li.selected .text {
font-weight: bold;
}
.vue-form-generator .field-staticMap img {
display: block;
width: auto;
max-width: 100%;
}
.vue-form-generator .field-switch {
/* Transition
========================== */
}
.vue-form-generator .field-switch .field-wrap label {
position: relative;
display: block;
width: 120px;
height: 30px;
padding: 0;
margin: 0 10px 10px 0;
border-radius: 15px;
box-shadow: inset 0 -1px white, inset 0 1px 1px rgba(0, 0, 0, 0.05);
cursor: pointer;
}
.vue-form-generator .field-switch input {
position: absolute;
top: 0;
left: 0;
opacity: 0;
}
.vue-form-generator .field-switch .label {
position: relative;
display: block;
height: inherit;
font-size: 10px;
text-transform: uppercase;
background: #eceeef;
border-radius: inherit;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15);
}
.vue-form-generator .field-switch .label:before,
.vue-form-generator .field-switch .label:after {
position: absolute;
top: 50%;
margin-top: -0.5em;
line-height: 1;
transition: inherit;
}
.vue-form-generator .field-switch .label:before {
content: attr(data-off);
right: 11px;
color: #aaaaaa;
text-shadow: 0 1px rgba(255, 255, 255, 0.5);
}
.vue-form-generator .field-switch .label:after {
content: attr(data-on);
left: 11px;
color: #ffffff;
text-shadow: 0 1px rgba(0, 0, 0, 0.2);
opacity: 0;
}
.vue-form-generator .field-switch input:checked ~ .label {
background: #e1b42b;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15), inset 0 0 3px rgba(0, 0, 0, 0.2);
}
.vue-form-generator .field-switch input:checked ~ .label:before {
opacity: 0;
}
.vue-form-generator .field-switch input:checked ~ .label:after {
opacity: 1;
}
.vue-form-generator .field-switch .handle {
position: absolute;
top: 1px;
left: 1px;
width: 28px;
height: 28px;
background: linear-gradient(to bottom, #ffffff 40%, #f0f0f0);
background-image: -webkit-linear-gradient(top, #ffffff 40%, #f0f0f0);
border-radius: 100%;
box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.2);
}
.vue-form-generator .field-switch .handle:before {
content: "";
position: absolute;
top: 50%;
left: 50%;
margin: -6px 0 0 -6px;
width: 12px;
height: 12px;
background: linear-gradient(to bottom, #eeeeee, #ffffff);
background-image: -webkit-linear-gradient(top, #eeeeee, #ffffff);
border-radius: 6px;
box-shadow: inset 0 1px rgba(0, 0, 0, 0.02);
}
.vue-form-generator .field-switch input:checked ~ .handle {
left: 91px;
left: calc(100% - (30px - 1px));
box-shadow: -1px 1px 5px rgba(0, 0, 0, 0.2);
}
.vue-form-generator .field-switch .label,
.vue-form-generator .field-switch .handle {
transition: all 0.3s ease;
}
.form-group:not([class*=" col-"]) {
width: 100%;
}
.form-group {
display: inline-block;
vertical-align: top;
margin-bottom: 1rem;
}
.form-group label {
font-weight: 400;
}
.form-group label > :first-child {
display: inline-block;
}
.form-group.featured > label {
font-weight: bold;
}
.form-group.required > label:after {
content: "*";
font-weight: normal;
color: Red;
padding-left: 0.2em;
font-size: 1em;
}
.form-group.disabled > label {
color: #666;
font-style: italic;
}
.form-group.error input:not([type=checkbox]),
.form-group.error textarea,
.form-group.error select {
border: 1px solid #f00;
background-color: rgba(255, 0, 0, 0.15);
}
.form-group.error .errors {
color: #f00;
font-size: 0.8em;
}
.form-group.error .errors span {
display: block;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAiklEQVR4Xt2TMQoCQQxF3xdhu72MpZU3GU/meBFLOztPYrVWsQmEWSaMsIXgK8P8RyYkMjO2sAN+K9gTIAmDAlzoUzE7p4IFytvDCQWJKSStYB2efcAvqZFM0BcstMx5naSDYFzfLhh/4SmRM+6Agw/xIX0tKEDFufeDNRUc4XqLRz3qabVIf3BMHwl6Ktexn3nmAAAAAElFTkSuQmCC");
background-repeat: no-repeat;
padding-left: 17px;
padding-top: 0px;
margin-top: 0.2em;
font-weight: 600;
}
.form-group .success {
color: #080;
font-size: 0.8em;
}
.form-group .success span {
display: block;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQCAYAAAAiYZ4HAAABVklEQVQ4T62Sv0oDQRCHd2ZPfBEbS8FOTaLF3WEZLlEU/JPKQiVgZWuvgoXaqI2ickdscxElF5EgwRfwCezTmMvtjOzhxXgSMOC2+/u+2ZlZEEMeGDIvBgH4JaK08AeQcc1lBFFmARM6yAyvLOjwqVC7ScAekHGtE4m4kTYSkxIKjoOF6ra+iwFtligv02FmeldhZMkRYw8lXD3mq24M5DyzBSAn+wEd7oSd2eZS/S3jmhcCYKzh+FMawKxnhcDcJoCKBCylwxLlimIKG44/+g0IsVl3/NOsa++G3Y87bc559jkArOrK/YDIuPYLCh5njqyg+NDUVXOefQYAa8kzmdVz3alNxz3MuOaigfKaidpdVvMGyBIirvf3RCrKB8X7u95Ys7f2ERqwpZhIAiaLixliOggcf6c31sQ0V7ELEXFZCBFPDAW3mHhfm38t7q9/6t8+38CCnxD8mxFtcSSxAAAAAElFTkSuQmCC");
background-repeat: no-repeat;
padding-left: 17px;
padding-top: 0px;
margin-top: 0.2em;
font-weight: 600;
}
.vue-form-generator * {
box-sizing: border-box;
}
.vue-form-generator .form-control {
display: block;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
}
.vue-form-generator .form-control:not([class*=" col-"]) {
width: 100%;
}
.vue-form-generator span.help {
margin-left: 0.3em;
position: relative;
/* This bridges the gap so you can mouse into the tooltip without it disappearing */
}
.vue-form-generator span.help .icon {
display: inline-block;
width: 16px;
height: 14px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA+UlEQVQ4ja3TS0oDQRAG4C8+lq7ceICICoLGK7iXuNBbeAMJuPVOIm7cqmDiIncIggg+cMZFaqCnZyYKWtB0df31V1VXdfNH6S2wD9CP8xT3KH8T9BiTcE7XBMOfyBcogvCFO9ziLWwFRosyV+QxthNsA9dJkEYlvazsQdi3sBv6Ol6TBLX+HWT3fcQZ3vGM5fBLk+ynAU41m1biCXvhs4OPBDuBpa6GxF0P8YAj3GA1d1qJfdoS4DOIcIm1DK9x8iaWeDF/SP3QU6zRROpjLDFLsFlibx1jJaMkSIGrWKntvItcyTBKzCcybsvc9ZmYz3kz9Ooz/b98A8yvW13B3ch6AAAAAElFTkSuQmCC");
background-repeat: no-repeat;
background-position: center center;
}
.vue-form-generator span.help .helpText {
background-color: #444;
bottom: 30px;
color: #fff;
display: block;
left: 0px;
opacity: 0;
padding: 20px;
pointer-events: none;
position: absolute;
text-align: justify;
width: 300px;
transition: all 0.25s ease-out;
box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5);
border-radius: 6px;
}
.vue-form-generator span.help .helpText a {
font-weight: bold;
text-decoration: underline;
}
.vue-form-generator span.help .helpText:before {
bottom: -20px;
content: " ";
display: block;
height: 20px;
left: 0;
position: absolute;
width: 100%;
}
.vue-form-generator span.help:hover .helpText {
opacity: 1;
pointer-events: auto;
transform: translateY(0px);
}
.vue-form-generator .field-wrap {
display: flex;
}
.vue-form-generator .field-wrap .buttons {
white-space: nowrap;
margin-left: 4px;
}
.vue-form-generator .field-wrap button,
.vue-form-generator .field-wrap input[type=submit] {
display: inline-block;
padding: 6px 12px;
margin: 0px;
font-size: 14px;
font-weight: normal;
line-height: 1.42857143;
text-align: center;
white-space: nowrap;
vertical-align: middle;
touch-action: manipulation;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
color: #333;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 4px;
}
.vue-form-generator .field-wrap button:not(:last-child),
.vue-form-generator .field-wrap input[type=submit]:not(:last-child) {
margin-right: 4px;
}
.vue-form-generator .field-wrap button:hover,
.vue-form-generator .field-wrap input[type=submit]:hover {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.vue-form-generator .field-wrap button:active,
.vue-form-generator .field-wrap input[type=submit]:active {
color: #333;
background-color: #d4d4d4;
border-color: #8c8c8c;
outline: 0;
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.vue-form-generator .field-wrap button:disabled,
.vue-form-generator .field-wrap input[type=submit]:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.vue-form-generator .hint {
font-style: italic;
font-size: 0.8em;
}