Start with working interface building blocks Feature
The preset library supplies implementations for controls, content containers and application interfaces. They use the same component contracts and shared styling services as the rest of Wildo.
That gives a new screen familiar behavior without assembling a separate visual toolkit. You still choose the composition and supply the product’s actions and content.
Example: A new screen that belongs to the same product
A customer summary uses the existing cards, buttons and inputs. Its controls pick up the application theme and shared interaction states, while the application decides what the actions do.

For engineers
Application code consumes wrappers from @wildo-ai/saas-frontend-lib; the presets package supplies their implementations. Wonder Todos’ registerFrameworkFrontendComponents performs this startup sequence after importing the registration functions:
registerDefaultIcons();
registerDefaultPresets();
registerDefaultAnimations();
registerBuiltinCommonEnums();
registerFrameworkLayouts();
// Tier-1 completeness guard. Throws in dev when a registry-resolved
// FrontendComponentType is missing a default preset; warns in prod.
// See compound-component-system.md Section 15 for the Tier-1/Tier-2 model.
assertRegistryCompleteness();
The function is awaited by the application’s component loader before module-specific registrations. Icons, animations and common enum registrations are separate dependencies of the complete interface; registering components alone is not the whole startup sequence.
Keep interaction contracts when composing a screen
The supplied button maps its public variant to a theme recipe. The actual preset then assembles these states:
const classes = cn(
STRUCTURE,
recipe.base,
recipe.states.hover,
recipe.states.active,
recipe.states.focus,
recipe.states.disabled,
recipe.states.invalid,
recipe.sizes?.[size],
recipe.motion.transition,
className,
)
That is why using the same wrapper carries focus, disabled and invalid appearance into another screen. Its loading state disables the native button and adds aria-busy; the application still controls when loading starts, error feedback and the operation itself. The asChild path composes into another element and does not apply the same loading behavior automatically.
The registry completeness check catches missing injectable slots: it throws in development and warns in production unless strict mode is selected. It does not prove the accessibility, correctness or visual fit of your custom composition. Verify the controls in the real screen, including keyboard use and failure states.















