"use strict"; /** * Form_Input_Abstract - Base class for all form input widgets * * Defines the interface that all form widgets must implement. * This ensures consistency across all input types (text, select, wysiwyg, etc.) * * REQUIRED METHODS (must be implemented by subclasses): * - val() - Get current value (no arguments) * - val(value) - Set value (one argument) * - seed() - Fills the widget with random test data (optional) * * All widgets must: * - Have .Widget CSS class * - Have data-name attribute set by Form_Field */ class Form_Input_Abstract extends Component { /** * val() - Get or set the current value * Subclasses MUST implement this method * * @param {*} [value] - If provided, sets the value. If omitted, returns the value. * @returns {*} The current value when called as getter */ val(value) { if (arguments.length === 0) { // Getter throw new Error(`${this.constructor.name} must implement val() getter`); } else { // Setter throw new Error(`${this.constructor.name} must implement val(value) setter`); } } /** * Seed - Fill with random test data (optional) * Subclasses MAY implement this method */ async seed() { // Optional - widgets can override if they support seeding } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtX0lucHV0X0Fic3RyYWN0IiwiSnFodG1sX0NvbXBvbmVudCIsInZhbCIsInZhbHVlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJzZWVkIl0sInNvdXJjZXMiOlsicnN4L3RoZW1lL2NvbXBvbmVudHMvaW5wdXRzL2Zvcm1faW5wdXRfYWJzdHJhY3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3JtX0lucHV0X0Fic3RyYWN0IC0gQmFzZSBjbGFzcyBmb3IgYWxsIGZvcm0gaW5wdXQgd2lkZ2V0c1xuICpcbiAqIERlZmluZXMgdGhlIGludGVyZmFjZSB0aGF0IGFsbCBmb3JtIHdpZGdldHMgbXVzdCBpbXBsZW1lbnQuXG4gKiBUaGlzIGVuc3VyZXMgY29uc2lzdGVuY3kgYWNyb3NzIGFsbCBpbnB1dCB0eXBlcyAodGV4dCwgc2VsZWN0LCB3eXNpd3lnLCBldGMuKVxuICpcbiAqIFJFUVVJUkVEIE1FVEhPRFMgKG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcyk6XG4gKiAtIHZhbCgpIC0gR2V0IGN1cnJlbnQgdmFsdWUgKG5vIGFyZ3VtZW50cylcbiAqIC0gdmFsKHZhbHVlKSAtIFNldCB2YWx1ZSAob25lIGFyZ3VtZW50KVxuICogLSBzZWVkKCkgLSBGaWxscyB0aGUgd2lkZ2V0IHdpdGggcmFuZG9tIHRlc3QgZGF0YSAob3B0aW9uYWwpXG4gKlxuICogQWxsIHdpZGdldHMgbXVzdDpcbiAqIC0gSGF2ZSAuV2lkZ2V0IENTUyBjbGFzc1xuICogLSBIYXZlIGRhdGEtbmFtZSBhdHRyaWJ1dGUgc2V0IGJ5IEZvcm1fRmllbGRcbiAqL1xuY2xhc3MgRm9ybV9JbnB1dF9BYnN0cmFjdCBleHRlbmRzIEpxaHRtbF9Db21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIHZhbCgpIC0gR2V0IG9yIHNldCB0aGUgY3VycmVudCB2YWx1ZVxuICAgICAqIFN1YmNsYXNzZXMgTVVTVCBpbXBsZW1lbnQgdGhpcyBtZXRob2RcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXSAtIElmIHByb3ZpZGVkLCBzZXRzIHRoZSB2YWx1ZS4gSWYgb21pdHRlZCwgcmV0dXJucyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFRoZSBjdXJyZW50IHZhbHVlIHdoZW4gY2FsbGVkIGFzIGdldHRlclxuICAgICAqL1xuICAgIHZhbCh2YWx1ZSkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gR2V0dGVyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBtdXN0IGltcGxlbWVudCB2YWwoKSBnZXR0ZXJgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNldHRlclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gbXVzdCBpbXBsZW1lbnQgdmFsKHZhbHVlKSBzZXR0ZXJgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlZWQgLSBGaWxsIHdpdGggcmFuZG9tIHRlc3QgZGF0YSAob3B0aW9uYWwpXG4gICAgICogU3ViY2xhc3NlcyBNQVkgaW1wbGVtZW50IHRoaXMgbWV0aG9kXG4gICAgICovXG4gICAgYXN5bmMgc2VlZCgpIHtcbiAgICAgICAgLy8gT3B0aW9uYWwgLSB3aWRnZXRzIGNhbiBvdmVycmlkZSBpZiB0aGV5IHN1cHBvcnQgc2VlZGluZ1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxtQkFBbUIsU0FBU0MsZ0JBQWdCLENBQUM7RUFDL0M7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsR0FBR0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQ1AsSUFBSUMsU0FBUyxDQUFDQyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3hCO01BQ0EsTUFBTSxJQUFJQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0MsSUFBSSw4QkFBOEIsQ0FBQztJQUMzRSxDQUFDLE1BQU07TUFDSDtNQUNBLE1BQU0sSUFBSUYsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUNDLElBQUksbUNBQW1DLENBQUM7SUFDaEY7RUFDSjs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtFQUNJLE1BQU1DLElBQUlBLENBQUEsRUFBRztJQUNUO0VBQUE7QUFFUiIsImlnbm9yZUxpc3QiOltdfQ==