1
0
Fork 0
mirror of synced 2024-09-08 21:51:58 +12:00
budibase/packages/standard-components/src/button.svelte

130 lines
2 KiB
Svelte
Raw Normal View History

2019-08-20 08:18:23 +12:00
<script>
2019-10-07 18:03:41 +13:00
import cssVars from "./cssVars";
import {buildStyle} from "./buildStyle";
2019-08-27 18:32:56 +12:00
export let className = "default";
2019-08-20 08:18:23 +12:00
export let disabled = false;
2019-08-27 18:32:56 +12:00
export let contentText;
2019-10-10 18:18:02 +13:00
export let onClick;
2019-10-07 18:03:41 +13:00
export let background;
export let color;
export let border;
export let padding;
export let hoverColor;
export let hoverBackground;
export let hoverBorder;
2020-01-18 22:00:18 +13:00
export let _children;
2019-08-27 18:32:56 +12:00
export let _bb;
2020-01-18 22:00:18 +13:00
let theButton;
2019-10-07 18:03:41 +13:00
let cssVariables;
let buttonStyles;
let customHoverColorClass;
let customHoverBorderClass;
let customHoverBackClass;
2019-09-03 21:42:19 +12:00
2019-10-10 22:41:31 +13:00
let customClasses = "";
const createClasses = (classes) => {
let all = "";
for(let cls in classes) {
if(classes[cls]) {
all = all + " " + cls;
}
}
return all;
}
2019-09-03 21:42:19 +12:00
$:{
2020-01-18 22:00:18 +13:00
if(_bb && theButton && _children && _children.length)
_bb.hydrateChildren(_children, theButton);
}
2019-10-07 18:03:41 +13:00
2020-01-18 22:00:18 +13:00
$:{
2019-10-07 18:03:41 +13:00
cssVariables = {
hoverColor, hoverBorder,
2019-10-10 22:41:31 +13:00
hoverBackground,
background, color, border,
2019-10-07 18:03:41 +13:00
};
buttonStyles = buildStyle({
2019-10-10 22:41:31 +13:00
padding
});
customClasses = createClasses({
hoverColor, hoverBorder, hoverBackground,
background, border, color
});
2019-09-03 21:42:19 +12:00
}
2019-09-22 16:02:33 +12:00
2019-10-07 18:03:41 +13:00
2019-09-22 16:02:33 +12:00
const clickHandler = () => {
2019-10-07 18:03:41 +13:00
_bb.call(onClick);
2019-09-22 16:02:33 +12:00
}
2019-08-20 08:18:23 +12:00
</script>
2020-01-18 22:00:18 +13:00
<button bind:this={theButton}
use:cssVars={cssVariables}
2019-10-10 22:41:31 +13:00
class="{className} {customClasses}"
2019-10-10 18:18:02 +13:00
disabled={disabled || false}
2019-10-07 18:03:41 +13:00
on:click={clickHandler}
style={buttonStyles}>
2020-01-18 22:00:18 +13:00
{#if !_children || _children.length === 0}
2019-08-20 08:18:23 +12:00
{contentText}
{/if}
2019-08-27 18:32:56 +12:00
</button>
<style>
.default {
font-family: inherit;
font-size: inherit;
padding: 0.4em;
margin: 0 0 0.5em 0;
box-sizing: border-box;
border: 1px solid #ccc;
border-radius: 2px;
color: #333;
background-color: #f4f4f4;
outline: none;
}
.default:active {
background-color: #ddd;
}
.default:focus {
border-color: #666;
}
2019-10-10 22:41:31 +13:00
.border {
border: var(--border);
}
.color {
color: var(--color);
}
.background {
background: var(--background);
}
.hoverBorder:hover {
2019-10-07 18:03:41 +13:00
border: var(--hoverBorder);
}
2019-10-10 22:41:31 +13:00
.hoverColor:hover {
2019-10-07 18:03:41 +13:00
color: var(--hoverColor);
}
2019-10-10 22:41:31 +13:00
.hoverBack:hover {
2019-10-07 18:03:41 +13:00
background: var(--hoverBackground);
}
2019-10-10 22:41:31 +13:00
2019-08-27 18:32:56 +12:00
</style>