UNPKG

@kevinkosterr/vue3-form-generator

Version:

A schema-based form generator component for Vue 3, based on the original [`vue-form-generator`](https://github.com/vue-generators/vue-form-generator) library.

401 lines (397 loc) 12 kB
.vue-form-generator { /** Select field */ /** End of select field */ } .vue-form-generator .vfg-select { display: inline-flex; cursor: pointer; position: relative; user-select: none; border: 1px solid #cdcdcd; color: #202020; border-radius: 5px; width: 100%; min-height: 30px; background: #f4f4f4; } .vue-form-generator .vfg-select .vfg-select-label { display: flex; align-items: center; justify-content: space-between; flex: 1 0 70%; align-content: center; padding: 0.3rem 0.4rem; } .vue-form-generator .vfg-select .vfg-select-label.text-muted { color: #5c5c5c; } .vue-form-generator .vfg-select .vfg-select-list-container { position: absolute; padding: 0.3rem; top: calc(35px + 0.2rem); left: 0; right: 0; background: #f4f4f4; border-radius: 3px; max-height: 250px; overflow-y: auto; z-index: 999; } .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list { border-radius: inherit; } .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list .vfg-select-option { display: flex; align-content: center; justify-content: space-between; padding: 0.3rem 0.4rem; margin-bottom: 0.1rem; } .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list .vfg-select-option:first-child, .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list .vfg-select-option:first-child:hover, .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list .vfg-select-option:last-child, .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list .vfg-select-option:last-child:hover { border-radius: 3px; } .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list .vfg-select-option.selected, .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list .vfg-select-option:hover { background: #d3d3d3; } .vue-form-generator .vfg-select .vfg-select-list-container .vfg-select-list .vfg-select-option:hover { cursor: pointer; } .field-color-wrapper { display: flex; flex-direction: row-reverse; align-items: stretch; justify-content: start; } .field-color-wrapper .field-color-input { max-width: 100px; } /** Styles from https://github.com/vue-generators/vue-form-generator */ .vue-form-generator * { box-sizing: border-box; } .vue-form-generator .field-checkbox input { margin-left: 12px; } .vue-form-generator .field-submit { color: #fff !important; background-color: #337ab7 !important; border-color: #2e6da4 !important; } .vue-form-generator .field-switch { position: relative; display: block; width: 120px; height: 30px; padding: 0; margin: 0 10px 10px 0; border-radius: 15px; cursor: pointer; font-size: 10px; text-transform: uppercase; background: #eceeef; box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.15); /* Transition ========================== */ } .vue-form-generator .field-switch:has(input[checked]) { 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 { position: absolute; top: 0; left: 0; opacity: 0; } .vue-form-generator .field-switch:before, .vue-form-generator .field-switch:after { position: absolute; top: 50%; margin-top: -0.5em; line-height: 1; -webkit-transition: inherit; -moz-transition: inherit; -o-transition: inherit; transition: inherit; } .vue-form-generator .field-switch:before { content: attr(data-off); right: 11px; color: #aaaaaa; text-shadow: 0 1px rgba(255, 255, 255, 0.5); } .vue-form-generator .field-switch: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:before { opacity: 0; } .vue-form-generator .field-switch input:checked ~ label:after { opacity: 1; } .vue-form-generator .field-switch .slider { 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 .slider: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 ~ .slider { 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 .slider { transition: all 0.3s ease; } .vue-form-generator .field-radio input { margin-right: 5px; } .vue-form-generator .field-radio label { display: block; } .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-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: 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 { 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 .form-group:not([class*=" col-"]) { width: 100%; } .vue-form-generator .form-group { display: inline-block; vertical-align: top; margin-bottom: 1rem; } .vue-form-generator .form-group label { font-weight: 400; } .vue-form-generator .form-group label > :first-child { display: inline-block; } .vue-form-generator .form-group.featured > label { font-weight: bold; } .vue-form-generator .form-group:has(input[required]) > label:after { content: "*"; font-weight: normal; color: red; padding-left: 0.2em; font-size: 1em; } .vue-form-generator .form-group.disabled > label { color: #666; font-style: italic; } .vue-form-generator .form-group .errors input:not([type=checkbox]), .vue-form-generator .form-group .errors textarea, .vue-form-generator .form-group .errors select { border: 1px solid #ea0000; background-color: rgba(234, 0, 0, 0.15); } .vue-form-generator .form-group .errors .error { color: #ea0000; font-size: 0.8em; } .vue-form-generator .form-group .errors .error 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; } .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], .vue-form-generator .field-wrap input[type=reset] { 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; 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), .vue-form-generator .field-wrap input[type=reset]:not(:last-child) { margin-right: 4px; } .vue-form-generator .field-wrap button:hover, .vue-form-generator .field-wrap input[type=submit]:hover, .vue-form-generator .field-wrap input[type=reset]: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, .vue-form-generator .field-wrap input[type=reset]: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, .vue-form-generator .field-wrap input[type=reset]:disabled { opacity: 0.6; cursor: not-allowed; } .vue-form-generator .hint { font-style: italic; font-size: 0.8em; } /*# sourceMappingURL=legacy.css.map */