- From: Steve Orvell <notifications@github.com>
- Date: Fri, 08 Mar 2024 13:15:07 -0800
- To: WICG/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <WICG/webcomponents/issues/1051@github.com>
Currently, `exportparts` requires explicitly exporting individual parts. This requirement is _extremely cumbersome_ in practice when many parts are used and/or multiple levels of shadow roots wish to re-export parts since the attribute size grows **exponentially**. It is a common case that a element wants to re-export the set of parts provided by an element it uses. Often it wants to do this both as a pass-through *and* for that specific usage. This would be simple via a wildcard syntax like this: ```html <x-picker part="primary" exportparts="*, primary-*"> ``` Instead this must be done manually and it's so impractical that it is simply not done in practice. Consider a theme picker dialog that wants to export parts for each of its color pickers, and each of these wants to export parts for each of its range controls: The range control provides parts for `thumb`, `track`, `indicator`. These are just parts and don't need to be exported. The color picker uses 3 of these controls and wants to export these parts as-is and also for each color channel it uses `r`, `g`, `b`. It needs to export: ```html <x-range part="r" exportparts="thumb, track, indicator, thumb:r-thumb, track:r-track, indicator:r-indicator">... <x-range part="g" exportparts="thumb, track, indicator, thumb:g-thumb, track:g-track, indicator:g-indicator"> <x-range part="b" exportparts="thumb, track, indicator, thumb:b-thumb, track:b-track, indicator:b-indicator"> ``` Then the theme element needs to export for each picker, and there might be a lot of them, `primary`, `secondary`, `tertiary`, ...: ```html <x-picker part="primary" exportparts="thumb, track, indicator, r-thumb, r-track, r-indicator, g-thumb, g-track, g-indicator, b-thumb, b-track, b-indicator thumb:primary-thumb, track:primary-track, indicator:primary-indicator, r-thumb:primary-r-thumb, r-track:primary-r-track, r-indicator:primary-r-indicator, g-thumb:primary-g-thumb, g-track:primary-g-track, g-indicator:primary-g-indicator, b-thumb:primary-b-thumb, b-track:primary-b-track, b-indicator:primary-b-indicator"> ``` Now if the theme theme selector, is used inside a theme dialog, it needs to export: ```html <x-theme part="light" exportparts="thumb, track, indicator, r-thumb, r-track, r-indicator, g-thumb, g-track, g-indicator, b-thumb, b-track, b-indicator primary-thumb, primary-track, primary-indicator, primary-r-thumb, primary-r-track, primary-r-indicator, primary-g-thumb, primary-g-track, primary-g-indicator, primary-b-thumb, primary-b-track, primary-b-indicator, secondary-thumb, secondary-track, secondary-indicator, secondary-r-thumb, secondary-r-track, secondary-r-indicator, secondary-g-thumb, secondary-g-track, secondary-g-indicator, secondary-b-thumb, secondary-b-track, secondary-b-indicator, tertiary-thumb, tertiary-track, tertiary-indicator, tertiary-r-thumb, tertiary-r-track, tertiary-r-indicator, tertiary-g-thumb, tertiary-g-track, tertiary-g-indicator, tertiary-b-thumb, tertiary-b-track, tertiary-b-indicator, thumb:light-thumb, track:light-track, indicator:light-indicator, r-thumb:light-r-thumb, r-track:light-r-track, r-indicator:light-r-indicator, g-thumb:light-g-thumb, g-track:light-g-track, g-indicator:light-g-indicator, b-thumb:light-b-thumb, b-track:light-b-track, b-indicat:light-b-indicator primary-thumb:light-primary-thumb, primary-track:light-primary-track, primary-indicator:light-primary-indicator, primary-r-thumb:light-primary-r-thumb, primary-r-track:light-primary-r-track, primary-r-indicator:light-primary-r-indicator, primary-g-thumb:light-primary-g-thumb, primary-g-track:light-primary-g-track, primary-g-indicator:light-primary-g-indicator, primary-b-thumb:light-primary-b-thumb, primary-b-track:light-primary-b-track, primary-b-indicato:light-primary-b-indicator, secondary-thumb:light-secondary-thumb, secondary-track:light-secondary-track, secondary-indicator:light-secondary-indicator, secondary-r-thumb:light-secondary-r-thumb, secondary-r-track:light-secondary-r-track, secondary-r-indicator:light-secondary-r-indicator, secondary-g-thumb:light-secondary-g-thumb, secondary-g-track:light-secondary-g-track, secondary-g-indicator:light-secondary-g-indicator, secondary-b-thumb:light-secondary-b-thumb, secondary-b-track:light-secondary-b-track, secondary-b-indicato:light-secondary-b-indicator, tertiary-thumb:light-tertiary-thumb, tertiary-track:light-tertiary-track, tertiary-indicator:light-tertiary-indicator, tertiary-r-thumb:light-tertiary-r-thumb, tertiary-r-track:light-tertiary-r-track, tertiary-r-indicator:light-tertiary-r-indicator, tertiary-g-thumb:light-tertiary-g-thumb, tertiary-g-track:light-tertiary-g-track, tertiary-g-indicator:light-tertiary-g-indicator, tertiary-b-thumb:light-tertiary-b-thumb, tertiary-b-track:light-tertiary-b-track, tertiary-b-indicator:light-tertiary-b-indicator"> ``` In practice, **this 2500+ character attribute would likely be much longer** as there would likely be many more theme colors. There's probably a mistake in that. Hopefully, it's clear that this *reasonable* use case is **nigh impossible**. If it were possible to export with a wild card, this would simply become: ```html <x-range part="r" exportparts="*, r-*"> <x-picker part="primary" exportparts="*, primary-*"> <x-theme part="light" exportparts="*, light-*"> ``` -- Reply to this email directly or view it on GitHub: https://github.com/WICG/webcomponents/issues/1051 You are receiving this because you are subscribed to this thread. Message ID: <WICG/webcomponents/issues/1051@github.com>
Received on Friday, 8 March 2024 21:15:12 UTC