- From: Justin Fagnani <notifications@github.com>
- Date: Thu, 31 Mar 2022 15:24:31 -0700
- To: WICG/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <WICG/webcomponents/issues/936/1085187369@github.com>
To show an example where `slotchange` and JS is used to fill this gap, I noticed this pattern in @claviska's Shoelace components. A component that wants to style based on the presence of slotted nodes will [compute a class based on a JS utility](https://github.com/shoelace-style/shoelace/blob/46ac48071306e9421c0f64f6ea8dc6bec6e9d68a/src/components/button/button.ts#L184 ): ```ts return html` <button part="base" class=${classMap({ 'button--has-label': this.hasSlotController.test('[default]'), 'button--has-prefix': this.hasSlotController.test('prefix'), 'button--has-suffix': this.hasSlotController.test('suffix') ``` `this.hasSlotController.test('[default]')` returns true if the default slot has assigned nodes, which causes the element to have the `button-has-label` class. Then it's styled with: ```css .button--has-label.button--small .button__label { padding: 0 var(--sl-spacing-small); } ``` and there's a whole [`HasSlotController` utility](https://github.com/shoelace-style/shoelace/blob/next/src/internal/slot.ts#L3) that will listen for slot change and re-render the component so that those classes can be recomputed. I think this whole mechanism and render cycle could be replaced with this CSS if we had the right selector: ```css button:has(slot:not([name])::hasSlotted(*)) { padding: 0 var(--sl-spacing-small); } ``` -- Reply to this email directly or view it on GitHub: https://github.com/WICG/webcomponents/issues/936#issuecomment-1085187369 You are receiving this because you are subscribed to this thread. Message ID: <WICG/webcomponents/issues/936/1085187369@github.com>
Received on Thursday, 31 March 2022 22:24:44 UTC