From 4233235c8329293230404ef3ffe94182182fa91b Mon Sep 17 00:00:00 2001 From: Piotr Tomiak Date: Fri, 26 Aug 2022 13:41:59 +0200 Subject: [PATCH] fix(web-types): add support for VDataTable pattern slots --- packages/api-generator/src/export.js | 38 +++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/api-generator/src/export.js b/packages/api-generator/src/export.js index fbc2aa3ad80..aa0ddc3f552 100644 --- a/packages/api-generator/src/export.js +++ b/packages/api-generator/src/export.js @@ -49,10 +49,46 @@ const createWebTypesApi = () => { const getDocUrl = (cmp, heading = null) => `https://www.vuetifyjs.com/api/${cmp}${heading ? `#${heading}` : ''}` const createTag = component => { + const createTagSlotPattern = slot => { + const patternIndex = slot.name.indexOf('') + if (patternIndex < 0) { return {} } + + let itemName + const slotPrefix = slot.name.substring(0, patternIndex) + if (slotPrefix === 'header.') { + // VDataTable header. + itemName = 'header column' + } else if (slotPrefix === 'item.') { + // VDataTable item. + itemName = 'column' + } else { + // Fallback + itemName = 'item' + } + + const itemsPath = itemName.replace(' ', '-') + 's' + return { + pattern: { + items: itemsPath, + template: [ + slotPrefix, + '#item:' + itemName, + ], + }, + [itemsPath]: { + name: itemName[0].toUpperCase() + itemName.substring(1), + pattern: { + regex: '.+', + }, + 'doc-hide-pattern': true, + }, + } + } + const createTagSlot = slot => { return { name: slot.name, - pattern: undefined, + ...createTagSlotPattern(slot), description: slot.description.en || '', 'doc-url': getDocUrl(component.name, 'slots'), 'vue-properties': slot.props && Object.keys(slot.props).map(key => createTypedEntity(key, slot.props[key])),