diff --git a/docs/assets/plugins/metadata/metadata.js b/docs/assets/plugins/metadata/metadata.js index 72babe86..ed760f70 100644 --- a/docs/assets/plugins/metadata/metadata.js +++ b/docs/assets/plugins/metadata/metadata.js @@ -1,10 +1,6 @@ (() => { let metadataStore; - function getAttrName(propName) { - return propName.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`).replace(/^-/, ''); - } - function createPropsTable(props) { const table = document.createElement('table'); table.innerHTML = ` @@ -19,18 +15,17 @@ ${props .map(prop => { - const attr = getAttrName(prop.name); return ` ${escapeHtml(prop.name)} ${ - prop.name !== attr + prop.attribute && prop.name !== prop.attribute ? `
- - ${escapeHtml(attr)} + + ${escapeHtml(prop.attribute)} ` : '' diff --git a/scripts/make-metadata.cjs b/scripts/make-metadata.cjs index 8e654c0f..b3f02f69 100644 --- a/scripts/make-metadata.cjs +++ b/scripts/make-metadata.cjs @@ -120,9 +120,29 @@ components.map(async component => { props.map(prop => { const { type, values } = getTypeInfo(prop); + let attribute; + + // Look for an attribute in the @property decorator + if (Array.isArray(prop.decorators)) { + const decorator = prop.decorators.find(d => d.name === 'property'); + if (decorator) { + try { + // We trust TypeDoc <3 + const options = eval(`(${decorator.arguments.options})`); + + // If an attribute is specified, it will always be a string + if (options && typeof options.attribute === 'string') { + attribute = options.attribute; + } + } catch (err) { + console.log(err); + } + } + } api.props.push({ name: prop.name, + attribute: attribute, description: prop.comment.shortText, type, values, diff --git a/src/components/qr-code/qr-code.ts b/src/components/qr-code/qr-code.ts index 64b9f552..ab155593 100644 --- a/src/components/qr-code/qr-code.ts +++ b/src/components/qr-code/qr-code.ts @@ -35,7 +35,7 @@ export default class SlQrCode extends LitElement { /** The edge radius of each module. Must be between 0 and 0.5. */ @property({ type: Number }) radius = 0; - /* The level of error correction to use. */ + /** The level of error correction to use. */ @property({ attribute: 'error-correction' }) errorCorrection: 'L' | 'M' | 'Q' | 'H' = 'H'; firstUpdated() {