diff --git a/src/props/Prop.js b/src/props/Prop.js index 52eea99..95ab9e9 100644 --- a/src/props/Prop.js +++ b/src/props/Prop.js @@ -38,6 +38,13 @@ let Self = class Prop { } } + if (spec.rawProp) { + // FIXME what if rawProp comes after this one? + let rawProp = this.props.get(spec.rawProp); + this.defaultProp ??= spec.rawProp; + rawProp.defaultProp ??= this.name; + } + if (spec.defaultProp) { Object.defineProperty(this, "default", { get: () => this.props.get(spec.defaultProp), @@ -55,6 +62,10 @@ let Self = class Prop { ...inferDependencies(spec.convert), ...(spec.additionalDependencies ?? []), ]); + + if (this.rawProp) { + this.dependencies.add(this.rawProp); + } } // Computed properties are not reflected by default diff --git a/src/props/Props.js b/src/props/Props.js index 6bbb4e2..fb5d9e2 100644 --- a/src/props/Props.js +++ b/src/props/Props.js @@ -120,6 +120,13 @@ export default class Props extends Map { } } + if (prop.rawProp && element.props[prop.name] !== undefined && element.props[prop.rawProp] !== undefined) { + delete element.props[prop.rawProp]; + let rawProp = this.get(prop.rawProp); + rawProp.defaultProp ??= prop; + this.propChanged(element, rawProp, {source: "property", value: element.props[prop.rawProp]}); + } + // Fire propchange event let eventNames = [ "propchange", ...(prop.eventNames ?? []) ]; for (let eventName of eventNames) {