<slot /> used as a passthrough outlet inside an SFC template (e.g.
DialogTrigger.vue's <Primitive as-child><slot /></Primitive>) resolves
through Vue's renderSlot() helper, which always wraps the forwarded
content in a Fragment vnode -- even when there's exactly one real
child. Slot was cloning that inert Fragment wrapper instead of the
real child, so attrs merged onto asChild-forwarded elements (data-slot,
aria-*, the click handler) silently vanished. Found via manual
Storybook verification: the Dialog trigger rendered but never opened
the dialog on click.
Unwrap single-child Fragments before merging/cloning, and add a
regression test through a real SFC fixture (a raw h()-based test
doesn't reproduce this, since it never goes through renderSlot()).
- Delete packages/library/src/engine/ and engine.spec.ts; LoadingIcon is
now exported directly instead of routed through a generic theming engine.
- Remove primevue from every package.json (root devDependencies, library
peerDependencies, playground dependencies) and from vite.config.ts's
externalized/global Rollup config; add reka-ui as the library's peer dep.
- Delete the hand-written nychthemeron.css/theme.css, now fully superseded
by the Tailwind entry CSS; both library exports (./style, ./theme) point
at it.
- Drop the PrimeVue plugin install from Storybook's preview.ts.
- Add a `@source "../../";` directive to tailwind.css: Tailwind's automatic
content detection is scoped to whichever Vite project runs it, so when
the playground consumes this CSS file it never scanned the sibling
packages/library/src tree for class usage -- every component rendered
with zero utility classes applied until this was added (verified via the
compiled Storybook CSS output going from ~2KB/no .bg-primary rule to
~40KB with the full utility set, and the pre-fix screenshot that
surfaced it: buttons and other components with a real background color
showing as bare, near-invisible text on white).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Also: fixes DialogContent/DialogFooter's close/action buttons to use our
actual Button variant set (secondary) instead of the CLI's default
ghost/outline variants, which don't exist on our re-themed Button.
Adds an eslint override so shadcn-vue's single-word ui/ component names
(Button.vue, Dialog.vue, ...) aren't flagged by vue/multi-word-component-names.
This was the last PrimeVue-wrapped component, so lib/index.ts no longer
imports anything from primevue or uses the ptThemeable helper.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CheckboxGroup is hand-built (no shadcn-vue stock equivalent) as a simple
name/layout provider via provide/inject, matching RadioGroup's pattern --
it does not coordinate an array modelValue across children the way
PrimeVue's did, since each Checkbox now owns its own boolean v-model.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>