UNPKG

vfg-next

Version:

A schema-based form generator component for Vue.js 3

425 lines (424 loc) 12.3 kB
.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 !important; 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 !important; background-color: #337ab7 !important; border-color: #2e6da4 !important; } .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; }