app/components/Button/button.latte
{*
Univerzální tlačítko.
Parametry:
- $variant (string): primary|ghost|link (default primary)
- $size (string): sm|md|lg (default md)
- $type (string): button|submit (default button)
- $href (string|null): pokud zadán, rendruje <a> místo <button>
- $disabled (bool): default false
- $label (string): text tlačítka
*}
{var $variant = $variant ?? 'primary'}
{var $size = $size ?? 'md'}
{var $classes = "btn btn--$variant btn--$size"}
{if isset($href)}
<a href="{$href}" class="{$classes}">{$label}</a>
{else}
<button type="{$type ?? 'button'}" class="{$classes}" n:attr="disabled: $disabled ?? false">
{$label}
</button>
{/if}
resources/sass/components/_button.scss
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
border: none;
border-radius: 4px;
cursor: pointer;
font-weight: 600;
transition: background 0.15s, color 0.15s;
text-decoration: none;
&--primary {
background: $cgui-color-primary;
color: white;
@include cgui-hover() {
background: darken($cgui-color-primary, 8%);
}
}
&--ghost {
background: transparent;
color: $cgui-color-text;
border: 1px solid $cgui-color-border;
@include cgui-hover() {
background: $cgui-color-bg-hover;
}
}
&--link {
background: transparent;
color: $cgui-color-primary;
padding: 0;
@include cgui-hover() {
text-decoration: underline;
}
}
&--sm { padding: 4px 10px; font-size: 0.85em; }
&--md { padding: 8px 16px; font-size: 1em; }
&--lg { padding: 12px 24px; font-size: 1.1em; }
&[disabled] {
opacity: 0.5;
cursor: not-allowed;
pointer-events: none;
}
}