From eca1949235daab42bf960631956dab76eb380791 Mon Sep 17 00:00:00 2001 From: Ruben Carvalho Date: Tue, 25 Feb 2025 14:18:57 +0100 Subject: [PATCH] chore: slider default slot deprecation warning --- packages/slider/src/Slider.ts | 12 +++++++++++- packages/slider/test/slider.test.ts | 30 +++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/slider/src/Slider.ts b/packages/slider/src/Slider.ts index 4b3bbe8c35..f39a5ea4ca 100644 --- a/packages/slider/src/Slider.ts +++ b/packages/slider/src/Slider.ts @@ -44,7 +44,7 @@ export const variants = ['filled', 'ramp', 'range', 'tick']; /** * @element sp-slider * - * @slot - text label for the Slider + * @slot - @deprecated Text label for the Slider. Use the `label` property instead. * @slot handle - optionally accepts two or more sp-slider-handle elements */ export class Slider extends SizedMixin(ObserveSlotText(SliderHandle, ''), { @@ -231,6 +231,16 @@ export class Slider extends SizedMixin(ObserveSlotText(SliderHandle, ''), { public override connectedCallback(): void { super.connectedCallback(); this.handleController.hostConnected(); + + // Deprecation warning for default slot when content is provided + if (window.__swc.DEBUG && this.textContent?.trim()) { + window.__swc.warn( + this, + `The default slot for text label in <${this.localName}> has been deprecated and will be removed in a future release. Use the "label" property instead.`, + 'https://opensource.adobe.com/spectrum-web-components/components/slider/', + { level: 'deprecation' } + ); + } } public override disconnectedCallback(): void { diff --git a/packages/slider/test/slider.test.ts b/packages/slider/test/slider.test.ts index bfc02a3545..60cb29d5ce 100644 --- a/packages/slider/test/slider.test.ts +++ b/packages/slider/test/slider.test.ts @@ -1820,4 +1820,34 @@ describe('Slider', () => { // now the overlay should be closed expect(overlay.open).to.be.false; }); + + it('warns in Dev Mode when using the default slot for text labels', async () => { + const consoleWarnStub = stub(console, 'warn'); + window.__swc.issuedWarnings = new Set(); + const el = await fixture(html` + + This is a deprecated text label + + `); + + await elementUpdated(el); + + expect(consoleWarnStub.called).to.be.true; + const spyCall = consoleWarnStub.getCall(0); + expect( + spyCall.args.at(0).includes('default slot'), + 'confirm "default slot" in message' + ).to.be.true; + expect( + spyCall.args.at(0).includes('deprecated'), + 'confirm "deprecated" in message' + ).to.be.true; + expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({ + data: { + localName: 'sp-slider', + level: 'deprecation', + }, + }); + consoleWarnStub.restore(); + }); });