ui-svelte 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +118 -0
- package/dist/charts/ArcChart.svelte +320 -0
- package/dist/charts/ArcChart.svelte.d.ts +26 -0
- package/dist/charts/AreaChart.svelte +495 -0
- package/dist/charts/AreaChart.svelte.d.ts +32 -0
- package/dist/charts/BarChart.svelte +504 -0
- package/dist/charts/BarChart.svelte.d.ts +38 -0
- package/dist/charts/Candlestick.svelte +527 -0
- package/dist/charts/Candlestick.svelte.d.ts +38 -0
- package/dist/charts/LineChart.svelte +365 -0
- package/dist/charts/LineChart.svelte.d.ts +36 -0
- package/dist/charts/PieChart.svelte +311 -0
- package/dist/charts/PieChart.svelte.d.ts +28 -0
- package/dist/charts/css/arc-chart.css +237 -0
- package/dist/charts/css/area-chart.css +289 -0
- package/dist/charts/css/bar-chart.css +167 -0
- package/dist/charts/css/candlestick.css +197 -0
- package/dist/charts/css/line-chart.css +202 -0
- package/dist/charts/css/pie-chart.css +199 -0
- package/dist/control/Audio.svelte +212 -0
- package/dist/control/Audio.svelte.d.ts +8 -0
- package/dist/control/Button.svelte +116 -0
- package/dist/control/Button.svelte.d.ts +22 -0
- package/dist/control/IconButton.svelte +104 -0
- package/dist/control/IconButton.svelte.d.ts +17 -0
- package/dist/control/Record.svelte +430 -0
- package/dist/control/Record.svelte.d.ts +11 -0
- package/dist/control/ToggleTheme.svelte +21 -0
- package/dist/control/ToggleTheme.svelte.d.ts +8 -0
- package/dist/control/Video.svelte +222 -0
- package/dist/control/Video.svelte.d.ts +10 -0
- package/dist/control/css/btn.css +206 -0
- package/dist/control/css/media.css +78 -0
- package/dist/control/css/video.css +58 -0
- package/dist/css/animations.css +27 -0
- package/dist/css/base.css +192 -0
- package/dist/css/utilities.css +136 -0
- package/dist/display/Accordion.svelte +98 -0
- package/dist/display/Accordion.svelte.d.ts +20 -0
- package/dist/display/Alert.svelte +65 -0
- package/dist/display/Alert.svelte.d.ts +15 -0
- package/dist/display/Avatar.svelte +80 -0
- package/dist/display/Avatar.svelte.d.ts +13 -0
- package/dist/display/Badge.svelte +46 -0
- package/dist/display/Badge.svelte.d.ts +11 -0
- package/dist/display/Card.svelte +94 -0
- package/dist/display/Card.svelte.d.ts +21 -0
- package/dist/display/Carousel.svelte +359 -0
- package/dist/display/Carousel.svelte.d.ts +25 -0
- package/dist/display/ChatBox.svelte +249 -0
- package/dist/display/ChatBox.svelte.d.ts +18 -0
- package/dist/display/Chip.svelte +67 -0
- package/dist/display/Chip.svelte.d.ts +17 -0
- package/dist/display/Code.svelte +56 -0
- package/dist/display/Code.svelte.d.ts +9 -0
- package/dist/display/Collapsible.svelte +71 -0
- package/dist/display/Collapsible.svelte.d.ts +15 -0
- package/dist/display/Divider.svelte +32 -0
- package/dist/display/Divider.svelte.d.ts +10 -0
- package/dist/display/Empty.svelte +462 -0
- package/dist/display/Empty.svelte.d.ts +11 -0
- package/dist/display/Icon.svelte +20 -0
- package/dist/display/Icon.svelte.d.ts +11 -0
- package/dist/display/Item.svelte +119 -0
- package/dist/display/Item.svelte.d.ts +24 -0
- package/dist/display/Loading.svelte +8 -0
- package/dist/display/Loading.svelte.d.ts +26 -0
- package/dist/display/Marquee.svelte +164 -0
- package/dist/display/Marquee.svelte.d.ts +21 -0
- package/dist/display/Section.svelte +63 -0
- package/dist/display/Section.svelte.d.ts +16 -0
- package/dist/display/Table.svelte +407 -0
- package/dist/display/Table.svelte.d.ts +32 -0
- package/dist/display/TypeWriter.svelte +23 -0
- package/dist/display/TypeWriter.svelte.d.ts +11 -0
- package/dist/display/User.svelte +0 -0
- package/dist/display/User.svelte.d.ts +26 -0
- package/dist/display/css/accordion.css +98 -0
- package/dist/display/css/alert.css +51 -0
- package/dist/display/css/avatar.css +158 -0
- package/dist/display/css/badge.css +47 -0
- package/dist/display/css/card.css +231 -0
- package/dist/display/css/carousel.css +156 -0
- package/dist/display/css/chat-box.css +188 -0
- package/dist/display/css/chip.css +91 -0
- package/dist/display/css/code.css +19 -0
- package/dist/display/css/collapsible.css +86 -0
- package/dist/display/css/divider.css +54 -0
- package/dist/display/css/empty.css +8 -0
- package/dist/display/css/item.css +149 -0
- package/dist/display/css/listbox.css +24 -0
- package/dist/display/css/marquee.css +138 -0
- package/dist/display/css/section.css +85 -0
- package/dist/display/css/table.css +361 -0
- package/dist/form/Checkbox.svelte +45 -0
- package/dist/form/Checkbox.svelte.d.ts +13 -0
- package/dist/form/ComboBox.svelte +448 -0
- package/dist/form/ComboBox.svelte.d.ts +29 -0
- package/dist/form/CsvField.svelte +389 -0
- package/dist/form/CsvField.svelte.d.ts +21 -0
- package/dist/form/DateField.svelte +292 -0
- package/dist/form/DateField.svelte.d.ts +18 -0
- package/dist/form/Dropzone.svelte +196 -0
- package/dist/form/Dropzone.svelte.d.ts +30 -0
- package/dist/form/ImageCropper.svelte +254 -0
- package/dist/form/ImageCropper.svelte.d.ts +14 -0
- package/dist/form/PasswordField.svelte +170 -0
- package/dist/form/PasswordField.svelte.d.ts +28 -0
- package/dist/form/PhoneField.svelte +485 -0
- package/dist/form/PhoneField.svelte.d.ts +25 -0
- package/dist/form/PinField.svelte +139 -0
- package/dist/form/PinField.svelte.d.ts +17 -0
- package/dist/form/RadioGroup.svelte +70 -0
- package/dist/form/RadioGroup.svelte.d.ts +19 -0
- package/dist/form/Select.svelte +350 -0
- package/dist/form/Select.svelte.d.ts +26 -0
- package/dist/form/Slider.svelte +60 -0
- package/dist/form/Slider.svelte.d.ts +15 -0
- package/dist/form/TextField.svelte +154 -0
- package/dist/form/TextField.svelte.d.ts +31 -0
- package/dist/form/Textarea.svelte +137 -0
- package/dist/form/Textarea.svelte.d.ts +27 -0
- package/dist/form/Toggle.svelte +45 -0
- package/dist/form/Toggle.svelte.d.ts +13 -0
- package/dist/form/css/checkbox.css +46 -0
- package/dist/form/css/combo-box.css +69 -0
- package/dist/form/css/control.css +177 -0
- package/dist/form/css/csv-field.css +0 -0
- package/dist/form/css/date.css +56 -0
- package/dist/form/css/dropzone.css +133 -0
- package/dist/form/css/field.css +17 -0
- package/dist/form/css/image-cropper.css +155 -0
- package/dist/form/css/password.css +35 -0
- package/dist/form/css/radio-group.css +57 -0
- package/dist/form/css/select.css +18 -0
- package/dist/form/css/slider.css +80 -0
- package/dist/form/css/textarea.css +130 -0
- package/dist/form/css/toggle.css +27 -0
- package/dist/form/js/countries.d.ts +13 -0
- package/dist/form/js/countries.js +307 -0
- package/dist/form/js/phone-examples.d.ts +248 -0
- package/dist/form/js/phone-examples.js +247 -0
- package/dist/hooks/use-auth.svelte.d.ts +11 -0
- package/dist/hooks/use-auth.svelte.js +59 -0
- package/dist/hooks/use-chat.svelte.d.ts +40 -0
- package/dist/hooks/use-chat.svelte.js +265 -0
- package/dist/hooks/use-clipboard.svelte.d.ts +9 -0
- package/dist/hooks/use-clipboard.svelte.js +52 -0
- package/dist/hooks/use-fetch.svelte.d.ts +11 -0
- package/dist/hooks/use-fetch.svelte.js +38 -0
- package/dist/hooks/use-form.svelte.d.ts +31 -0
- package/dist/hooks/use-form.svelte.js +110 -0
- package/dist/hooks/use-localstorage.svelte.d.ts +3 -0
- package/dist/hooks/use-localstorage.svelte.js +26 -0
- package/dist/hooks/use-scroll.svelte.d.ts +6 -0
- package/dist/hooks/use-scroll.svelte.js +34 -0
- package/dist/hooks/use-search.svelte.d.ts +49 -0
- package/dist/hooks/use-search.svelte.js +229 -0
- package/dist/hooks/use-table.svelte.d.ts +85 -0
- package/dist/hooks/use-table.svelte.js +362 -0
- package/dist/hooks/use-websocket.svelte.d.ts +18 -0
- package/dist/hooks/use-websocket.svelte.js +79 -0
- package/dist/icons/index.d.ts +132 -0
- package/dist/icons/index.js +132 -0
- package/dist/index.css +115 -0
- package/dist/index.d.ts +76 -0
- package/dist/index.js +76 -0
- package/dist/layout/AppBar.svelte +94 -0
- package/dist/layout/AppBar.svelte.d.ts +17 -0
- package/dist/layout/Footer.svelte +94 -0
- package/dist/layout/Footer.svelte.d.ts +17 -0
- package/dist/layout/FooterLinks.svelte +28 -0
- package/dist/layout/FooterLinks.svelte.d.ts +11 -0
- package/dist/layout/Provider.svelte +52 -0
- package/dist/layout/Provider.svelte.d.ts +10 -0
- package/dist/layout/Scaffold.svelte +46 -0
- package/dist/layout/Scaffold.svelte.d.ts +15 -0
- package/dist/layout/Sidebar.svelte +40 -0
- package/dist/layout/Sidebar.svelte.d.ts +13 -0
- package/dist/layout/css/app-bar.css +35 -0
- package/dist/layout/css/bottom-bar.css +12 -0
- package/dist/layout/css/footer-links.css +17 -0
- package/dist/layout/css/footer.css +35 -0
- package/dist/layout/css/scaffold.css +15 -0
- package/dist/layout/css/sidebar.css +17 -0
- package/dist/navigation/BottomNav.svelte +0 -0
- package/dist/navigation/BottomNav.svelte.d.ts +26 -0
- package/dist/navigation/NavMenu.svelte +254 -0
- package/dist/navigation/SideNav.svelte +249 -0
- package/dist/navigation/Tabs.svelte +79 -0
- package/dist/navigation/Tabs.svelte.d.ts +19 -0
- package/dist/navigation/css/bottom-nav.css +0 -0
- package/dist/navigation/css/nav-menu.css +168 -0
- package/dist/navigation/css/side-nav.css +244 -0
- package/dist/navigation/css/tabs.css +118 -0
- package/dist/overlay/AlertDialog.svelte +0 -0
- package/dist/overlay/AlertDialog.svelte.d.ts +26 -0
- package/dist/overlay/Command.svelte +0 -0
- package/dist/overlay/Command.svelte.d.ts +26 -0
- package/dist/overlay/Drawer.svelte +129 -0
- package/dist/overlay/Drawer.svelte.d.ts +20 -0
- package/dist/overlay/Dropdown.svelte +140 -0
- package/dist/overlay/Modal.svelte +102 -0
- package/dist/overlay/Modal.svelte.d.ts +19 -0
- package/dist/overlay/PopoverStack.svelte +0 -0
- package/dist/overlay/PopoverStack.svelte.d.ts +26 -0
- package/dist/overlay/Toast.svelte +83 -0
- package/dist/overlay/Toast.svelte.d.ts +9 -0
- package/dist/overlay/Tooltip.svelte +140 -0
- package/dist/overlay/Tooltip.svelte.d.ts +12 -0
- package/dist/overlay/css/drawer.css +75 -0
- package/dist/overlay/css/dropdown.css +24 -0
- package/dist/overlay/css/hovercard.css +11 -0
- package/dist/overlay/css/modal.css +51 -0
- package/dist/overlay/css/toast.css +80 -0
- package/dist/overlay/css/tooltip.css +89 -0
- package/dist/stores/i18n.svelte.d.ts +16 -0
- package/dist/stores/i18n.svelte.js +137 -0
- package/dist/stores/theme.svelte.d.ts +5 -0
- package/dist/stores/theme.svelte.js +55 -0
- package/dist/stores/toast.svelte.d.ts +19 -0
- package/dist/stores/toast.svelte.js +38 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.js +1 -0
- package/dist/utils/charts.d.ts +27 -0
- package/dist/utils/charts.js +140 -0
- package/dist/utils/class-names.d.ts +1 -0
- package/dist/utils/class-names.js +3 -0
- package/dist/utils/click-outside.d.ts +3 -0
- package/dist/utils/click-outside.js +9 -0
- package/dist/utils/popover.d.ts +3 -0
- package/dist/utils/popover.js +17 -0
- package/dist/utils/ulid.d.ts +1 -0
- package/dist/utils/ulid.js +22 -0
- package/dist/utils/validate-schema.d.ts +2 -0
- package/dist/utils/validate-schema.js +97 -0
- package/package.json +69 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLInputAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = {
|
|
4
|
+
el?: HTMLInputElement;
|
|
5
|
+
value?: string | number;
|
|
6
|
+
defaultValue?: string;
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
type?: 'text' | 'password' | 'email' | 'number' | 'tel' | 'url';
|
|
9
|
+
class?: string;
|
|
10
|
+
controlClass?: string;
|
|
11
|
+
prefix?: Snippet;
|
|
12
|
+
suffix?: Snippet;
|
|
13
|
+
onchange?: (value: unknown) => void;
|
|
14
|
+
oninput?: (value: unknown) => void;
|
|
15
|
+
variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
|
|
16
|
+
size?: 'sm' | 'md' | 'lg';
|
|
17
|
+
name?: string;
|
|
18
|
+
label?: string;
|
|
19
|
+
islabelActive?: boolean;
|
|
20
|
+
helpText?: string;
|
|
21
|
+
errorText?: string;
|
|
22
|
+
autocomplete?: HTMLInputAttributes['autocomplete'];
|
|
23
|
+
min?: HTMLInputAttributes['min'];
|
|
24
|
+
max?: HTMLInputAttributes['max'];
|
|
25
|
+
maxlength?: HTMLInputAttributes['maxlength'];
|
|
26
|
+
isFloatLabel?: boolean;
|
|
27
|
+
isSolid?: boolean;
|
|
28
|
+
};
|
|
29
|
+
declare const TextField: import("svelte").Component<Props, {}, "value" | "el">;
|
|
30
|
+
type TextField = ReturnType<typeof TextField>;
|
|
31
|
+
export default TextField;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../utils/class-names.js';
|
|
3
|
+
import type { HTMLTextareaAttributes } from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
type Props = {
|
|
6
|
+
el?: HTMLTextAreaElement;
|
|
7
|
+
value?: string;
|
|
8
|
+
defaultValue?: string;
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
class?: string;
|
|
11
|
+
controlClass?: string;
|
|
12
|
+
onchange?: (value: string) => void;
|
|
13
|
+
oninput?: (value: string) => void;
|
|
14
|
+
variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
|
|
15
|
+
size?: 'sm' | 'md' | 'lg';
|
|
16
|
+
name?: string;
|
|
17
|
+
label?: string;
|
|
18
|
+
islabelActive?: boolean;
|
|
19
|
+
helpText?: string;
|
|
20
|
+
errorText?: string;
|
|
21
|
+
maxlength?: HTMLTextareaAttributes['maxlength'];
|
|
22
|
+
rows?: number;
|
|
23
|
+
cols?: number;
|
|
24
|
+
isFloatLabel?: boolean;
|
|
25
|
+
isSolid?: boolean;
|
|
26
|
+
isResize?: boolean;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
let {
|
|
30
|
+
el = $bindable(),
|
|
31
|
+
value = $bindable(''),
|
|
32
|
+
defaultValue,
|
|
33
|
+
placeholder,
|
|
34
|
+
class: className,
|
|
35
|
+
controlClass,
|
|
36
|
+
onchange,
|
|
37
|
+
oninput,
|
|
38
|
+
variant = 'outlined',
|
|
39
|
+
size = 'md',
|
|
40
|
+
name,
|
|
41
|
+
label,
|
|
42
|
+
isFloatLabel,
|
|
43
|
+
islabelActive,
|
|
44
|
+
helpText,
|
|
45
|
+
errorText,
|
|
46
|
+
maxlength,
|
|
47
|
+
rows = 4,
|
|
48
|
+
cols,
|
|
49
|
+
isSolid,
|
|
50
|
+
isResize = false
|
|
51
|
+
}: Props = $props();
|
|
52
|
+
|
|
53
|
+
const uid = $props.id();
|
|
54
|
+
|
|
55
|
+
let isActive = $state(false);
|
|
56
|
+
let isFocused = $state(false);
|
|
57
|
+
|
|
58
|
+
const variantClasses = {
|
|
59
|
+
primary: 'is-primary',
|
|
60
|
+
secondary: 'is-secondary',
|
|
61
|
+
muted: 'is-muted',
|
|
62
|
+
outlined: 'is-outlined',
|
|
63
|
+
line: 'is-line'
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const sizeClasses = {
|
|
67
|
+
sm: 'is-sm',
|
|
68
|
+
md: 'is-md',
|
|
69
|
+
lg: 'is-lg'
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
$effect.pre(() => {
|
|
73
|
+
if (defaultValue) {
|
|
74
|
+
value = defaultValue;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
</script>
|
|
78
|
+
|
|
79
|
+
<div class={cn('field', className)}>
|
|
80
|
+
{#if !isFloatLabel && label}
|
|
81
|
+
<span class="field-label">{label}</span>
|
|
82
|
+
{/if}
|
|
83
|
+
<label
|
|
84
|
+
class={cn(
|
|
85
|
+
'textarea-control',
|
|
86
|
+
variantClasses[variant],
|
|
87
|
+
sizeClasses[size],
|
|
88
|
+
isSolid && 'is-solid',
|
|
89
|
+
isFloatLabel && 'is-float',
|
|
90
|
+
(isActive || isFocused) && 'is-active',
|
|
91
|
+
controlClass
|
|
92
|
+
)}
|
|
93
|
+
for={`${uid}-{name}`}
|
|
94
|
+
class:is-error={errorText}
|
|
95
|
+
onmouseenter={() => (isActive = true)}
|
|
96
|
+
onmouseleave={() => (isActive = false)}
|
|
97
|
+
>
|
|
98
|
+
{#if isFloatLabel && label}
|
|
99
|
+
<span
|
|
100
|
+
class={cn(
|
|
101
|
+
'textarea-control-label',
|
|
102
|
+
(isActive || isFocused || islabelActive || value !== '') && 'is-active'
|
|
103
|
+
)}
|
|
104
|
+
>
|
|
105
|
+
{label}
|
|
106
|
+
</span>
|
|
107
|
+
{/if}
|
|
108
|
+
|
|
109
|
+
<textarea
|
|
110
|
+
bind:this={el}
|
|
111
|
+
bind:value
|
|
112
|
+
id={`${uid}-{name}`}
|
|
113
|
+
class={cn(
|
|
114
|
+
'textarea-control-input',
|
|
115
|
+
isResize && 'is-resizable',
|
|
116
|
+
isFloatLabel && !isActive && !isFocused && value == '' && 'invisible',
|
|
117
|
+
controlClass
|
|
118
|
+
)}
|
|
119
|
+
{placeholder}
|
|
120
|
+
{name}
|
|
121
|
+
{rows}
|
|
122
|
+
{cols}
|
|
123
|
+
{maxlength}
|
|
124
|
+
{...defaultValue !== undefined && { defaultValue }}
|
|
125
|
+
onchange={(e) => onchange?.((e.target as HTMLTextAreaElement).value)}
|
|
126
|
+
oninput={(e) => oninput?.((e.target as HTMLTextAreaElement).value)}
|
|
127
|
+
onfocusin={() => (isFocused = true)}
|
|
128
|
+
onfocusout={() => (isFocused = false)}
|
|
129
|
+
></textarea>
|
|
130
|
+
</label>
|
|
131
|
+
|
|
132
|
+
{#if errorText || helpText}
|
|
133
|
+
<div class={cn('field-help', errorText && 'is-danger')}>
|
|
134
|
+
{errorText || helpText}
|
|
135
|
+
</div>
|
|
136
|
+
{/if}
|
|
137
|
+
</div>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { HTMLTextareaAttributes } from 'svelte/elements';
|
|
2
|
+
type Props = {
|
|
3
|
+
el?: HTMLTextAreaElement;
|
|
4
|
+
value?: string;
|
|
5
|
+
defaultValue?: string;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
class?: string;
|
|
8
|
+
controlClass?: string;
|
|
9
|
+
onchange?: (value: string) => void;
|
|
10
|
+
oninput?: (value: string) => void;
|
|
11
|
+
variant?: 'primary' | 'secondary' | 'muted' | 'outlined' | 'line';
|
|
12
|
+
size?: 'sm' | 'md' | 'lg';
|
|
13
|
+
name?: string;
|
|
14
|
+
label?: string;
|
|
15
|
+
islabelActive?: boolean;
|
|
16
|
+
helpText?: string;
|
|
17
|
+
errorText?: string;
|
|
18
|
+
maxlength?: HTMLTextareaAttributes['maxlength'];
|
|
19
|
+
rows?: number;
|
|
20
|
+
cols?: number;
|
|
21
|
+
isFloatLabel?: boolean;
|
|
22
|
+
isSolid?: boolean;
|
|
23
|
+
isResize?: boolean;
|
|
24
|
+
};
|
|
25
|
+
declare const Textarea: import("svelte").Component<Props, {}, "value" | "el">;
|
|
26
|
+
type Textarea = ReturnType<typeof Textarea>;
|
|
27
|
+
export default Textarea;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../utils/class-names.js';
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
checked?: boolean;
|
|
6
|
+
defaultChecked?: boolean;
|
|
7
|
+
onchange?: (checked: boolean) => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
class?: string;
|
|
10
|
+
label?: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
color?: 'primary' | 'secondary' | 'muted';
|
|
13
|
+
};
|
|
14
|
+
let {
|
|
15
|
+
checked = $bindable(),
|
|
16
|
+
defaultChecked,
|
|
17
|
+
onchange,
|
|
18
|
+
disabled = false,
|
|
19
|
+
class: className,
|
|
20
|
+
label,
|
|
21
|
+
name,
|
|
22
|
+
color = 'primary'
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
|
|
25
|
+
const colors = {
|
|
26
|
+
primary: 'is-primary',
|
|
27
|
+
secondary: 'is-secondary',
|
|
28
|
+
muted: 'is-muted'
|
|
29
|
+
};
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<label class={cn('toggle', className)}>
|
|
33
|
+
<input
|
|
34
|
+
type="checkbox"
|
|
35
|
+
class={cn('toggle-input', colors[color])}
|
|
36
|
+
{name}
|
|
37
|
+
bind:checked
|
|
38
|
+
{defaultChecked}
|
|
39
|
+
{disabled}
|
|
40
|
+
onchange={() => onchange && onchange(checked!)}
|
|
41
|
+
/>
|
|
42
|
+
{#if label}
|
|
43
|
+
<span class="label">{label}</span>
|
|
44
|
+
{/if}
|
|
45
|
+
</label>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
checked?: boolean;
|
|
3
|
+
defaultChecked?: boolean;
|
|
4
|
+
onchange?: (checked: boolean) => void;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
class?: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
color?: 'primary' | 'secondary' | 'muted';
|
|
10
|
+
};
|
|
11
|
+
declare const Toggle: import("svelte").Component<Props, {}, "checked">;
|
|
12
|
+
type Toggle = ReturnType<typeof Toggle>;
|
|
13
|
+
export default Toggle;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.checkbox {
|
|
3
|
+
@apply flex justify-start items-center w-fit gap-2 cursor-pointer;
|
|
4
|
+
|
|
5
|
+
.checkbox-input {
|
|
6
|
+
@apply relative appearance-none min-w-5 w-5 h-5 border-2 border-muted rounded-lg;
|
|
7
|
+
@apply focus:outline-none;
|
|
8
|
+
@apply transition-all duration-200 ease-in-out;
|
|
9
|
+
|
|
10
|
+
&::after {
|
|
11
|
+
content: '';
|
|
12
|
+
position: absolute;
|
|
13
|
+
top: 50%;
|
|
14
|
+
left: 50%;
|
|
15
|
+
transform: translate(-50%, -50%) scale(0);
|
|
16
|
+
width: 90%;
|
|
17
|
+
height: 90%;
|
|
18
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z'/%3E%3Cpath fill='%23fff' d='M21.546 5.111a1.5 1.5 0 0 1 0 2.121L10.303 18.475a1.6 1.6 0 0 1-2.263 0L2.454 12.89a1.5 1.5 0 1 1 2.121-2.121l4.596 4.596L19.424 5.111a1.5 1.5 0 0 1 2.122 0'/%3E%3C/g%3E%3C/svg%3E");
|
|
19
|
+
background-size: contain;
|
|
20
|
+
background-position: center;
|
|
21
|
+
background-repeat: no-repeat;
|
|
22
|
+
opacity: 0;
|
|
23
|
+
transition:
|
|
24
|
+
transform 0.2s ease-out,
|
|
25
|
+
opacity 0.15s ease-out;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.checkbox-input:checked {
|
|
30
|
+
&.is-primary {
|
|
31
|
+
@apply bg-primary border-primary;
|
|
32
|
+
}
|
|
33
|
+
&.is-secondary {
|
|
34
|
+
@apply bg-secondary border-secondary;
|
|
35
|
+
}
|
|
36
|
+
&.is-muted {
|
|
37
|
+
@apply bg-on-muted border-on-muted;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&::after {
|
|
41
|
+
transform: translate(-50%, -50%) scale(1);
|
|
42
|
+
opacity: 1;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.combo-box-popover {
|
|
3
|
+
@apply max-h-56 flex flex-col gap-2 p-2 my-1 overflow-hidden;
|
|
4
|
+
@apply bg-background text-on-background rounded-ui;
|
|
5
|
+
@apply invisible opacity-0 transition-opacity duration-300 ease-in-out;
|
|
6
|
+
@apply shadow shadow-muted;
|
|
7
|
+
position: fixed;
|
|
8
|
+
z-index: 9999;
|
|
9
|
+
|
|
10
|
+
&.is-active {
|
|
11
|
+
@apply visible opacity-100;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.combo-box-search {
|
|
16
|
+
@apply relative flex items-center w-full gap-2 px-0 h-10;
|
|
17
|
+
@apply border-b-2 border-muted transition-all duration-300 ease-in-out;
|
|
18
|
+
|
|
19
|
+
&:focus-within {
|
|
20
|
+
@apply border-primary;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&.is-primary:focus-within {
|
|
24
|
+
@apply border-primary;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&.is-secondary:focus-within {
|
|
28
|
+
@apply border-secondary;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&.is-muted:focus-within {
|
|
32
|
+
@apply border-on-muted;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.combo-box-search-icon {
|
|
37
|
+
@apply h-5 w-auto text-muted;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.combo-box-search-input {
|
|
41
|
+
@apply flex-1 border-none outline-none bg-transparent text-on-background;
|
|
42
|
+
@apply placeholder:text-muted;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.combo-box-options {
|
|
46
|
+
@apply flex flex-1 w-full min-w-0 flex-col gap-1 overflow-y-auto scrollbar-hide;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.combo-box-empty {
|
|
50
|
+
@apply flex items-center justify-center p-4 text-sm text-muted;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.combo-box-loading {
|
|
54
|
+
@apply flex items-center justify-center gap-2 p-4 text-sm text-muted;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.combo-box-loading-spinner {
|
|
58
|
+
@apply size-4 animate-spin;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.combo-box-loading-more {
|
|
62
|
+
@apply flex items-center justify-center gap-2 py-2 text-xs text-muted;
|
|
63
|
+
@apply border-t border-muted/20 mt-1;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.combo-box-clear {
|
|
67
|
+
@apply size-4 cursor-pointer opacity-60 hover:opacity-100 transition-opacity;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.control {
|
|
3
|
+
@apply relative flex items-center justify-between w-full gap-2 px-3 outline-0 ring-0;
|
|
4
|
+
@apply transition-all duration-300 ease-in-out;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.control-label {
|
|
8
|
+
@apply absolute left-3 top-1/2 -translate-y-1/2;
|
|
9
|
+
@apply transition-all duration-300;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.control-label.is-active {
|
|
13
|
+
@apply text-xs left-3 top-px! translate-y-px!;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.control.is-sm {
|
|
17
|
+
@apply h-8 text-sm;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.control.is-sm .control-icon {
|
|
21
|
+
@apply h-5 w-auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.control.is-float.is-sm {
|
|
25
|
+
@apply h-10 pt-3;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.control.is-md {
|
|
29
|
+
@apply h-10 text-base;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.control.is-md .control-icon {
|
|
33
|
+
@apply h-6 w-auto;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.control.is-float.is-md {
|
|
37
|
+
@apply h-12 pt-3.5;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.control.is-lg {
|
|
41
|
+
@apply h-12 text-xl;
|
|
42
|
+
|
|
43
|
+
.control-label.is-active {
|
|
44
|
+
@apply text-sm;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.control.is-lg .control-icon {
|
|
49
|
+
@apply h-8 w-auto;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.control.is-float.is-lg {
|
|
53
|
+
@apply h-14 pt-3.5;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.control.is-primary {
|
|
57
|
+
@apply bg-on-primary text-primary rounded-ui;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.control.is-solid.is-primary {
|
|
61
|
+
@apply bg-primary text-on-primary;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.control.is-primary.is-active {
|
|
65
|
+
@apply bg-on-primary/90;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.control.is-solid.is-primary.is-active {
|
|
69
|
+
@apply bg-primary/90;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.control.is-secondary {
|
|
73
|
+
@apply bg-on-secondary text-secondary rounded-ui;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.control.is-solid.is-secondary {
|
|
77
|
+
@apply bg-secondary text-on-secondary;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.control.is-secondary.is-active {
|
|
81
|
+
@apply bg-on-secondary/90;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.control.is-solid.is-secondary.is-active {
|
|
85
|
+
@apply bg-secondary/90;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.control.is-muted {
|
|
89
|
+
@apply bg-muted text-on-muted rounded-ui;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.control.is-solid.is-muted {
|
|
93
|
+
@apply bg-on-muted text-muted;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.control.is-muted.is-active {
|
|
97
|
+
@apply bg-muted/90;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.control.is-solid.is-muted.is-active {
|
|
101
|
+
@apply bg-on-muted/90;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.control.is-outlined {
|
|
105
|
+
@apply inset-ring-2 inset-ring-muted rounded-ui;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.control.is-outlined.is-active {
|
|
109
|
+
@apply inset-ring-2 inset-ring-primary;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.control.is-line {
|
|
113
|
+
@apply box-border border-b-2 border-muted text-on-muted px-0;
|
|
114
|
+
|
|
115
|
+
.control-label {
|
|
116
|
+
@apply left-0!;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.control.is-line.is-active {
|
|
121
|
+
@apply border-primary;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.control-btn {
|
|
125
|
+
@apply absolute right-2 top-1/2 -translate-y-1/2;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.control:has(> .control-btn) {
|
|
129
|
+
@apply pr-8;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.control-arrow {
|
|
133
|
+
@apply size-4 transition-transform;
|
|
134
|
+
@apply transition-all duration-300 ease-in-out;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.control-arrow.is-active {
|
|
138
|
+
@apply rotate-90;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.control-selected {
|
|
142
|
+
@apply flex-1 text-left truncate;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.control-input {
|
|
146
|
+
@apply appearance-none flex-1 border-none outline-none;
|
|
147
|
+
@apply placeholder:transition-opacity placeholder:duration-200;
|
|
148
|
+
|
|
149
|
+
&::-webkit-outer-spin-button,
|
|
150
|
+
&::-webkit-inner-spin-button {
|
|
151
|
+
-webkit-appearance: none;
|
|
152
|
+
margin: 0;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
&[type='number'] {
|
|
156
|
+
appearance: textfield;
|
|
157
|
+
-moz-appearance: textfield;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
&:-webkit-autofill,
|
|
161
|
+
&:-webkit-autofill:hover,
|
|
162
|
+
&:-webkit-autofill:focus,
|
|
163
|
+
&:-webkit-autofill:active {
|
|
164
|
+
-webkit-box-shadow: 0 0 0 30px transparent inset !important;
|
|
165
|
+
-webkit-text-fill-color: inherit !important;
|
|
166
|
+
background-color: transparent !important;
|
|
167
|
+
background-image: none !important;
|
|
168
|
+
color: inherit !important;
|
|
169
|
+
transition: background-color 5000000s ease-in-out 0s !important;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
&:-moz-autofill {
|
|
173
|
+
background-color: transparent !important;
|
|
174
|
+
color: inherit !important;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.date-popover {
|
|
3
|
+
@apply h-auto overflow-y-auto drop-shadow-sm flex flex-col gap-1 p-2 my-1 scrollbar-hide w-72;
|
|
4
|
+
@apply bg-background text-on-background rounded-ui;
|
|
5
|
+
@apply invisible opacity-0 transition-opacity duration-300 ease-in-out;
|
|
6
|
+
position: fixed;
|
|
7
|
+
z-index: 9999;
|
|
8
|
+
|
|
9
|
+
&.is-open {
|
|
10
|
+
@apply visible opacity-100;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
.date-option {
|
|
14
|
+
@apply outline-hidden hover:bg-muted hover:text-on-muted;
|
|
15
|
+
@apply flex w-full items-center gap-2 overflow-hidden rounded-ui p-2 text-left h-8;
|
|
16
|
+
@apply transition-[width,height,padding] focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50;
|
|
17
|
+
&.active {
|
|
18
|
+
@apply bg-muted text-on-muted;
|
|
19
|
+
}
|
|
20
|
+
&[data-focused='1'] {
|
|
21
|
+
@apply bg-muted text-on-muted;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.date-picker-header {
|
|
26
|
+
@apply flex items-center justify-between;
|
|
27
|
+
.date-arrow {
|
|
28
|
+
@apply size-6 rounded-ui p-2 hover:bg-muted hover:text-on-muted;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.date-picker-weekdays {
|
|
33
|
+
@apply grid grid-cols-7 gap-1 my-2 bg-muted text-on-muted rounded-ui;
|
|
34
|
+
|
|
35
|
+
.weekday {
|
|
36
|
+
@apply flex items-center justify-center w-8 h-8 text-xs;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.date-picker-days {
|
|
41
|
+
@apply grid grid-cols-7 gap-1 h-52;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.date-picker-day-button {
|
|
45
|
+
@apply outline-hidden hover:bg-muted hover:text-on-muted rounded-ui;
|
|
46
|
+
@apply flex items-center justify-center w-8 h-8 text-sm transition-colors;
|
|
47
|
+
|
|
48
|
+
&.selected {
|
|
49
|
+
@apply bg-primary text-on-primary rounded-ui;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&.today {
|
|
53
|
+
@apply font-semibold;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|