Creating a New Preset
KatluxToolkit's templating system allows you to create completely different visual styles for your components while maintaining the same logic.
1. Create Your Preset Directory
To create a new preset (e.g., `modern`), create a subfolder in the root `presets/` directory of your project:
/ (root)
└── presets/
└── modern/2. Preset Folder Structure
A KatluxToolkit preset must follow a specific subfolder structure to be correctly recognized by the system and to maintain modularity:
presets/modern/
├── assets/ # Global preset styles and themes
│ └── scss/
│ ├── css-variables.scss # Your design tokens (colors, gaps, etc)
│ ├── index.scss # Main entry point (includes all assets)
│ └── ...
└── components/ # Custom component implementations
├── KButton/
│ └── KButton.vue
├── KTextbox/
│ └── KTextbox.vue
└── ...3. Register Your Preset
To make your preset selectable in the application, register it in your `app.config.ts`.
export default defineAppConfig({
katluxToolkit: {
presetList: [
{ name: 'Default', value: 'default' },
{ name: 'Modern Style', value: 'modern' }
],
activePreset: 'default',
},
})4. Component Structure
Each component in your custom preset must be placed inside the `components/` subfolder:
presets/modern/components/
└── KButton/
└── KButton.vue5. Example Implementation
Here is a simplified example of what a custom component (`KButton.vue`) looks like. It receives pre-calculated logic from the global component.
<preset lang="pug">
button.KButton.modern-button(
@click="onClick"
:class="buttonClasses"
:disabled="isDisabled"
)
slot
</preset>
<script lang="ts" setup>
defineProps<{
isDisabled: boolean
buttonClasses: any
onClick: () => void
}>()
</script>
<style scoped>
.modern-button {
border-radius: var(--border-radius-md);
padding: 12px 24px;
background: var(--button-gradient-primary);
color: var(--font-color-light);
border: none;
}
</style>Tip: When starting a new preset, you can copy component folders from the default toolkit into your `presets/your-theme/components/` folder and start customizing.