Gave you a star as well. Love the idea and the demo/configurator is very slick.
Looked at the "how it works" -- is there a way to manually specify leaf element sizing? Thinking about dynamically sized elements that don't have markup-level specified sizes yet via bounding boxes.
Thanks! Right now it relies entirely on getBoundingClientRect(), so if an element has no dimensions yet the block gets skipped.
For images/videos I added a load event listener that re-measures once the media loads and takes up space.
For elements that are truly dynamic with no initial size, the best workaround today is setting explicit dimensions via CSS (min-height, aspect-ratio, etc.) which is good practice for CLS anyway.
That said, something like data-shimmer-width / data-shimmer-height attributes to manually override sizing could work well for that use case.
Gave you a star as well. Love the idea and the demo/configurator is very slick.
Looked at the "how it works" -- is there a way to manually specify leaf element sizing? Thinking about dynamically sized elements that don't have markup-level specified sizes yet via bounding boxes.
Thanks! Right now it relies entirely on getBoundingClientRect(), so if an element has no dimensions yet the block gets skipped.
For images/videos I added a load event listener that re-measures once the media loads and takes up space.
For elements that are truly dynamic with no initial size, the best workaround today is setting explicit dimensions via CSS (min-height, aspect-ratio, etc.) which is good practice for CLS anyway.
That said, something like data-shimmer-width / data-shimmer-height attributes to manually override sizing could work well for that use case.
Adding it to the backlog!
Looks very promising, one more star from me! What looks a bit odd is the React component being kebab-case instead of typical CamelCase.
Thanks! That's just how custom elements work in React, you use the HTML tag name directly.
React 19 has native custom element support so <phantom-ui> works as-is, no wrapper needed.
Keeping it as a single HTML tag across all frameworks is the whole point.
this is amazing. i will try this
Thanks, let me know how it goes!