feat: add ID Attribute to Toggle Root Component #823
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changes
It's me again. While working on nesting Toggle components within Tooltips (as part of the Origin UI to Svelte port), I discovered that the Toggle.Root component wasn't exposing its internal ID to the DOM. This made it particularly difficult to use the
child
snippet as using theToggle.Root
Component as aTooltip.Trigger
is not possible.See Stackblitz Repro
so i added the ID attribute to the Toggle Root element props for proper DOM referencing. All tests are still passing, so that is something.
Current Behavior
Implemented Solution
Added ID propagation to the rendered element's attributes in the ToggleRootState class:
props = $derived.by( () => ({ [ROOT_ATTR]: "", ++ id: this.#id.current, "data-disabled": getDataDisabled(this.#disabled.current), // ... other existing props }) as const );
Known Issues & Future Considerations
Note: There is a potential future conflict when using Toggle within Tooltip (and likely other bits) due to competing
data-state
attributes. This is not addressed in this PR but should be considered. A potential solution would be to just name thedata-state
attributes corresponding to the component, likedata-tooltip-state
,data-trigger-state
,... (?)