Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 242x 242x 242x 242x 242x 242x 242x 242x 242x 174x 4x 174x 169x 169x 169x 81x 169x 86x 86x 169x 174x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x 242x | /** @import { BlockStatement, Expression, Literal, Property } from 'estree' */ /** @import { AST } from '#compiler' */ /** @import { ComponentContext } from '../types.js' */ import * as b from '../../../../utils/builders.js'; import { empty_comment, build_attribute_value } from './shared/utils.js'; /** * @param {AST.SlotElement} node * @param {ComponentContext} context */ export function SlotElement(node, context) { /** @type {Property[]} */ const props = []; /** @type {Expression[]} */ const spreads = []; let name = b.literal('default'); for (const attribute of node.attributes) { if (attribute.type === 'SpreadAttribute') { spreads.push(/** @type {Expression} */ (context.visit(attribute))); } else if (attribute.type === 'Attribute') { const value = build_attribute_value(attribute.value, context, false, true); if (attribute.name === 'name') { name = /** @type {Literal} */ (value); } else if (attribute.name !== 'slot') { props.push(b.init(attribute.name, value)); } } } const props_expression = spreads.length === 0 ? b.object(props) : b.call('$.spread_props', b.array([b.object(props), ...spreads])); const fallback = node.fragment.nodes.length === 0 ? b.literal(null) : b.thunk(/** @type {BlockStatement} */ (context.visit(node.fragment))); const slot = b.call( '$.slot', b.id('$$payload'), b.id('$$props'), name, props_expression, fallback ); context.state.template.push(empty_comment, b.stmt(slot), empty_comment); } |