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 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 240x 240x 240x 240x 240x 240x 240x 240x 240x 240x 172x 4x 172x 167x 167x 167x 80x 167x 85x 85x 167x 172x 240x 240x 240x 240x 240x 240x 240x 240x 240x 240x 240x 240x 240x 240x 240x | /** @import { BlockStatement, Expression, 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 = []; /** @type {Expression} */ let expression = b.call('$.default_slot', b.id('$$props')); 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') { expression = b.member(b.member_id('$$props.$$slots'), value, true, true); } 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'), expression, props_expression, fallback); context.state.template.push(empty_comment, b.stmt(slot), empty_comment); } |